diff --git a/apps/mcp/guest/studio-app.ts b/apps/mcp/guest/studio-app.ts new file mode 100644 index 0000000..b361cfe --- /dev/null +++ b/apps/mcp/guest/studio-app.ts @@ -0,0 +1,80 @@ +/** + * Tidebase Studio guest — a real MCP-App. Runs inside the host's sandboxed + * iframe, connects to the host over the MCP-Apps protocol (ui/initialize + * handshake via PostMessageTransport), and calls server tools through the host + * (which routes them through governance). Bundled self-contained by esbuild and + * inlined into the ui:// resource — no CDN, no external deps at runtime. + */ +import { App } from '@modelcontextprotocol/ext-apps/app-with-deps' + +type Run = { id: string; status?: string; workflowName?: string; workflow_name?: string } + +const STYLES = ` + :root { color-scheme: light dark; } + body { font: 13px/1.5 ui-sans-serif, system-ui, sans-serif; margin: 0; padding: 12px; } + h1 { font-size: 14px; margin: 0 0 8px; } + .row { display: flex; gap: 8px; align-items: center; padding: 6px 8px; border: 1px solid color-mix(in srgb, currentColor 14%, transparent); border-radius: 8px; margin-bottom: 6px; } + .muted { opacity: 0.6; } + .status { font-weight: 600; } + .status.running { color: #2563eb; } .status.completed { color: #16a34a; } + .status.failed { color: #dc2626; } .status.cancelled { color: #d97706; } + .err { color: #dc2626; white-space: pre-wrap; } +` + +function el(tag: string, cls?: string, text?: string) { + const n = document.createElement(tag) + if (cls) n.className = cls + if (text != null) n.textContent = text + return n +} + +async function callJson(app: App, name: string, args: Record): Promise { + const res = await app.callServerTool({ name, arguments: args }) + const blocks = (res.content as Array<{ type?: string; text?: string }> | undefined) ?? [] + const text = blocks.find((b) => typeof b.text === 'string')?.text ?? '{}' + try { + return JSON.parse(text) + } catch { + return text + } +} + +async function loadRuns(app: App) { + const statusEl = document.getElementById('status')! + const runsEl = document.getElementById('runs')! + try { + const data = await callJson(app, 'tidebase_list_runs', { limit: 20 }) + const runs: Run[] = (data && data.runs) || [] + document.getElementById('count')!.textContent = '(' + runs.length + ')' + statusEl.style.display = 'none' + runsEl.innerHTML = '' + if (!runs.length) runsEl.appendChild(el('div', 'muted', 'No runs yet.')) + for (const run of runs) { + const row = el('div', 'row') + row.appendChild(el('span', 'status ' + (run.status || ''), run.status || '?')) + row.appendChild(el('span', undefined, run.workflowName || run.workflow_name || run.id)) + row.appendChild(el('span', 'muted', String(run.id).slice(0, 18))) + runsEl.appendChild(row) + } + } catch (err: any) { + statusEl.className = 'err' + statusEl.textContent = 'Failed to load runs: ' + (err?.message || err) + } +} + +async function main() { + document.body.innerHTML = + `` + + `

Tidebase Studio

` + + `
Connecting…
` + + `
` + + const app = new App({ name: 'tidebase-studio', version: '0.1.0' }, {}) + await app.connect() // ui/initialize handshake over PostMessageTransport + document.getElementById('status')!.textContent = 'Loading runs…' + await loadRuns(app) +} + +main().catch((err: any) => { + document.body.innerHTML = `
Studio crashed: ${err?.message || err}
` +}) diff --git a/apps/mcp/package.json b/apps/mcp/package.json new file mode 100644 index 0000000..62ea4b2 --- /dev/null +++ b/apps/mcp/package.json @@ -0,0 +1,23 @@ +{ + "name": "@tidebase/mcp-server", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "tsx watch src/index.ts", + "build": "node scripts/build-guest.mjs && tsc -p tsconfig.json", + "start": "node dist/index.js", + "build:guest": "node scripts/build-guest.mjs" + }, + "dependencies": { + "@hono/node-server": "^1.13.8", + "@mcp-ui/server": "^6.1.0", + "hono": "^4.6.16", + "@modelcontextprotocol/ext-apps": "^1.7.4" + }, + "devDependencies": { + "tsx": "^4.19.2", + "typescript": "^5.7.2", + "esbuild": "^0.24.0" + } +} \ No newline at end of file diff --git a/apps/mcp/scripts/build-guest.mjs b/apps/mcp/scripts/build-guest.mjs new file mode 100644 index 0000000..16cb126 --- /dev/null +++ b/apps/mcp/scripts/build-guest.mjs @@ -0,0 +1,28 @@ +// Bundle the Studio guest MCP-App into a single self-contained IIFE and emit it +// as a TS string constant that ui.ts inlines into the ui:// resource HTML. +import { build } from 'esbuild' +import { writeFileSync } from 'node:fs' +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +const root = resolve(dirname(fileURLToPath(import.meta.url)), '..') + +const result = await build({ + entryPoints: [resolve(root, 'guest/studio-app.ts')], + bundle: true, + format: 'iife', + platform: 'browser', + target: 'es2020', + minify: true, + write: false, + legalComments: 'none' +}) + +const code = result.outputFiles[0].text +const out = resolve(root, 'src/guestBundle.generated.ts') +writeFileSync( + out, + '// AUTO-GENERATED by scripts/build-guest.mjs — do not edit.\n' + + `export const GUEST_BUNDLE: string = ${JSON.stringify(code)}\n` +) +console.log(`guest bundle: ${(code.length / 1024).toFixed(1)} KiB -> src/guestBundle.generated.ts`) diff --git a/apps/mcp/src/guestBundle.generated.ts b/apps/mcp/src/guestBundle.generated.ts new file mode 100644 index 0000000..b6a089b --- /dev/null +++ b/apps/mcp/src/guestBundle.generated.ts @@ -0,0 +1,2 @@ +// AUTO-GENERATED by scripts/build-guest.mjs — do not edit. +export const GUEST_BUNDLE: string = "\"use strict\";(()=>{var ip=Object.defineProperty;var np=(e,i,n)=>i in e?ip(e,i,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[i]=n;var j=(e,i,n)=>np(e,typeof i!=\"symbol\"?i+\"\":i,n);var rp=Object.defineProperty,ap=e=>e;function op(e,i){this[e]=ap.bind(null,i)}var ve=(e,i)=>{for(var n in i)rp(e,n,{get:i[n],enumerable:!0,configurable:!0,set:op.bind(i,n)})},b=(e,i)=>()=>(e&&(i=e(e=0)),i);function m(e,i,n){function a(s,u){if(s._zod||Object.defineProperty(s,\"_zod\",{value:{def:u,constr:o,traits:new Set},enumerable:!1}),s._zod.traits.has(e))return;s._zod.traits.add(e),i(s,u);let d=o.prototype,c=Object.keys(d);for(let f=0;fn?.Parent&&s instanceof n.Parent?!0:s?._zod?.traits?.has(e)}),Object.defineProperty(o,\"name\",{value:e}),o}function B(e){return e&&Object.assign(Lt,e),Lt}var En,Pn,we,Mt,Lt,Wt=b(()=>{En=Object.freeze({status:\"aborted\"}),Pn=Symbol(\"zod_brand\"),we=class extends Error{constructor(){super(\"Encountered Promise during synchronous parse. Use .parseAsync() instead.\")}},Mt=class extends Error{constructor(i){super(`Encountered unidirectional transform during encode: ${i}`),this.name=\"ZodEncodeError\"}},Lt={}}),Z={};ve(Z,{unwrapMessage:()=>Rt,uint8ArrayToHex:()=>Np,uint8ArrayToBase64url:()=>Up,uint8ArrayToBase64:()=>Kl,stringifyPrimitive:()=>w,slugify:()=>Fl,shallowClone:()=>Hl,safeExtend:()=>kp,required:()=>xp,randomString:()=>vp,propertyKeyTypes:()=>qt,promiseAllObject:()=>gp,primitiveTypes:()=>ea,prefixIssues:()=>ge,pick:()=>bp,partial:()=>wp,parsedType:()=>x,optionalKeys:()=>Wl,omit:()=>_p,objectClone:()=>mp,numKeys:()=>hp,nullish:()=>Ze,normalizeParams:()=>h,mergeDefs:()=>ke,merge:()=>Ip,jsonStringifyReplacer:()=>gn,joinValues:()=>v,issue:()=>vn,isPlainObject:()=>Ae,isObject:()=>Be,hexToUint8Array:()=>Op,getSizableOrigin:()=>pn,getParsedType:()=>Zp,getLengthableOrigin:()=>fn,getEnumValues:()=>Yr,getElementAtPath:()=>fp,floatSafeRemainder:()=>Jl,finalizeIssue:()=>ce,extend:()=>yp,escapeRegex:()=>be,esc:()=>Cr,defineLazy:()=>O,createTransparentProxy:()=>$p,cloneDef:()=>pp,clone:()=>ue,cleanRegex:()=>mn,cleanEnum:()=>Sp,captureStackTrace:()=>Rn,cached:()=>At,base64urlToUint8Array:()=>zp,base64ToUint8Array:()=>Vl,assignProp:()=>ze,assertNotEqual:()=>up,assertNever:()=>dp,assertIs:()=>lp,assertEqual:()=>sp,assert:()=>cp,allowsEval:()=>Qr,aborted:()=>De,NUMBER_FORMAT_RANGES:()=>ta,Class:()=>Mr,BIGINT_FORMAT_RANGES:()=>ia});function sp(e){return e}function up(e){return e}function lp(e){}function dp(e){throw Error(\"Unexpected value in exhaustive check\")}function cp(e){}function Yr(e){let i=Object.values(e).filter(n=>typeof n==\"number\");return Object.entries(e).filter(([n,a])=>i.indexOf(+n)===-1).map(([n,a])=>a)}function v(e,i=\"|\"){return e.map(n=>w(n)).join(i)}function gn(e,i){return typeof i==\"bigint\"?i.toString():i}function At(e){return{get value(){{let i=e();return Object.defineProperty(this,\"value\",{value:i}),i}throw Error(\"cached value already set\")}}}function Ze(e){return e==null}function mn(e){let i=e.startsWith(\"^\")?1:0,n=e.endsWith(\"$\")?e.length-1:e.length;return e.slice(i,n)}function Jl(e,i){let n=(e.toString().split(\".\")[1]||\"\").length,a=i.toString(),t=(a.split(\".\")[1]||\"\").length;if(t===0&&/\\d?e-\\d?/.test(a)){let u=a.match(/\\d?e-(\\d?)/);u?.[1]&&(t=Number.parseInt(u[1]))}let r=n>t?n:t,o=Number.parseInt(e.toFixed(r).replace(\".\",\"\")),s=Number.parseInt(i.toFixed(r).replace(\".\",\"\"));return o%s/10**r}function O(e,i,n){let a;Object.defineProperty(e,i,{get(){if(a!==Lr)return a===void 0&&(a=Lr,a=n()),a},set(t){Object.defineProperty(e,i,{value:t})},configurable:!0})}function mp(e){return Object.create(Object.getPrototypeOf(e),Object.getOwnPropertyDescriptors(e))}function ze(e,i,n){Object.defineProperty(e,i,{value:n,writable:!0,enumerable:!0,configurable:!0})}function ke(...e){let i={};for(let n of e){let a=Object.getOwnPropertyDescriptors(n);Object.assign(i,a)}return Object.defineProperties({},i)}function pp(e){return ke(e._zod.def)}function fp(e,i){return i?i.reduce((n,a)=>n?.[a],e):e}function gp(e){let i=Object.keys(e),n=i.map(a=>e[a]);return Promise.all(n).then(a=>{let t={};for(let r=0;ri};if(i?.message!==void 0){if(i?.error!==void 0)throw Error(\"Cannot specify both `message` and `error` params\");i.error=i.message}return delete i.message,typeof i.error==\"string\"?{...i,error:()=>i.error}:i}function $p(e){let i;return new Proxy({},{get(n,a,t){return i??(i=e()),Reflect.get(i,a,t)},set(n,a,t,r){return i??(i=e()),Reflect.set(i,a,t,r)},has(n,a){return i??(i=e()),Reflect.has(i,a)},deleteProperty(n,a){return i??(i=e()),Reflect.deleteProperty(i,a)},ownKeys(n){return i??(i=e()),Reflect.ownKeys(i)},getOwnPropertyDescriptor(n,a){return i??(i=e()),Reflect.getOwnPropertyDescriptor(i,a)},defineProperty(n,a,t){return i??(i=e()),Reflect.defineProperty(i,a,t)}})}function w(e){return typeof e==\"bigint\"?e.toString()+\"n\":typeof e==\"string\"?`\"${e}\"`:`${e}`}function Wl(e){return Object.keys(e).filter(i=>e[i]._zod.optin===\"optional\"&&e[i]._zod.optout===\"optional\")}function bp(e,i){let n=e._zod.def,a=n.checks;if(a&&a.length>0)throw Error(\".pick() cannot be used on object schemas containing refinements\");let t=ke(e._zod.def,{get shape(){let r={};for(let o in i){if(!(o in n.shape))throw Error(`Unrecognized key: \"${o}\"`);i[o]&&(r[o]=n.shape[o])}return ze(this,\"shape\",r),r},checks:[]});return ue(e,t)}function _p(e,i){let n=e._zod.def,a=n.checks;if(a&&a.length>0)throw Error(\".omit() cannot be used on object schemas containing refinements\");let t=ke(e._zod.def,{get shape(){let r={...e._zod.def.shape};for(let o in i){if(!(o in n.shape))throw Error(`Unrecognized key: \"${o}\"`);i[o]&&delete r[o]}return ze(this,\"shape\",r),r},checks:[]});return ue(e,t)}function yp(e,i){if(!Ae(i))throw Error(\"Invalid input to extend: expected a plain object\");let n=e._zod.def.checks;if(n&&n.length>0){let t=e._zod.def.shape;for(let r in i)if(Object.getOwnPropertyDescriptor(t,r)!==void 0)throw Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\")}let a=ke(e._zod.def,{get shape(){let t={...e._zod.def.shape,...i};return ze(this,\"shape\",t),t}});return ue(e,a)}function kp(e,i){if(!Ae(i))throw Error(\"Invalid input to safeExtend: expected a plain object\");let n=ke(e._zod.def,{get shape(){let a={...e._zod.def.shape,...i};return ze(this,\"shape\",a),a}});return ue(e,n)}function Ip(e,i){let n=ke(e._zod.def,{get shape(){let a={...e._zod.def.shape,...i._zod.def.shape};return ze(this,\"shape\",a),a},get catchall(){return i._zod.def.catchall},checks:[]});return ue(e,n)}function wp(e,i,n){let a=i._zod.def.checks;if(a&&a.length>0)throw Error(\".partial() cannot be used on object schemas containing refinements\");let t=ke(i._zod.def,{get shape(){let r=i._zod.def.shape,o={...r};if(n)for(let s in n){if(!(s in r))throw Error(`Unrecognized key: \"${s}\"`);n[s]&&(o[s]=e?new e({type:\"optional\",innerType:r[s]}):r[s])}else for(let s in r)o[s]=e?new e({type:\"optional\",innerType:r[s]}):r[s];return ze(this,\"shape\",o),o},checks:[]});return ue(i,t)}function xp(e,i,n){let a=ke(i._zod.def,{get shape(){let t=i._zod.def.shape,r={...t};if(n)for(let o in n){if(!(o in r))throw Error(`Unrecognized key: \"${o}\"`);n[o]&&(r[o]=new e({type:\"nonoptional\",innerType:t[o]}))}else for(let o in t)r[o]=new e({type:\"nonoptional\",innerType:t[o]});return ze(this,\"shape\",r),r}});return ue(i,a)}function De(e,i=0){if(e.aborted===!0)return!0;for(let n=i;n{var a;return(a=n).path??(a.path=[]),n.path.unshift(e),n})}function Rt(e){return typeof e==\"string\"?e:e?.message}function ce(e,i,n){let a={...e,path:e.path??[]};if(!e.message){let t=Rt(e.inst?._zod.def?.error?.(e))??Rt(i?.error?.(e))??Rt(n.customError?.(e))??Rt(n.localeError?.(e))??\"Invalid input\";a.message=t}return delete a.inst,delete a.continue,!i?.reportInput&&delete a.input,a}function pn(e){return e instanceof Set?\"set\":e instanceof Map?\"map\":e instanceof File?\"file\":\"unknown\"}function fn(e){return Array.isArray(e)?\"array\":typeof e==\"string\"?\"string\":\"unknown\"}function x(e){let i=typeof e;switch(i){case\"number\":return Number.isNaN(e)?\"nan\":\"number\";case\"object\":{if(e===null)return\"null\";if(Array.isArray(e))return\"array\";let n=e;if(n&&Object.getPrototypeOf(n)!==Object.prototype&&\"constructor\"in n&&n.constructor)return n.constructor.name}}return i}function vn(...e){let[i,n,a]=e;return typeof i==\"string\"?{message:i,code:\"custom\",input:n,inst:a}:{...i}}function Sp(e){return Object.entries(e).filter(([i,n])=>Number.isNaN(Number.parseInt(i,10))).map(i=>i[1])}function Vl(e){let i=atob(e),n=new Uint8Array(i.length);for(let a=0;ai.toString(16).padStart(2,\"0\")).join(\"\")}var Mr=class{constructor(...i){}},Lr,Rn,Qr,Zp=e=>{let i=typeof e;switch(i){case\"undefined\":return\"undefined\";case\"string\":return\"string\";case\"number\":return Number.isNaN(e)?\"nan\":\"number\";case\"boolean\":return\"boolean\";case\"function\":return\"function\";case\"bigint\":return\"bigint\";case\"symbol\":return\"symbol\";case\"object\":return Array.isArray(e)?\"array\":e===null?\"null\":e.then&&typeof e.then==\"function\"&&e.catch&&typeof e.catch==\"function\"?\"promise\":typeof Map<\"u\"&&e instanceof Map?\"map\":typeof Set<\"u\"&&e instanceof Set?\"set\":typeof Date<\"u\"&&e instanceof Date?\"date\":typeof File<\"u\"&&e instanceof File?\"file\":\"object\";default:throw Error(`Unknown data type: ${i}`)}},qt,ea,ta,ia,I=b(()=>{Lr=Symbol(\"evaluating\"),Rn=\"captureStackTrace\"in Error?Error.captureStackTrace:(...e)=>{},Qr=At(()=>{if(typeof navigator<\"u\"&&navigator?.userAgent?.includes(\"Cloudflare\"))return!1;try{return new Function(\"\"),!0}catch{return!1}}),qt=new Set([\"string\",\"number\",\"symbol\"]),ea=new Set([\"string\",\"number\",\"bigint\",\"boolean\",\"symbol\",\"undefined\"]),ta={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},ia={int64:[BigInt(\"-9223372036854775808\"),BigInt(\"9223372036854775807\")],uint64:[BigInt(0),BigInt(\"18446744073709551615\")]}});function An(e,i=n=>n.message){let n={},a=[];for(let t of e.issues)t.path.length>0?(n[t.path[0]]=n[t.path[0]]||[],n[t.path[0]].push(i(t))):a.push(i(t));return{formErrors:a,fieldErrors:n}}function Cn(e,i=n=>n.message){let n={_errors:[]},a=t=>{for(let r of t.issues)if(r.code===\"invalid_union\"&&r.errors.length)r.errors.map(o=>a({issues:o}));else if(r.code===\"invalid_key\")a({issues:r.issues});else if(r.code===\"invalid_element\")a({issues:r.issues});else if(r.path.length===0)n._errors.push(i(r));else{let o=n,s=0;for(;sn.message){let n={errors:[]},a=(t,r=[])=>{var o,s;for(let u of t.issues)if(u.code===\"invalid_union\"&&u.errors.length)u.errors.map(d=>a({issues:d},u.path));else if(u.code===\"invalid_key\")a({issues:u.issues},u.path);else if(u.code===\"invalid_element\")a({issues:u.issues},u.path);else{let d=[...r,...u.path];if(d.length===0){n.errors.push(i(u));continue}let c=n,f=0;for(;ftypeof a==\"object\"?a.key:a);for(let a of n)typeof a==\"number\"?i.push(`[${a}]`):typeof a==\"symbol\"?i.push(`[${JSON.stringify(String(a))}]`):/[^\\w$]/.test(a)?i.push(`[${JSON.stringify(a)}]`):(i.length&&i.push(\".\"),i.push(a));return i.join(\"\")}function ra(e){let i=[],n=[...e.issues].sort((a,t)=>(a.path??[]).length-(t.path??[]).length);for(let a of n)i.push(`\\u2716 ${a.message}`),a.path?.length&&i.push(` \\u2192 at ${Bl(a.path)}`);return i.join(`\n`)}var pl=(e,i)=>{e.name=\"$ZodError\",Object.defineProperty(e,\"_zod\",{value:e._zod,enumerable:!1}),Object.defineProperty(e,\"issues\",{value:i,enumerable:!1}),e.message=JSON.stringify(i,gn,2),Object.defineProperty(e,\"toString\",{value:()=>e.message,enumerable:!1})},Mn,re,Gl=b(()=>{Wt(),I(),Mn=m(\"$ZodError\",pl),re=m(\"$ZodError\",pl,{Parent:Error})}),Vt=e=>(i,n,a,t)=>{let r=a?Object.assign(a,{async:!1}):{async:!1},o=i._zod.run({value:n,issues:[]},r);if(o instanceof Promise)throw new we;if(o.issues.length){let s=new(t?.Err??e)(o.issues.map(u=>ce(u,r,B())));throw Rn(s,t?.callee),s}return o.value},hn,Kt=e=>async(i,n,a,t)=>{let r=a?Object.assign(a,{async:!0}):{async:!0},o=i._zod.run({value:n,issues:[]},r);if(o instanceof Promise&&(o=await o),o.issues.length){let s=new(t?.Err??e)(o.issues.map(u=>ce(u,r,B())));throw Rn(s,t?.callee),s}return o.value},$n,Bt=e=>(i,n,a)=>{let t=a?{...a,async:!1}:{async:!1},r=i._zod.run({value:n,issues:[]},t);if(r instanceof Promise)throw new we;return r.issues.length?{success:!1,error:new(e??Mn)(r.issues.map(o=>ce(o,t,B())))}:{success:!0,data:r.value}},Ln,Gt=e=>async(i,n,a)=>{let t=a?Object.assign(a,{async:!0}):{async:!0},r=i._zod.run({value:n,issues:[]},t);return r instanceof Promise&&(r=await r),r.issues.length?{success:!1,error:new e(r.issues.map(o=>ce(o,t,B())))}:{success:!0,data:r.value}},aa,oa=e=>(i,n,a)=>{let t=a?Object.assign(a,{direction:\"backward\"}):{direction:\"backward\"};return Vt(e)(i,n,t)},Xl,sa=e=>(i,n,a)=>Vt(e)(i,n,a),Yl,ua=e=>async(i,n,a)=>{let t=a?Object.assign(a,{direction:\"backward\"}):{direction:\"backward\"};return Kt(e)(i,n,t)},Ql,la=e=>async(i,n,a)=>Kt(e)(i,n,a),ed,da=e=>(i,n,a)=>{let t=a?Object.assign(a,{direction:\"backward\"}):{direction:\"backward\"};return Bt(e)(i,n,t)},td,ca=e=>(i,n,a)=>Bt(e)(i,n,a),id,ma=e=>async(i,n,a)=>{let t=a?Object.assign(a,{direction:\"backward\"}):{direction:\"backward\"};return Gt(e)(i,n,t)},nd,pa=e=>async(i,n,a)=>Gt(e)(i,n,a),rd,ad=b(()=>{Wt(),Gl(),I(),hn=Vt(re),$n=Kt(re),Ln=Bt(re),aa=Gt(re),Xl=oa(re),Yl=sa(re),Ql=ua(re),ed=la(re),td=da(re),id=ca(re),nd=ma(re),rd=pa(re)}),Ue={};ve(Ue,{xid:()=>ha,uuid7:()=>pd,uuid6:()=>md,uuid4:()=>cd,uuid:()=>Ge,uppercase:()=>Pa,unicodeEmail:()=>qr,undefined:()=>ja,ulid:()=>va,time:()=>ud,string:()=>kd,sha512_hex:()=>Pd,sha512_base64url:()=>Ad,sha512_base64:()=>Rd,sha384_hex:()=>Dd,sha384_base64url:()=>Ed,sha384_base64:()=>jd,sha256_hex:()=>Nd,sha256_base64url:()=>Td,sha256_base64:()=>Zd,sha1_hex:()=>zd,sha1_base64url:()=>Od,sha1_base64:()=>Ud,rfc5322Email:()=>gd,number:()=>bn,null:()=>Da,nanoid:()=>ba,md5_hex:()=>wd,md5_base64url:()=>Sd,md5_base64:()=>xd,mac:()=>$d,lowercase:()=>Ea,ksuid:()=>$a,ipv6:()=>wa,ipv4:()=>Ia,integer:()=>Za,idnEmail:()=>vd,html5Email:()=>fd,hostname:()=>bd,hex:()=>Id,guid:()=>ya,extendedDuration:()=>dd,emoji:()=>od,email:()=>ka,e164:()=>Ua,duration:()=>_a,domain:()=>_d,datetime:()=>ld,date:()=>Oa,cuid2:()=>ga,cuid:()=>fa,cidrv6:()=>Sa,cidrv4:()=>xa,browserEmail:()=>hd,boolean:()=>Ta,bigint:()=>Na,base64url:()=>qn,base64:()=>za});function od(){return new RegExp(Tp,\"u\")}function sd(e){return typeof e.precision==\"number\"?e.precision===-1?\"(?:[01]\\\\d|2[0-3]):[0-5]\\\\d\":e.precision===0?\"(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d\":`(?:[01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d\\\\.\\\\d{${e.precision}}`:\"(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?\"}function ud(e){return new RegExp(`^${sd(e)}$`)}function ld(e){let i=sd({precision:e.precision}),n=[\"Z\"];e.local&&n.push(\"\"),e.offset&&n.push(\"([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)\");let a=`${i}(?:${n.join(\"|\")})`;return new RegExp(`^${yd}T(?:${a})$`)}function jt(e,i){return new RegExp(`^[A-Za-z0-9+/]{${e}}${i}$`)}function Et(e){return new RegExp(`^[A-Za-z0-9_-]{${e}}$`)}var fa,ga,va,ha,$a,ba,_a,dd,ya,Ge=e=>e?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,cd,md,pd,ka,fd,gd,qr,vd,hd,Tp=\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\",Ia,wa,$d=e=>{let i=be(e??\":\");return new RegExp(`^(?:[0-9A-F]{2}${i}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${i}){5}[0-9a-f]{2}$`)},xa,Sa,za,qn,bd,_d,Ua,yd=\"(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))\",Oa,kd=e=>{let i=e?`[\\\\s\\\\S]{${e?.minimum??0},${e?.maximum??\"\"}}`:\"[\\\\s\\\\S]*\";return new RegExp(`^${i}$`)},Na,Za,bn,Ta,Da,ja,Ea,Pa,Id,wd,xd,Sd,zd,Ud,Od,Nd,Zd,Td,Dd,jd,Ed,Pd,Rd,Ad,Ra=b(()=>{I(),fa=/^[cC][^\\s-]{8,}$/,ga=/^[0-9a-z]+$/,va=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,ha=/^[0-9a-vA-V]{20}$/,$a=/^[A-Za-z0-9]{27}$/,ba=/^[a-zA-Z0-9_-]{21}$/,_a=/^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/,dd=/^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/,ya=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,cd=Ge(4),md=Ge(6),pd=Ge(7),ka=/^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/,fd=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,gd=/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,qr=/^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u,vd=qr,hd=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,Ia=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,wa=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,xa=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/,Sa=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,za=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,qn=/^[A-Za-z0-9_-]*$/,bd=/^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/,_d=/^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/,Ua=/^\\+[1-9]\\d{6,14}$/,Oa=new RegExp(`^${yd}$`),Na=/^-?\\d+n?$/,Za=/^-?\\d+$/,bn=/^-?\\d+(?:\\.\\d+)?$/,Ta=/^(?:true|false)$/i,Da=/^null$/i,ja=/^undefined$/i,Ea=/^[^A-Z]*$/,Pa=/^[^a-z]*$/,Id=/^[0-9a-fA-F]*$/,wd=/^[0-9a-fA-F]{32}$/,xd=jt(22,\"==\"),Sd=Et(22),zd=/^[0-9a-fA-F]{40}$/,Ud=jt(27,\"=\"),Od=Et(27),Nd=/^[0-9a-fA-F]{64}$/,Zd=jt(43,\"=\"),Td=Et(43),Dd=/^[0-9a-fA-F]{96}$/,jd=jt(64,\"\"),Ed=Et(64),Pd=/^[0-9a-fA-F]{128}$/,Rd=jt(86,\"==\"),Ad=Et(86)});function fl(e,i,n){e.issues.length&&i.issues.push(...ge(n,e.issues))}var H,Ar,Jn,Fn,Aa,Ca,Ma,La,qa,Ja,Fa,Ha,Wa,Ke,Va,Ka,Ba,Ga,Xa,Ya,Qa,eo,to,io=b(()=>{Wt(),Ra(),I(),H=m(\"$ZodCheck\",(e,i)=>{var n;e._zod??(e._zod={}),e._zod.def=i,(n=e._zod).onattach??(n.onattach=[])}),Ar={number:\"number\",bigint:\"bigint\",object:\"date\"},Jn=m(\"$ZodCheckLessThan\",(e,i)=>{H.init(e,i);let n=Ar[typeof i.value];e._zod.onattach.push(a=>{let t=a._zod.bag,r=(i.inclusive?t.maximum:t.exclusiveMaximum)??Number.POSITIVE_INFINITY;i.value{(i.inclusive?a.value<=i.value:a.value{H.init(e,i);let n=Ar[typeof i.value];e._zod.onattach.push(a=>{let t=a._zod.bag,r=(i.inclusive?t.minimum:t.exclusiveMinimum)??Number.NEGATIVE_INFINITY;i.value>r&&(i.inclusive?t.minimum=i.value:t.exclusiveMinimum=i.value)}),e._zod.check=a=>{(i.inclusive?a.value>=i.value:a.value>i.value)||a.issues.push({origin:n,code:\"too_small\",minimum:typeof i.value==\"object\"?i.value.getTime():i.value,input:a.value,inclusive:i.inclusive,inst:e,continue:!i.abort})}}),Aa=m(\"$ZodCheckMultipleOf\",(e,i)=>{H.init(e,i),e._zod.onattach.push(n=>{var a;(a=n._zod.bag).multipleOf??(a.multipleOf=i.value)}),e._zod.check=n=>{if(typeof n.value!=typeof i.value)throw Error(\"Cannot mix number and bigint in multiple_of check.\");(typeof n.value==\"bigint\"?n.value%i.value===BigInt(0):Jl(n.value,i.value)===0)||n.issues.push({origin:typeof n.value,code:\"not_multiple_of\",divisor:i.value,input:n.value,inst:e,continue:!i.abort})}}),Ca=m(\"$ZodCheckNumberFormat\",(e,i)=>{H.init(e,i),i.format=i.format||\"float64\";let n=i.format?.includes(\"int\"),a=n?\"int\":\"number\",[t,r]=ta[i.format];e._zod.onattach.push(o=>{let s=o._zod.bag;s.format=i.format,s.minimum=t,s.maximum=r,n&&(s.pattern=Za)}),e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:a,format:i.format,code:\"invalid_type\",continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:\"too_big\",maximum:Number.MAX_SAFE_INTEGER,note:\"Integers must be within the safe integer range.\",inst:e,origin:a,inclusive:!0,continue:!i.abort}):o.issues.push({input:s,code:\"too_small\",minimum:Number.MIN_SAFE_INTEGER,note:\"Integers must be within the safe integer range.\",inst:e,origin:a,inclusive:!0,continue:!i.abort});return}}sr&&o.issues.push({origin:\"number\",input:s,code:\"too_big\",maximum:r,inclusive:!0,inst:e,continue:!i.abort})}}),Ma=m(\"$ZodCheckBigIntFormat\",(e,i)=>{H.init(e,i);let[n,a]=ia[i.format];e._zod.onattach.push(t=>{let r=t._zod.bag;r.format=i.format,r.minimum=n,r.maximum=a}),e._zod.check=t=>{let r=t.value;ra&&t.issues.push({origin:\"bigint\",input:r,code:\"too_big\",maximum:a,inclusive:!0,inst:e,continue:!i.abort})}}),La=m(\"$ZodCheckMaxSize\",(e,i)=>{var n;H.init(e,i),(n=e._zod.def).when??(n.when=a=>{let t=a.value;return!Ze(t)&&t.size!==void 0}),e._zod.onattach.push(a=>{let t=a._zod.bag.maximum??Number.POSITIVE_INFINITY;i.maximum{let t=a.value;t.size<=i.maximum||a.issues.push({origin:pn(t),code:\"too_big\",maximum:i.maximum,inclusive:!0,input:t,inst:e,continue:!i.abort})}}),qa=m(\"$ZodCheckMinSize\",(e,i)=>{var n;H.init(e,i),(n=e._zod.def).when??(n.when=a=>{let t=a.value;return!Ze(t)&&t.size!==void 0}),e._zod.onattach.push(a=>{let t=a._zod.bag.minimum??Number.NEGATIVE_INFINITY;i.minimum>t&&(a._zod.bag.minimum=i.minimum)}),e._zod.check=a=>{let t=a.value;t.size>=i.minimum||a.issues.push({origin:pn(t),code:\"too_small\",minimum:i.minimum,inclusive:!0,input:t,inst:e,continue:!i.abort})}}),Ja=m(\"$ZodCheckSizeEquals\",(e,i)=>{var n;H.init(e,i),(n=e._zod.def).when??(n.when=a=>{let t=a.value;return!Ze(t)&&t.size!==void 0}),e._zod.onattach.push(a=>{let t=a._zod.bag;t.minimum=i.size,t.maximum=i.size,t.size=i.size}),e._zod.check=a=>{let t=a.value,r=t.size;if(r===i.size)return;let o=r>i.size;a.issues.push({origin:pn(t),...o?{code:\"too_big\",maximum:i.size}:{code:\"too_small\",minimum:i.size},inclusive:!0,exact:!0,input:a.value,inst:e,continue:!i.abort})}}),Fa=m(\"$ZodCheckMaxLength\",(e,i)=>{var n;H.init(e,i),(n=e._zod.def).when??(n.when=a=>{let t=a.value;return!Ze(t)&&t.length!==void 0}),e._zod.onattach.push(a=>{let t=a._zod.bag.maximum??Number.POSITIVE_INFINITY;i.maximum{let t=a.value;if(t.length<=i.maximum)return;let r=fn(t);a.issues.push({origin:r,code:\"too_big\",maximum:i.maximum,inclusive:!0,input:t,inst:e,continue:!i.abort})}}),Ha=m(\"$ZodCheckMinLength\",(e,i)=>{var n;H.init(e,i),(n=e._zod.def).when??(n.when=a=>{let t=a.value;return!Ze(t)&&t.length!==void 0}),e._zod.onattach.push(a=>{let t=a._zod.bag.minimum??Number.NEGATIVE_INFINITY;i.minimum>t&&(a._zod.bag.minimum=i.minimum)}),e._zod.check=a=>{let t=a.value;if(t.length>=i.minimum)return;let r=fn(t);a.issues.push({origin:r,code:\"too_small\",minimum:i.minimum,inclusive:!0,input:t,inst:e,continue:!i.abort})}}),Wa=m(\"$ZodCheckLengthEquals\",(e,i)=>{var n;H.init(e,i),(n=e._zod.def).when??(n.when=a=>{let t=a.value;return!Ze(t)&&t.length!==void 0}),e._zod.onattach.push(a=>{let t=a._zod.bag;t.minimum=i.length,t.maximum=i.length,t.length=i.length}),e._zod.check=a=>{let t=a.value,r=t.length;if(r===i.length)return;let o=fn(t),s=r>i.length;a.issues.push({origin:o,...s?{code:\"too_big\",maximum:i.length}:{code:\"too_small\",minimum:i.length},inclusive:!0,exact:!0,input:a.value,inst:e,continue:!i.abort})}}),Ke=m(\"$ZodCheckStringFormat\",(e,i)=>{var n,a;H.init(e,i),e._zod.onattach.push(t=>{let r=t._zod.bag;r.format=i.format,i.pattern&&(r.patterns??(r.patterns=new Set),r.patterns.add(i.pattern))}),i.pattern?(n=e._zod).check??(n.check=t=>{i.pattern.lastIndex=0,!i.pattern.test(t.value)&&t.issues.push({origin:\"string\",code:\"invalid_format\",format:i.format,input:t.value,...i.pattern?{pattern:i.pattern.toString()}:{},inst:e,continue:!i.abort})}):(a=e._zod).check??(a.check=()=>{})}),Va=m(\"$ZodCheckRegex\",(e,i)=>{Ke.init(e,i),e._zod.check=n=>{i.pattern.lastIndex=0,!i.pattern.test(n.value)&&n.issues.push({origin:\"string\",code:\"invalid_format\",format:\"regex\",input:n.value,pattern:i.pattern.toString(),inst:e,continue:!i.abort})}}),Ka=m(\"$ZodCheckLowerCase\",(e,i)=>{i.pattern??(i.pattern=Ea),Ke.init(e,i)}),Ba=m(\"$ZodCheckUpperCase\",(e,i)=>{i.pattern??(i.pattern=Pa),Ke.init(e,i)}),Ga=m(\"$ZodCheckIncludes\",(e,i)=>{H.init(e,i);let n=be(i.includes),a=new RegExp(typeof i.position==\"number\"?`^.{${i.position}}${n}`:n);i.pattern=a,e._zod.onattach.push(t=>{let r=t._zod.bag;r.patterns??(r.patterns=new Set),r.patterns.add(a)}),e._zod.check=t=>{t.value.includes(i.includes,i.position)||t.issues.push({origin:\"string\",code:\"invalid_format\",format:\"includes\",includes:i.includes,input:t.value,inst:e,continue:!i.abort})}}),Xa=m(\"$ZodCheckStartsWith\",(e,i)=>{H.init(e,i);let n=new RegExp(`^${be(i.prefix)}.*`);i.pattern??(i.pattern=n),e._zod.onattach.push(a=>{let t=a._zod.bag;t.patterns??(t.patterns=new Set),t.patterns.add(n)}),e._zod.check=a=>{a.value.startsWith(i.prefix)||a.issues.push({origin:\"string\",code:\"invalid_format\",format:\"starts_with\",prefix:i.prefix,input:a.value,inst:e,continue:!i.abort})}}),Ya=m(\"$ZodCheckEndsWith\",(e,i)=>{H.init(e,i);let n=new RegExp(`.*${be(i.suffix)}$`);i.pattern??(i.pattern=n),e._zod.onattach.push(a=>{let t=a._zod.bag;t.patterns??(t.patterns=new Set),t.patterns.add(n)}),e._zod.check=a=>{a.value.endsWith(i.suffix)||a.issues.push({origin:\"string\",code:\"invalid_format\",format:\"ends_with\",suffix:i.suffix,input:a.value,inst:e,continue:!i.abort})}}),Qa=m(\"$ZodCheckProperty\",(e,i)=>{H.init(e,i),e._zod.check=n=>{let a=i.schema._zod.run({value:n.value[i.property],issues:[]},{});if(a instanceof Promise)return a.then(t=>fl(t,n,i.property));fl(a,n,i.property)}}),eo=m(\"$ZodCheckMimeType\",(e,i)=>{H.init(e,i);let n=new Set(i.mime);e._zod.onattach.push(a=>{a._zod.bag.mime=i.mime}),e._zod.check=a=>{n.has(a.value.type)||a.issues.push({code:\"invalid_value\",values:i.mime,input:a.value.type,inst:e,continue:!i.abort})}}),to=m(\"$ZodCheckOverwrite\",(e,i)=>{H.init(e,i),e._zod.check=n=>{n.value=i.tx(n.value)}})}),_n=class{constructor(i=[]){this.content=[],this.indent=0,this&&(this.args=i)}indented(i){this.indent+=1,i(this),this.indent-=1}write(i){if(typeof i==\"function\"){i(this,{execution:\"sync\"}),i(this,{execution:\"async\"});return}let n=i.split(`\n`).filter(r=>r),a=Math.min(...n.map(r=>r.length-r.trimStart().length)),t=n.map(r=>r.slice(a)).map(r=>\" \".repeat(this.indent*2)+r);for(let r of t)this.content.push(r)}compile(){let i=Function,n=this?.args,a=[...(this?.content??[\"\"]).map(t=>` ${t}`)];return new i(...n,a.join(`\n`))}},no,Cd=b(()=>{no={major:4,minor:3,patch:5}});function ro(e){if(e===\"\")return!0;if(e.length%4!==0)return!1;try{return atob(e),!0}catch{return!1}}function Md(e){if(!qn.test(e))return!1;let i=e.replace(/[-_]/g,a=>a===\"-\"?\"+\":\"/\"),n=i.padEnd(Math.ceil(i.length/4)*4,\"=\");return ro(n)}function Ld(e,i=null){try{let n=e.split(\".\");if(n.length!==3)return!1;let[a]=n;if(!a)return!1;let t=JSON.parse(atob(a));return!(\"typ\"in t&&t?.typ!==\"JWT\"||!t.alg||i&&(!(\"alg\"in t)||t.alg!==i))}catch{return!1}}function gl(e,i,n){e.issues.length&&i.issues.push(...ge(n,e.issues)),i.value[n]=e.value}function yn(e,i,n,a,t){if(e.issues.length){if(t&&!(n in a))return;i.issues.push(...ge(n,e.issues))}e.value===void 0?n in a&&(i.value[n]=void 0):i.value[n]=e.value}function vl(e){let i=Object.keys(e.shape);for(let a of i)if(!e.shape?.[a]?._zod?.traits?.has(\"$ZodType\"))throw Error(`Invalid element at key \"${a}\": expected a Zod schema`);let n=Wl(e.shape);return{...e,keys:i,keySet:new Set(i),numKeys:i.length,optionalKeys:new Set(n)}}function hl(e,i,n,a,t,r){let o=[],s=t.keySet,u=t.catchall._zod,d=u.def.type,c=u.optout===\"optional\";for(let f in i){if(s.has(f))continue;if(d===\"never\"){o.push(f);continue}let g=u.run({value:i[f],issues:[]},a);g instanceof Promise?e.push(g.then(_=>yn(_,n,f,i,c))):yn(g,n,f,i,c)}return o.length&&n.issues.push({code:\"unrecognized_keys\",keys:o,input:i,inst:r}),e.length?Promise.all(e).then(()=>n):n}function $l(e,i,n,a){for(let r of e)if(r.issues.length===0)return i.value=r.value,i;let t=e.filter(r=>!De(r));return t.length===1?(i.value=t[0].value,t[0]):(i.issues.push({code:\"invalid_union\",input:i.value,inst:n,errors:e.map(r=>r.issues.map(o=>ce(o,a,B())))}),i)}function bl(e,i,n,a){let t=e.filter(r=>r.issues.length===0);return t.length===1?(i.value=t[0].value,i):(t.length===0?i.issues.push({code:\"invalid_union\",input:i.value,inst:n,errors:e.map(r=>r.issues.map(o=>ce(o,a,B())))}):i.issues.push({code:\"invalid_union\",input:i.value,inst:n,errors:[],inclusive:!1}),i)}function Jr(e,i){if(e===i)return{valid:!0,data:e};if(e instanceof Date&&i instanceof Date&&+e==+i)return{valid:!0,data:e};if(Ae(e)&&Ae(i)){let n=Object.keys(i),a=Object.keys(e).filter(r=>n.indexOf(r)!==-1),t={...e,...i};for(let r of a){let o=Jr(e[r],i[r]);if(!o.valid)return{valid:!1,mergeErrorPath:[r,...o.mergeErrorPath]};t[r]=o.data}return{valid:!0,data:t}}if(Array.isArray(e)&&Array.isArray(i)){if(e.length!==i.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let a=0;as.l&&s.r).map(([s])=>s);if(r.length&&t&&e.issues.push({...t,keys:r}),De(e))return e;let o=Jr(i.value,n.value);if(!o.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(o.mergeErrorPath)}`);return e.value=o.data,e}function sn(e,i,n){e.issues.length&&i.issues.push(...ge(n,e.issues)),i.value[n]=e.value}function yl(e,i,n,a,t,r,o){e.issues.length&&(qt.has(typeof a)?n.issues.push(...ge(a,e.issues)):n.issues.push({code:\"invalid_key\",origin:\"map\",input:t,inst:r,issues:e.issues.map(s=>ce(s,o,B()))})),i.issues.length&&(qt.has(typeof a)?n.issues.push(...ge(a,i.issues)):n.issues.push({origin:\"map\",code:\"invalid_element\",input:t,inst:r,key:a,issues:i.issues.map(s=>ce(s,o,B()))})),n.value.set(e.value,i.value)}function kl(e,i){e.issues.length&&i.issues.push(...e.issues),i.value.add(e.value)}function Il(e,i){return e.issues.length&&i===void 0?{issues:[],value:void 0}:e}function wl(e,i){return e.value===void 0&&(e.value=i.defaultValue),e}function xl(e,i){return!e.issues.length&&e.value===void 0&&e.issues.push({code:\"invalid_type\",expected:\"nonoptional\",input:e.value,inst:i}),e}function un(e,i,n){return e.issues.length?(e.aborted=!0,e):i._zod.run({value:e.value,issues:e.issues},n)}function ln(e,i,n){if(e.issues.length)return e.aborted=!0,e;if((n.direction||\"forward\")===\"forward\"){let a=i.transform(e.value,e);return a instanceof Promise?a.then(t=>dn(e,t,i.out,n)):dn(e,a,i.out,n)}else{let a=i.reverseTransform(e.value,e);return a instanceof Promise?a.then(t=>dn(e,t,i.in,n)):dn(e,a,i.in,n)}}function dn(e,i,n,a){return e.issues.length?(e.aborted=!0,e):n._zod.run({value:i,issues:e.issues},a)}function Sl(e){return e.value=Object.freeze(e.value),e}function zl(e,i,n,a){if(!e){let t={code:\"custom\",input:n,inst:a,path:[...a._zod.def.path??[]],continue:!a._zod.def.abort};a._zod.def.params&&(t.params=a._zod.def.params),i.issues.push(vn(t))}}var S,Ye,A,ao,oo,so,uo,lo,co,mo,po,fo,go,vo,ho,$o,bo,_o,yo,ko,Io,wo,xo,So,zo,Uo,Oo,No,kn,Zo,Hn,In,To,Do,jo,Eo,Po,Ro,Ao,Co,Mo,Lo,Fr,qo,Ct,Jo,Fo,Ho,wn,Wo,Vo,Ko,Bo,Go,Xo,Yo,xn,Qo,es,ts,is,ns,rs,as,os,ss,Wn,us,ls,ds,cs,ms,ps,qd=b(()=>{io(),Wt(),ad(),Ra(),I(),Cd(),I(),S=m(\"$ZodType\",(e,i)=>{var n;e??(e={}),e._zod.def=i,e._zod.bag=e._zod.bag||{},e._zod.version=no;let a=[...e._zod.def.checks??[]];e._zod.traits.has(\"$ZodCheck\")&&a.unshift(e);for(let t of a)for(let r of t._zod.onattach)r(e);if(a.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(o,s,u)=>{let d=De(o),c;for(let f of s){if(f._zod.def.when){if(!f._zod.def.when(o))continue}else if(d)continue;let g=o.issues.length,_=f._zod.check(o);if(_ instanceof Promise&&u?.async===!1)throw new we;if(c||_ instanceof Promise)c=(c??Promise.resolve()).then(async()=>{await _,o.issues.length!==g&&(d||(d=De(o,g)))});else{if(o.issues.length===g)continue;d||(d=De(o,g))}}return c?c.then(()=>o):o},r=(o,s,u)=>{if(De(o))return o.aborted=!0,o;let d=t(s,a,u);if(d instanceof Promise){if(u.async===!1)throw new we;return d.then(c=>e._zod.parse(c,u))}return e._zod.parse(d,u)};e._zod.run=(o,s)=>{if(s.skipChecks)return e._zod.parse(o,s);if(s.direction===\"backward\"){let d=e._zod.parse({value:o.value,issues:[]},{...s,skipChecks:!0});return d instanceof Promise?d.then(c=>r(c,o,s)):r(d,o,s)}let u=e._zod.parse(o,s);if(u instanceof Promise){if(s.async===!1)throw new we;return u.then(d=>t(d,a,s))}return t(u,a,s)}}O(e,\"~standard\",()=>({validate:t=>{try{let r=Ln(e,t);return r.success?{value:r.data}:{issues:r.error?.issues}}catch{return aa(e,t).then(o=>o.success?{value:o.data}:{issues:o.error?.issues})}},vendor:\"zod\",version:1}))}),Ye=m(\"$ZodString\",(e,i)=>{S.init(e,i),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??kd(e._zod.bag),e._zod.parse=(n,a)=>{if(i.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==\"string\"||n.issues.push({expected:\"string\",code:\"invalid_type\",input:n.value,inst:e}),n}}),A=m(\"$ZodStringFormat\",(e,i)=>{Ke.init(e,i),Ye.init(e,i)}),ao=m(\"$ZodGUID\",(e,i)=>{i.pattern??(i.pattern=ya),A.init(e,i)}),oo=m(\"$ZodUUID\",(e,i)=>{if(i.version){let n={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[i.version];if(n===void 0)throw Error(`Invalid UUID version: \"${i.version}\"`);i.pattern??(i.pattern=Ge(n))}else i.pattern??(i.pattern=Ge());A.init(e,i)}),so=m(\"$ZodEmail\",(e,i)=>{i.pattern??(i.pattern=ka),A.init(e,i)}),uo=m(\"$ZodURL\",(e,i)=>{A.init(e,i),e._zod.check=n=>{try{let a=n.value.trim(),t=new URL(a);i.hostname&&(i.hostname.lastIndex=0,!i.hostname.test(t.hostname)&&n.issues.push({code:\"invalid_format\",format:\"url\",note:\"Invalid hostname\",pattern:i.hostname.source,input:n.value,inst:e,continue:!i.abort})),i.protocol&&(i.protocol.lastIndex=0,!i.protocol.test(t.protocol.endsWith(\":\")?t.protocol.slice(0,-1):t.protocol)&&n.issues.push({code:\"invalid_format\",format:\"url\",note:\"Invalid protocol\",pattern:i.protocol.source,input:n.value,inst:e,continue:!i.abort})),i.normalize?n.value=t.href:n.value=a;return}catch{n.issues.push({code:\"invalid_format\",format:\"url\",input:n.value,inst:e,continue:!i.abort})}}}),lo=m(\"$ZodEmoji\",(e,i)=>{i.pattern??(i.pattern=od()),A.init(e,i)}),co=m(\"$ZodNanoID\",(e,i)=>{i.pattern??(i.pattern=ba),A.init(e,i)}),mo=m(\"$ZodCUID\",(e,i)=>{i.pattern??(i.pattern=fa),A.init(e,i)}),po=m(\"$ZodCUID2\",(e,i)=>{i.pattern??(i.pattern=ga),A.init(e,i)}),fo=m(\"$ZodULID\",(e,i)=>{i.pattern??(i.pattern=va),A.init(e,i)}),go=m(\"$ZodXID\",(e,i)=>{i.pattern??(i.pattern=ha),A.init(e,i)}),vo=m(\"$ZodKSUID\",(e,i)=>{i.pattern??(i.pattern=$a),A.init(e,i)}),ho=m(\"$ZodISODateTime\",(e,i)=>{i.pattern??(i.pattern=ld(i)),A.init(e,i)}),$o=m(\"$ZodISODate\",(e,i)=>{i.pattern??(i.pattern=Oa),A.init(e,i)}),bo=m(\"$ZodISOTime\",(e,i)=>{i.pattern??(i.pattern=ud(i)),A.init(e,i)}),_o=m(\"$ZodISODuration\",(e,i)=>{i.pattern??(i.pattern=_a),A.init(e,i)}),yo=m(\"$ZodIPv4\",(e,i)=>{i.pattern??(i.pattern=Ia),A.init(e,i),e._zod.bag.format=\"ipv4\"}),ko=m(\"$ZodIPv6\",(e,i)=>{i.pattern??(i.pattern=wa),A.init(e,i),e._zod.bag.format=\"ipv6\",e._zod.check=n=>{try{new URL(`http://[${n.value}]`)}catch{n.issues.push({code:\"invalid_format\",format:\"ipv6\",input:n.value,inst:e,continue:!i.abort})}}}),Io=m(\"$ZodMAC\",(e,i)=>{i.pattern??(i.pattern=$d(i.delimiter)),A.init(e,i),e._zod.bag.format=\"mac\"}),wo=m(\"$ZodCIDRv4\",(e,i)=>{i.pattern??(i.pattern=xa),A.init(e,i)}),xo=m(\"$ZodCIDRv6\",(e,i)=>{i.pattern??(i.pattern=Sa),A.init(e,i),e._zod.check=n=>{let a=n.value.split(\"/\");try{if(a.length!==2)throw Error();let[t,r]=a;if(!r)throw Error();let o=Number(r);if(`${o}`!==r||o<0||o>128)throw Error();new URL(`http://[${t}]`)}catch{n.issues.push({code:\"invalid_format\",format:\"cidrv6\",input:n.value,inst:e,continue:!i.abort})}}}),So=m(\"$ZodBase64\",(e,i)=>{i.pattern??(i.pattern=za),A.init(e,i),e._zod.bag.contentEncoding=\"base64\",e._zod.check=n=>{ro(n.value)||n.issues.push({code:\"invalid_format\",format:\"base64\",input:n.value,inst:e,continue:!i.abort})}}),zo=m(\"$ZodBase64URL\",(e,i)=>{i.pattern??(i.pattern=qn),A.init(e,i),e._zod.bag.contentEncoding=\"base64url\",e._zod.check=n=>{Md(n.value)||n.issues.push({code:\"invalid_format\",format:\"base64url\",input:n.value,inst:e,continue:!i.abort})}}),Uo=m(\"$ZodE164\",(e,i)=>{i.pattern??(i.pattern=Ua),A.init(e,i)}),Oo=m(\"$ZodJWT\",(e,i)=>{A.init(e,i),e._zod.check=n=>{Ld(n.value,i.alg)||n.issues.push({code:\"invalid_format\",format:\"jwt\",input:n.value,inst:e,continue:!i.abort})}}),No=m(\"$ZodCustomStringFormat\",(e,i)=>{A.init(e,i),e._zod.check=n=>{i.fn(n.value)||n.issues.push({code:\"invalid_format\",format:i.format,input:n.value,inst:e,continue:!i.abort})}}),kn=m(\"$ZodNumber\",(e,i)=>{S.init(e,i),e._zod.pattern=e._zod.bag.pattern??bn,e._zod.parse=(n,a)=>{if(i.coerce)try{n.value=Number(n.value)}catch{}let t=n.value;if(typeof t==\"number\"&&!Number.isNaN(t)&&Number.isFinite(t))return n;let r=typeof t==\"number\"?Number.isNaN(t)?\"NaN\":Number.isFinite(t)?void 0:\"Infinity\":void 0;return n.issues.push({expected:\"number\",code:\"invalid_type\",input:t,inst:e,...r?{received:r}:{}}),n}}),Zo=m(\"$ZodNumberFormat\",(e,i)=>{Ca.init(e,i),kn.init(e,i)}),Hn=m(\"$ZodBoolean\",(e,i)=>{S.init(e,i),e._zod.pattern=Ta,e._zod.parse=(n,a)=>{if(i.coerce)try{n.value=!!n.value}catch{}let t=n.value;return typeof t==\"boolean\"||n.issues.push({expected:\"boolean\",code:\"invalid_type\",input:t,inst:e}),n}}),In=m(\"$ZodBigInt\",(e,i)=>{S.init(e,i),e._zod.pattern=Na,e._zod.parse=(n,a)=>{if(i.coerce)try{n.value=BigInt(n.value)}catch{}return typeof n.value==\"bigint\"||n.issues.push({expected:\"bigint\",code:\"invalid_type\",input:n.value,inst:e}),n}}),To=m(\"$ZodBigIntFormat\",(e,i)=>{Ma.init(e,i),In.init(e,i)}),Do=m(\"$ZodSymbol\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>{let t=n.value;return typeof t==\"symbol\"||n.issues.push({expected:\"symbol\",code:\"invalid_type\",input:t,inst:e}),n}}),jo=m(\"$ZodUndefined\",(e,i)=>{S.init(e,i),e._zod.pattern=ja,e._zod.values=new Set([void 0]),e._zod.optin=\"optional\",e._zod.optout=\"optional\",e._zod.parse=(n,a)=>{let t=n.value;return typeof t>\"u\"||n.issues.push({expected:\"undefined\",code:\"invalid_type\",input:t,inst:e}),n}}),Eo=m(\"$ZodNull\",(e,i)=>{S.init(e,i),e._zod.pattern=Da,e._zod.values=new Set([null]),e._zod.parse=(n,a)=>{let t=n.value;return t===null||n.issues.push({expected:\"null\",code:\"invalid_type\",input:t,inst:e}),n}}),Po=m(\"$ZodAny\",(e,i)=>{S.init(e,i),e._zod.parse=n=>n}),Ro=m(\"$ZodUnknown\",(e,i)=>{S.init(e,i),e._zod.parse=n=>n}),Ao=m(\"$ZodNever\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>(n.issues.push({expected:\"never\",code:\"invalid_type\",input:n.value,inst:e}),n)}),Co=m(\"$ZodVoid\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>{let t=n.value;return typeof t>\"u\"||n.issues.push({expected:\"void\",code:\"invalid_type\",input:t,inst:e}),n}}),Mo=m(\"$ZodDate\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>{if(i.coerce)try{n.value=new Date(n.value)}catch{}let t=n.value,r=t instanceof Date;return r&&!Number.isNaN(t.getTime())||n.issues.push({expected:\"date\",code:\"invalid_type\",input:t,...r?{received:\"Invalid Date\"}:{},inst:e}),n}}),Lo=m(\"$ZodArray\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>{let t=n.value;if(!Array.isArray(t))return n.issues.push({expected:\"array\",code:\"invalid_type\",input:t,inst:e}),n;n.value=Array(t.length);let r=[];for(let o=0;ogl(d,n,o))):gl(u,n,o)}return r.length?Promise.all(r).then(()=>n):n}}),Fr=m(\"$ZodObject\",(e,i)=>{if(S.init(e,i),!Object.getOwnPropertyDescriptor(i,\"shape\")?.get){let o=i.shape;Object.defineProperty(i,\"shape\",{get:()=>{let s={...o};return Object.defineProperty(i,\"shape\",{value:s}),s}})}let n=At(()=>vl(i));O(e._zod,\"propValues\",()=>{let o=i.shape,s={};for(let u in o){let d=o[u]._zod;if(d.values){s[u]??(s[u]=new Set);for(let c of d.values)s[u].add(c)}}return s});let a=Be,t=i.catchall,r;e._zod.parse=(o,s)=>{r??(r=n.value);let u=o.value;if(!a(u))return o.issues.push({expected:\"object\",code:\"invalid_type\",input:u,inst:e}),o;o.value={};let d=[],c=r.shape;for(let f of r.keys){let g=c[f],_=g._zod.optout===\"optional\",U=g._zod.run({value:u[f],issues:[]},s);U instanceof Promise?d.push(U.then(fe=>yn(fe,o,f,u,_))):yn(U,o,f,u,_)}return t?hl(d,u,o,s,n.value,e):d.length?Promise.all(d).then(()=>o):o}}),qo=m(\"$ZodObjectJIT\",(e,i)=>{Fr.init(e,i);let n=e._zod.parse,a=At(()=>vl(i)),t=f=>{let g=new _n([\"shape\",\"payload\",\"ctx\"]),_=a.value,U=q=>{let F=Cr(q);return`shape[${F}]._zod.run({ value: input[${F}], issues: [] }, ctx)`};g.write(\"const input = payload.value;\");let fe=Object.create(null),Dt=0;for(let q of _.keys)fe[q]=`key_${Dt++}`;g.write(\"const newResult = {};\");for(let q of _.keys){let F=fe[q],Q=Cr(q),tp=f[q]?._zod?.optout===\"optional\";g.write(`const ${F} = ${U(q)};`),tp?g.write(`\n if (${F}.issues.length) {\n if (${Q} in input) {\n payload.issues = payload.issues.concat(${F}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${Q}, ...iss.path] : [${Q}]\n })));\n }\n }\n \n if (${F}.value === undefined) {\n if (${Q} in input) {\n newResult[${Q}] = undefined;\n }\n } else {\n newResult[${Q}] = ${F}.value;\n }\n \n `):g.write(`\n if (${F}.issues.length) {\n payload.issues = payload.issues.concat(${F}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${Q}, ...iss.path] : [${Q}]\n })));\n }\n \n if (${F}.value === undefined) {\n if (${Q} in input) {\n newResult[${Q}] = undefined;\n }\n } else {\n newResult[${Q}] = ${F}.value;\n }\n \n `)}g.write(\"payload.value = newResult;\"),g.write(\"return payload;\");let on=g.compile();return(q,F)=>on(f,q,F)},r,o=Be,s=!Lt.jitless,u=s&&Qr.value,d=i.catchall,c;e._zod.parse=(f,g)=>{c??(c=a.value);let _=f.value;return o(_)?s&&u&&g?.async===!1&&g.jitless!==!0?(r||(r=t(i.shape)),f=r(f,g),d?hl([],_,f,g,c,e):f):n(f,g):(f.issues.push({expected:\"object\",code:\"invalid_type\",input:_,inst:e}),f)}}),Ct=m(\"$ZodUnion\",(e,i)=>{S.init(e,i),O(e._zod,\"optin\",()=>i.options.some(t=>t._zod.optin===\"optional\")?\"optional\":void 0),O(e._zod,\"optout\",()=>i.options.some(t=>t._zod.optout===\"optional\")?\"optional\":void 0),O(e._zod,\"values\",()=>{if(i.options.every(t=>t._zod.values))return new Set(i.options.flatMap(t=>Array.from(t._zod.values)))}),O(e._zod,\"pattern\",()=>{if(i.options.every(t=>t._zod.pattern)){let t=i.options.map(r=>r._zod.pattern);return new RegExp(`^(${t.map(r=>mn(r.source)).join(\"|\")})$`)}});let n=i.options.length===1,a=i.options[0]._zod.run;e._zod.parse=(t,r)=>{if(n)return a(t,r);let o=!1,s=[];for(let u of i.options){let d=u._zod.run({value:t.value,issues:[]},r);if(d instanceof Promise)s.push(d),o=!0;else{if(d.issues.length===0)return d;s.push(d)}}return o?Promise.all(s).then(u=>$l(u,t,e,r)):$l(s,t,e,r)}}),Jo=m(\"$ZodXor\",(e,i)=>{Ct.init(e,i),i.inclusive=!1;let n=i.options.length===1,a=i.options[0]._zod.run;e._zod.parse=(t,r)=>{if(n)return a(t,r);let o=!1,s=[];for(let u of i.options){let d=u._zod.run({value:t.value,issues:[]},r);d instanceof Promise?(s.push(d),o=!0):s.push(d)}return o?Promise.all(s).then(u=>bl(u,t,e,r)):bl(s,t,e,r)}}),Fo=m(\"$ZodDiscriminatedUnion\",(e,i)=>{i.inclusive=!1,Ct.init(e,i);let n=e._zod.parse;O(e._zod,\"propValues\",()=>{let t={};for(let r of i.options){let o=r._zod.propValues;if(!o||Object.keys(o).length===0)throw Error(`Invalid discriminated union option at index \"${i.options.indexOf(r)}\"`);for(let[s,u]of Object.entries(o)){t[s]||(t[s]=new Set);for(let d of u)t[s].add(d)}}return t});let a=At(()=>{let t=i.options,r=new Map;for(let o of t){let s=o._zod.propValues?.[i.discriminator];if(!s||s.size===0)throw Error(`Invalid discriminated union option at index \"${i.options.indexOf(o)}\"`);for(let u of s){if(r.has(u))throw Error(`Duplicate discriminator value \"${String(u)}\"`);r.set(u,o)}}return r});e._zod.parse=(t,r)=>{let o=t.value;if(!Be(o))return t.issues.push({code:\"invalid_type\",expected:\"object\",input:o,inst:e}),t;let s=a.value.get(o?.[i.discriminator]);return s?s._zod.run(t,r):i.unionFallback?n(t,r):(t.issues.push({code:\"invalid_union\",errors:[],note:\"No matching discriminator\",discriminator:i.discriminator,input:o,path:[i.discriminator],inst:e}),t)}}),Ho=m(\"$ZodIntersection\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>{let t=n.value,r=i.left._zod.run({value:t,issues:[]},a),o=i.right._zod.run({value:t,issues:[]},a);return r instanceof Promise||o instanceof Promise?Promise.all([r,o]).then(([s,u])=>_l(n,s,u)):_l(n,r,o)}}),wn=m(\"$ZodTuple\",(e,i)=>{S.init(e,i);let n=i.items;e._zod.parse=(a,t)=>{let r=a.value;if(!Array.isArray(r))return a.issues.push({input:r,inst:e,expected:\"tuple\",code:\"invalid_type\"}),a;a.value=[];let o=[],s=[...n].reverse().findIndex(c=>c._zod.optin!==\"optional\"),u=s===-1?0:n.length-s;if(!i.rest){let c=r.length>n.length,f=r.length=r.length&&d>=u)continue;let f=c._zod.run({value:r[d],issues:[]},t);f instanceof Promise?o.push(f.then(g=>sn(g,a,d))):sn(f,a,d)}if(i.rest){let c=r.slice(n.length);for(let f of c){d++;let g=i.rest._zod.run({value:f,issues:[]},t);g instanceof Promise?o.push(g.then(_=>sn(_,a,d))):sn(g,a,d)}}return o.length?Promise.all(o).then(()=>a):a}}),Wo=m(\"$ZodRecord\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>{let t=n.value;if(!Ae(t))return n.issues.push({expected:\"record\",code:\"invalid_type\",input:t,inst:e}),n;let r=[],o=i.keyType._zod.values;if(o){n.value={};let s=new Set;for(let d of o)if(typeof d==\"string\"||typeof d==\"number\"||typeof d==\"symbol\"){s.add(typeof d==\"number\"?d.toString():d);let c=i.valueType._zod.run({value:t[d],issues:[]},a);c instanceof Promise?r.push(c.then(f=>{f.issues.length&&n.issues.push(...ge(d,f.issues)),n.value[d]=f.value})):(c.issues.length&&n.issues.push(...ge(d,c.issues)),n.value[d]=c.value)}let u;for(let d in t)s.has(d)||(u=u??[],u.push(d));u&&u.length>0&&n.issues.push({code:\"unrecognized_keys\",input:t,inst:e,keys:u})}else{n.value={};for(let s of Reflect.ownKeys(t)){if(s===\"__proto__\")continue;let u=i.keyType._zod.run({value:s,issues:[]},a);if(u instanceof Promise)throw Error(\"Async schemas not supported in object keys currently\");if(typeof s==\"string\"&&bn.test(s)&&u.issues.length&&u.issues.some(c=>c.code===\"invalid_type\"&&c.expected===\"number\")){let c=i.keyType._zod.run({value:Number(s),issues:[]},a);if(c instanceof Promise)throw Error(\"Async schemas not supported in object keys currently\");c.issues.length===0&&(u=c)}if(u.issues.length){i.mode===\"loose\"?n.value[s]=t[s]:n.issues.push({code:\"invalid_key\",origin:\"record\",issues:u.issues.map(c=>ce(c,a,B())),input:s,path:[s],inst:e});continue}let d=i.valueType._zod.run({value:t[s],issues:[]},a);d instanceof Promise?r.push(d.then(c=>{c.issues.length&&n.issues.push(...ge(s,c.issues)),n.value[u.value]=c.value})):(d.issues.length&&n.issues.push(...ge(s,d.issues)),n.value[u.value]=d.value)}}return r.length?Promise.all(r).then(()=>n):n}}),Vo=m(\"$ZodMap\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>{let t=n.value;if(!(t instanceof Map))return n.issues.push({expected:\"map\",code:\"invalid_type\",input:t,inst:e}),n;let r=[];n.value=new Map;for(let[o,s]of t){let u=i.keyType._zod.run({value:o,issues:[]},a),d=i.valueType._zod.run({value:s,issues:[]},a);u instanceof Promise||d instanceof Promise?r.push(Promise.all([u,d]).then(([c,f])=>{yl(c,f,n,o,t,e,a)})):yl(u,d,n,o,t,e,a)}return r.length?Promise.all(r).then(()=>n):n}}),Ko=m(\"$ZodSet\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>{let t=n.value;if(!(t instanceof Set))return n.issues.push({input:t,inst:e,expected:\"set\",code:\"invalid_type\"}),n;let r=[];n.value=new Set;for(let o of t){let s=i.valueType._zod.run({value:o,issues:[]},a);s instanceof Promise?r.push(s.then(u=>kl(u,n))):kl(s,n)}return r.length?Promise.all(r).then(()=>n):n}}),Bo=m(\"$ZodEnum\",(e,i)=>{S.init(e,i);let n=Yr(i.entries),a=new Set(n);e._zod.values=a,e._zod.pattern=new RegExp(`^(${n.filter(t=>qt.has(typeof t)).map(t=>typeof t==\"string\"?be(t):t.toString()).join(\"|\")})$`),e._zod.parse=(t,r)=>{let o=t.value;return a.has(o)||t.issues.push({code:\"invalid_value\",values:n,input:o,inst:e}),t}}),Go=m(\"$ZodLiteral\",(e,i)=>{if(S.init(e,i),i.values.length===0)throw Error(\"Cannot create literal schema with no valid values\");let n=new Set(i.values);e._zod.values=n,e._zod.pattern=new RegExp(`^(${i.values.map(a=>typeof a==\"string\"?be(a):a?be(a.toString()):String(a)).join(\"|\")})$`),e._zod.parse=(a,t)=>{let r=a.value;return n.has(r)||a.issues.push({code:\"invalid_value\",values:i.values,input:r,inst:e}),a}}),Xo=m(\"$ZodFile\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>{let t=n.value;return t instanceof File||n.issues.push({expected:\"file\",code:\"invalid_type\",input:t,inst:e}),n}}),Yo=m(\"$ZodTransform\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>{if(a.direction===\"backward\")throw new Mt(e.constructor.name);let t=i.transform(n.value,n);if(a.async)return(t instanceof Promise?t:Promise.resolve(t)).then(r=>(n.value=r,n));if(t instanceof Promise)throw new we;return n.value=t,n}}),xn=m(\"$ZodOptional\",(e,i)=>{S.init(e,i),e._zod.optin=\"optional\",e._zod.optout=\"optional\",O(e._zod,\"values\",()=>i.innerType._zod.values?new Set([...i.innerType._zod.values,void 0]):void 0),O(e._zod,\"pattern\",()=>{let n=i.innerType._zod.pattern;return n?new RegExp(`^(${mn(n.source)})?$`):void 0}),e._zod.parse=(n,a)=>{if(i.innerType._zod.optin===\"optional\"){let t=i.innerType._zod.run(n,a);return t instanceof Promise?t.then(r=>Il(r,n.value)):Il(t,n.value)}return n.value===void 0?n:i.innerType._zod.run(n,a)}}),Qo=m(\"$ZodExactOptional\",(e,i)=>{xn.init(e,i),O(e._zod,\"values\",()=>i.innerType._zod.values),O(e._zod,\"pattern\",()=>i.innerType._zod.pattern),e._zod.parse=(n,a)=>i.innerType._zod.run(n,a)}),es=m(\"$ZodNullable\",(e,i)=>{S.init(e,i),O(e._zod,\"optin\",()=>i.innerType._zod.optin),O(e._zod,\"optout\",()=>i.innerType._zod.optout),O(e._zod,\"pattern\",()=>{let n=i.innerType._zod.pattern;return n?new RegExp(`^(${mn(n.source)}|null)$`):void 0}),O(e._zod,\"values\",()=>i.innerType._zod.values?new Set([...i.innerType._zod.values,null]):void 0),e._zod.parse=(n,a)=>n.value===null?n:i.innerType._zod.run(n,a)}),ts=m(\"$ZodDefault\",(e,i)=>{S.init(e,i),e._zod.optin=\"optional\",O(e._zod,\"values\",()=>i.innerType._zod.values),e._zod.parse=(n,a)=>{if(a.direction===\"backward\")return i.innerType._zod.run(n,a);if(n.value===void 0)return n.value=i.defaultValue,n;let t=i.innerType._zod.run(n,a);return t instanceof Promise?t.then(r=>wl(r,i)):wl(t,i)}}),is=m(\"$ZodPrefault\",(e,i)=>{S.init(e,i),e._zod.optin=\"optional\",O(e._zod,\"values\",()=>i.innerType._zod.values),e._zod.parse=(n,a)=>(a.direction===\"backward\"||n.value===void 0&&(n.value=i.defaultValue),i.innerType._zod.run(n,a))}),ns=m(\"$ZodNonOptional\",(e,i)=>{S.init(e,i),O(e._zod,\"values\",()=>{let n=i.innerType._zod.values;return n?new Set([...n].filter(a=>a!==void 0)):void 0}),e._zod.parse=(n,a)=>{let t=i.innerType._zod.run(n,a);return t instanceof Promise?t.then(r=>xl(r,e)):xl(t,e)}}),rs=m(\"$ZodSuccess\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>{if(a.direction===\"backward\")throw new Mt(\"ZodSuccess\");let t=i.innerType._zod.run(n,a);return t instanceof Promise?t.then(r=>(n.value=r.issues.length===0,n)):(n.value=t.issues.length===0,n)}}),as=m(\"$ZodCatch\",(e,i)=>{S.init(e,i),O(e._zod,\"optin\",()=>i.innerType._zod.optin),O(e._zod,\"optout\",()=>i.innerType._zod.optout),O(e._zod,\"values\",()=>i.innerType._zod.values),e._zod.parse=(n,a)=>{if(a.direction===\"backward\")return i.innerType._zod.run(n,a);let t=i.innerType._zod.run(n,a);return t instanceof Promise?t.then(r=>(n.value=r.value,r.issues.length&&(n.value=i.catchValue({...n,error:{issues:r.issues.map(o=>ce(o,a,B()))},input:n.value}),n.issues=[]),n)):(n.value=t.value,t.issues.length&&(n.value=i.catchValue({...n,error:{issues:t.issues.map(r=>ce(r,a,B()))},input:n.value}),n.issues=[]),n)}}),os=m(\"$ZodNaN\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>((typeof n.value!=\"number\"||!Number.isNaN(n.value))&&n.issues.push({input:n.value,inst:e,expected:\"nan\",code:\"invalid_type\"}),n)}),ss=m(\"$ZodPipe\",(e,i)=>{S.init(e,i),O(e._zod,\"values\",()=>i.in._zod.values),O(e._zod,\"optin\",()=>i.in._zod.optin),O(e._zod,\"optout\",()=>i.out._zod.optout),O(e._zod,\"propValues\",()=>i.in._zod.propValues),e._zod.parse=(n,a)=>{if(a.direction===\"backward\"){let r=i.out._zod.run(n,a);return r instanceof Promise?r.then(o=>un(o,i.in,a)):un(r,i.in,a)}let t=i.in._zod.run(n,a);return t instanceof Promise?t.then(r=>un(r,i.out,a)):un(t,i.out,a)}}),Wn=m(\"$ZodCodec\",(e,i)=>{S.init(e,i),O(e._zod,\"values\",()=>i.in._zod.values),O(e._zod,\"optin\",()=>i.in._zod.optin),O(e._zod,\"optout\",()=>i.out._zod.optout),O(e._zod,\"propValues\",()=>i.in._zod.propValues),e._zod.parse=(n,a)=>{if((a.direction||\"forward\")===\"forward\"){let t=i.in._zod.run(n,a);return t instanceof Promise?t.then(r=>ln(r,i,a)):ln(t,i,a)}else{let t=i.out._zod.run(n,a);return t instanceof Promise?t.then(r=>ln(r,i,a)):ln(t,i,a)}}}),us=m(\"$ZodReadonly\",(e,i)=>{S.init(e,i),O(e._zod,\"propValues\",()=>i.innerType._zod.propValues),O(e._zod,\"values\",()=>i.innerType._zod.values),O(e._zod,\"optin\",()=>i.innerType?._zod?.optin),O(e._zod,\"optout\",()=>i.innerType?._zod?.optout),e._zod.parse=(n,a)=>{if(a.direction===\"backward\")return i.innerType._zod.run(n,a);let t=i.innerType._zod.run(n,a);return t instanceof Promise?t.then(Sl):Sl(t)}}),ls=m(\"$ZodTemplateLiteral\",(e,i)=>{S.init(e,i);let n=[];for(let a of i.parts)if(typeof a==\"object\"&&a!==null){if(!a._zod.pattern)throw Error(`Invalid template literal part, no pattern found: ${[...a._zod.traits].shift()}`);let t=a._zod.pattern instanceof RegExp?a._zod.pattern.source:a._zod.pattern;if(!t)throw Error(`Invalid template literal part: ${a._zod.traits}`);let r=t.startsWith(\"^\")?1:0,o=t.endsWith(\"$\")?t.length-1:t.length;n.push(t.slice(r,o))}else if(a===null||ea.has(typeof a))n.push(be(`${a}`));else throw Error(`Invalid template literal part: ${a}`);e._zod.pattern=new RegExp(`^${n.join(\"\")}$`),e._zod.parse=(a,t)=>typeof a.value!=\"string\"?(a.issues.push({input:a.value,inst:e,expected:\"string\",code:\"invalid_type\"}),a):(e._zod.pattern.lastIndex=0,e._zod.pattern.test(a.value)||a.issues.push({input:a.value,inst:e,code:\"invalid_format\",format:i.format??\"template_literal\",pattern:e._zod.pattern.source}),a)}),ds=m(\"$ZodFunction\",(e,i)=>(S.init(e,i),e._def=i,e._zod.def=i,e.implement=n=>{if(typeof n!=\"function\")throw Error(\"implement() must be called with a function\");return function(...a){let t=e._def.input?hn(e._def.input,a):a,r=Reflect.apply(n,this,t);return e._def.output?hn(e._def.output,r):r}},e.implementAsync=n=>{if(typeof n!=\"function\")throw Error(\"implementAsync() must be called with a function\");return async function(...a){let t=e._def.input?await $n(e._def.input,a):a,r=await Reflect.apply(n,this,t);return e._def.output?await $n(e._def.output,r):r}},e._zod.parse=(n,a)=>typeof n.value!=\"function\"?(n.issues.push({code:\"invalid_type\",expected:\"function\",input:n.value,inst:e}),n):(e._def.output&&e._def.output._zod.def.type===\"promise\"?n.value=e.implementAsync(n.value):n.value=e.implement(n.value),n),e.input=(...n)=>{let a=e.constructor;return Array.isArray(n[0])?new a({type:\"function\",input:new wn({type:\"tuple\",items:n[0],rest:n[1]}),output:e._def.output}):new a({type:\"function\",input:n[0],output:e._def.output})},e.output=n=>new e.constructor({type:\"function\",input:e._def.input,output:n}),e)),cs=m(\"$ZodPromise\",(e,i)=>{S.init(e,i),e._zod.parse=(n,a)=>Promise.resolve(n.value).then(t=>i.innerType._zod.run({value:t,issues:[]},a))}),ms=m(\"$ZodLazy\",(e,i)=>{S.init(e,i),O(e._zod,\"innerType\",()=>i.getter()),O(e._zod,\"pattern\",()=>e._zod.innerType?._zod?.pattern),O(e._zod,\"propValues\",()=>e._zod.innerType?._zod?.propValues),O(e._zod,\"optin\",()=>e._zod.innerType?._zod?.optin??void 0),O(e._zod,\"optout\",()=>e._zod.innerType?._zod?.optout??void 0),e._zod.parse=(n,a)=>e._zod.innerType._zod.run(n,a)}),ps=m(\"$ZodCustom\",(e,i)=>{H.init(e,i),S.init(e,i),e._zod.parse=(n,a)=>n,e._zod.check=n=>{let a=n.value,t=i.fn(a);if(t instanceof Promise)return t.then(r=>zl(r,n,a,e));zl(t,n,a,e)}})});function Dp(){return{localeError:jp()}}var jp=()=>{let e={string:{unit:\"\\u062D\\u0631\\u0641\",verb:\"\\u0623\\u0646 \\u064A\\u062D\\u0648\\u064A\"},file:{unit:\"\\u0628\\u0627\\u064A\\u062A\",verb:\"\\u0623\\u0646 \\u064A\\u062D\\u0648\\u064A\"},array:{unit:\"\\u0639\\u0646\\u0635\\u0631\",verb:\"\\u0623\\u0646 \\u064A\\u062D\\u0648\\u064A\"},set:{unit:\"\\u0639\\u0646\\u0635\\u0631\",verb:\"\\u0623\\u0646 \\u064A\\u062D\\u0648\\u064A\"}};function i(t){return e[t]??null}let n={regex:\"\\u0645\\u062F\\u062E\\u0644\",email:\"\\u0628\\u0631\\u064A\\u062F \\u0625\\u0644\\u0643\\u062A\\u0631\\u0648\\u0646\\u064A\",url:\"\\u0631\\u0627\\u0628\\u0637\",emoji:\"\\u0625\\u064A\\u0645\\u0648\\u062C\\u064A\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"\\u062A\\u0627\\u0631\\u064A\\u062E \\u0648\\u0648\\u0642\\u062A \\u0628\\u0645\\u0639\\u064A\\u0627\\u0631 ISO\",date:\"\\u062A\\u0627\\u0631\\u064A\\u062E \\u0628\\u0645\\u0639\\u064A\\u0627\\u0631 ISO\",time:\"\\u0648\\u0642\\u062A \\u0628\\u0645\\u0639\\u064A\\u0627\\u0631 ISO\",duration:\"\\u0645\\u062F\\u0629 \\u0628\\u0645\\u0639\\u064A\\u0627\\u0631 ISO\",ipv4:\"\\u0639\\u0646\\u0648\\u0627\\u0646 IPv4\",ipv6:\"\\u0639\\u0646\\u0648\\u0627\\u0646 IPv6\",cidrv4:\"\\u0645\\u062F\\u0649 \\u0639\\u0646\\u0627\\u0648\\u064A\\u0646 \\u0628\\u0635\\u064A\\u063A\\u0629 IPv4\",cidrv6:\"\\u0645\\u062F\\u0649 \\u0639\\u0646\\u0627\\u0648\\u064A\\u0646 \\u0628\\u0635\\u064A\\u063A\\u0629 IPv6\",base64:\"\\u0646\\u064E\\u0635 \\u0628\\u062A\\u0631\\u0645\\u064A\\u0632 base64-encoded\",base64url:\"\\u0646\\u064E\\u0635 \\u0628\\u062A\\u0631\\u0645\\u064A\\u0632 base64url-encoded\",json_string:\"\\u0646\\u064E\\u0635 \\u0639\\u0644\\u0649 \\u0647\\u064A\\u0626\\u0629 JSON\",e164:\"\\u0631\\u0642\\u0645 \\u0647\\u0627\\u062A\\u0641 \\u0628\\u0645\\u0639\\u064A\\u0627\\u0631 E.164\",jwt:\"JWT\",template_literal:\"\\u0645\\u062F\\u062E\\u0644\"},a={nan:\"NaN\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u0645\\u062F\\u062E\\u0644\\u0627\\u062A \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644\\u0629: \\u064A\\u0641\\u062A\\u0631\\u0636 \\u0625\\u062F\\u062E\\u0627\\u0644 instanceof ${t.expected}\\u060C \\u0648\\u0644\\u0643\\u0646 \\u062A\\u0645 \\u0625\\u062F\\u062E\\u0627\\u0644 ${s}`:`\\u0645\\u062F\\u062E\\u0644\\u0627\\u062A \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644\\u0629: \\u064A\\u0641\\u062A\\u0631\\u0636 \\u0625\\u062F\\u062E\\u0627\\u0644 ${r}\\u060C \\u0648\\u0644\\u0643\\u0646 \\u062A\\u0645 \\u0625\\u062F\\u062E\\u0627\\u0644 ${s}`}case\"invalid_value\":return t.values.length===1?`\\u0645\\u062F\\u062E\\u0644\\u0627\\u062A \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644\\u0629: \\u064A\\u0641\\u062A\\u0631\\u0636 \\u0625\\u062F\\u062E\\u0627\\u0644 ${w(t.values[0])}`:`\\u0627\\u062E\\u062A\\u064A\\u0627\\u0631 \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644: \\u064A\\u062A\\u0648\\u0642\\u0639 \\u0627\\u0646\\u062A\\u0642\\u0627\\u0621 \\u0623\\u062D\\u062F \\u0647\\u0630\\u0647 \\u0627\\u0644\\u062E\\u064A\\u0627\\u0631\\u0627\\u062A: ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?` \\u0623\\u0643\\u0628\\u0631 \\u0645\\u0646 \\u0627\\u0644\\u0644\\u0627\\u0632\\u0645: \\u064A\\u0641\\u062A\\u0631\\u0636 \\u0623\\u0646 \\u062A\\u0643\\u0648\\u0646 ${t.origin??\"\\u0627\\u0644\\u0642\\u064A\\u0645\\u0629\"} ${r} ${t.maximum.toString()} ${o.unit??\"\\u0639\\u0646\\u0635\\u0631\"}`:`\\u0623\\u0643\\u0628\\u0631 \\u0645\\u0646 \\u0627\\u0644\\u0644\\u0627\\u0632\\u0645: \\u064A\\u0641\\u062A\\u0631\\u0636 \\u0623\\u0646 \\u062A\\u0643\\u0648\\u0646 ${t.origin??\"\\u0627\\u0644\\u0642\\u064A\\u0645\\u0629\"} ${r} ${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\u0623\\u0635\\u063A\\u0631 \\u0645\\u0646 \\u0627\\u0644\\u0644\\u0627\\u0632\\u0645: \\u064A\\u0641\\u062A\\u0631\\u0636 \\u0644\\u0640 ${t.origin} \\u0623\\u0646 \\u064A\\u0643\\u0648\\u0646 ${r} ${t.minimum.toString()} ${o.unit}`:`\\u0623\\u0635\\u063A\\u0631 \\u0645\\u0646 \\u0627\\u0644\\u0644\\u0627\\u0632\\u0645: \\u064A\\u0641\\u062A\\u0631\\u0636 \\u0644\\u0640 ${t.origin} \\u0623\\u0646 \\u064A\\u0643\\u0648\\u0646 ${r} ${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u0646\\u064E\\u0635 \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644: \\u064A\\u062C\\u0628 \\u0623\\u0646 \\u064A\\u0628\\u062F\\u0623 \\u0628\\u0640 \"${t.prefix}\"`:r.format===\"ends_with\"?`\\u0646\\u064E\\u0635 \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644: \\u064A\\u062C\\u0628 \\u0623\\u0646 \\u064A\\u0646\\u062A\\u0647\\u064A \\u0628\\u0640 \"${r.suffix}\"`:r.format===\"includes\"?`\\u0646\\u064E\\u0635 \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644: \\u064A\\u062C\\u0628 \\u0623\\u0646 \\u064A\\u062A\\u0636\\u0645\\u0651\\u064E\\u0646 \"${r.includes}\"`:r.format===\"regex\"?`\\u0646\\u064E\\u0635 \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644: \\u064A\\u062C\\u0628 \\u0623\\u0646 \\u064A\\u0637\\u0627\\u0628\\u0642 \\u0627\\u0644\\u0646\\u0645\\u0637 ${r.pattern}`:`${n[r.format]??t.format} \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644`}case\"not_multiple_of\":return`\\u0631\\u0642\\u0645 \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644: \\u064A\\u062C\\u0628 \\u0623\\u0646 \\u064A\\u0643\\u0648\\u0646 \\u0645\\u0646 \\u0645\\u0636\\u0627\\u0639\\u0641\\u0627\\u062A ${t.divisor}`;case\"unrecognized_keys\":return`\\u0645\\u0639\\u0631\\u0641${t.keys.length>1?\"\\u0627\\u062A\":\"\"} \\u063A\\u0631\\u064A\\u0628${t.keys.length>1?\"\\u0629\":\"\"}: ${v(t.keys,\"\\u060C \")}`;case\"invalid_key\":return`\\u0645\\u0639\\u0631\\u0641 \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644 \\u0641\\u064A ${t.origin}`;case\"invalid_union\":return\"\\u0645\\u062F\\u062E\\u0644 \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644\";case\"invalid_element\":return`\\u0645\\u062F\\u062E\\u0644 \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644 \\u0641\\u064A ${t.origin}`;default:return\"\\u0645\\u062F\\u062E\\u0644 \\u063A\\u064A\\u0631 \\u0645\\u0642\\u0628\\u0648\\u0644\"}}},Ep=b(()=>{I()});function Pp(){return{localeError:Rp()}}var Rp=()=>{let e={string:{unit:\"simvol\",verb:\"olmal\\u0131d\\u0131r\"},file:{unit:\"bayt\",verb:\"olmal\\u0131d\\u0131r\"},array:{unit:\"element\",verb:\"olmal\\u0131d\\u0131r\"},set:{unit:\"element\",verb:\"olmal\\u0131d\\u0131r\"}};function i(t){return e[t]??null}let n={regex:\"input\",email:\"email address\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO datetime\",date:\"ISO date\",time:\"ISO time\",duration:\"ISO duration\",ipv4:\"IPv4 address\",ipv6:\"IPv6 address\",cidrv4:\"IPv4 range\",cidrv6:\"IPv6 range\",base64:\"base64-encoded string\",base64url:\"base64url-encoded string\",json_string:\"JSON string\",e164:\"E.164 number\",jwt:\"JWT\",template_literal:\"input\"},a={nan:\"NaN\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Yanl\\u0131\\u015F d\\u0259y\\u0259r: g\\xF6zl\\u0259nil\\u0259n instanceof ${t.expected}, daxil olan ${s}`:`Yanl\\u0131\\u015F d\\u0259y\\u0259r: g\\xF6zl\\u0259nil\\u0259n ${r}, daxil olan ${s}`}case\"invalid_value\":return t.values.length===1?`Yanl\\u0131\\u015F d\\u0259y\\u0259r: g\\xF6zl\\u0259nil\\u0259n ${w(t.values[0])}`:`Yanl\\u0131\\u015F se\\xE7im: a\\u015Fa\\u011F\\u0131dak\\u0131lardan biri olmal\\u0131d\\u0131r: ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\xC7ox b\\xF6y\\xFCk: g\\xF6zl\\u0259nil\\u0259n ${t.origin??\"d\\u0259y\\u0259r\"} ${r}${t.maximum.toString()} ${o.unit??\"element\"}`:`\\xC7ox b\\xF6y\\xFCk: g\\xF6zl\\u0259nil\\u0259n ${t.origin??\"d\\u0259y\\u0259r\"} ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\xC7ox ki\\xE7ik: g\\xF6zl\\u0259nil\\u0259n ${t.origin} ${r}${t.minimum.toString()} ${o.unit}`:`\\xC7ox ki\\xE7ik: g\\xF6zl\\u0259nil\\u0259n ${t.origin} ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Yanl\\u0131\\u015F m\\u0259tn: \"${r.prefix}\" il\\u0259 ba\\u015Flamal\\u0131d\\u0131r`:r.format===\"ends_with\"?`Yanl\\u0131\\u015F m\\u0259tn: \"${r.suffix}\" il\\u0259 bitm\\u0259lidir`:r.format===\"includes\"?`Yanl\\u0131\\u015F m\\u0259tn: \"${r.includes}\" daxil olmal\\u0131d\\u0131r`:r.format===\"regex\"?`Yanl\\u0131\\u015F m\\u0259tn: ${r.pattern} \\u015Fablonuna uy\\u011Fun olmal\\u0131d\\u0131r`:`Yanl\\u0131\\u015F ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Yanl\\u0131\\u015F \\u0259d\\u0259d: ${t.divisor} il\\u0259 b\\xF6l\\xFCn\\u0259 bil\\u0259n olmal\\u0131d\\u0131r`;case\"unrecognized_keys\":return`Tan\\u0131nmayan a\\xE7ar${t.keys.length>1?\"lar\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`${t.origin} daxilind\\u0259 yanl\\u0131\\u015F a\\xE7ar`;case\"invalid_union\":return\"Yanl\\u0131\\u015F d\\u0259y\\u0259r\";case\"invalid_element\":return`${t.origin} daxilind\\u0259 yanl\\u0131\\u015F d\\u0259y\\u0259r`;default:return\"Yanl\\u0131\\u015F d\\u0259y\\u0259r\"}}},Ap=b(()=>{I()});function Ul(e,i,n,a){let t=Math.abs(e),r=t%10,o=t%100;return o>=11&&o<=19?a:r===1?i:r>=2&&r<=4?n:a}function Cp(){return{localeError:Mp()}}var Mp=()=>{let e={string:{unit:{one:\"\\u0441\\u0456\\u043C\\u0432\\u0430\\u043B\",few:\"\\u0441\\u0456\\u043C\\u0432\\u0430\\u043B\\u044B\",many:\"\\u0441\\u0456\\u043C\\u0432\\u0430\\u043B\\u0430\\u045E\"},verb:\"\\u043C\\u0435\\u0446\\u044C\"},array:{unit:{one:\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\",few:\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u044B\",many:\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u0430\\u045E\"},verb:\"\\u043C\\u0435\\u0446\\u044C\"},set:{unit:{one:\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\",few:\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u044B\",many:\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u0430\\u045E\"},verb:\"\\u043C\\u0435\\u0446\\u044C\"},file:{unit:{one:\"\\u0431\\u0430\\u0439\\u0442\",few:\"\\u0431\\u0430\\u0439\\u0442\\u044B\",many:\"\\u0431\\u0430\\u0439\\u0442\\u0430\\u045E\"},verb:\"\\u043C\\u0435\\u0446\\u044C\"}};function i(t){return e[t]??null}let n={regex:\"\\u0443\\u0432\\u043E\\u0434\",email:\"email \\u0430\\u0434\\u0440\\u0430\\u0441\",url:\"URL\",emoji:\"\\u044D\\u043C\\u043E\\u0434\\u0437\\u0456\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO \\u0434\\u0430\\u0442\\u0430 \\u0456 \\u0447\\u0430\\u0441\",date:\"ISO \\u0434\\u0430\\u0442\\u0430\",time:\"ISO \\u0447\\u0430\\u0441\",duration:\"ISO \\u043F\\u0440\\u0430\\u0446\\u044F\\u0433\\u043B\\u0430\\u0441\\u0446\\u044C\",ipv4:\"IPv4 \\u0430\\u0434\\u0440\\u0430\\u0441\",ipv6:\"IPv6 \\u0430\\u0434\\u0440\\u0430\\u0441\",cidrv4:\"IPv4 \\u0434\\u044B\\u044F\\u043F\\u0430\\u0437\\u043E\\u043D\",cidrv6:\"IPv6 \\u0434\\u044B\\u044F\\u043F\\u0430\\u0437\\u043E\\u043D\",base64:\"\\u0440\\u0430\\u0434\\u043E\\u043A \\u0443 \\u0444\\u0430\\u0440\\u043C\\u0430\\u0446\\u0435 base64\",base64url:\"\\u0440\\u0430\\u0434\\u043E\\u043A \\u0443 \\u0444\\u0430\\u0440\\u043C\\u0430\\u0446\\u0435 base64url\",json_string:\"JSON \\u0440\\u0430\\u0434\\u043E\\u043A\",e164:\"\\u043D\\u0443\\u043C\\u0430\\u0440 E.164\",jwt:\"JWT\",template_literal:\"\\u0443\\u0432\\u043E\\u0434\"},a={nan:\"NaN\",number:\"\\u043B\\u0456\\u043A\",array:\"\\u043C\\u0430\\u0441\\u0456\\u045E\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B \\u045E\\u0432\\u043E\\u0434: \\u0447\\u0430\\u043A\\u0430\\u045E\\u0441\\u044F instanceof ${t.expected}, \\u0430\\u0442\\u0440\\u044B\\u043C\\u0430\\u043D\\u0430 ${s}`:`\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B \\u045E\\u0432\\u043E\\u0434: \\u0447\\u0430\\u043A\\u0430\\u045E\\u0441\\u044F ${r}, \\u0430\\u0442\\u0440\\u044B\\u043C\\u0430\\u043D\\u0430 ${s}`}case\"invalid_value\":return t.values.length===1?`\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B \\u045E\\u0432\\u043E\\u0434: \\u0447\\u0430\\u043A\\u0430\\u043B\\u0430\\u0441\\u044F ${w(t.values[0])}`:`\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B \\u0432\\u0430\\u0440\\u044B\\u044F\\u043D\\u0442: \\u0447\\u0430\\u043A\\u0430\\u045E\\u0441\\u044F \\u0430\\u0434\\u0437\\u0456\\u043D \\u0437 ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);if(o){let s=Number(t.maximum),u=Ul(s,o.unit.one,o.unit.few,o.unit.many);return`\\u0417\\u0430\\u043D\\u0430\\u0434\\u0442\\u0430 \\u0432\\u044F\\u043B\\u0456\\u043A\\u0456: \\u0447\\u0430\\u043A\\u0430\\u043B\\u0430\\u0441\\u044F, \\u0448\\u0442\\u043E ${t.origin??\"\\u0437\\u043D\\u0430\\u0447\\u044D\\u043D\\u043D\\u0435\"} \\u043F\\u0430\\u0432\\u0456\\u043D\\u043D\\u0430 ${o.verb} ${r}${t.maximum.toString()} ${u}`}return`\\u0417\\u0430\\u043D\\u0430\\u0434\\u0442\\u0430 \\u0432\\u044F\\u043B\\u0456\\u043A\\u0456: \\u0447\\u0430\\u043A\\u0430\\u043B\\u0430\\u0441\\u044F, \\u0448\\u0442\\u043E ${t.origin??\"\\u0437\\u043D\\u0430\\u0447\\u044D\\u043D\\u043D\\u0435\"} \\u043F\\u0430\\u0432\\u0456\\u043D\\u043D\\u0430 \\u0431\\u044B\\u0446\\u044C ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);if(o){let s=Number(t.minimum),u=Ul(s,o.unit.one,o.unit.few,o.unit.many);return`\\u0417\\u0430\\u043D\\u0430\\u0434\\u0442\\u0430 \\u043C\\u0430\\u043B\\u044B: \\u0447\\u0430\\u043A\\u0430\\u043B\\u0430\\u0441\\u044F, \\u0448\\u0442\\u043E ${t.origin} \\u043F\\u0430\\u0432\\u0456\\u043D\\u043D\\u0430 ${o.verb} ${r}${t.minimum.toString()} ${u}`}return`\\u0417\\u0430\\u043D\\u0430\\u0434\\u0442\\u0430 \\u043C\\u0430\\u043B\\u044B: \\u0447\\u0430\\u043A\\u0430\\u043B\\u0430\\u0441\\u044F, \\u0448\\u0442\\u043E ${t.origin} \\u043F\\u0430\\u0432\\u0456\\u043D\\u043D\\u0430 \\u0431\\u044B\\u0446\\u044C ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B \\u0440\\u0430\\u0434\\u043E\\u043A: \\u043F\\u0430\\u0432\\u0456\\u043D\\u0435\\u043D \\u043F\\u0430\\u0447\\u044B\\u043D\\u0430\\u0446\\u0446\\u0430 \\u0437 \"${r.prefix}\"`:r.format===\"ends_with\"?`\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B \\u0440\\u0430\\u0434\\u043E\\u043A: \\u043F\\u0430\\u0432\\u0456\\u043D\\u0435\\u043D \\u0437\\u0430\\u043A\\u0430\\u043D\\u0447\\u0432\\u0430\\u0446\\u0446\\u0430 \\u043D\\u0430 \"${r.suffix}\"`:r.format===\"includes\"?`\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B \\u0440\\u0430\\u0434\\u043E\\u043A: \\u043F\\u0430\\u0432\\u0456\\u043D\\u0435\\u043D \\u0437\\u043C\\u044F\\u0448\\u0447\\u0430\\u0446\\u044C \"${r.includes}\"`:r.format===\"regex\"?`\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B \\u0440\\u0430\\u0434\\u043E\\u043A: \\u043F\\u0430\\u0432\\u0456\\u043D\\u0435\\u043D \\u0430\\u0434\\u043F\\u0430\\u0432\\u044F\\u0434\\u0430\\u0446\\u044C \\u0448\\u0430\\u0431\\u043B\\u043E\\u043D\\u0443 ${r.pattern}`:`\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B \\u043B\\u0456\\u043A: \\u043F\\u0430\\u0432\\u0456\\u043D\\u0435\\u043D \\u0431\\u044B\\u0446\\u044C \\u043A\\u0440\\u0430\\u0442\\u043D\\u044B\\u043C ${t.divisor}`;case\"unrecognized_keys\":return`\\u041D\\u0435\\u0440\\u0430\\u0441\\u043F\\u0430\\u0437\\u043D\\u0430\\u043D\\u044B ${t.keys.length>1?\"\\u043A\\u043B\\u044E\\u0447\\u044B\":\"\\u043A\\u043B\\u044E\\u0447\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B \\u043A\\u043B\\u044E\\u0447 \\u0443 ${t.origin}`;case\"invalid_union\":return\"\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B \\u045E\\u0432\\u043E\\u0434\";case\"invalid_element\":return`\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u0430\\u0435 \\u0437\\u043D\\u0430\\u0447\\u044D\\u043D\\u043D\\u0435 \\u045E ${t.origin}`;default:return\"\\u041D\\u044F\\u043F\\u0440\\u0430\\u0432\\u0456\\u043B\\u044C\\u043D\\u044B \\u045E\\u0432\\u043E\\u0434\"}}},Lp=b(()=>{I()});function qp(){return{localeError:Jp()}}var Jp=()=>{let e={string:{unit:\"\\u0441\\u0438\\u043C\\u0432\\u043E\\u043B\\u0430\",verb:\"\\u0434\\u0430 \\u0441\\u044A\\u0434\\u044A\\u0440\\u0436\\u0430\"},file:{unit:\"\\u0431\\u0430\\u0439\\u0442\\u0430\",verb:\"\\u0434\\u0430 \\u0441\\u044A\\u0434\\u044A\\u0440\\u0436\\u0430\"},array:{unit:\"\\u0435\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u0430\",verb:\"\\u0434\\u0430 \\u0441\\u044A\\u0434\\u044A\\u0440\\u0436\\u0430\"},set:{unit:\"\\u0435\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u0430\",verb:\"\\u0434\\u0430 \\u0441\\u044A\\u0434\\u044A\\u0440\\u0436\\u0430\"}};function i(t){return e[t]??null}let n={regex:\"\\u0432\\u0445\\u043E\\u0434\",email:\"\\u0438\\u043C\\u0435\\u0439\\u043B \\u0430\\u0434\\u0440\\u0435\\u0441\",url:\"URL\",emoji:\"\\u0435\\u043C\\u043E\\u0434\\u0436\\u0438\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO \\u0432\\u0440\\u0435\\u043C\\u0435\",date:\"ISO \\u0434\\u0430\\u0442\\u0430\",time:\"ISO \\u0432\\u0440\\u0435\\u043C\\u0435\",duration:\"ISO \\u043F\\u0440\\u043E\\u0434\\u044A\\u043B\\u0436\\u0438\\u0442\\u0435\\u043B\\u043D\\u043E\\u0441\\u0442\",ipv4:\"IPv4 \\u0430\\u0434\\u0440\\u0435\\u0441\",ipv6:\"IPv6 \\u0430\\u0434\\u0440\\u0435\\u0441\",cidrv4:\"IPv4 \\u0434\\u0438\\u0430\\u043F\\u0430\\u0437\\u043E\\u043D\",cidrv6:\"IPv6 \\u0434\\u0438\\u0430\\u043F\\u0430\\u0437\\u043E\\u043D\",base64:\"base64-\\u043A\\u043E\\u0434\\u0438\\u0440\\u0430\\u043D \\u043D\\u0438\\u0437\",base64url:\"base64url-\\u043A\\u043E\\u0434\\u0438\\u0440\\u0430\\u043D \\u043D\\u0438\\u0437\",json_string:\"JSON \\u043D\\u0438\\u0437\",e164:\"E.164 \\u043D\\u043E\\u043C\\u0435\\u0440\",jwt:\"JWT\",template_literal:\"\\u0432\\u0445\\u043E\\u0434\"},a={nan:\"NaN\",number:\"\\u0447\\u0438\\u0441\\u043B\\u043E\",array:\"\\u043C\\u0430\\u0441\\u0438\\u0432\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u0435\\u043D \\u0432\\u0445\\u043E\\u0434: \\u043E\\u0447\\u0430\\u043A\\u0432\\u0430\\u043D instanceof ${t.expected}, \\u043F\\u043E\\u043B\\u0443\\u0447\\u0435\\u043D ${s}`:`\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u0435\\u043D \\u0432\\u0445\\u043E\\u0434: \\u043E\\u0447\\u0430\\u043A\\u0432\\u0430\\u043D ${r}, \\u043F\\u043E\\u043B\\u0443\\u0447\\u0435\\u043D ${s}`}case\"invalid_value\":return t.values.length===1?`\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u0435\\u043D \\u0432\\u0445\\u043E\\u0434: \\u043E\\u0447\\u0430\\u043A\\u0432\\u0430\\u043D ${w(t.values[0])}`:`\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u043D\\u0430 \\u043E\\u043F\\u0446\\u0438\\u044F: \\u043E\\u0447\\u0430\\u043A\\u0432\\u0430\\u043D\\u043E \\u0435\\u0434\\u043D\\u043E \\u043E\\u0442 ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\u0422\\u0432\\u044A\\u0440\\u0434\\u0435 \\u0433\\u043E\\u043B\\u044F\\u043C\\u043E: \\u043E\\u0447\\u0430\\u043A\\u0432\\u0430 \\u0441\\u0435 ${t.origin??\"\\u0441\\u0442\\u043E\\u0439\\u043D\\u043E\\u0441\\u0442\"} \\u0434\\u0430 \\u0441\\u044A\\u0434\\u044A\\u0440\\u0436\\u0430 ${r}${t.maximum.toString()} ${o.unit??\"\\u0435\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u0430\"}`:`\\u0422\\u0432\\u044A\\u0440\\u0434\\u0435 \\u0433\\u043E\\u043B\\u044F\\u043C\\u043E: \\u043E\\u0447\\u0430\\u043A\\u0432\\u0430 \\u0441\\u0435 ${t.origin??\"\\u0441\\u0442\\u043E\\u0439\\u043D\\u043E\\u0441\\u0442\"} \\u0434\\u0430 \\u0431\\u044A\\u0434\\u0435 ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\u0422\\u0432\\u044A\\u0440\\u0434\\u0435 \\u043C\\u0430\\u043B\\u043A\\u043E: \\u043E\\u0447\\u0430\\u043A\\u0432\\u0430 \\u0441\\u0435 ${t.origin} \\u0434\\u0430 \\u0441\\u044A\\u0434\\u044A\\u0440\\u0436\\u0430 ${r}${t.minimum.toString()} ${o.unit}`:`\\u0422\\u0432\\u044A\\u0440\\u0434\\u0435 \\u043C\\u0430\\u043B\\u043A\\u043E: \\u043E\\u0447\\u0430\\u043A\\u0432\\u0430 \\u0441\\u0435 ${t.origin} \\u0434\\u0430 \\u0431\\u044A\\u0434\\u0435 ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;if(r.format===\"starts_with\")return`\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u0435\\u043D \\u043D\\u0438\\u0437: \\u0442\\u0440\\u044F\\u0431\\u0432\\u0430 \\u0434\\u0430 \\u0437\\u0430\\u043F\\u043E\\u0447\\u0432\\u0430 \\u0441 \"${r.prefix}\"`;if(r.format===\"ends_with\")return`\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u0435\\u043D \\u043D\\u0438\\u0437: \\u0442\\u0440\\u044F\\u0431\\u0432\\u0430 \\u0434\\u0430 \\u0437\\u0430\\u0432\\u044A\\u0440\\u0448\\u0432\\u0430 \\u0441 \"${r.suffix}\"`;if(r.format===\"includes\")return`\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u0435\\u043D \\u043D\\u0438\\u0437: \\u0442\\u0440\\u044F\\u0431\\u0432\\u0430 \\u0434\\u0430 \\u0432\\u043A\\u043B\\u044E\\u0447\\u0432\\u0430 \"${r.includes}\"`;if(r.format===\"regex\")return`\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u0435\\u043D \\u043D\\u0438\\u0437: \\u0442\\u0440\\u044F\\u0431\\u0432\\u0430 \\u0434\\u0430 \\u0441\\u044A\\u0432\\u043F\\u0430\\u0434\\u0430 \\u0441 ${r.pattern}`;let o=\"\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u0435\\u043D\";return r.format===\"emoji\"&&(o=\"\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u043D\\u043E\"),r.format===\"datetime\"&&(o=\"\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u043D\\u043E\"),r.format===\"date\"&&(o=\"\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u043D\\u0430\"),r.format===\"time\"&&(o=\"\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u043D\\u043E\"),r.format===\"duration\"&&(o=\"\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u043D\\u0430\"),`${o} ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u043D\\u043E \\u0447\\u0438\\u0441\\u043B\\u043E: \\u0442\\u0440\\u044F\\u0431\\u0432\\u0430 \\u0434\\u0430 \\u0431\\u044A\\u0434\\u0435 \\u043A\\u0440\\u0430\\u0442\\u043D\\u043E \\u043D\\u0430 ${t.divisor}`;case\"unrecognized_keys\":return`\\u041D\\u0435\\u0440\\u0430\\u0437\\u043F\\u043E\\u0437\\u043D\\u0430\\u0442${t.keys.length>1?\"\\u0438\":\"\"} \\u043A\\u043B\\u044E\\u0447${t.keys.length>1?\"\\u043E\\u0432\\u0435\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u0435\\u043D \\u043A\\u043B\\u044E\\u0447 \\u0432 ${t.origin}`;case\"invalid_union\":return\"\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u0435\\u043D \\u0432\\u0445\\u043E\\u0434\";case\"invalid_element\":return`\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u043D\\u0430 \\u0441\\u0442\\u043E\\u0439\\u043D\\u043E\\u0441\\u0442 \\u0432 ${t.origin}`;default:return\"\\u041D\\u0435\\u0432\\u0430\\u043B\\u0438\\u0434\\u0435\\u043D \\u0432\\u0445\\u043E\\u0434\"}}},Fp=b(()=>{I()});function Hp(){return{localeError:Wp()}}var Wp=()=>{let e={string:{unit:\"car\\xE0cters\",verb:\"contenir\"},file:{unit:\"bytes\",verb:\"contenir\"},array:{unit:\"elements\",verb:\"contenir\"},set:{unit:\"elements\",verb:\"contenir\"}};function i(t){return e[t]??null}let n={regex:\"entrada\",email:\"adre\\xE7a electr\\xF2nica\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"data i hora ISO\",date:\"data ISO\",time:\"hora ISO\",duration:\"durada ISO\",ipv4:\"adre\\xE7a IPv4\",ipv6:\"adre\\xE7a IPv6\",cidrv4:\"rang IPv4\",cidrv6:\"rang IPv6\",base64:\"cadena codificada en base64\",base64url:\"cadena codificada en base64url\",json_string:\"cadena JSON\",e164:\"n\\xFAmero E.164\",jwt:\"JWT\",template_literal:\"entrada\"},a={nan:\"NaN\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Tipus inv\\xE0lid: s'esperava instanceof ${t.expected}, s'ha rebut ${s}`:`Tipus inv\\xE0lid: s'esperava ${r}, s'ha rebut ${s}`}case\"invalid_value\":return t.values.length===1?`Valor inv\\xE0lid: s'esperava ${w(t.values[0])}`:`Opci\\xF3 inv\\xE0lida: s'esperava una de ${v(t.values,\" o \")}`;case\"too_big\":{let r=t.inclusive?\"com a m\\xE0xim\":\"menys de\",o=i(t.origin);return o?`Massa gran: s'esperava que ${t.origin??\"el valor\"} contingu\\xE9s ${r} ${t.maximum.toString()} ${o.unit??\"elements\"}`:`Massa gran: s'esperava que ${t.origin??\"el valor\"} fos ${r} ${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\"com a m\\xEDnim\":\"m\\xE9s de\",o=i(t.origin);return o?`Massa petit: s'esperava que ${t.origin} contingu\\xE9s ${r} ${t.minimum.toString()} ${o.unit}`:`Massa petit: s'esperava que ${t.origin} fos ${r} ${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Format inv\\xE0lid: ha de comen\\xE7ar amb \"${r.prefix}\"`:r.format===\"ends_with\"?`Format inv\\xE0lid: ha d'acabar amb \"${r.suffix}\"`:r.format===\"includes\"?`Format inv\\xE0lid: ha d'incloure \"${r.includes}\"`:r.format===\"regex\"?`Format inv\\xE0lid: ha de coincidir amb el patr\\xF3 ${r.pattern}`:`Format inv\\xE0lid per a ${n[r.format]??t.format}`}case\"not_multiple_of\":return`N\\xFAmero inv\\xE0lid: ha de ser m\\xFAltiple de ${t.divisor}`;case\"unrecognized_keys\":return`Clau${t.keys.length>1?\"s\":\"\"} no reconeguda${t.keys.length>1?\"s\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Clau inv\\xE0lida a ${t.origin}`;case\"invalid_union\":return\"Entrada inv\\xE0lida\";case\"invalid_element\":return`Element inv\\xE0lid a ${t.origin}`;default:return\"Entrada inv\\xE0lida\"}}},Vp=b(()=>{I()});function Kp(){return{localeError:Bp()}}var Bp=()=>{let e={string:{unit:\"znak\\u016F\",verb:\"m\\xEDt\"},file:{unit:\"bajt\\u016F\",verb:\"m\\xEDt\"},array:{unit:\"prvk\\u016F\",verb:\"m\\xEDt\"},set:{unit:\"prvk\\u016F\",verb:\"m\\xEDt\"}};function i(t){return e[t]??null}let n={regex:\"regul\\xE1rn\\xED v\\xFDraz\",email:\"e-mailov\\xE1 adresa\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"datum a \\u010Das ve form\\xE1tu ISO\",date:\"datum ve form\\xE1tu ISO\",time:\"\\u010Das ve form\\xE1tu ISO\",duration:\"doba trv\\xE1n\\xED ISO\",ipv4:\"IPv4 adresa\",ipv6:\"IPv6 adresa\",cidrv4:\"rozsah IPv4\",cidrv6:\"rozsah IPv6\",base64:\"\\u0159et\\u011Bzec zak\\xF3dovan\\xFD ve form\\xE1tu base64\",base64url:\"\\u0159et\\u011Bzec zak\\xF3dovan\\xFD ve form\\xE1tu base64url\",json_string:\"\\u0159et\\u011Bzec ve form\\xE1tu JSON\",e164:\"\\u010D\\xEDslo E.164\",jwt:\"JWT\",template_literal:\"vstup\"},a={nan:\"NaN\",number:\"\\u010D\\xEDslo\",string:\"\\u0159et\\u011Bzec\",function:\"funkce\",array:\"pole\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Neplatn\\xFD vstup: o\\u010Dek\\xE1v\\xE1no instanceof ${t.expected}, obdr\\u017Eeno ${s}`:`Neplatn\\xFD vstup: o\\u010Dek\\xE1v\\xE1no ${r}, obdr\\u017Eeno ${s}`}case\"invalid_value\":return t.values.length===1?`Neplatn\\xFD vstup: o\\u010Dek\\xE1v\\xE1no ${w(t.values[0])}`:`Neplatn\\xE1 mo\\u017Enost: o\\u010Dek\\xE1v\\xE1na jedna z hodnot ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Hodnota je p\\u0159\\xEDli\\u0161 velk\\xE1: ${t.origin??\"hodnota\"} mus\\xED m\\xEDt ${r}${t.maximum.toString()} ${o.unit??\"prvk\\u016F\"}`:`Hodnota je p\\u0159\\xEDli\\u0161 velk\\xE1: ${t.origin??\"hodnota\"} mus\\xED b\\xFDt ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Hodnota je p\\u0159\\xEDli\\u0161 mal\\xE1: ${t.origin??\"hodnota\"} mus\\xED m\\xEDt ${r}${t.minimum.toString()} ${o.unit??\"prvk\\u016F\"}`:`Hodnota je p\\u0159\\xEDli\\u0161 mal\\xE1: ${t.origin??\"hodnota\"} mus\\xED b\\xFDt ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Neplatn\\xFD \\u0159et\\u011Bzec: mus\\xED za\\u010D\\xEDnat na \"${r.prefix}\"`:r.format===\"ends_with\"?`Neplatn\\xFD \\u0159et\\u011Bzec: mus\\xED kon\\u010Dit na \"${r.suffix}\"`:r.format===\"includes\"?`Neplatn\\xFD \\u0159et\\u011Bzec: mus\\xED obsahovat \"${r.includes}\"`:r.format===\"regex\"?`Neplatn\\xFD \\u0159et\\u011Bzec: mus\\xED odpov\\xEDdat vzoru ${r.pattern}`:`Neplatn\\xFD form\\xE1t ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Neplatn\\xE9 \\u010D\\xEDslo: mus\\xED b\\xFDt n\\xE1sobkem ${t.divisor}`;case\"unrecognized_keys\":return`Nezn\\xE1m\\xE9 kl\\xED\\u010De: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Neplatn\\xFD kl\\xED\\u010D v ${t.origin}`;case\"invalid_union\":return\"Neplatn\\xFD vstup\";case\"invalid_element\":return`Neplatn\\xE1 hodnota v ${t.origin}`;default:return\"Neplatn\\xFD vstup\"}}},Gp=b(()=>{I()});function Xp(){return{localeError:Yp()}}var Yp=()=>{let e={string:{unit:\"tegn\",verb:\"havde\"},file:{unit:\"bytes\",verb:\"havde\"},array:{unit:\"elementer\",verb:\"indeholdt\"},set:{unit:\"elementer\",verb:\"indeholdt\"}};function i(t){return e[t]??null}let n={regex:\"input\",email:\"e-mailadresse\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO dato- og klokkesl\\xE6t\",date:\"ISO-dato\",time:\"ISO-klokkesl\\xE6t\",duration:\"ISO-varighed\",ipv4:\"IPv4-omr\\xE5de\",ipv6:\"IPv6-omr\\xE5de\",cidrv4:\"IPv4-spektrum\",cidrv6:\"IPv6-spektrum\",base64:\"base64-kodet streng\",base64url:\"base64url-kodet streng\",json_string:\"JSON-streng\",e164:\"E.164-nummer\",jwt:\"JWT\",template_literal:\"input\"},a={nan:\"NaN\",string:\"streng\",number:\"tal\",boolean:\"boolean\",array:\"liste\",object:\"objekt\",set:\"s\\xE6t\",file:\"fil\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Ugyldigt input: forventede instanceof ${t.expected}, fik ${s}`:`Ugyldigt input: forventede ${r}, fik ${s}`}case\"invalid_value\":return t.values.length===1?`Ugyldig v\\xE6rdi: forventede ${w(t.values[0])}`:`Ugyldigt valg: forventede en af f\\xF8lgende ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin),s=a[t.origin]??t.origin;return o?`For stor: forventede ${s??\"value\"} ${o.verb} ${r} ${t.maximum.toString()} ${o.unit??\"elementer\"}`:`For stor: forventede ${s??\"value\"} havde ${r} ${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin),s=a[t.origin]??t.origin;return o?`For lille: forventede ${s} ${o.verb} ${r} ${t.minimum.toString()} ${o.unit}`:`For lille: forventede ${s} havde ${r} ${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Ugyldig streng: skal starte med \"${r.prefix}\"`:r.format===\"ends_with\"?`Ugyldig streng: skal ende med \"${r.suffix}\"`:r.format===\"includes\"?`Ugyldig streng: skal indeholde \"${r.includes}\"`:r.format===\"regex\"?`Ugyldig streng: skal matche m\\xF8nsteret ${r.pattern}`:`Ugyldig ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Ugyldigt tal: skal v\\xE6re deleligt med ${t.divisor}`;case\"unrecognized_keys\":return`${t.keys.length>1?\"Ukendte n\\xF8gler\":\"Ukendt n\\xF8gle\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Ugyldig n\\xF8gle i ${t.origin}`;case\"invalid_union\":return\"Ugyldigt input: matcher ingen af de tilladte typer\";case\"invalid_element\":return`Ugyldig v\\xE6rdi i ${t.origin}`;default:return\"Ugyldigt input\"}}},Qp=b(()=>{I()});function ef(){return{localeError:tf()}}var tf=()=>{let e={string:{unit:\"Zeichen\",verb:\"zu haben\"},file:{unit:\"Bytes\",verb:\"zu haben\"},array:{unit:\"Elemente\",verb:\"zu haben\"},set:{unit:\"Elemente\",verb:\"zu haben\"}};function i(t){return e[t]??null}let n={regex:\"Eingabe\",email:\"E-Mail-Adresse\",url:\"URL\",emoji:\"Emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO-Datum und -Uhrzeit\",date:\"ISO-Datum\",time:\"ISO-Uhrzeit\",duration:\"ISO-Dauer\",ipv4:\"IPv4-Adresse\",ipv6:\"IPv6-Adresse\",cidrv4:\"IPv4-Bereich\",cidrv6:\"IPv6-Bereich\",base64:\"Base64-codierter String\",base64url:\"Base64-URL-codierter String\",json_string:\"JSON-String\",e164:\"E.164-Nummer\",jwt:\"JWT\",template_literal:\"Eingabe\"},a={nan:\"NaN\",number:\"Zahl\",array:\"Array\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Ung\\xFCltige Eingabe: erwartet instanceof ${t.expected}, erhalten ${s}`:`Ung\\xFCltige Eingabe: erwartet ${r}, erhalten ${s}`}case\"invalid_value\":return t.values.length===1?`Ung\\xFCltige Eingabe: erwartet ${w(t.values[0])}`:`Ung\\xFCltige Option: erwartet eine von ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Zu gro\\xDF: erwartet, dass ${t.origin??\"Wert\"} ${r}${t.maximum.toString()} ${o.unit??\"Elemente\"} hat`:`Zu gro\\xDF: erwartet, dass ${t.origin??\"Wert\"} ${r}${t.maximum.toString()} ist`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Zu klein: erwartet, dass ${t.origin} ${r}${t.minimum.toString()} ${o.unit} hat`:`Zu klein: erwartet, dass ${t.origin} ${r}${t.minimum.toString()} ist`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Ung\\xFCltiger String: muss mit \"${r.prefix}\" beginnen`:r.format===\"ends_with\"?`Ung\\xFCltiger String: muss mit \"${r.suffix}\" enden`:r.format===\"includes\"?`Ung\\xFCltiger String: muss \"${r.includes}\" enthalten`:r.format===\"regex\"?`Ung\\xFCltiger String: muss dem Muster ${r.pattern} entsprechen`:`Ung\\xFCltig: ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Ung\\xFCltige Zahl: muss ein Vielfaches von ${t.divisor} sein`;case\"unrecognized_keys\":return`${t.keys.length>1?\"Unbekannte Schl\\xFCssel\":\"Unbekannter Schl\\xFCssel\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Ung\\xFCltiger Schl\\xFCssel in ${t.origin}`;case\"invalid_union\":return\"Ung\\xFCltige Eingabe\";case\"invalid_element\":return`Ung\\xFCltiger Wert in ${t.origin}`;default:return\"Ung\\xFCltige Eingabe\"}}},nf=b(()=>{I()});function Jd(){return{localeError:rf()}}var rf=()=>{let e={string:{unit:\"characters\",verb:\"to have\"},file:{unit:\"bytes\",verb:\"to have\"},array:{unit:\"items\",verb:\"to have\"},set:{unit:\"items\",verb:\"to have\"},map:{unit:\"entries\",verb:\"to have\"}};function i(t){return e[t]??null}let n={regex:\"input\",email:\"email address\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO datetime\",date:\"ISO date\",time:\"ISO time\",duration:\"ISO duration\",ipv4:\"IPv4 address\",ipv6:\"IPv6 address\",mac:\"MAC address\",cidrv4:\"IPv4 range\",cidrv6:\"IPv6 range\",base64:\"base64-encoded string\",base64url:\"base64url-encoded string\",json_string:\"JSON string\",e164:\"E.164 number\",jwt:\"JWT\",template_literal:\"input\"},a={nan:\"NaN\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return`Invalid input: expected ${r}, received ${s}`}case\"invalid_value\":return t.values.length===1?`Invalid input: expected ${w(t.values[0])}`:`Invalid option: expected one of ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Too big: expected ${t.origin??\"value\"} to have ${r}${t.maximum.toString()} ${o.unit??\"elements\"}`:`Too big: expected ${t.origin??\"value\"} to be ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Too small: expected ${t.origin} to have ${r}${t.minimum.toString()} ${o.unit}`:`Too small: expected ${t.origin} to be ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Invalid string: must start with \"${r.prefix}\"`:r.format===\"ends_with\"?`Invalid string: must end with \"${r.suffix}\"`:r.format===\"includes\"?`Invalid string: must include \"${r.includes}\"`:r.format===\"regex\"?`Invalid string: must match pattern ${r.pattern}`:`Invalid ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Invalid number: must be a multiple of ${t.divisor}`;case\"unrecognized_keys\":return`Unrecognized key${t.keys.length>1?\"s\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Invalid key in ${t.origin}`;case\"invalid_union\":return\"Invalid input\";case\"invalid_element\":return`Invalid value in ${t.origin}`;default:return\"Invalid input\"}}},Fd=b(()=>{I()});function af(){return{localeError:of()}}var of=()=>{let e={string:{unit:\"karaktrojn\",verb:\"havi\"},file:{unit:\"bajtojn\",verb:\"havi\"},array:{unit:\"elementojn\",verb:\"havi\"},set:{unit:\"elementojn\",verb:\"havi\"}};function i(t){return e[t]??null}let n={regex:\"enigo\",email:\"retadreso\",url:\"URL\",emoji:\"emo\\u011Dio\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO-datotempo\",date:\"ISO-dato\",time:\"ISO-tempo\",duration:\"ISO-da\\u016Dro\",ipv4:\"IPv4-adreso\",ipv6:\"IPv6-adreso\",cidrv4:\"IPv4-rango\",cidrv6:\"IPv6-rango\",base64:\"64-ume kodita karaktraro\",base64url:\"URL-64-ume kodita karaktraro\",json_string:\"JSON-karaktraro\",e164:\"E.164-nombro\",jwt:\"JWT\",template_literal:\"enigo\"},a={nan:\"NaN\",number:\"nombro\",array:\"tabelo\",null:\"senvalora\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Nevalida enigo: atendi\\u011Dis instanceof ${t.expected}, ricevi\\u011Dis ${s}`:`Nevalida enigo: atendi\\u011Dis ${r}, ricevi\\u011Dis ${s}`}case\"invalid_value\":return t.values.length===1?`Nevalida enigo: atendi\\u011Dis ${w(t.values[0])}`:`Nevalida opcio: atendi\\u011Dis unu el ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Tro granda: atendi\\u011Dis ke ${t.origin??\"valoro\"} havu ${r}${t.maximum.toString()} ${o.unit??\"elementojn\"}`:`Tro granda: atendi\\u011Dis ke ${t.origin??\"valoro\"} havu ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Tro malgranda: atendi\\u011Dis ke ${t.origin} havu ${r}${t.minimum.toString()} ${o.unit}`:`Tro malgranda: atendi\\u011Dis ke ${t.origin} estu ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Nevalida karaktraro: devas komenci\\u011Di per \"${r.prefix}\"`:r.format===\"ends_with\"?`Nevalida karaktraro: devas fini\\u011Di per \"${r.suffix}\"`:r.format===\"includes\"?`Nevalida karaktraro: devas inkluzivi \"${r.includes}\"`:r.format===\"regex\"?`Nevalida karaktraro: devas kongrui kun la modelo ${r.pattern}`:`Nevalida ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Nevalida nombro: devas esti oblo de ${t.divisor}`;case\"unrecognized_keys\":return`Nekonata${t.keys.length>1?\"j\":\"\"} \\u015Dlosilo${t.keys.length>1?\"j\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Nevalida \\u015Dlosilo en ${t.origin}`;case\"invalid_union\":return\"Nevalida enigo\";case\"invalid_element\":return`Nevalida valoro en ${t.origin}`;default:return\"Nevalida enigo\"}}},sf=b(()=>{I()});function uf(){return{localeError:lf()}}var lf=()=>{let e={string:{unit:\"caracteres\",verb:\"tener\"},file:{unit:\"bytes\",verb:\"tener\"},array:{unit:\"elementos\",verb:\"tener\"},set:{unit:\"elementos\",verb:\"tener\"}};function i(t){return e[t]??null}let n={regex:\"entrada\",email:\"direcci\\xF3n de correo electr\\xF3nico\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"fecha y hora ISO\",date:\"fecha ISO\",time:\"hora ISO\",duration:\"duraci\\xF3n ISO\",ipv4:\"direcci\\xF3n IPv4\",ipv6:\"direcci\\xF3n IPv6\",cidrv4:\"rango IPv4\",cidrv6:\"rango IPv6\",base64:\"cadena codificada en base64\",base64url:\"URL codificada en base64\",json_string:\"cadena JSON\",e164:\"n\\xFAmero E.164\",jwt:\"JWT\",template_literal:\"entrada\"},a={nan:\"NaN\",string:\"texto\",number:\"n\\xFAmero\",boolean:\"booleano\",array:\"arreglo\",object:\"objeto\",set:\"conjunto\",file:\"archivo\",date:\"fecha\",bigint:\"n\\xFAmero grande\",symbol:\"s\\xEDmbolo\",undefined:\"indefinido\",null:\"nulo\",function:\"funci\\xF3n\",map:\"mapa\",record:\"registro\",tuple:\"tupla\",enum:\"enumeraci\\xF3n\",union:\"uni\\xF3n\",literal:\"literal\",promise:\"promesa\",void:\"vac\\xEDo\",never:\"nunca\",unknown:\"desconocido\",any:\"cualquiera\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Entrada inv\\xE1lida: se esperaba instanceof ${t.expected}, recibido ${s}`:`Entrada inv\\xE1lida: se esperaba ${r}, recibido ${s}`}case\"invalid_value\":return t.values.length===1?`Entrada inv\\xE1lida: se esperaba ${w(t.values[0])}`:`Opci\\xF3n inv\\xE1lida: se esperaba una de ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin),s=a[t.origin]??t.origin;return o?`Demasiado grande: se esperaba que ${s??\"valor\"} tuviera ${r}${t.maximum.toString()} ${o.unit??\"elementos\"}`:`Demasiado grande: se esperaba que ${s??\"valor\"} fuera ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin),s=a[t.origin]??t.origin;return o?`Demasiado peque\\xF1o: se esperaba que ${s} tuviera ${r}${t.minimum.toString()} ${o.unit}`:`Demasiado peque\\xF1o: se esperaba que ${s} fuera ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Cadena inv\\xE1lida: debe comenzar con \"${r.prefix}\"`:r.format===\"ends_with\"?`Cadena inv\\xE1lida: debe terminar en \"${r.suffix}\"`:r.format===\"includes\"?`Cadena inv\\xE1lida: debe incluir \"${r.includes}\"`:r.format===\"regex\"?`Cadena inv\\xE1lida: debe coincidir con el patr\\xF3n ${r.pattern}`:`Inv\\xE1lido ${n[r.format]??t.format}`}case\"not_multiple_of\":return`N\\xFAmero inv\\xE1lido: debe ser m\\xFAltiplo de ${t.divisor}`;case\"unrecognized_keys\":return`Llave${t.keys.length>1?\"s\":\"\"} desconocida${t.keys.length>1?\"s\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Llave inv\\xE1lida en ${a[t.origin]??t.origin}`;case\"invalid_union\":return\"Entrada inv\\xE1lida\";case\"invalid_element\":return`Valor inv\\xE1lido en ${a[t.origin]??t.origin}`;default:return\"Entrada inv\\xE1lida\"}}},df=b(()=>{I()});function cf(){return{localeError:mf()}}var mf=()=>{let e={string:{unit:\"\\u06A9\\u0627\\u0631\\u0627\\u06A9\\u062A\\u0631\",verb:\"\\u062F\\u0627\\u0634\\u062A\\u0647 \\u0628\\u0627\\u0634\\u062F\"},file:{unit:\"\\u0628\\u0627\\u06CC\\u062A\",verb:\"\\u062F\\u0627\\u0634\\u062A\\u0647 \\u0628\\u0627\\u0634\\u062F\"},array:{unit:\"\\u0622\\u06CC\\u062A\\u0645\",verb:\"\\u062F\\u0627\\u0634\\u062A\\u0647 \\u0628\\u0627\\u0634\\u062F\"},set:{unit:\"\\u0622\\u06CC\\u062A\\u0645\",verb:\"\\u062F\\u0627\\u0634\\u062A\\u0647 \\u0628\\u0627\\u0634\\u062F\"}};function i(t){return e[t]??null}let n={regex:\"\\u0648\\u0631\\u0648\\u062F\\u06CC\",email:\"\\u0622\\u062F\\u0631\\u0633 \\u0627\\u06CC\\u0645\\u06CC\\u0644\",url:\"URL\",emoji:\"\\u0627\\u06CC\\u0645\\u0648\\u062C\\u06CC\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"\\u062A\\u0627\\u0631\\u06CC\\u062E \\u0648 \\u0632\\u0645\\u0627\\u0646 \\u0627\\u06CC\\u0632\\u0648\",date:\"\\u062A\\u0627\\u0631\\u06CC\\u062E \\u0627\\u06CC\\u0632\\u0648\",time:\"\\u0632\\u0645\\u0627\\u0646 \\u0627\\u06CC\\u0632\\u0648\",duration:\"\\u0645\\u062F\\u062A \\u0632\\u0645\\u0627\\u0646 \\u0627\\u06CC\\u0632\\u0648\",ipv4:\"IPv4 \\u0622\\u062F\\u0631\\u0633\",ipv6:\"IPv6 \\u0622\\u062F\\u0631\\u0633\",cidrv4:\"IPv4 \\u062F\\u0627\\u0645\\u0646\\u0647\",cidrv6:\"IPv6 \\u062F\\u0627\\u0645\\u0646\\u0647\",base64:\"base64-encoded \\u0631\\u0634\\u062A\\u0647\",base64url:\"base64url-encoded \\u0631\\u0634\\u062A\\u0647\",json_string:\"JSON \\u0631\\u0634\\u062A\\u0647\",e164:\"E.164 \\u0639\\u062F\\u062F\",jwt:\"JWT\",template_literal:\"\\u0648\\u0631\\u0648\\u062F\\u06CC\"},a={nan:\"NaN\",number:\"\\u0639\\u062F\\u062F\",array:\"\\u0622\\u0631\\u0627\\u06CC\\u0647\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u0648\\u0631\\u0648\\u062F\\u06CC \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631: \\u0645\\u06CC\\u200C\\u0628\\u0627\\u06CC\\u0633\\u062A instanceof ${t.expected} \\u0645\\u06CC\\u200C\\u0628\\u0648\\u062F\\u060C ${s} \\u062F\\u0631\\u06CC\\u0627\\u0641\\u062A \\u0634\\u062F`:`\\u0648\\u0631\\u0648\\u062F\\u06CC \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631: \\u0645\\u06CC\\u200C\\u0628\\u0627\\u06CC\\u0633\\u062A ${r} \\u0645\\u06CC\\u200C\\u0628\\u0648\\u062F\\u060C ${s} \\u062F\\u0631\\u06CC\\u0627\\u0641\\u062A \\u0634\\u062F`}case\"invalid_value\":return t.values.length===1?`\\u0648\\u0631\\u0648\\u062F\\u06CC \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631: \\u0645\\u06CC\\u200C\\u0628\\u0627\\u06CC\\u0633\\u062A ${w(t.values[0])} \\u0645\\u06CC\\u200C\\u0628\\u0648\\u062F`:`\\u06AF\\u0632\\u06CC\\u0646\\u0647 \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631: \\u0645\\u06CC\\u200C\\u0628\\u0627\\u06CC\\u0633\\u062A \\u06CC\\u06A9\\u06CC \\u0627\\u0632 ${v(t.values,\"|\")} \\u0645\\u06CC\\u200C\\u0628\\u0648\\u062F`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\u062E\\u06CC\\u0644\\u06CC \\u0628\\u0632\\u0631\\u06AF: ${t.origin??\"\\u0645\\u0642\\u062F\\u0627\\u0631\"} \\u0628\\u0627\\u06CC\\u062F ${r}${t.maximum.toString()} ${o.unit??\"\\u0639\\u0646\\u0635\\u0631\"} \\u0628\\u0627\\u0634\\u062F`:`\\u062E\\u06CC\\u0644\\u06CC \\u0628\\u0632\\u0631\\u06AF: ${t.origin??\"\\u0645\\u0642\\u062F\\u0627\\u0631\"} \\u0628\\u0627\\u06CC\\u062F ${r}${t.maximum.toString()} \\u0628\\u0627\\u0634\\u062F`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\u062E\\u06CC\\u0644\\u06CC \\u06A9\\u0648\\u0686\\u06A9: ${t.origin} \\u0628\\u0627\\u06CC\\u062F ${r}${t.minimum.toString()} ${o.unit} \\u0628\\u0627\\u0634\\u062F`:`\\u062E\\u06CC\\u0644\\u06CC \\u06A9\\u0648\\u0686\\u06A9: ${t.origin} \\u0628\\u0627\\u06CC\\u062F ${r}${t.minimum.toString()} \\u0628\\u0627\\u0634\\u062F`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u0631\\u0634\\u062A\\u0647 \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631: \\u0628\\u0627\\u06CC\\u062F \\u0628\\u0627 \"${r.prefix}\" \\u0634\\u0631\\u0648\\u0639 \\u0634\\u0648\\u062F`:r.format===\"ends_with\"?`\\u0631\\u0634\\u062A\\u0647 \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631: \\u0628\\u0627\\u06CC\\u062F \\u0628\\u0627 \"${r.suffix}\" \\u062A\\u0645\\u0627\\u0645 \\u0634\\u0648\\u062F`:r.format===\"includes\"?`\\u0631\\u0634\\u062A\\u0647 \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631: \\u0628\\u0627\\u06CC\\u062F \\u0634\\u0627\\u0645\\u0644 \"${r.includes}\" \\u0628\\u0627\\u0634\\u062F`:r.format===\"regex\"?`\\u0631\\u0634\\u062A\\u0647 \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631: \\u0628\\u0627\\u06CC\\u062F \\u0628\\u0627 \\u0627\\u0644\\u06AF\\u0648\\u06CC ${r.pattern} \\u0645\\u0637\\u0627\\u0628\\u0642\\u062A \\u062F\\u0627\\u0634\\u062A\\u0647 \\u0628\\u0627\\u0634\\u062F`:`${n[r.format]??t.format} \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631`}case\"not_multiple_of\":return`\\u0639\\u062F\\u062F \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631: \\u0628\\u0627\\u06CC\\u062F \\u0645\\u0636\\u0631\\u0628 ${t.divisor} \\u0628\\u0627\\u0634\\u062F`;case\"unrecognized_keys\":return`\\u06A9\\u0644\\u06CC\\u062F${t.keys.length>1?\"\\u0647\\u0627\\u06CC\":\"\"} \\u0646\\u0627\\u0634\\u0646\\u0627\\u0633: ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\u06A9\\u0644\\u06CC\\u062F \\u0646\\u0627\\u0634\\u0646\\u0627\\u0633 \\u062F\\u0631 ${t.origin}`;case\"invalid_union\":return\"\\u0648\\u0631\\u0648\\u062F\\u06CC \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631\";case\"invalid_element\":return`\\u0645\\u0642\\u062F\\u0627\\u0631 \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631 \\u062F\\u0631 ${t.origin}`;default:return\"\\u0648\\u0631\\u0648\\u062F\\u06CC \\u0646\\u0627\\u0645\\u0639\\u062A\\u0628\\u0631\"}}},pf=b(()=>{I()});function ff(){return{localeError:gf()}}var gf=()=>{let e={string:{unit:\"merkki\\xE4\",subject:\"merkkijonon\"},file:{unit:\"tavua\",subject:\"tiedoston\"},array:{unit:\"alkiota\",subject:\"listan\"},set:{unit:\"alkiota\",subject:\"joukon\"},number:{unit:\"\",subject:\"luvun\"},bigint:{unit:\"\",subject:\"suuren kokonaisluvun\"},int:{unit:\"\",subject:\"kokonaisluvun\"},date:{unit:\"\",subject:\"p\\xE4iv\\xE4m\\xE4\\xE4r\\xE4n\"}};function i(t){return e[t]??null}let n={regex:\"s\\xE4\\xE4nn\\xF6llinen lauseke\",email:\"s\\xE4hk\\xF6postiosoite\",url:\"URL-osoite\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO-aikaleima\",date:\"ISO-p\\xE4iv\\xE4m\\xE4\\xE4r\\xE4\",time:\"ISO-aika\",duration:\"ISO-kesto\",ipv4:\"IPv4-osoite\",ipv6:\"IPv6-osoite\",cidrv4:\"IPv4-alue\",cidrv6:\"IPv6-alue\",base64:\"base64-koodattu merkkijono\",base64url:\"base64url-koodattu merkkijono\",json_string:\"JSON-merkkijono\",e164:\"E.164-luku\",jwt:\"JWT\",template_literal:\"templaattimerkkijono\"},a={nan:\"NaN\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Virheellinen tyyppi: odotettiin instanceof ${t.expected}, oli ${s}`:`Virheellinen tyyppi: odotettiin ${r}, oli ${s}`}case\"invalid_value\":return t.values.length===1?`Virheellinen sy\\xF6te: t\\xE4ytyy olla ${w(t.values[0])}`:`Virheellinen valinta: t\\xE4ytyy olla yksi seuraavista: ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Liian suuri: ${o.subject} t\\xE4ytyy olla ${r}${t.maximum.toString()} ${o.unit}`.trim():`Liian suuri: arvon t\\xE4ytyy olla ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Liian pieni: ${o.subject} t\\xE4ytyy olla ${r}${t.minimum.toString()} ${o.unit}`.trim():`Liian pieni: arvon t\\xE4ytyy olla ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Virheellinen sy\\xF6te: t\\xE4ytyy alkaa \"${r.prefix}\"`:r.format===\"ends_with\"?`Virheellinen sy\\xF6te: t\\xE4ytyy loppua \"${r.suffix}\"`:r.format===\"includes\"?`Virheellinen sy\\xF6te: t\\xE4ytyy sis\\xE4lt\\xE4\\xE4 \"${r.includes}\"`:r.format===\"regex\"?`Virheellinen sy\\xF6te: t\\xE4ytyy vastata s\\xE4\\xE4nn\\xF6llist\\xE4 lauseketta ${r.pattern}`:`Virheellinen ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Virheellinen luku: t\\xE4ytyy olla luvun ${t.divisor} monikerta`;case\"unrecognized_keys\":return`${t.keys.length>1?\"Tuntemattomat avaimet\":\"Tuntematon avain\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return\"Virheellinen avain tietueessa\";case\"invalid_union\":return\"Virheellinen unioni\";case\"invalid_element\":return\"Virheellinen arvo joukossa\";default:return\"Virheellinen sy\\xF6te\"}}},vf=b(()=>{I()});function hf(){return{localeError:$f()}}var $f=()=>{let e={string:{unit:\"caract\\xE8res\",verb:\"avoir\"},file:{unit:\"octets\",verb:\"avoir\"},array:{unit:\"\\xE9l\\xE9ments\",verb:\"avoir\"},set:{unit:\"\\xE9l\\xE9ments\",verb:\"avoir\"}};function i(t){return e[t]??null}let n={regex:\"entr\\xE9e\",email:\"adresse e-mail\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"date et heure ISO\",date:\"date ISO\",time:\"heure ISO\",duration:\"dur\\xE9e ISO\",ipv4:\"adresse IPv4\",ipv6:\"adresse IPv6\",cidrv4:\"plage IPv4\",cidrv6:\"plage IPv6\",base64:\"cha\\xEEne encod\\xE9e en base64\",base64url:\"cha\\xEEne encod\\xE9e en base64url\",json_string:\"cha\\xEEne JSON\",e164:\"num\\xE9ro E.164\",jwt:\"JWT\",template_literal:\"entr\\xE9e\"},a={nan:\"NaN\",number:\"nombre\",array:\"tableau\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Entr\\xE9e invalide : instanceof ${t.expected} attendu, ${s} re\\xE7u`:`Entr\\xE9e invalide : ${r} attendu, ${s} re\\xE7u`}case\"invalid_value\":return t.values.length===1?`Entr\\xE9e invalide : ${w(t.values[0])} attendu`:`Option invalide : une valeur parmi ${v(t.values,\"|\")} attendue`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Trop grand : ${t.origin??\"valeur\"} doit ${o.verb} ${r}${t.maximum.toString()} ${o.unit??\"\\xE9l\\xE9ment(s)\"}`:`Trop grand : ${t.origin??\"valeur\"} doit \\xEAtre ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Trop petit : ${t.origin} doit ${o.verb} ${r}${t.minimum.toString()} ${o.unit}`:`Trop petit : ${t.origin} doit \\xEAtre ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Cha\\xEEne invalide : doit commencer par \"${r.prefix}\"`:r.format===\"ends_with\"?`Cha\\xEEne invalide : doit se terminer par \"${r.suffix}\"`:r.format===\"includes\"?`Cha\\xEEne invalide : doit inclure \"${r.includes}\"`:r.format===\"regex\"?`Cha\\xEEne invalide : doit correspondre au mod\\xE8le ${r.pattern}`:`${n[r.format]??t.format} invalide`}case\"not_multiple_of\":return`Nombre invalide : doit \\xEAtre un multiple de ${t.divisor}`;case\"unrecognized_keys\":return`Cl\\xE9${t.keys.length>1?\"s\":\"\"} non reconnue${t.keys.length>1?\"s\":\"\"} : ${v(t.keys,\", \")}`;case\"invalid_key\":return`Cl\\xE9 invalide dans ${t.origin}`;case\"invalid_union\":return\"Entr\\xE9e invalide\";case\"invalid_element\":return`Valeur invalide dans ${t.origin}`;default:return\"Entr\\xE9e invalide\"}}},bf=b(()=>{I()});function _f(){return{localeError:yf()}}var yf=()=>{let e={string:{unit:\"caract\\xE8res\",verb:\"avoir\"},file:{unit:\"octets\",verb:\"avoir\"},array:{unit:\"\\xE9l\\xE9ments\",verb:\"avoir\"},set:{unit:\"\\xE9l\\xE9ments\",verb:\"avoir\"}};function i(t){return e[t]??null}let n={regex:\"entr\\xE9e\",email:\"adresse courriel\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"date-heure ISO\",date:\"date ISO\",time:\"heure ISO\",duration:\"dur\\xE9e ISO\",ipv4:\"adresse IPv4\",ipv6:\"adresse IPv6\",cidrv4:\"plage IPv4\",cidrv6:\"plage IPv6\",base64:\"cha\\xEEne encod\\xE9e en base64\",base64url:\"cha\\xEEne encod\\xE9e en base64url\",json_string:\"cha\\xEEne JSON\",e164:\"num\\xE9ro E.164\",jwt:\"JWT\",template_literal:\"entr\\xE9e\"},a={nan:\"NaN\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Entr\\xE9e invalide : attendu instanceof ${t.expected}, re\\xE7u ${s}`:`Entr\\xE9e invalide : attendu ${r}, re\\xE7u ${s}`}case\"invalid_value\":return t.values.length===1?`Entr\\xE9e invalide : attendu ${w(t.values[0])}`:`Option invalide : attendu l'une des valeurs suivantes ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"\\u2264\":\"<\",o=i(t.origin);return o?`Trop grand : attendu que ${t.origin??\"la valeur\"} ait ${r}${t.maximum.toString()} ${o.unit}`:`Trop grand : attendu que ${t.origin??\"la valeur\"} soit ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\"\\u2265\":\">\",o=i(t.origin);return o?`Trop petit : attendu que ${t.origin} ait ${r}${t.minimum.toString()} ${o.unit}`:`Trop petit : attendu que ${t.origin} soit ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Cha\\xEEne invalide : doit commencer par \"${r.prefix}\"`:r.format===\"ends_with\"?`Cha\\xEEne invalide : doit se terminer par \"${r.suffix}\"`:r.format===\"includes\"?`Cha\\xEEne invalide : doit inclure \"${r.includes}\"`:r.format===\"regex\"?`Cha\\xEEne invalide : doit correspondre au motif ${r.pattern}`:`${n[r.format]??t.format} invalide`}case\"not_multiple_of\":return`Nombre invalide : doit \\xEAtre un multiple de ${t.divisor}`;case\"unrecognized_keys\":return`Cl\\xE9${t.keys.length>1?\"s\":\"\"} non reconnue${t.keys.length>1?\"s\":\"\"} : ${v(t.keys,\", \")}`;case\"invalid_key\":return`Cl\\xE9 invalide dans ${t.origin}`;case\"invalid_union\":return\"Entr\\xE9e invalide\";case\"invalid_element\":return`Valeur invalide dans ${t.origin}`;default:return\"Entr\\xE9e invalide\"}}},kf=b(()=>{I()});function If(){return{localeError:wf()}}var wf=()=>{let e={string:{label:\"\\u05DE\\u05D7\\u05E8\\u05D5\\u05D6\\u05EA\",gender:\"f\"},number:{label:\"\\u05DE\\u05E1\\u05E4\\u05E8\",gender:\"m\"},boolean:{label:\"\\u05E2\\u05E8\\u05DA \\u05D1\\u05D5\\u05DC\\u05D9\\u05D0\\u05E0\\u05D9\",gender:\"m\"},bigint:{label:\"BigInt\",gender:\"m\"},date:{label:\"\\u05EA\\u05D0\\u05E8\\u05D9\\u05DA\",gender:\"m\"},array:{label:\"\\u05DE\\u05E2\\u05E8\\u05DA\",gender:\"m\"},object:{label:\"\\u05D0\\u05D5\\u05D1\\u05D9\\u05D9\\u05E7\\u05D8\",gender:\"m\"},null:{label:\"\\u05E2\\u05E8\\u05DA \\u05E8\\u05D9\\u05E7 (null)\",gender:\"m\"},undefined:{label:\"\\u05E2\\u05E8\\u05DA \\u05DC\\u05D0 \\u05DE\\u05D5\\u05D2\\u05D3\\u05E8 (undefined)\",gender:\"m\"},symbol:{label:\"\\u05E1\\u05D9\\u05DE\\u05D1\\u05D5\\u05DC (Symbol)\",gender:\"m\"},function:{label:\"\\u05E4\\u05D5\\u05E0\\u05E7\\u05E6\\u05D9\\u05D4\",gender:\"f\"},map:{label:\"\\u05DE\\u05E4\\u05D4 (Map)\",gender:\"f\"},set:{label:\"\\u05E7\\u05D1\\u05D5\\u05E6\\u05D4 (Set)\",gender:\"f\"},file:{label:\"\\u05E7\\u05D5\\u05D1\\u05E5\",gender:\"m\"},promise:{label:\"Promise\",gender:\"m\"},NaN:{label:\"NaN\",gender:\"m\"},unknown:{label:\"\\u05E2\\u05E8\\u05DA \\u05DC\\u05D0 \\u05D9\\u05D3\\u05D5\\u05E2\",gender:\"m\"},value:{label:\"\\u05E2\\u05E8\\u05DA\",gender:\"m\"}},i={string:{unit:\"\\u05EA\\u05D5\\u05D5\\u05D9\\u05DD\",shortLabel:\"\\u05E7\\u05E6\\u05E8\",longLabel:\"\\u05D0\\u05E8\\u05D5\\u05DA\"},file:{unit:\"\\u05D1\\u05D9\\u05D9\\u05D8\\u05D9\\u05DD\",shortLabel:\"\\u05E7\\u05D8\\u05DF\",longLabel:\"\\u05D2\\u05D3\\u05D5\\u05DC\"},array:{unit:\"\\u05E4\\u05E8\\u05D9\\u05D8\\u05D9\\u05DD\",shortLabel:\"\\u05E7\\u05D8\\u05DF\",longLabel:\"\\u05D2\\u05D3\\u05D5\\u05DC\"},set:{unit:\"\\u05E4\\u05E8\\u05D9\\u05D8\\u05D9\\u05DD\",shortLabel:\"\\u05E7\\u05D8\\u05DF\",longLabel:\"\\u05D2\\u05D3\\u05D5\\u05DC\"},number:{unit:\"\",shortLabel:\"\\u05E7\\u05D8\\u05DF\",longLabel:\"\\u05D2\\u05D3\\u05D5\\u05DC\"}},n=d=>d?e[d]:void 0,a=d=>{let c=n(d);return c?c.label:d??e.unknown.label},t=d=>`\\u05D4${a(d)}`,r=d=>(n(d)?.gender??\"m\")===\"f\"?\"\\u05E6\\u05E8\\u05D9\\u05DB\\u05D4 \\u05DC\\u05D4\\u05D9\\u05D5\\u05EA\":\"\\u05E6\\u05E8\\u05D9\\u05DA \\u05DC\\u05D4\\u05D9\\u05D5\\u05EA\",o=d=>d?i[d]??null:null,s={regex:{label:\"\\u05E7\\u05DC\\u05D8\",gender:\"m\"},email:{label:\"\\u05DB\\u05EA\\u05D5\\u05D1\\u05EA \\u05D0\\u05D9\\u05DE\\u05D9\\u05D9\\u05DC\",gender:\"f\"},url:{label:\"\\u05DB\\u05EA\\u05D5\\u05D1\\u05EA \\u05E8\\u05E9\\u05EA\",gender:\"f\"},emoji:{label:\"\\u05D0\\u05D9\\u05DE\\u05D5\\u05D2'\\u05D9\",gender:\"m\"},uuid:{label:\"UUID\",gender:\"m\"},nanoid:{label:\"nanoid\",gender:\"m\"},guid:{label:\"GUID\",gender:\"m\"},cuid:{label:\"cuid\",gender:\"m\"},cuid2:{label:\"cuid2\",gender:\"m\"},ulid:{label:\"ULID\",gender:\"m\"},xid:{label:\"XID\",gender:\"m\"},ksuid:{label:\"KSUID\",gender:\"m\"},datetime:{label:\"\\u05EA\\u05D0\\u05E8\\u05D9\\u05DA \\u05D5\\u05D6\\u05DE\\u05DF ISO\",gender:\"m\"},date:{label:\"\\u05EA\\u05D0\\u05E8\\u05D9\\u05DA ISO\",gender:\"m\"},time:{label:\"\\u05D6\\u05DE\\u05DF ISO\",gender:\"m\"},duration:{label:\"\\u05DE\\u05E9\\u05DA \\u05D6\\u05DE\\u05DF ISO\",gender:\"m\"},ipv4:{label:\"\\u05DB\\u05EA\\u05D5\\u05D1\\u05EA IPv4\",gender:\"f\"},ipv6:{label:\"\\u05DB\\u05EA\\u05D5\\u05D1\\u05EA IPv6\",gender:\"f\"},cidrv4:{label:\"\\u05D8\\u05D5\\u05D5\\u05D7 IPv4\",gender:\"m\"},cidrv6:{label:\"\\u05D8\\u05D5\\u05D5\\u05D7 IPv6\",gender:\"m\"},base64:{label:\"\\u05DE\\u05D7\\u05E8\\u05D5\\u05D6\\u05EA \\u05D1\\u05D1\\u05E1\\u05D9\\u05E1 64\",gender:\"f\"},base64url:{label:\"\\u05DE\\u05D7\\u05E8\\u05D5\\u05D6\\u05EA \\u05D1\\u05D1\\u05E1\\u05D9\\u05E1 64 \\u05DC\\u05DB\\u05EA\\u05D5\\u05D1\\u05D5\\u05EA \\u05E8\\u05E9\\u05EA\",gender:\"f\"},json_string:{label:\"\\u05DE\\u05D7\\u05E8\\u05D5\\u05D6\\u05EA JSON\",gender:\"f\"},e164:{label:\"\\u05DE\\u05E1\\u05E4\\u05E8 E.164\",gender:\"m\"},jwt:{label:\"JWT\",gender:\"m\"},ends_with:{label:\"\\u05E7\\u05DC\\u05D8\",gender:\"m\"},includes:{label:\"\\u05E7\\u05DC\\u05D8\",gender:\"m\"},lowercase:{label:\"\\u05E7\\u05DC\\u05D8\",gender:\"m\"},starts_with:{label:\"\\u05E7\\u05DC\\u05D8\",gender:\"m\"},uppercase:{label:\"\\u05E7\\u05DC\\u05D8\",gender:\"m\"}},u={nan:\"NaN\"};return d=>{switch(d.code){case\"invalid_type\":{let c=d.expected,f=u[c??\"\"]??a(c),g=x(d.input),_=u[g]??e[g]?.label??g;return/^[A-Z]/.test(d.expected)?`\\u05E7\\u05DC\\u05D8 \\u05DC\\u05D0 \\u05EA\\u05E7\\u05D9\\u05DF: \\u05E6\\u05E8\\u05D9\\u05DA \\u05DC\\u05D4\\u05D9\\u05D5\\u05EA instanceof ${d.expected}, \\u05D4\\u05EA\\u05E7\\u05D1\\u05DC ${_}`:`\\u05E7\\u05DC\\u05D8 \\u05DC\\u05D0 \\u05EA\\u05E7\\u05D9\\u05DF: \\u05E6\\u05E8\\u05D9\\u05DA \\u05DC\\u05D4\\u05D9\\u05D5\\u05EA ${f}, \\u05D4\\u05EA\\u05E7\\u05D1\\u05DC ${_}`}case\"invalid_value\":{if(d.values.length===1)return`\\u05E2\\u05E8\\u05DA \\u05DC\\u05D0 \\u05EA\\u05E7\\u05D9\\u05DF: \\u05D4\\u05E2\\u05E8\\u05DA \\u05D7\\u05D9\\u05D9\\u05D1 \\u05DC\\u05D4\\u05D9\\u05D5\\u05EA ${w(d.values[0])}`;let c=d.values.map(g=>w(g));if(d.values.length===2)return`\\u05E2\\u05E8\\u05DA \\u05DC\\u05D0 \\u05EA\\u05E7\\u05D9\\u05DF: \\u05D4\\u05D0\\u05E4\\u05E9\\u05E8\\u05D5\\u05D9\\u05D5\\u05EA \\u05D4\\u05DE\\u05EA\\u05D0\\u05D9\\u05DE\\u05D5\\u05EA \\u05D4\\u05DF ${c[0]} \\u05D0\\u05D5 ${c[1]}`;let f=c[c.length-1];return`\\u05E2\\u05E8\\u05DA \\u05DC\\u05D0 \\u05EA\\u05E7\\u05D9\\u05DF: \\u05D4\\u05D0\\u05E4\\u05E9\\u05E8\\u05D5\\u05D9\\u05D5\\u05EA \\u05D4\\u05DE\\u05EA\\u05D0\\u05D9\\u05DE\\u05D5\\u05EA \\u05D4\\u05DF ${c.slice(0,-1).join(\", \")} \\u05D0\\u05D5 ${f}`}case\"too_big\":{let c=o(d.origin),f=t(d.origin??\"value\");if(d.origin===\"string\")return`${c?.longLabel??\"\\u05D0\\u05E8\\u05D5\\u05DA\"} \\u05DE\\u05D3\\u05D9: ${f} \\u05E6\\u05E8\\u05D9\\u05DB\\u05D4 \\u05DC\\u05D4\\u05DB\\u05D9\\u05DC ${d.maximum.toString()} ${c?.unit??\"\"} ${d.inclusive?\"\\u05D0\\u05D5 \\u05E4\\u05D7\\u05D5\\u05EA\":\"\\u05DC\\u05DB\\u05DC \\u05D4\\u05D9\\u05D5\\u05EA\\u05E8\"}`.trim();if(d.origin===\"number\"){let U=d.inclusive?`\\u05E7\\u05D8\\u05DF \\u05D0\\u05D5 \\u05E9\\u05D5\\u05D5\\u05D4 \\u05DC-${d.maximum}`:`\\u05E7\\u05D8\\u05DF \\u05DE-${d.maximum}`;return`\\u05D2\\u05D3\\u05D5\\u05DC \\u05DE\\u05D3\\u05D9: ${f} \\u05E6\\u05E8\\u05D9\\u05DA \\u05DC\\u05D4\\u05D9\\u05D5\\u05EA ${U}`}if(d.origin===\"array\"||d.origin===\"set\"){let U=d.origin===\"set\"?\"\\u05E6\\u05E8\\u05D9\\u05DB\\u05D4\":\"\\u05E6\\u05E8\\u05D9\\u05DA\",fe=d.inclusive?`${d.maximum} ${c?.unit??\"\"} \\u05D0\\u05D5 \\u05E4\\u05D7\\u05D5\\u05EA`:`\\u05E4\\u05D7\\u05D5\\u05EA \\u05DE-${d.maximum} ${c?.unit??\"\"}`;return`\\u05D2\\u05D3\\u05D5\\u05DC \\u05DE\\u05D3\\u05D9: ${f} ${U} \\u05DC\\u05D4\\u05DB\\u05D9\\u05DC ${fe}`.trim()}let g=d.inclusive?\"<=\":\"<\",_=r(d.origin??\"value\");return c?.unit?`${c.longLabel} \\u05DE\\u05D3\\u05D9: ${f} ${_} ${g}${d.maximum.toString()} ${c.unit}`:`${c?.longLabel??\"\\u05D2\\u05D3\\u05D5\\u05DC\"} \\u05DE\\u05D3\\u05D9: ${f} ${_} ${g}${d.maximum.toString()}`}case\"too_small\":{let c=o(d.origin),f=t(d.origin??\"value\");if(d.origin===\"string\")return`${c?.shortLabel??\"\\u05E7\\u05E6\\u05E8\"} \\u05DE\\u05D3\\u05D9: ${f} \\u05E6\\u05E8\\u05D9\\u05DB\\u05D4 \\u05DC\\u05D4\\u05DB\\u05D9\\u05DC ${d.minimum.toString()} ${c?.unit??\"\"} ${d.inclusive?\"\\u05D0\\u05D5 \\u05D9\\u05D5\\u05EA\\u05E8\":\"\\u05DC\\u05E4\\u05D7\\u05D5\\u05EA\"}`.trim();if(d.origin===\"number\"){let U=d.inclusive?`\\u05D2\\u05D3\\u05D5\\u05DC \\u05D0\\u05D5 \\u05E9\\u05D5\\u05D5\\u05D4 \\u05DC-${d.minimum}`:`\\u05D2\\u05D3\\u05D5\\u05DC \\u05DE-${d.minimum}`;return`\\u05E7\\u05D8\\u05DF \\u05DE\\u05D3\\u05D9: ${f} \\u05E6\\u05E8\\u05D9\\u05DA \\u05DC\\u05D4\\u05D9\\u05D5\\u05EA ${U}`}if(d.origin===\"array\"||d.origin===\"set\"){let U=d.origin===\"set\"?\"\\u05E6\\u05E8\\u05D9\\u05DB\\u05D4\":\"\\u05E6\\u05E8\\u05D9\\u05DA\";if(d.minimum===1&&d.inclusive){let Dt=(d.origin===\"set\",\"\\u05DC\\u05E4\\u05D7\\u05D5\\u05EA \\u05E4\\u05E8\\u05D9\\u05D8 \\u05D0\\u05D7\\u05D3\");return`\\u05E7\\u05D8\\u05DF \\u05DE\\u05D3\\u05D9: ${f} ${U} \\u05DC\\u05D4\\u05DB\\u05D9\\u05DC ${Dt}`}let fe=d.inclusive?`${d.minimum} ${c?.unit??\"\"} \\u05D0\\u05D5 \\u05D9\\u05D5\\u05EA\\u05E8`:`\\u05D9\\u05D5\\u05EA\\u05E8 \\u05DE-${d.minimum} ${c?.unit??\"\"}`;return`\\u05E7\\u05D8\\u05DF \\u05DE\\u05D3\\u05D9: ${f} ${U} \\u05DC\\u05D4\\u05DB\\u05D9\\u05DC ${fe}`.trim()}let g=d.inclusive?\">=\":\">\",_=r(d.origin??\"value\");return c?.unit?`${c.shortLabel} \\u05DE\\u05D3\\u05D9: ${f} ${_} ${g}${d.minimum.toString()} ${c.unit}`:`${c?.shortLabel??\"\\u05E7\\u05D8\\u05DF\"} \\u05DE\\u05D3\\u05D9: ${f} ${_} ${g}${d.minimum.toString()}`}case\"invalid_format\":{let c=d;if(c.format===\"starts_with\")return`\\u05D4\\u05DE\\u05D7\\u05E8\\u05D5\\u05D6\\u05EA \\u05D7\\u05D9\\u05D9\\u05D1\\u05EA \\u05DC\\u05D4\\u05EA\\u05D7\\u05D9\\u05DC \\u05D1 \"${c.prefix}\"`;if(c.format===\"ends_with\")return`\\u05D4\\u05DE\\u05D7\\u05E8\\u05D5\\u05D6\\u05EA \\u05D7\\u05D9\\u05D9\\u05D1\\u05EA \\u05DC\\u05D4\\u05E1\\u05EA\\u05D9\\u05D9\\u05DD \\u05D1 \"${c.suffix}\"`;if(c.format===\"includes\")return`\\u05D4\\u05DE\\u05D7\\u05E8\\u05D5\\u05D6\\u05EA \\u05D7\\u05D9\\u05D9\\u05D1\\u05EA \\u05DC\\u05DB\\u05DC\\u05D5\\u05DC \"${c.includes}\"`;if(c.format===\"regex\")return`\\u05D4\\u05DE\\u05D7\\u05E8\\u05D5\\u05D6\\u05EA \\u05D7\\u05D9\\u05D9\\u05D1\\u05EA \\u05DC\\u05D4\\u05EA\\u05D0\\u05D9\\u05DD \\u05DC\\u05EA\\u05D1\\u05E0\\u05D9\\u05EA ${c.pattern}`;let f=s[c.format],g=f?.label??c.format,_=(f?.gender??\"m\")===\"f\"?\"\\u05EA\\u05E7\\u05D9\\u05E0\\u05D4\":\"\\u05EA\\u05E7\\u05D9\\u05DF\";return`${g} \\u05DC\\u05D0 ${_}`}case\"not_multiple_of\":return`\\u05DE\\u05E1\\u05E4\\u05E8 \\u05DC\\u05D0 \\u05EA\\u05E7\\u05D9\\u05DF: \\u05D7\\u05D9\\u05D9\\u05D1 \\u05DC\\u05D4\\u05D9\\u05D5\\u05EA \\u05DE\\u05DB\\u05E4\\u05DC\\u05D4 \\u05E9\\u05DC ${d.divisor}`;case\"unrecognized_keys\":return`\\u05DE\\u05E4\\u05EA\\u05D7${d.keys.length>1?\"\\u05D5\\u05EA\":\"\"} \\u05DC\\u05D0 \\u05DE\\u05D6\\u05D5\\u05D4${d.keys.length>1?\"\\u05D9\\u05DD\":\"\\u05D4\"}: ${v(d.keys,\", \")}`;case\"invalid_key\":return\"\\u05E9\\u05D3\\u05D4 \\u05DC\\u05D0 \\u05EA\\u05E7\\u05D9\\u05DF \\u05D1\\u05D0\\u05D5\\u05D1\\u05D9\\u05D9\\u05E7\\u05D8\";case\"invalid_union\":return\"\\u05E7\\u05DC\\u05D8 \\u05DC\\u05D0 \\u05EA\\u05E7\\u05D9\\u05DF\";case\"invalid_element\":return`\\u05E2\\u05E8\\u05DA \\u05DC\\u05D0 \\u05EA\\u05E7\\u05D9\\u05DF \\u05D1${t(d.origin??\"array\")}`;default:return\"\\u05E7\\u05DC\\u05D8 \\u05DC\\u05D0 \\u05EA\\u05E7\\u05D9\\u05DF\"}}},xf=b(()=>{I()});function Sf(){return{localeError:zf()}}var zf=()=>{let e={string:{unit:\"karakter\",verb:\"legyen\"},file:{unit:\"byte\",verb:\"legyen\"},array:{unit:\"elem\",verb:\"legyen\"},set:{unit:\"elem\",verb:\"legyen\"}};function i(t){return e[t]??null}let n={regex:\"bemenet\",email:\"email c\\xEDm\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO id\\u0151b\\xE9lyeg\",date:\"ISO d\\xE1tum\",time:\"ISO id\\u0151\",duration:\"ISO id\\u0151intervallum\",ipv4:\"IPv4 c\\xEDm\",ipv6:\"IPv6 c\\xEDm\",cidrv4:\"IPv4 tartom\\xE1ny\",cidrv6:\"IPv6 tartom\\xE1ny\",base64:\"base64-k\\xF3dolt string\",base64url:\"base64url-k\\xF3dolt string\",json_string:\"JSON string\",e164:\"E.164 sz\\xE1m\",jwt:\"JWT\",template_literal:\"bemenet\"},a={nan:\"NaN\",number:\"sz\\xE1m\",array:\"t\\xF6mb\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\xC9rv\\xE9nytelen bemenet: a v\\xE1rt \\xE9rt\\xE9k instanceof ${t.expected}, a kapott \\xE9rt\\xE9k ${s}`:`\\xC9rv\\xE9nytelen bemenet: a v\\xE1rt \\xE9rt\\xE9k ${r}, a kapott \\xE9rt\\xE9k ${s}`}case\"invalid_value\":return t.values.length===1?`\\xC9rv\\xE9nytelen bemenet: a v\\xE1rt \\xE9rt\\xE9k ${w(t.values[0])}`:`\\xC9rv\\xE9nytelen opci\\xF3: valamelyik \\xE9rt\\xE9k v\\xE1rt ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`T\\xFAl nagy: ${t.origin??\"\\xE9rt\\xE9k\"} m\\xE9rete t\\xFAl nagy ${r}${t.maximum.toString()} ${o.unit??\"elem\"}`:`T\\xFAl nagy: a bemeneti \\xE9rt\\xE9k ${t.origin??\"\\xE9rt\\xE9k\"} t\\xFAl nagy: ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`T\\xFAl kicsi: a bemeneti \\xE9rt\\xE9k ${t.origin} m\\xE9rete t\\xFAl kicsi ${r}${t.minimum.toString()} ${o.unit}`:`T\\xFAl kicsi: a bemeneti \\xE9rt\\xE9k ${t.origin} t\\xFAl kicsi ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\xC9rv\\xE9nytelen string: \"${r.prefix}\" \\xE9rt\\xE9kkel kell kezd\\u0151dnie`:r.format===\"ends_with\"?`\\xC9rv\\xE9nytelen string: \"${r.suffix}\" \\xE9rt\\xE9kkel kell v\\xE9gz\\u0151dnie`:r.format===\"includes\"?`\\xC9rv\\xE9nytelen string: \"${r.includes}\" \\xE9rt\\xE9ket kell tartalmaznia`:r.format===\"regex\"?`\\xC9rv\\xE9nytelen string: ${r.pattern} mint\\xE1nak kell megfelelnie`:`\\xC9rv\\xE9nytelen ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\xC9rv\\xE9nytelen sz\\xE1m: ${t.divisor} t\\xF6bbsz\\xF6r\\xF6s\\xE9nek kell lennie`;case\"unrecognized_keys\":return`Ismeretlen kulcs${t.keys.length>1?\"s\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\xC9rv\\xE9nytelen kulcs ${t.origin}`;case\"invalid_union\":return\"\\xC9rv\\xE9nytelen bemenet\";case\"invalid_element\":return`\\xC9rv\\xE9nytelen \\xE9rt\\xE9k: ${t.origin}`;default:return\"\\xC9rv\\xE9nytelen bemenet\"}}},Uf=b(()=>{I()});function Ol(e,i,n){return Math.abs(e)===1?i:n}function Ve(e){if(!e)return\"\";let i=[\"\\u0561\",\"\\u0565\",\"\\u0568\",\"\\u056B\",\"\\u0578\",\"\\u0578\\u0582\",\"\\u0585\"],n=e[e.length-1];return e+(i.includes(n)?\"\\u0576\":\"\\u0568\")}function Of(){return{localeError:Nf()}}var Nf=()=>{let e={string:{unit:{one:\"\\u0576\\u0577\\u0561\\u0576\",many:\"\\u0576\\u0577\\u0561\\u0576\\u0576\\u0565\\u0580\"},verb:\"\\u0578\\u0582\\u0576\\u0565\\u0576\\u0561\\u056C\"},file:{unit:{one:\"\\u0562\\u0561\\u0575\\u0569\",many:\"\\u0562\\u0561\\u0575\\u0569\\u0565\\u0580\"},verb:\"\\u0578\\u0582\\u0576\\u0565\\u0576\\u0561\\u056C\"},array:{unit:{one:\"\\u057F\\u0561\\u0580\\u0580\",many:\"\\u057F\\u0561\\u0580\\u0580\\u0565\\u0580\"},verb:\"\\u0578\\u0582\\u0576\\u0565\\u0576\\u0561\\u056C\"},set:{unit:{one:\"\\u057F\\u0561\\u0580\\u0580\",many:\"\\u057F\\u0561\\u0580\\u0580\\u0565\\u0580\"},verb:\"\\u0578\\u0582\\u0576\\u0565\\u0576\\u0561\\u056C\"}};function i(t){return e[t]??null}let n={regex:\"\\u0574\\u0578\\u0582\\u057F\\u0584\",email:\"\\u0567\\u056C. \\u0570\\u0561\\u057D\\u0581\\u0565\",url:\"URL\",emoji:\"\\u0567\\u0574\\u0578\\u057B\\u056B\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO \\u0561\\u0574\\u057D\\u0561\\u0569\\u056B\\u057E \\u0587 \\u056A\\u0561\\u0574\",date:\"ISO \\u0561\\u0574\\u057D\\u0561\\u0569\\u056B\\u057E\",time:\"ISO \\u056A\\u0561\\u0574\",duration:\"ISO \\u057F\\u0587\\u0578\\u0572\\u0578\\u0582\\u0569\\u0575\\u0578\\u0582\\u0576\",ipv4:\"IPv4 \\u0570\\u0561\\u057D\\u0581\\u0565\",ipv6:\"IPv6 \\u0570\\u0561\\u057D\\u0581\\u0565\",cidrv4:\"IPv4 \\u0574\\u056B\\u057B\\u0561\\u056F\\u0561\\u0575\\u0584\",cidrv6:\"IPv6 \\u0574\\u056B\\u057B\\u0561\\u056F\\u0561\\u0575\\u0584\",base64:\"base64 \\u0571\\u0587\\u0561\\u0579\\u0561\\u0583\\u0578\\u057E \\u057F\\u0578\\u0572\",base64url:\"base64url \\u0571\\u0587\\u0561\\u0579\\u0561\\u0583\\u0578\\u057E \\u057F\\u0578\\u0572\",json_string:\"JSON \\u057F\\u0578\\u0572\",e164:\"E.164 \\u0570\\u0561\\u0574\\u0561\\u0580\",jwt:\"JWT\",template_literal:\"\\u0574\\u0578\\u0582\\u057F\\u0584\"},a={nan:\"NaN\",number:\"\\u0569\\u056B\\u057E\",array:\"\\u0566\\u0561\\u0576\\u0563\\u057E\\u0561\\u056E\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u054D\\u056D\\u0561\\u056C \\u0574\\u0578\\u0582\\u057F\\u0584\\u0561\\u0563\\u0580\\u0578\\u0582\\u0574\\u2024 \\u057D\\u057A\\u0561\\u057D\\u057E\\u0578\\u0582\\u0574 \\u0567\\u0580 instanceof ${t.expected}, \\u057D\\u057F\\u0561\\u0581\\u057E\\u0565\\u056C \\u0567 ${s}`:`\\u054D\\u056D\\u0561\\u056C \\u0574\\u0578\\u0582\\u057F\\u0584\\u0561\\u0563\\u0580\\u0578\\u0582\\u0574\\u2024 \\u057D\\u057A\\u0561\\u057D\\u057E\\u0578\\u0582\\u0574 \\u0567\\u0580 ${r}, \\u057D\\u057F\\u0561\\u0581\\u057E\\u0565\\u056C \\u0567 ${s}`}case\"invalid_value\":return t.values.length===1?`\\u054D\\u056D\\u0561\\u056C \\u0574\\u0578\\u0582\\u057F\\u0584\\u0561\\u0563\\u0580\\u0578\\u0582\\u0574\\u2024 \\u057D\\u057A\\u0561\\u057D\\u057E\\u0578\\u0582\\u0574 \\u0567\\u0580 ${w(t.values[1])}`:`\\u054D\\u056D\\u0561\\u056C \\u057F\\u0561\\u0580\\u0562\\u0565\\u0580\\u0561\\u056F\\u2024 \\u057D\\u057A\\u0561\\u057D\\u057E\\u0578\\u0582\\u0574 \\u0567\\u0580 \\u0570\\u0565\\u057F\\u0587\\u0575\\u0561\\u056C\\u0576\\u0565\\u0580\\u056B\\u0581 \\u0574\\u0565\\u056F\\u0568\\u055D ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);if(o){let s=Number(t.maximum),u=Ol(s,o.unit.one,o.unit.many);return`\\u0549\\u0561\\u0583\\u0561\\u0566\\u0561\\u0576\\u0581 \\u0574\\u0565\\u056E \\u0561\\u0580\\u056A\\u0565\\u0584\\u2024 \\u057D\\u057A\\u0561\\u057D\\u057E\\u0578\\u0582\\u0574 \\u0567, \\u0578\\u0580 ${Ve(t.origin??\"\\u0561\\u0580\\u056A\\u0565\\u0584\")} \\u056F\\u0578\\u0582\\u0576\\u0565\\u0576\\u0561 ${r}${t.maximum.toString()} ${u}`}return`\\u0549\\u0561\\u0583\\u0561\\u0566\\u0561\\u0576\\u0581 \\u0574\\u0565\\u056E \\u0561\\u0580\\u056A\\u0565\\u0584\\u2024 \\u057D\\u057A\\u0561\\u057D\\u057E\\u0578\\u0582\\u0574 \\u0567, \\u0578\\u0580 ${Ve(t.origin??\"\\u0561\\u0580\\u056A\\u0565\\u0584\")} \\u056C\\u056B\\u0576\\u056B ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);if(o){let s=Number(t.minimum),u=Ol(s,o.unit.one,o.unit.many);return`\\u0549\\u0561\\u0583\\u0561\\u0566\\u0561\\u0576\\u0581 \\u0583\\u0578\\u0584\\u0580 \\u0561\\u0580\\u056A\\u0565\\u0584\\u2024 \\u057D\\u057A\\u0561\\u057D\\u057E\\u0578\\u0582\\u0574 \\u0567, \\u0578\\u0580 ${Ve(t.origin)} \\u056F\\u0578\\u0582\\u0576\\u0565\\u0576\\u0561 ${r}${t.minimum.toString()} ${u}`}return`\\u0549\\u0561\\u0583\\u0561\\u0566\\u0561\\u0576\\u0581 \\u0583\\u0578\\u0584\\u0580 \\u0561\\u0580\\u056A\\u0565\\u0584\\u2024 \\u057D\\u057A\\u0561\\u057D\\u057E\\u0578\\u0582\\u0574 \\u0567, \\u0578\\u0580 ${Ve(t.origin)} \\u056C\\u056B\\u0576\\u056B ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u054D\\u056D\\u0561\\u056C \\u057F\\u0578\\u0572\\u2024 \\u057A\\u0565\\u057F\\u0584 \\u0567 \\u057D\\u056F\\u057D\\u057E\\u056B \"${r.prefix}\"-\\u0578\\u057E`:r.format===\"ends_with\"?`\\u054D\\u056D\\u0561\\u056C \\u057F\\u0578\\u0572\\u2024 \\u057A\\u0565\\u057F\\u0584 \\u0567 \\u0561\\u057E\\u0561\\u0580\\u057F\\u057E\\u056B \"${r.suffix}\"-\\u0578\\u057E`:r.format===\"includes\"?`\\u054D\\u056D\\u0561\\u056C \\u057F\\u0578\\u0572\\u2024 \\u057A\\u0565\\u057F\\u0584 \\u0567 \\u057A\\u0561\\u0580\\u0578\\u0582\\u0576\\u0561\\u056F\\u056B \"${r.includes}\"`:r.format===\"regex\"?`\\u054D\\u056D\\u0561\\u056C \\u057F\\u0578\\u0572\\u2024 \\u057A\\u0565\\u057F\\u0584 \\u0567 \\u0570\\u0561\\u0574\\u0561\\u057A\\u0561\\u057F\\u0561\\u057D\\u056D\\u0561\\u0576\\u056B ${r.pattern} \\u0571\\u0587\\u0561\\u0579\\u0561\\u0583\\u056B\\u0576`:`\\u054D\\u056D\\u0561\\u056C ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u054D\\u056D\\u0561\\u056C \\u0569\\u056B\\u057E\\u2024 \\u057A\\u0565\\u057F\\u0584 \\u0567 \\u0562\\u0561\\u0566\\u0574\\u0561\\u057A\\u0561\\u057F\\u056B\\u056F \\u056C\\u056B\\u0576\\u056B ${t.divisor}-\\u056B`;case\"unrecognized_keys\":return`\\u0549\\u0573\\u0561\\u0576\\u0561\\u0579\\u057E\\u0561\\u056E \\u0562\\u0561\\u0576\\u0561\\u056C\\u056B${t.keys.length>1?\"\\u0576\\u0565\\u0580\":\"\"}. ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\u054D\\u056D\\u0561\\u056C \\u0562\\u0561\\u0576\\u0561\\u056C\\u056B ${Ve(t.origin)}-\\u0578\\u0582\\u0574`;case\"invalid_union\":return\"\\u054D\\u056D\\u0561\\u056C \\u0574\\u0578\\u0582\\u057F\\u0584\\u0561\\u0563\\u0580\\u0578\\u0582\\u0574\";case\"invalid_element\":return`\\u054D\\u056D\\u0561\\u056C \\u0561\\u0580\\u056A\\u0565\\u0584 ${Ve(t.origin)}-\\u0578\\u0582\\u0574`;default:return\"\\u054D\\u056D\\u0561\\u056C \\u0574\\u0578\\u0582\\u057F\\u0584\\u0561\\u0563\\u0580\\u0578\\u0582\\u0574\"}}},Zf=b(()=>{I()});function Tf(){return{localeError:Df()}}var Df=()=>{let e={string:{unit:\"karakter\",verb:\"memiliki\"},file:{unit:\"byte\",verb:\"memiliki\"},array:{unit:\"item\",verb:\"memiliki\"},set:{unit:\"item\",verb:\"memiliki\"}};function i(t){return e[t]??null}let n={regex:\"input\",email:\"alamat email\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"tanggal dan waktu format ISO\",date:\"tanggal format ISO\",time:\"jam format ISO\",duration:\"durasi format ISO\",ipv4:\"alamat IPv4\",ipv6:\"alamat IPv6\",cidrv4:\"rentang alamat IPv4\",cidrv6:\"rentang alamat IPv6\",base64:\"string dengan enkode base64\",base64url:\"string dengan enkode base64url\",json_string:\"string JSON\",e164:\"angka E.164\",jwt:\"JWT\",template_literal:\"input\"},a={nan:\"NaN\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Input tidak valid: diharapkan instanceof ${t.expected}, diterima ${s}`:`Input tidak valid: diharapkan ${r}, diterima ${s}`}case\"invalid_value\":return t.values.length===1?`Input tidak valid: diharapkan ${w(t.values[0])}`:`Pilihan tidak valid: diharapkan salah satu dari ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Terlalu besar: diharapkan ${t.origin??\"value\"} memiliki ${r}${t.maximum.toString()} ${o.unit??\"elemen\"}`:`Terlalu besar: diharapkan ${t.origin??\"value\"} menjadi ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Terlalu kecil: diharapkan ${t.origin} memiliki ${r}${t.minimum.toString()} ${o.unit}`:`Terlalu kecil: diharapkan ${t.origin} menjadi ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`String tidak valid: harus dimulai dengan \"${r.prefix}\"`:r.format===\"ends_with\"?`String tidak valid: harus berakhir dengan \"${r.suffix}\"`:r.format===\"includes\"?`String tidak valid: harus menyertakan \"${r.includes}\"`:r.format===\"regex\"?`String tidak valid: harus sesuai pola ${r.pattern}`:`${n[r.format]??t.format} tidak valid`}case\"not_multiple_of\":return`Angka tidak valid: harus kelipatan dari ${t.divisor}`;case\"unrecognized_keys\":return`Kunci tidak dikenali ${t.keys.length>1?\"s\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Kunci tidak valid di ${t.origin}`;case\"invalid_union\":return\"Input tidak valid\";case\"invalid_element\":return`Nilai tidak valid di ${t.origin}`;default:return\"Input tidak valid\"}}},jf=b(()=>{I()});function Ef(){return{localeError:Pf()}}var Pf=()=>{let e={string:{unit:\"stafi\",verb:\"a\\xF0 hafa\"},file:{unit:\"b\\xE6ti\",verb:\"a\\xF0 hafa\"},array:{unit:\"hluti\",verb:\"a\\xF0 hafa\"},set:{unit:\"hluti\",verb:\"a\\xF0 hafa\"}};function i(t){return e[t]??null}let n={regex:\"gildi\",email:\"netfang\",url:\"vefsl\\xF3\\xF0\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO dagsetning og t\\xEDmi\",date:\"ISO dagsetning\",time:\"ISO t\\xEDmi\",duration:\"ISO t\\xEDmalengd\",ipv4:\"IPv4 address\",ipv6:\"IPv6 address\",cidrv4:\"IPv4 range\",cidrv6:\"IPv6 range\",base64:\"base64-encoded strengur\",base64url:\"base64url-encoded strengur\",json_string:\"JSON strengur\",e164:\"E.164 t\\xF6lugildi\",jwt:\"JWT\",template_literal:\"gildi\"},a={nan:\"NaN\",number:\"n\\xFAmer\",array:\"fylki\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Rangt gildi: \\xDE\\xFA sl\\xF3st inn ${s} \\xFEar sem \\xE1 a\\xF0 vera instanceof ${t.expected}`:`Rangt gildi: \\xDE\\xFA sl\\xF3st inn ${s} \\xFEar sem \\xE1 a\\xF0 vera ${r}`}case\"invalid_value\":return t.values.length===1?`Rangt gildi: gert r\\xE1\\xF0 fyrir ${w(t.values[0])}`:`\\xD3gilt val: m\\xE1 vera eitt af eftirfarandi ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Of st\\xF3rt: gert er r\\xE1\\xF0 fyrir a\\xF0 ${t.origin??\"gildi\"} hafi ${r}${t.maximum.toString()} ${o.unit??\"hluti\"}`:`Of st\\xF3rt: gert er r\\xE1\\xF0 fyrir a\\xF0 ${t.origin??\"gildi\"} s\\xE9 ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Of l\\xEDti\\xF0: gert er r\\xE1\\xF0 fyrir a\\xF0 ${t.origin} hafi ${r}${t.minimum.toString()} ${o.unit}`:`Of l\\xEDti\\xF0: gert er r\\xE1\\xF0 fyrir a\\xF0 ${t.origin} s\\xE9 ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\xD3gildur strengur: ver\\xF0ur a\\xF0 byrja \\xE1 \"${r.prefix}\"`:r.format===\"ends_with\"?`\\xD3gildur strengur: ver\\xF0ur a\\xF0 enda \\xE1 \"${r.suffix}\"`:r.format===\"includes\"?`\\xD3gildur strengur: ver\\xF0ur a\\xF0 innihalda \"${r.includes}\"`:r.format===\"regex\"?`\\xD3gildur strengur: ver\\xF0ur a\\xF0 fylgja mynstri ${r.pattern}`:`Rangt ${n[r.format]??t.format}`}case\"not_multiple_of\":return`R\\xF6ng tala: ver\\xF0ur a\\xF0 vera margfeldi af ${t.divisor}`;case\"unrecognized_keys\":return`\\xD3\\xFEekkt ${t.keys.length>1?\"ir lyklar\":\"ur lykill\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Rangur lykill \\xED ${t.origin}`;case\"invalid_union\":return\"Rangt gildi\";case\"invalid_element\":return`Rangt gildi \\xED ${t.origin}`;default:return\"Rangt gildi\"}}},Rf=b(()=>{I()});function Af(){return{localeError:Cf()}}var Cf=()=>{let e={string:{unit:\"caratteri\",verb:\"avere\"},file:{unit:\"byte\",verb:\"avere\"},array:{unit:\"elementi\",verb:\"avere\"},set:{unit:\"elementi\",verb:\"avere\"}};function i(t){return e[t]??null}let n={regex:\"input\",email:\"indirizzo email\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"data e ora ISO\",date:\"data ISO\",time:\"ora ISO\",duration:\"durata ISO\",ipv4:\"indirizzo IPv4\",ipv6:\"indirizzo IPv6\",cidrv4:\"intervallo IPv4\",cidrv6:\"intervallo IPv6\",base64:\"stringa codificata in base64\",base64url:\"URL codificata in base64\",json_string:\"stringa JSON\",e164:\"numero E.164\",jwt:\"JWT\",template_literal:\"input\"},a={nan:\"NaN\",number:\"numero\",array:\"vettore\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Input non valido: atteso instanceof ${t.expected}, ricevuto ${s}`:`Input non valido: atteso ${r}, ricevuto ${s}`}case\"invalid_value\":return t.values.length===1?`Input non valido: atteso ${w(t.values[0])}`:`Opzione non valida: atteso uno tra ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Troppo grande: ${t.origin??\"valore\"} deve avere ${r}${t.maximum.toString()} ${o.unit??\"elementi\"}`:`Troppo grande: ${t.origin??\"valore\"} deve essere ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Troppo piccolo: ${t.origin} deve avere ${r}${t.minimum.toString()} ${o.unit}`:`Troppo piccolo: ${t.origin} deve essere ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Stringa non valida: deve iniziare con \"${r.prefix}\"`:r.format===\"ends_with\"?`Stringa non valida: deve terminare con \"${r.suffix}\"`:r.format===\"includes\"?`Stringa non valida: deve includere \"${r.includes}\"`:r.format===\"regex\"?`Stringa non valida: deve corrispondere al pattern ${r.pattern}`:`Invalid ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Numero non valido: deve essere un multiplo di ${t.divisor}`;case\"unrecognized_keys\":return`Chiav${t.keys.length>1?\"i\":\"e\"} non riconosciut${t.keys.length>1?\"e\":\"a\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Chiave non valida in ${t.origin}`;case\"invalid_union\":return\"Input non valido\";case\"invalid_element\":return`Valore non valido in ${t.origin}`;default:return\"Input non valido\"}}},Mf=b(()=>{I()});function Lf(){return{localeError:qf()}}var qf=()=>{let e={string:{unit:\"\\u6587\\u5B57\",verb:\"\\u3067\\u3042\\u308B\"},file:{unit:\"\\u30D0\\u30A4\\u30C8\",verb:\"\\u3067\\u3042\\u308B\"},array:{unit:\"\\u8981\\u7D20\",verb:\"\\u3067\\u3042\\u308B\"},set:{unit:\"\\u8981\\u7D20\",verb:\"\\u3067\\u3042\\u308B\"}};function i(t){return e[t]??null}let n={regex:\"\\u5165\\u529B\\u5024\",email:\"\\u30E1\\u30FC\\u30EB\\u30A2\\u30C9\\u30EC\\u30B9\",url:\"URL\",emoji:\"\\u7D75\\u6587\\u5B57\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO\\u65E5\\u6642\",date:\"ISO\\u65E5\\u4ED8\",time:\"ISO\\u6642\\u523B\",duration:\"ISO\\u671F\\u9593\",ipv4:\"IPv4\\u30A2\\u30C9\\u30EC\\u30B9\",ipv6:\"IPv6\\u30A2\\u30C9\\u30EC\\u30B9\",cidrv4:\"IPv4\\u7BC4\\u56F2\",cidrv6:\"IPv6\\u7BC4\\u56F2\",base64:\"base64\\u30A8\\u30F3\\u30B3\\u30FC\\u30C9\\u6587\\u5B57\\u5217\",base64url:\"base64url\\u30A8\\u30F3\\u30B3\\u30FC\\u30C9\\u6587\\u5B57\\u5217\",json_string:\"JSON\\u6587\\u5B57\\u5217\",e164:\"E.164\\u756A\\u53F7\",jwt:\"JWT\",template_literal:\"\\u5165\\u529B\\u5024\"},a={nan:\"NaN\",number:\"\\u6570\\u5024\",array:\"\\u914D\\u5217\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u7121\\u52B9\\u306A\\u5165\\u529B: instanceof ${t.expected}\\u304C\\u671F\\u5F85\\u3055\\u308C\\u307E\\u3057\\u305F\\u304C\\u3001${s}\\u304C\\u5165\\u529B\\u3055\\u308C\\u307E\\u3057\\u305F`:`\\u7121\\u52B9\\u306A\\u5165\\u529B: ${r}\\u304C\\u671F\\u5F85\\u3055\\u308C\\u307E\\u3057\\u305F\\u304C\\u3001${s}\\u304C\\u5165\\u529B\\u3055\\u308C\\u307E\\u3057\\u305F`}case\"invalid_value\":return t.values.length===1?`\\u7121\\u52B9\\u306A\\u5165\\u529B: ${w(t.values[0])}\\u304C\\u671F\\u5F85\\u3055\\u308C\\u307E\\u3057\\u305F`:`\\u7121\\u52B9\\u306A\\u9078\\u629E: ${v(t.values,\"\\u3001\")}\\u306E\\u3044\\u305A\\u308C\\u304B\\u3067\\u3042\\u308B\\u5FC5\\u8981\\u304C\\u3042\\u308A\\u307E\\u3059`;case\"too_big\":{let r=t.inclusive?\"\\u4EE5\\u4E0B\\u3067\\u3042\\u308B\":\"\\u3088\\u308A\\u5C0F\\u3055\\u3044\",o=i(t.origin);return o?`\\u5927\\u304D\\u3059\\u304E\\u308B\\u5024: ${t.origin??\"\\u5024\"}\\u306F${t.maximum.toString()}${o.unit??\"\\u8981\\u7D20\"}${r}\\u5FC5\\u8981\\u304C\\u3042\\u308A\\u307E\\u3059`:`\\u5927\\u304D\\u3059\\u304E\\u308B\\u5024: ${t.origin??\"\\u5024\"}\\u306F${t.maximum.toString()}${r}\\u5FC5\\u8981\\u304C\\u3042\\u308A\\u307E\\u3059`}case\"too_small\":{let r=t.inclusive?\"\\u4EE5\\u4E0A\\u3067\\u3042\\u308B\":\"\\u3088\\u308A\\u5927\\u304D\\u3044\",o=i(t.origin);return o?`\\u5C0F\\u3055\\u3059\\u304E\\u308B\\u5024: ${t.origin}\\u306F${t.minimum.toString()}${o.unit}${r}\\u5FC5\\u8981\\u304C\\u3042\\u308A\\u307E\\u3059`:`\\u5C0F\\u3055\\u3059\\u304E\\u308B\\u5024: ${t.origin}\\u306F${t.minimum.toString()}${r}\\u5FC5\\u8981\\u304C\\u3042\\u308A\\u307E\\u3059`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u7121\\u52B9\\u306A\\u6587\\u5B57\\u5217: \"${r.prefix}\"\\u3067\\u59CB\\u307E\\u308B\\u5FC5\\u8981\\u304C\\u3042\\u308A\\u307E\\u3059`:r.format===\"ends_with\"?`\\u7121\\u52B9\\u306A\\u6587\\u5B57\\u5217: \"${r.suffix}\"\\u3067\\u7D42\\u308F\\u308B\\u5FC5\\u8981\\u304C\\u3042\\u308A\\u307E\\u3059`:r.format===\"includes\"?`\\u7121\\u52B9\\u306A\\u6587\\u5B57\\u5217: \"${r.includes}\"\\u3092\\u542B\\u3080\\u5FC5\\u8981\\u304C\\u3042\\u308A\\u307E\\u3059`:r.format===\"regex\"?`\\u7121\\u52B9\\u306A\\u6587\\u5B57\\u5217: \\u30D1\\u30BF\\u30FC\\u30F3${r.pattern}\\u306B\\u4E00\\u81F4\\u3059\\u308B\\u5FC5\\u8981\\u304C\\u3042\\u308A\\u307E\\u3059`:`\\u7121\\u52B9\\u306A${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u7121\\u52B9\\u306A\\u6570\\u5024: ${t.divisor}\\u306E\\u500D\\u6570\\u3067\\u3042\\u308B\\u5FC5\\u8981\\u304C\\u3042\\u308A\\u307E\\u3059`;case\"unrecognized_keys\":return`\\u8A8D\\u8B58\\u3055\\u308C\\u3066\\u3044\\u306A\\u3044\\u30AD\\u30FC${t.keys.length>1?\"\\u7FA4\":\"\"}: ${v(t.keys,\"\\u3001\")}`;case\"invalid_key\":return`${t.origin}\\u5185\\u306E\\u7121\\u52B9\\u306A\\u30AD\\u30FC`;case\"invalid_union\":return\"\\u7121\\u52B9\\u306A\\u5165\\u529B\";case\"invalid_element\":return`${t.origin}\\u5185\\u306E\\u7121\\u52B9\\u306A\\u5024`;default:return\"\\u7121\\u52B9\\u306A\\u5165\\u529B\"}}},Jf=b(()=>{I()});function Ff(){return{localeError:Hf()}}var Hf=()=>{let e={string:{unit:\"\\u10E1\\u10D8\\u10DB\\u10D1\\u10DD\\u10DA\\u10DD\",verb:\"\\u10E3\\u10DC\\u10D3\\u10D0 \\u10E8\\u10D4\\u10D8\\u10EA\\u10D0\\u10D5\\u10D3\\u10D4\\u10E1\"},file:{unit:\"\\u10D1\\u10D0\\u10D8\\u10E2\\u10D8\",verb:\"\\u10E3\\u10DC\\u10D3\\u10D0 \\u10E8\\u10D4\\u10D8\\u10EA\\u10D0\\u10D5\\u10D3\\u10D4\\u10E1\"},array:{unit:\"\\u10D4\\u10DA\\u10D4\\u10DB\\u10D4\\u10DC\\u10E2\\u10D8\",verb:\"\\u10E3\\u10DC\\u10D3\\u10D0 \\u10E8\\u10D4\\u10D8\\u10EA\\u10D0\\u10D5\\u10D3\\u10D4\\u10E1\"},set:{unit:\"\\u10D4\\u10DA\\u10D4\\u10DB\\u10D4\\u10DC\\u10E2\\u10D8\",verb:\"\\u10E3\\u10DC\\u10D3\\u10D0 \\u10E8\\u10D4\\u10D8\\u10EA\\u10D0\\u10D5\\u10D3\\u10D4\\u10E1\"}};function i(t){return e[t]??null}let n={regex:\"\\u10E8\\u10D4\\u10E7\\u10D5\\u10D0\\u10DC\\u10D0\",email:\"\\u10D4\\u10DA-\\u10E4\\u10DD\\u10E1\\u10E2\\u10D8\\u10E1 \\u10DB\\u10D8\\u10E1\\u10D0\\u10DB\\u10D0\\u10E0\\u10D7\\u10D8\",url:\"URL\",emoji:\"\\u10D4\\u10DB\\u10DD\\u10EF\\u10D8\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"\\u10D7\\u10D0\\u10E0\\u10D8\\u10E6\\u10D8-\\u10D3\\u10E0\\u10DD\",date:\"\\u10D7\\u10D0\\u10E0\\u10D8\\u10E6\\u10D8\",time:\"\\u10D3\\u10E0\\u10DD\",duration:\"\\u10EE\\u10D0\\u10DC\\u10D2\\u10E0\\u10EB\\u10DA\\u10D8\\u10D5\\u10DD\\u10D1\\u10D0\",ipv4:\"IPv4 \\u10DB\\u10D8\\u10E1\\u10D0\\u10DB\\u10D0\\u10E0\\u10D7\\u10D8\",ipv6:\"IPv6 \\u10DB\\u10D8\\u10E1\\u10D0\\u10DB\\u10D0\\u10E0\\u10D7\\u10D8\",cidrv4:\"IPv4 \\u10D3\\u10D8\\u10D0\\u10DE\\u10D0\\u10D6\\u10DD\\u10DC\\u10D8\",cidrv6:\"IPv6 \\u10D3\\u10D8\\u10D0\\u10DE\\u10D0\\u10D6\\u10DD\\u10DC\\u10D8\",base64:\"base64-\\u10D9\\u10DD\\u10D3\\u10D8\\u10E0\\u10D4\\u10D1\\u10E3\\u10DA\\u10D8 \\u10E1\\u10E2\\u10E0\\u10D8\\u10DC\\u10D2\\u10D8\",base64url:\"base64url-\\u10D9\\u10DD\\u10D3\\u10D8\\u10E0\\u10D4\\u10D1\\u10E3\\u10DA\\u10D8 \\u10E1\\u10E2\\u10E0\\u10D8\\u10DC\\u10D2\\u10D8\",json_string:\"JSON \\u10E1\\u10E2\\u10E0\\u10D8\\u10DC\\u10D2\\u10D8\",e164:\"E.164 \\u10DC\\u10DD\\u10DB\\u10D4\\u10E0\\u10D8\",jwt:\"JWT\",template_literal:\"\\u10E8\\u10D4\\u10E7\\u10D5\\u10D0\\u10DC\\u10D0\"},a={nan:\"NaN\",number:\"\\u10E0\\u10D8\\u10EA\\u10EE\\u10D5\\u10D8\",string:\"\\u10E1\\u10E2\\u10E0\\u10D8\\u10DC\\u10D2\\u10D8\",boolean:\"\\u10D1\\u10E3\\u10DA\\u10D4\\u10D0\\u10DC\\u10D8\",function:\"\\u10E4\\u10E3\\u10DC\\u10E5\\u10EA\\u10D8\\u10D0\",array:\"\\u10DB\\u10D0\\u10E1\\u10D8\\u10D5\\u10D8\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10E8\\u10D4\\u10E7\\u10D5\\u10D0\\u10DC\\u10D0: \\u10DB\\u10DD\\u10E1\\u10D0\\u10DA\\u10DD\\u10D3\\u10DC\\u10D4\\u10DA\\u10D8 instanceof ${t.expected}, \\u10DB\\u10D8\\u10E6\\u10D4\\u10D1\\u10E3\\u10DA\\u10D8 ${s}`:`\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10E8\\u10D4\\u10E7\\u10D5\\u10D0\\u10DC\\u10D0: \\u10DB\\u10DD\\u10E1\\u10D0\\u10DA\\u10DD\\u10D3\\u10DC\\u10D4\\u10DA\\u10D8 ${r}, \\u10DB\\u10D8\\u10E6\\u10D4\\u10D1\\u10E3\\u10DA\\u10D8 ${s}`}case\"invalid_value\":return t.values.length===1?`\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10E8\\u10D4\\u10E7\\u10D5\\u10D0\\u10DC\\u10D0: \\u10DB\\u10DD\\u10E1\\u10D0\\u10DA\\u10DD\\u10D3\\u10DC\\u10D4\\u10DA\\u10D8 ${w(t.values[0])}`:`\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10D5\\u10D0\\u10E0\\u10D8\\u10D0\\u10DC\\u10E2\\u10D8: \\u10DB\\u10DD\\u10E1\\u10D0\\u10DA\\u10DD\\u10D3\\u10DC\\u10D4\\u10DA\\u10D8\\u10D0 \\u10D4\\u10E0\\u10D7-\\u10D4\\u10E0\\u10D7\\u10D8 ${v(t.values,\"|\")}-\\u10D3\\u10D0\\u10DC`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\u10D6\\u10D4\\u10D3\\u10DB\\u10D4\\u10E2\\u10D0\\u10D3 \\u10D3\\u10D8\\u10D3\\u10D8: \\u10DB\\u10DD\\u10E1\\u10D0\\u10DA\\u10DD\\u10D3\\u10DC\\u10D4\\u10DA\\u10D8 ${t.origin??\"\\u10DB\\u10DC\\u10D8\\u10E8\\u10D5\\u10DC\\u10D4\\u10DA\\u10DD\\u10D1\\u10D0\"} ${o.verb} ${r}${t.maximum.toString()} ${o.unit}`:`\\u10D6\\u10D4\\u10D3\\u10DB\\u10D4\\u10E2\\u10D0\\u10D3 \\u10D3\\u10D8\\u10D3\\u10D8: \\u10DB\\u10DD\\u10E1\\u10D0\\u10DA\\u10DD\\u10D3\\u10DC\\u10D4\\u10DA\\u10D8 ${t.origin??\"\\u10DB\\u10DC\\u10D8\\u10E8\\u10D5\\u10DC\\u10D4\\u10DA\\u10DD\\u10D1\\u10D0\"} \\u10D8\\u10E7\\u10DD\\u10E1 ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\u10D6\\u10D4\\u10D3\\u10DB\\u10D4\\u10E2\\u10D0\\u10D3 \\u10DE\\u10D0\\u10E2\\u10D0\\u10E0\\u10D0: \\u10DB\\u10DD\\u10E1\\u10D0\\u10DA\\u10DD\\u10D3\\u10DC\\u10D4\\u10DA\\u10D8 ${t.origin} ${o.verb} ${r}${t.minimum.toString()} ${o.unit}`:`\\u10D6\\u10D4\\u10D3\\u10DB\\u10D4\\u10E2\\u10D0\\u10D3 \\u10DE\\u10D0\\u10E2\\u10D0\\u10E0\\u10D0: \\u10DB\\u10DD\\u10E1\\u10D0\\u10DA\\u10DD\\u10D3\\u10DC\\u10D4\\u10DA\\u10D8 ${t.origin} \\u10D8\\u10E7\\u10DD\\u10E1 ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10E1\\u10E2\\u10E0\\u10D8\\u10DC\\u10D2\\u10D8: \\u10E3\\u10DC\\u10D3\\u10D0 \\u10D8\\u10EC\\u10E7\\u10D4\\u10D1\\u10DD\\u10D3\\u10D4\\u10E1 \"${r.prefix}\"-\\u10D8\\u10D7`:r.format===\"ends_with\"?`\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10E1\\u10E2\\u10E0\\u10D8\\u10DC\\u10D2\\u10D8: \\u10E3\\u10DC\\u10D3\\u10D0 \\u10DB\\u10D7\\u10D0\\u10D5\\u10E0\\u10D3\\u10D4\\u10D1\\u10DD\\u10D3\\u10D4\\u10E1 \"${r.suffix}\"-\\u10D8\\u10D7`:r.format===\"includes\"?`\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10E1\\u10E2\\u10E0\\u10D8\\u10DC\\u10D2\\u10D8: \\u10E3\\u10DC\\u10D3\\u10D0 \\u10E8\\u10D4\\u10D8\\u10EA\\u10D0\\u10D5\\u10D3\\u10D4\\u10E1 \"${r.includes}\"-\\u10E1`:r.format===\"regex\"?`\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10E1\\u10E2\\u10E0\\u10D8\\u10DC\\u10D2\\u10D8: \\u10E3\\u10DC\\u10D3\\u10D0 \\u10E8\\u10D4\\u10D4\\u10E1\\u10D0\\u10D1\\u10D0\\u10DB\\u10D4\\u10D1\\u10DD\\u10D3\\u10D4\\u10E1 \\u10E8\\u10D0\\u10D1\\u10DA\\u10DD\\u10DC\\u10E1 ${r.pattern}`:`\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10E0\\u10D8\\u10EA\\u10EE\\u10D5\\u10D8: \\u10E3\\u10DC\\u10D3\\u10D0 \\u10D8\\u10E7\\u10DD\\u10E1 ${t.divisor}-\\u10D8\\u10E1 \\u10EF\\u10D4\\u10E0\\u10D0\\u10D3\\u10D8`;case\"unrecognized_keys\":return`\\u10E3\\u10EA\\u10DC\\u10DD\\u10D1\\u10D8 \\u10D2\\u10D0\\u10E1\\u10D0\\u10E6\\u10D4\\u10D1${t.keys.length>1?\"\\u10D4\\u10D1\\u10D8\":\"\\u10D8\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10D2\\u10D0\\u10E1\\u10D0\\u10E6\\u10D4\\u10D1\\u10D8 ${t.origin}-\\u10E8\\u10D8`;case\"invalid_union\":return\"\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10E8\\u10D4\\u10E7\\u10D5\\u10D0\\u10DC\\u10D0\";case\"invalid_element\":return`\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10DB\\u10DC\\u10D8\\u10E8\\u10D5\\u10DC\\u10D4\\u10DA\\u10DD\\u10D1\\u10D0 ${t.origin}-\\u10E8\\u10D8`;default:return\"\\u10D0\\u10E0\\u10D0\\u10E1\\u10EC\\u10DD\\u10E0\\u10D8 \\u10E8\\u10D4\\u10E7\\u10D5\\u10D0\\u10DC\\u10D0\"}}},Wf=b(()=>{I()});function Hd(){return{localeError:Vf()}}var Vf=()=>{let e={string:{unit:\"\\u178F\\u17BD\\u17A2\\u1780\\u17D2\\u179F\\u179A\",verb:\"\\u1782\\u17BD\\u179A\\u1798\\u17B6\\u1793\"},file:{unit:\"\\u1794\\u17C3\",verb:\"\\u1782\\u17BD\\u179A\\u1798\\u17B6\\u1793\"},array:{unit:\"\\u1792\\u17B6\\u178F\\u17BB\",verb:\"\\u1782\\u17BD\\u179A\\u1798\\u17B6\\u1793\"},set:{unit:\"\\u1792\\u17B6\\u178F\\u17BB\",verb:\"\\u1782\\u17BD\\u179A\\u1798\\u17B6\\u1793\"}};function i(t){return e[t]??null}let n={regex:\"\\u1791\\u17B7\\u1793\\u17D2\\u1793\\u1793\\u17D0\\u1799\\u1794\\u1789\\u17D2\\u1785\\u17BC\\u179B\",email:\"\\u17A2\\u17B6\\u179F\\u1799\\u178A\\u17D2\\u178B\\u17B6\\u1793\\u17A2\\u17CA\\u17B8\\u1798\\u17C2\\u179B\",url:\"URL\",emoji:\"\\u179F\\u1789\\u17D2\\u1789\\u17B6\\u17A2\\u17B6\\u179A\\u1798\\u17D2\\u1798\\u178E\\u17CD\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"\\u1780\\u17B6\\u179B\\u1794\\u179A\\u17B7\\u1785\\u17D2\\u1786\\u17C1\\u1791 \\u1793\\u17B7\\u1784\\u1798\\u17C9\\u17C4\\u1784 ISO\",date:\"\\u1780\\u17B6\\u179B\\u1794\\u179A\\u17B7\\u1785\\u17D2\\u1786\\u17C1\\u1791 ISO\",time:\"\\u1798\\u17C9\\u17C4\\u1784 ISO\",duration:\"\\u179A\\u1799\\u17C8\\u1796\\u17C1\\u179B ISO\",ipv4:\"\\u17A2\\u17B6\\u179F\\u1799\\u178A\\u17D2\\u178B\\u17B6\\u1793 IPv4\",ipv6:\"\\u17A2\\u17B6\\u179F\\u1799\\u178A\\u17D2\\u178B\\u17B6\\u1793 IPv6\",cidrv4:\"\\u178A\\u17C2\\u1793\\u17A2\\u17B6\\u179F\\u1799\\u178A\\u17D2\\u178B\\u17B6\\u1793 IPv4\",cidrv6:\"\\u178A\\u17C2\\u1793\\u17A2\\u17B6\\u179F\\u1799\\u178A\\u17D2\\u178B\\u17B6\\u1793 IPv6\",base64:\"\\u1781\\u17D2\\u179F\\u17C2\\u17A2\\u1780\\u17D2\\u179F\\u179A\\u17A2\\u17CA\\u17B7\\u1780\\u17BC\\u178A base64\",base64url:\"\\u1781\\u17D2\\u179F\\u17C2\\u17A2\\u1780\\u17D2\\u179F\\u179A\\u17A2\\u17CA\\u17B7\\u1780\\u17BC\\u178A base64url\",json_string:\"\\u1781\\u17D2\\u179F\\u17C2\\u17A2\\u1780\\u17D2\\u179F\\u179A JSON\",e164:\"\\u179B\\u17C1\\u1781 E.164\",jwt:\"JWT\",template_literal:\"\\u1791\\u17B7\\u1793\\u17D2\\u1793\\u1793\\u17D0\\u1799\\u1794\\u1789\\u17D2\\u1785\\u17BC\\u179B\"},a={nan:\"NaN\",number:\"\\u179B\\u17C1\\u1781\",array:\"\\u17A2\\u17B6\\u179A\\u17C1 (Array)\",null:\"\\u1782\\u17D2\\u1798\\u17B6\\u1793\\u178F\\u1798\\u17D2\\u179B\\u17C3 (null)\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u1791\\u17B7\\u1793\\u17D2\\u1793\\u1793\\u17D0\\u1799\\u1794\\u1789\\u17D2\\u1785\\u17BC\\u179B\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1780\\u17B6\\u179A instanceof ${t.expected} \\u1794\\u17C9\\u17BB\\u1793\\u17D2\\u178F\\u17C2\\u1791\\u1791\\u17BD\\u179B\\u1794\\u17B6\\u1793 ${s}`:`\\u1791\\u17B7\\u1793\\u17D2\\u1793\\u1793\\u17D0\\u1799\\u1794\\u1789\\u17D2\\u1785\\u17BC\\u179B\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1780\\u17B6\\u179A ${r} \\u1794\\u17C9\\u17BB\\u1793\\u17D2\\u178F\\u17C2\\u1791\\u1791\\u17BD\\u179B\\u1794\\u17B6\\u1793 ${s}`}case\"invalid_value\":return t.values.length===1?`\\u1791\\u17B7\\u1793\\u17D2\\u1793\\u1793\\u17D0\\u1799\\u1794\\u1789\\u17D2\\u1785\\u17BC\\u179B\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1780\\u17B6\\u179A ${w(t.values[0])}`:`\\u1787\\u1798\\u17D2\\u179A\\u17BE\\u179F\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1787\\u17B6\\u1798\\u17BD\\u1799\\u1780\\u17D2\\u1793\\u17BB\\u1784\\u1785\\u17C6\\u178E\\u17C4\\u1798 ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\u1792\\u17C6\\u1796\\u17C1\\u1780\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1780\\u17B6\\u179A ${t.origin??\"\\u178F\\u1798\\u17D2\\u179B\\u17C3\"} ${r} ${t.maximum.toString()} ${o.unit??\"\\u1792\\u17B6\\u178F\\u17BB\"}`:`\\u1792\\u17C6\\u1796\\u17C1\\u1780\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1780\\u17B6\\u179A ${t.origin??\"\\u178F\\u1798\\u17D2\\u179B\\u17C3\"} ${r} ${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\u178F\\u17BC\\u1785\\u1796\\u17C1\\u1780\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1780\\u17B6\\u179A ${t.origin} ${r} ${t.minimum.toString()} ${o.unit}`:`\\u178F\\u17BC\\u1785\\u1796\\u17C1\\u1780\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1780\\u17B6\\u179A ${t.origin} ${r} ${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u1781\\u17D2\\u179F\\u17C2\\u17A2\\u1780\\u17D2\\u179F\\u179A\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1785\\u17B6\\u1794\\u17CB\\u1795\\u17D2\\u178F\\u17BE\\u1798\\u178A\\u17C4\\u1799 \"${r.prefix}\"`:r.format===\"ends_with\"?`\\u1781\\u17D2\\u179F\\u17C2\\u17A2\\u1780\\u17D2\\u179F\\u179A\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1794\\u1789\\u17D2\\u1785\\u1794\\u17CB\\u178A\\u17C4\\u1799 \"${r.suffix}\"`:r.format===\"includes\"?`\\u1781\\u17D2\\u179F\\u17C2\\u17A2\\u1780\\u17D2\\u179F\\u179A\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1798\\u17B6\\u1793 \"${r.includes}\"`:r.format===\"regex\"?`\\u1781\\u17D2\\u179F\\u17C2\\u17A2\\u1780\\u17D2\\u179F\\u179A\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u178F\\u17C2\\u1795\\u17D2\\u1782\\u17BC\\u1795\\u17D2\\u1782\\u1784\\u1793\\u17B9\\u1784\\u1791\\u1798\\u17D2\\u179A\\u1784\\u17CB\\u178A\\u17C2\\u179B\\u1794\\u17B6\\u1793\\u1780\\u17C6\\u178E\\u178F\\u17CB ${r.pattern}`:`\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u17D6 ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u179B\\u17C1\\u1781\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u17D6 \\u178F\\u17D2\\u179A\\u17BC\\u179C\\u178F\\u17C2\\u1787\\u17B6\\u1796\\u17A0\\u17BB\\u1782\\u17BB\\u178E\\u1793\\u17C3 ${t.divisor}`;case\"unrecognized_keys\":return`\\u179A\\u1780\\u1783\\u17BE\\u1789\\u179F\\u17C4\\u1798\\u17B7\\u1793\\u179F\\u17D2\\u1782\\u17B6\\u179B\\u17CB\\u17D6 ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\u179F\\u17C4\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1793\\u17C5\\u1780\\u17D2\\u1793\\u17BB\\u1784 ${t.origin}`;case\"invalid_union\":return\"\\u1791\\u17B7\\u1793\\u17D2\\u1793\\u1793\\u17D0\\u1799\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\";case\"invalid_element\":return`\\u1791\\u17B7\\u1793\\u17D2\\u1793\\u1793\\u17D0\\u1799\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\\u1793\\u17C5\\u1780\\u17D2\\u1793\\u17BB\\u1784 ${t.origin}`;default:return\"\\u1791\\u17B7\\u1793\\u17D2\\u1793\\u1793\\u17D0\\u1799\\u1798\\u17B7\\u1793\\u178F\\u17D2\\u179A\\u17B9\\u1798\\u178F\\u17D2\\u179A\\u17BC\\u179C\"}}},Wd=b(()=>{I()});function Kf(){return Hd()}var Bf=b(()=>{Wd()});function Gf(){return{localeError:Xf()}}var Xf=()=>{let e={string:{unit:\"\\uBB38\\uC790\",verb:\"to have\"},file:{unit:\"\\uBC14\\uC774\\uD2B8\",verb:\"to have\"},array:{unit:\"\\uAC1C\",verb:\"to have\"},set:{unit:\"\\uAC1C\",verb:\"to have\"}};function i(t){return e[t]??null}let n={regex:\"\\uC785\\uB825\",email:\"\\uC774\\uBA54\\uC77C \\uC8FC\\uC18C\",url:\"URL\",emoji:\"\\uC774\\uBAA8\\uC9C0\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO \\uB0A0\\uC9DC\\uC2DC\\uAC04\",date:\"ISO \\uB0A0\\uC9DC\",time:\"ISO \\uC2DC\\uAC04\",duration:\"ISO \\uAE30\\uAC04\",ipv4:\"IPv4 \\uC8FC\\uC18C\",ipv6:\"IPv6 \\uC8FC\\uC18C\",cidrv4:\"IPv4 \\uBC94\\uC704\",cidrv6:\"IPv6 \\uBC94\\uC704\",base64:\"base64 \\uC778\\uCF54\\uB529 \\uBB38\\uC790\\uC5F4\",base64url:\"base64url \\uC778\\uCF54\\uB529 \\uBB38\\uC790\\uC5F4\",json_string:\"JSON \\uBB38\\uC790\\uC5F4\",e164:\"E.164 \\uBC88\\uD638\",jwt:\"JWT\",template_literal:\"\\uC785\\uB825\"},a={nan:\"NaN\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\uC798\\uBABB\\uB41C \\uC785\\uB825: \\uC608\\uC0C1 \\uD0C0\\uC785\\uC740 instanceof ${t.expected}, \\uBC1B\\uC740 \\uD0C0\\uC785\\uC740 ${s}\\uC785\\uB2C8\\uB2E4`:`\\uC798\\uBABB\\uB41C \\uC785\\uB825: \\uC608\\uC0C1 \\uD0C0\\uC785\\uC740 ${r}, \\uBC1B\\uC740 \\uD0C0\\uC785\\uC740 ${s}\\uC785\\uB2C8\\uB2E4`}case\"invalid_value\":return t.values.length===1?`\\uC798\\uBABB\\uB41C \\uC785\\uB825: \\uAC12\\uC740 ${w(t.values[0])} \\uC774\\uC5B4\\uC57C \\uD569\\uB2C8\\uB2E4`:`\\uC798\\uBABB\\uB41C \\uC635\\uC158: ${v(t.values,\"\\uB610\\uB294 \")} \\uC911 \\uD558\\uB098\\uC5EC\\uC57C \\uD569\\uB2C8\\uB2E4`;case\"too_big\":{let r=t.inclusive?\"\\uC774\\uD558\":\"\\uBBF8\\uB9CC\",o=r===\"\\uBBF8\\uB9CC\"?\"\\uC774\\uC5B4\\uC57C \\uD569\\uB2C8\\uB2E4\":\"\\uC5EC\\uC57C \\uD569\\uB2C8\\uB2E4\",s=i(t.origin),u=s?.unit??\"\\uC694\\uC18C\";return s?`${t.origin??\"\\uAC12\"}\\uC774 \\uB108\\uBB34 \\uD07D\\uB2C8\\uB2E4: ${t.maximum.toString()}${u} ${r}${o}`:`${t.origin??\"\\uAC12\"}\\uC774 \\uB108\\uBB34 \\uD07D\\uB2C8\\uB2E4: ${t.maximum.toString()} ${r}${o}`}case\"too_small\":{let r=t.inclusive?\"\\uC774\\uC0C1\":\"\\uCD08\\uACFC\",o=r===\"\\uC774\\uC0C1\"?\"\\uC774\\uC5B4\\uC57C \\uD569\\uB2C8\\uB2E4\":\"\\uC5EC\\uC57C \\uD569\\uB2C8\\uB2E4\",s=i(t.origin),u=s?.unit??\"\\uC694\\uC18C\";return s?`${t.origin??\"\\uAC12\"}\\uC774 \\uB108\\uBB34 \\uC791\\uC2B5\\uB2C8\\uB2E4: ${t.minimum.toString()}${u} ${r}${o}`:`${t.origin??\"\\uAC12\"}\\uC774 \\uB108\\uBB34 \\uC791\\uC2B5\\uB2C8\\uB2E4: ${t.minimum.toString()} ${r}${o}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\uC798\\uBABB\\uB41C \\uBB38\\uC790\\uC5F4: \"${r.prefix}\"(\\uC73C)\\uB85C \\uC2DC\\uC791\\uD574\\uC57C \\uD569\\uB2C8\\uB2E4`:r.format===\"ends_with\"?`\\uC798\\uBABB\\uB41C \\uBB38\\uC790\\uC5F4: \"${r.suffix}\"(\\uC73C)\\uB85C \\uB05D\\uB098\\uC57C \\uD569\\uB2C8\\uB2E4`:r.format===\"includes\"?`\\uC798\\uBABB\\uB41C \\uBB38\\uC790\\uC5F4: \"${r.includes}\"\\uC744(\\uB97C) \\uD3EC\\uD568\\uD574\\uC57C \\uD569\\uB2C8\\uB2E4`:r.format===\"regex\"?`\\uC798\\uBABB\\uB41C \\uBB38\\uC790\\uC5F4: \\uC815\\uADDC\\uC2DD ${r.pattern} \\uD328\\uD134\\uACFC \\uC77C\\uCE58\\uD574\\uC57C \\uD569\\uB2C8\\uB2E4`:`\\uC798\\uBABB\\uB41C ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\uC798\\uBABB\\uB41C \\uC22B\\uC790: ${t.divisor}\\uC758 \\uBC30\\uC218\\uC5EC\\uC57C \\uD569\\uB2C8\\uB2E4`;case\"unrecognized_keys\":return`\\uC778\\uC2DD\\uD560 \\uC218 \\uC5C6\\uB294 \\uD0A4: ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\uC798\\uBABB\\uB41C \\uD0A4: ${t.origin}`;case\"invalid_union\":return\"\\uC798\\uBABB\\uB41C \\uC785\\uB825\";case\"invalid_element\":return`\\uC798\\uBABB\\uB41C \\uAC12: ${t.origin}`;default:return\"\\uC798\\uBABB\\uB41C \\uC785\\uB825\"}}},Yf=b(()=>{I()});function Nl(e){let i=Math.abs(e),n=i%10,a=i%100;return a>=11&&a<=19||n===0?\"many\":n===1?\"one\":\"few\"}function Qf(){return{localeError:eg()}}var Pt=e=>e.charAt(0).toUpperCase()+e.slice(1),eg=()=>{let e={string:{unit:{one:\"simbolis\",few:\"simboliai\",many:\"simboli\\u0173\"},verb:{smaller:{inclusive:\"turi b\\u016Bti ne ilgesn\\u0117 kaip\",notInclusive:\"turi b\\u016Bti trumpesn\\u0117 kaip\"},bigger:{inclusive:\"turi b\\u016Bti ne trumpesn\\u0117 kaip\",notInclusive:\"turi b\\u016Bti ilgesn\\u0117 kaip\"}}},file:{unit:{one:\"baitas\",few:\"baitai\",many:\"bait\\u0173\"},verb:{smaller:{inclusive:\"turi b\\u016Bti ne didesnis kaip\",notInclusive:\"turi b\\u016Bti ma\\u017Eesnis kaip\"},bigger:{inclusive:\"turi b\\u016Bti ne ma\\u017Eesnis kaip\",notInclusive:\"turi b\\u016Bti didesnis kaip\"}}},array:{unit:{one:\"element\\u0105\",few:\"elementus\",many:\"element\\u0173\"},verb:{smaller:{inclusive:\"turi tur\\u0117ti ne daugiau kaip\",notInclusive:\"turi tur\\u0117ti ma\\u017Eiau kaip\"},bigger:{inclusive:\"turi tur\\u0117ti ne ma\\u017Eiau kaip\",notInclusive:\"turi tur\\u0117ti daugiau kaip\"}}},set:{unit:{one:\"element\\u0105\",few:\"elementus\",many:\"element\\u0173\"},verb:{smaller:{inclusive:\"turi tur\\u0117ti ne daugiau kaip\",notInclusive:\"turi tur\\u0117ti ma\\u017Eiau kaip\"},bigger:{inclusive:\"turi tur\\u0117ti ne ma\\u017Eiau kaip\",notInclusive:\"turi tur\\u0117ti daugiau kaip\"}}}};function i(t,r,o,s){let u=e[t]??null;return u===null?u:{unit:u.unit[r],verb:u.verb[s][o?\"inclusive\":\"notInclusive\"]}}let n={regex:\"\\u012Fvestis\",email:\"el. pa\\u0161to adresas\",url:\"URL\",emoji:\"jaustukas\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO data ir laikas\",date:\"ISO data\",time:\"ISO laikas\",duration:\"ISO trukm\\u0117\",ipv4:\"IPv4 adresas\",ipv6:\"IPv6 adresas\",cidrv4:\"IPv4 tinklo prefiksas (CIDR)\",cidrv6:\"IPv6 tinklo prefiksas (CIDR)\",base64:\"base64 u\\u017Ekoduota eilut\\u0117\",base64url:\"base64url u\\u017Ekoduota eilut\\u0117\",json_string:\"JSON eilut\\u0117\",e164:\"E.164 numeris\",jwt:\"JWT\",template_literal:\"\\u012Fvestis\"},a={nan:\"NaN\",number:\"skai\\u010Dius\",bigint:\"sveikasis skai\\u010Dius\",string:\"eilut\\u0117\",boolean:\"login\\u0117 reik\\u0161m\\u0117\",undefined:\"neapibr\\u0117\\u017Eta reik\\u0161m\\u0117\",function:\"funkcija\",symbol:\"simbolis\",array:\"masyvas\",object:\"objektas\",null:\"nulin\\u0117 reik\\u0161m\\u0117\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Gautas tipas ${s}, o tik\\u0117tasi - instanceof ${t.expected}`:`Gautas tipas ${s}, o tik\\u0117tasi - ${r}`}case\"invalid_value\":return t.values.length===1?`Privalo b\\u016Bti ${w(t.values[0])}`:`Privalo b\\u016Bti vienas i\\u0161 ${v(t.values,\"|\")} pasirinkim\\u0173`;case\"too_big\":{let r=a[t.origin]??t.origin,o=i(t.origin,Nl(Number(t.maximum)),t.inclusive??!1,\"smaller\");if(o?.verb)return`${Pt(r??t.origin??\"reik\\u0161m\\u0117\")} ${o.verb} ${t.maximum.toString()} ${o.unit??\"element\\u0173\"}`;let s=t.inclusive?\"ne didesnis kaip\":\"ma\\u017Eesnis kaip\";return`${Pt(r??t.origin??\"reik\\u0161m\\u0117\")} turi b\\u016Bti ${s} ${t.maximum.toString()} ${o?.unit}`}case\"too_small\":{let r=a[t.origin]??t.origin,o=i(t.origin,Nl(Number(t.minimum)),t.inclusive??!1,\"bigger\");if(o?.verb)return`${Pt(r??t.origin??\"reik\\u0161m\\u0117\")} ${o.verb} ${t.minimum.toString()} ${o.unit??\"element\\u0173\"}`;let s=t.inclusive?\"ne ma\\u017Eesnis kaip\":\"didesnis kaip\";return`${Pt(r??t.origin??\"reik\\u0161m\\u0117\")} turi b\\u016Bti ${s} ${t.minimum.toString()} ${o?.unit}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Eilut\\u0117 privalo prasid\\u0117ti \"${r.prefix}\"`:r.format===\"ends_with\"?`Eilut\\u0117 privalo pasibaigti \"${r.suffix}\"`:r.format===\"includes\"?`Eilut\\u0117 privalo \\u012Ftraukti \"${r.includes}\"`:r.format===\"regex\"?`Eilut\\u0117 privalo atitikti ${r.pattern}`:`Neteisingas ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Skai\\u010Dius privalo b\\u016Bti ${t.divisor} kartotinis.`;case\"unrecognized_keys\":return`Neatpa\\u017Eint${t.keys.length>1?\"i\":\"as\"} rakt${t.keys.length>1?\"ai\":\"as\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return\"Rastas klaidingas raktas\";case\"invalid_union\":return\"Klaidinga \\u012Fvestis\";case\"invalid_element\":{let r=a[t.origin]??t.origin;return`${Pt(r??t.origin??\"reik\\u0161m\\u0117\")} turi klaiding\\u0105 \\u012Fvest\\u012F`}default:return\"Klaidinga \\u012Fvestis\"}}},tg=b(()=>{I()});function ig(){return{localeError:ng()}}var ng=()=>{let e={string:{unit:\"\\u0437\\u043D\\u0430\\u0446\\u0438\",verb:\"\\u0434\\u0430 \\u0438\\u043C\\u0430\\u0430\\u0442\"},file:{unit:\"\\u0431\\u0430\\u0458\\u0442\\u0438\",verb:\"\\u0434\\u0430 \\u0438\\u043C\\u0430\\u0430\\u0442\"},array:{unit:\"\\u0441\\u0442\\u0430\\u0432\\u043A\\u0438\",verb:\"\\u0434\\u0430 \\u0438\\u043C\\u0430\\u0430\\u0442\"},set:{unit:\"\\u0441\\u0442\\u0430\\u0432\\u043A\\u0438\",verb:\"\\u0434\\u0430 \\u0438\\u043C\\u0430\\u0430\\u0442\"}};function i(t){return e[t]??null}let n={regex:\"\\u0432\\u043D\\u0435\\u0441\",email:\"\\u0430\\u0434\\u0440\\u0435\\u0441\\u0430 \\u043D\\u0430 \\u0435-\\u043F\\u043E\\u0448\\u0442\\u0430\",url:\"URL\",emoji:\"\\u0435\\u043C\\u043E\\u045F\\u0438\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO \\u0434\\u0430\\u0442\\u0443\\u043C \\u0438 \\u0432\\u0440\\u0435\\u043C\\u0435\",date:\"ISO \\u0434\\u0430\\u0442\\u0443\\u043C\",time:\"ISO \\u0432\\u0440\\u0435\\u043C\\u0435\",duration:\"ISO \\u0432\\u0440\\u0435\\u043C\\u0435\\u0442\\u0440\\u0430\\u0435\\u045A\\u0435\",ipv4:\"IPv4 \\u0430\\u0434\\u0440\\u0435\\u0441\\u0430\",ipv6:\"IPv6 \\u0430\\u0434\\u0440\\u0435\\u0441\\u0430\",cidrv4:\"IPv4 \\u043E\\u043F\\u0441\\u0435\\u0433\",cidrv6:\"IPv6 \\u043E\\u043F\\u0441\\u0435\\u0433\",base64:\"base64-\\u0435\\u043D\\u043A\\u043E\\u0434\\u0438\\u0440\\u0430\\u043D\\u0430 \\u043D\\u0438\\u0437\\u0430\",base64url:\"base64url-\\u0435\\u043D\\u043A\\u043E\\u0434\\u0438\\u0440\\u0430\\u043D\\u0430 \\u043D\\u0438\\u0437\\u0430\",json_string:\"JSON \\u043D\\u0438\\u0437\\u0430\",e164:\"E.164 \\u0431\\u0440\\u043E\\u0458\",jwt:\"JWT\",template_literal:\"\\u0432\\u043D\\u0435\\u0441\"},a={nan:\"NaN\",number:\"\\u0431\\u0440\\u043E\\u0458\",array:\"\\u043D\\u0438\\u0437\\u0430\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u0413\\u0440\\u0435\\u0448\\u0435\\u043D \\u0432\\u043D\\u0435\\u0441: \\u0441\\u0435 \\u043E\\u0447\\u0435\\u043A\\u0443\\u0432\\u0430 instanceof ${t.expected}, \\u043F\\u0440\\u0438\\u043C\\u0435\\u043D\\u043E ${s}`:`\\u0413\\u0440\\u0435\\u0448\\u0435\\u043D \\u0432\\u043D\\u0435\\u0441: \\u0441\\u0435 \\u043E\\u0447\\u0435\\u043A\\u0443\\u0432\\u0430 ${r}, \\u043F\\u0440\\u0438\\u043C\\u0435\\u043D\\u043E ${s}`}case\"invalid_value\":return t.values.length===1?`Invalid input: expected ${w(t.values[0])}`:`\\u0413\\u0440\\u0435\\u0448\\u0430\\u043D\\u0430 \\u043E\\u043F\\u0446\\u0438\\u0458\\u0430: \\u0441\\u0435 \\u043E\\u0447\\u0435\\u043A\\u0443\\u0432\\u0430 \\u0435\\u0434\\u043D\\u0430 ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\u041F\\u0440\\u0435\\u043C\\u043D\\u043E\\u0433\\u0443 \\u0433\\u043E\\u043B\\u0435\\u043C: \\u0441\\u0435 \\u043E\\u0447\\u0435\\u043A\\u0443\\u0432\\u0430 ${t.origin??\"\\u0432\\u0440\\u0435\\u0434\\u043D\\u043E\\u0441\\u0442\\u0430\"} \\u0434\\u0430 \\u0438\\u043C\\u0430 ${r}${t.maximum.toString()} ${o.unit??\"\\u0435\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u0438\"}`:`\\u041F\\u0440\\u0435\\u043C\\u043D\\u043E\\u0433\\u0443 \\u0433\\u043E\\u043B\\u0435\\u043C: \\u0441\\u0435 \\u043E\\u0447\\u0435\\u043A\\u0443\\u0432\\u0430 ${t.origin??\"\\u0432\\u0440\\u0435\\u0434\\u043D\\u043E\\u0441\\u0442\\u0430\"} \\u0434\\u0430 \\u0431\\u0438\\u0434\\u0435 ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\u041F\\u0440\\u0435\\u043C\\u043D\\u043E\\u0433\\u0443 \\u043C\\u0430\\u043B: \\u0441\\u0435 \\u043E\\u0447\\u0435\\u043A\\u0443\\u0432\\u0430 ${t.origin} \\u0434\\u0430 \\u0438\\u043C\\u0430 ${r}${t.minimum.toString()} ${o.unit}`:`\\u041F\\u0440\\u0435\\u043C\\u043D\\u043E\\u0433\\u0443 \\u043C\\u0430\\u043B: \\u0441\\u0435 \\u043E\\u0447\\u0435\\u043A\\u0443\\u0432\\u0430 ${t.origin} \\u0434\\u0430 \\u0431\\u0438\\u0434\\u0435 ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u041D\\u0435\\u0432\\u0430\\u0436\\u0435\\u0447\\u043A\\u0430 \\u043D\\u0438\\u0437\\u0430: \\u043C\\u043E\\u0440\\u0430 \\u0434\\u0430 \\u0437\\u0430\\u043F\\u043E\\u0447\\u043D\\u0443\\u0432\\u0430 \\u0441\\u043E \"${r.prefix}\"`:r.format===\"ends_with\"?`\\u041D\\u0435\\u0432\\u0430\\u0436\\u0435\\u0447\\u043A\\u0430 \\u043D\\u0438\\u0437\\u0430: \\u043C\\u043E\\u0440\\u0430 \\u0434\\u0430 \\u0437\\u0430\\u0432\\u0440\\u0448\\u0443\\u0432\\u0430 \\u0441\\u043E \"${r.suffix}\"`:r.format===\"includes\"?`\\u041D\\u0435\\u0432\\u0430\\u0436\\u0435\\u0447\\u043A\\u0430 \\u043D\\u0438\\u0437\\u0430: \\u043C\\u043E\\u0440\\u0430 \\u0434\\u0430 \\u0432\\u043A\\u043B\\u0443\\u0447\\u0443\\u0432\\u0430 \"${r.includes}\"`:r.format===\"regex\"?`\\u041D\\u0435\\u0432\\u0430\\u0436\\u0435\\u0447\\u043A\\u0430 \\u043D\\u0438\\u0437\\u0430: \\u043C\\u043E\\u0440\\u0430 \\u0434\\u0430 \\u043E\\u0434\\u0433\\u043E\\u0430\\u0440\\u0430 \\u043D\\u0430 \\u043F\\u0430\\u0442\\u0435\\u0440\\u043D\\u043E\\u0442 ${r.pattern}`:`Invalid ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u0413\\u0440\\u0435\\u0448\\u0435\\u043D \\u0431\\u0440\\u043E\\u0458: \\u043C\\u043E\\u0440\\u0430 \\u0434\\u0430 \\u0431\\u0438\\u0434\\u0435 \\u0434\\u0435\\u043B\\u0438\\u0432 \\u0441\\u043E ${t.divisor}`;case\"unrecognized_keys\":return`${t.keys.length>1?\"\\u041D\\u0435\\u043F\\u0440\\u0435\\u043F\\u043E\\u0437\\u043D\\u0430\\u0435\\u043D\\u0438 \\u043A\\u043B\\u0443\\u0447\\u0435\\u0432\\u0438\":\"\\u041D\\u0435\\u043F\\u0440\\u0435\\u043F\\u043E\\u0437\\u043D\\u0430\\u0435\\u043D \\u043A\\u043B\\u0443\\u0447\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\u0413\\u0440\\u0435\\u0448\\u0435\\u043D \\u043A\\u043B\\u0443\\u0447 \\u0432\\u043E ${t.origin}`;case\"invalid_union\":return\"\\u0413\\u0440\\u0435\\u0448\\u0435\\u043D \\u0432\\u043D\\u0435\\u0441\";case\"invalid_element\":return`\\u0413\\u0440\\u0435\\u0448\\u043D\\u0430 \\u0432\\u0440\\u0435\\u0434\\u043D\\u043E\\u0441\\u0442 \\u0432\\u043E ${t.origin}`;default:return\"\\u0413\\u0440\\u0435\\u0448\\u0435\\u043D \\u0432\\u043D\\u0435\\u0441\"}}},rg=b(()=>{I()});function ag(){return{localeError:og()}}var og=()=>{let e={string:{unit:\"aksara\",verb:\"mempunyai\"},file:{unit:\"bait\",verb:\"mempunyai\"},array:{unit:\"elemen\",verb:\"mempunyai\"},set:{unit:\"elemen\",verb:\"mempunyai\"}};function i(t){return e[t]??null}let n={regex:\"input\",email:\"alamat e-mel\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"tarikh masa ISO\",date:\"tarikh ISO\",time:\"masa ISO\",duration:\"tempoh ISO\",ipv4:\"alamat IPv4\",ipv6:\"alamat IPv6\",cidrv4:\"julat IPv4\",cidrv6:\"julat IPv6\",base64:\"string dikodkan base64\",base64url:\"string dikodkan base64url\",json_string:\"string JSON\",e164:\"nombor E.164\",jwt:\"JWT\",template_literal:\"input\"},a={nan:\"NaN\",number:\"nombor\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Input tidak sah: dijangka instanceof ${t.expected}, diterima ${s}`:`Input tidak sah: dijangka ${r}, diterima ${s}`}case\"invalid_value\":return t.values.length===1?`Input tidak sah: dijangka ${w(t.values[0])}`:`Pilihan tidak sah: dijangka salah satu daripada ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Terlalu besar: dijangka ${t.origin??\"nilai\"} ${o.verb} ${r}${t.maximum.toString()} ${o.unit??\"elemen\"}`:`Terlalu besar: dijangka ${t.origin??\"nilai\"} adalah ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Terlalu kecil: dijangka ${t.origin} ${o.verb} ${r}${t.minimum.toString()} ${o.unit}`:`Terlalu kecil: dijangka ${t.origin} adalah ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`String tidak sah: mesti bermula dengan \"${r.prefix}\"`:r.format===\"ends_with\"?`String tidak sah: mesti berakhir dengan \"${r.suffix}\"`:r.format===\"includes\"?`String tidak sah: mesti mengandungi \"${r.includes}\"`:r.format===\"regex\"?`String tidak sah: mesti sepadan dengan corak ${r.pattern}`:`${n[r.format]??t.format} tidak sah`}case\"not_multiple_of\":return`Nombor tidak sah: perlu gandaan ${t.divisor}`;case\"unrecognized_keys\":return`Kunci tidak dikenali: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Kunci tidak sah dalam ${t.origin}`;case\"invalid_union\":return\"Input tidak sah\";case\"invalid_element\":return`Nilai tidak sah dalam ${t.origin}`;default:return\"Input tidak sah\"}}},sg=b(()=>{I()});function ug(){return{localeError:lg()}}var lg=()=>{let e={string:{unit:\"tekens\",verb:\"heeft\"},file:{unit:\"bytes\",verb:\"heeft\"},array:{unit:\"elementen\",verb:\"heeft\"},set:{unit:\"elementen\",verb:\"heeft\"}};function i(t){return e[t]??null}let n={regex:\"invoer\",email:\"emailadres\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO datum en tijd\",date:\"ISO datum\",time:\"ISO tijd\",duration:\"ISO duur\",ipv4:\"IPv4-adres\",ipv6:\"IPv6-adres\",cidrv4:\"IPv4-bereik\",cidrv6:\"IPv6-bereik\",base64:\"base64-gecodeerde tekst\",base64url:\"base64 URL-gecodeerde tekst\",json_string:\"JSON string\",e164:\"E.164-nummer\",jwt:\"JWT\",template_literal:\"invoer\"},a={nan:\"NaN\",number:\"getal\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Ongeldige invoer: verwacht instanceof ${t.expected}, ontving ${s}`:`Ongeldige invoer: verwacht ${r}, ontving ${s}`}case\"invalid_value\":return t.values.length===1?`Ongeldige invoer: verwacht ${w(t.values[0])}`:`Ongeldige optie: verwacht \\xE9\\xE9n van ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin),s=t.origin===\"date\"?\"laat\":t.origin===\"string\"?\"lang\":\"groot\";return o?`Te ${s}: verwacht dat ${t.origin??\"waarde\"} ${r}${t.maximum.toString()} ${o.unit??\"elementen\"} ${o.verb}`:`Te ${s}: verwacht dat ${t.origin??\"waarde\"} ${r}${t.maximum.toString()} is`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin),s=t.origin===\"date\"?\"vroeg\":t.origin===\"string\"?\"kort\":\"klein\";return o?`Te ${s}: verwacht dat ${t.origin} ${r}${t.minimum.toString()} ${o.unit} ${o.verb}`:`Te ${s}: verwacht dat ${t.origin} ${r}${t.minimum.toString()} is`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Ongeldige tekst: moet met \"${r.prefix}\" beginnen`:r.format===\"ends_with\"?`Ongeldige tekst: moet op \"${r.suffix}\" eindigen`:r.format===\"includes\"?`Ongeldige tekst: moet \"${r.includes}\" bevatten`:r.format===\"regex\"?`Ongeldige tekst: moet overeenkomen met patroon ${r.pattern}`:`Ongeldig: ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Ongeldig getal: moet een veelvoud van ${t.divisor} zijn`;case\"unrecognized_keys\":return`Onbekende key${t.keys.length>1?\"s\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Ongeldige key in ${t.origin}`;case\"invalid_union\":return\"Ongeldige invoer\";case\"invalid_element\":return`Ongeldige waarde in ${t.origin}`;default:return\"Ongeldige invoer\"}}},dg=b(()=>{I()});function cg(){return{localeError:mg()}}var mg=()=>{let e={string:{unit:\"tegn\",verb:\"\\xE5 ha\"},file:{unit:\"bytes\",verb:\"\\xE5 ha\"},array:{unit:\"elementer\",verb:\"\\xE5 inneholde\"},set:{unit:\"elementer\",verb:\"\\xE5 inneholde\"}};function i(t){return e[t]??null}let n={regex:\"input\",email:\"e-postadresse\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO dato- og klokkeslett\",date:\"ISO-dato\",time:\"ISO-klokkeslett\",duration:\"ISO-varighet\",ipv4:\"IPv4-omr\\xE5de\",ipv6:\"IPv6-omr\\xE5de\",cidrv4:\"IPv4-spekter\",cidrv6:\"IPv6-spekter\",base64:\"base64-enkodet streng\",base64url:\"base64url-enkodet streng\",json_string:\"JSON-streng\",e164:\"E.164-nummer\",jwt:\"JWT\",template_literal:\"input\"},a={nan:\"NaN\",number:\"tall\",array:\"liste\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Ugyldig input: forventet instanceof ${t.expected}, fikk ${s}`:`Ugyldig input: forventet ${r}, fikk ${s}`}case\"invalid_value\":return t.values.length===1?`Ugyldig verdi: forventet ${w(t.values[0])}`:`Ugyldig valg: forventet en av ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`For stor(t): forventet ${t.origin??\"value\"} til \\xE5 ha ${r}${t.maximum.toString()} ${o.unit??\"elementer\"}`:`For stor(t): forventet ${t.origin??\"value\"} til \\xE5 ha ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`For lite(n): forventet ${t.origin} til \\xE5 ha ${r}${t.minimum.toString()} ${o.unit}`:`For lite(n): forventet ${t.origin} til \\xE5 ha ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Ugyldig streng: m\\xE5 starte med \"${r.prefix}\"`:r.format===\"ends_with\"?`Ugyldig streng: m\\xE5 ende med \"${r.suffix}\"`:r.format===\"includes\"?`Ugyldig streng: m\\xE5 inneholde \"${r.includes}\"`:r.format===\"regex\"?`Ugyldig streng: m\\xE5 matche m\\xF8nsteret ${r.pattern}`:`Ugyldig ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Ugyldig tall: m\\xE5 v\\xE6re et multiplum av ${t.divisor}`;case\"unrecognized_keys\":return`${t.keys.length>1?\"Ukjente n\\xF8kler\":\"Ukjent n\\xF8kkel\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Ugyldig n\\xF8kkel i ${t.origin}`;case\"invalid_union\":return\"Ugyldig input\";case\"invalid_element\":return`Ugyldig verdi i ${t.origin}`;default:return\"Ugyldig input\"}}},pg=b(()=>{I()});function fg(){return{localeError:gg()}}var gg=()=>{let e={string:{unit:\"harf\",verb:\"olmal\\u0131d\\u0131r\"},file:{unit:\"bayt\",verb:\"olmal\\u0131d\\u0131r\"},array:{unit:\"unsur\",verb:\"olmal\\u0131d\\u0131r\"},set:{unit:\"unsur\",verb:\"olmal\\u0131d\\u0131r\"}};function i(t){return e[t]??null}let n={regex:\"giren\",email:\"epostag\\xE2h\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO heng\\xE2m\\u0131\",date:\"ISO tarihi\",time:\"ISO zaman\\u0131\",duration:\"ISO m\\xFCddeti\",ipv4:\"IPv4 ni\\u015F\\xE2n\\u0131\",ipv6:\"IPv6 ni\\u015F\\xE2n\\u0131\",cidrv4:\"IPv4 menzili\",cidrv6:\"IPv6 menzili\",base64:\"base64-\\u015Fifreli metin\",base64url:\"base64url-\\u015Fifreli metin\",json_string:\"JSON metin\",e164:\"E.164 say\\u0131s\\u0131\",jwt:\"JWT\",template_literal:\"giren\"},a={nan:\"NaN\",number:\"numara\",array:\"saf\",null:\"gayb\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`F\\xE2sit giren: umulan instanceof ${t.expected}, al\\u0131nan ${s}`:`F\\xE2sit giren: umulan ${r}, al\\u0131nan ${s}`}case\"invalid_value\":return t.values.length===1?`F\\xE2sit giren: umulan ${w(t.values[0])}`:`F\\xE2sit tercih: m\\xFBteberler ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Fazla b\\xFCy\\xFCk: ${t.origin??\"value\"}, ${r}${t.maximum.toString()} ${o.unit??\"elements\"} sahip olmal\\u0131yd\\u0131.`:`Fazla b\\xFCy\\xFCk: ${t.origin??\"value\"}, ${r}${t.maximum.toString()} olmal\\u0131yd\\u0131.`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Fazla k\\xFC\\xE7\\xFCk: ${t.origin}, ${r}${t.minimum.toString()} ${o.unit} sahip olmal\\u0131yd\\u0131.`:`Fazla k\\xFC\\xE7\\xFCk: ${t.origin}, ${r}${t.minimum.toString()} olmal\\u0131yd\\u0131.`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`F\\xE2sit metin: \"${r.prefix}\" ile ba\\u015Flamal\\u0131.`:r.format===\"ends_with\"?`F\\xE2sit metin: \"${r.suffix}\" ile bitmeli.`:r.format===\"includes\"?`F\\xE2sit metin: \"${r.includes}\" ihtiv\\xE2 etmeli.`:r.format===\"regex\"?`F\\xE2sit metin: ${r.pattern} nak\\u015F\\u0131na uymal\\u0131.`:`F\\xE2sit ${n[r.format]??t.format}`}case\"not_multiple_of\":return`F\\xE2sit say\\u0131: ${t.divisor} kat\\u0131 olmal\\u0131yd\\u0131.`;case\"unrecognized_keys\":return`Tan\\u0131nmayan anahtar ${t.keys.length>1?\"s\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`${t.origin} i\\xE7in tan\\u0131nmayan anahtar var.`;case\"invalid_union\":return\"Giren tan\\u0131namad\\u0131.\";case\"invalid_element\":return`${t.origin} i\\xE7in tan\\u0131nmayan k\\u0131ymet var.`;default:return\"K\\u0131ymet tan\\u0131namad\\u0131.\"}}},vg=b(()=>{I()});function hg(){return{localeError:$g()}}var $g=()=>{let e={string:{unit:\"\\u062A\\u0648\\u06A9\\u064A\",verb:\"\\u0648\\u0644\\u0631\\u064A\"},file:{unit:\"\\u0628\\u0627\\u06CC\\u067C\\u0633\",verb:\"\\u0648\\u0644\\u0631\\u064A\"},array:{unit:\"\\u062A\\u0648\\u06A9\\u064A\",verb:\"\\u0648\\u0644\\u0631\\u064A\"},set:{unit:\"\\u062A\\u0648\\u06A9\\u064A\",verb:\"\\u0648\\u0644\\u0631\\u064A\"}};function i(t){return e[t]??null}let n={regex:\"\\u0648\\u0631\\u0648\\u062F\\u064A\",email:\"\\u0628\\u0631\\u06CC\\u069A\\u0646\\u0627\\u0644\\u06CC\\u06A9\",url:\"\\u06CC\\u0648 \\u0622\\u0631 \\u0627\\u0644\",emoji:\"\\u0627\\u06CC\\u0645\\u0648\\u062C\\u064A\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"\\u0646\\u06CC\\u067C\\u0647 \\u0627\\u0648 \\u0648\\u062E\\u062A\",date:\"\\u0646\\u06D0\\u067C\\u0647\",time:\"\\u0648\\u062E\\u062A\",duration:\"\\u0645\\u0648\\u062F\\u0647\",ipv4:\"\\u062F IPv4 \\u067E\\u062A\\u0647\",ipv6:\"\\u062F IPv6 \\u067E\\u062A\\u0647\",cidrv4:\"\\u062F IPv4 \\u0633\\u0627\\u062D\\u0647\",cidrv6:\"\\u062F IPv6 \\u0633\\u0627\\u062D\\u0647\",base64:\"base64-encoded \\u0645\\u062A\\u0646\",base64url:\"base64url-encoded \\u0645\\u062A\\u0646\",json_string:\"JSON \\u0645\\u062A\\u0646\",e164:\"\\u062F E.164 \\u0634\\u0645\\u06D0\\u0631\\u0647\",jwt:\"JWT\",template_literal:\"\\u0648\\u0631\\u0648\\u062F\\u064A\"},a={nan:\"NaN\",number:\"\\u0639\\u062F\\u062F\",array:\"\\u0627\\u0631\\u06D0\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u0646\\u0627\\u0633\\u0645 \\u0648\\u0631\\u0648\\u062F\\u064A: \\u0628\\u0627\\u06CC\\u062F instanceof ${t.expected} \\u0648\\u0627\\u06CC, \\u0645\\u06AB\\u0631 ${s} \\u062A\\u0631\\u0644\\u0627\\u0633\\u0647 \\u0634\\u0648`:`\\u0646\\u0627\\u0633\\u0645 \\u0648\\u0631\\u0648\\u062F\\u064A: \\u0628\\u0627\\u06CC\\u062F ${r} \\u0648\\u0627\\u06CC, \\u0645\\u06AB\\u0631 ${s} \\u062A\\u0631\\u0644\\u0627\\u0633\\u0647 \\u0634\\u0648`}case\"invalid_value\":return t.values.length===1?`\\u0646\\u0627\\u0633\\u0645 \\u0648\\u0631\\u0648\\u062F\\u064A: \\u0628\\u0627\\u06CC\\u062F ${w(t.values[0])} \\u0648\\u0627\\u06CC`:`\\u0646\\u0627\\u0633\\u0645 \\u0627\\u0646\\u062A\\u062E\\u0627\\u0628: \\u0628\\u0627\\u06CC\\u062F \\u06CC\\u0648 \\u0644\\u0647 ${v(t.values,\"|\")} \\u0685\\u062E\\u0647 \\u0648\\u0627\\u06CC`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\u0689\\u06CC\\u0631 \\u0644\\u0648\\u06CC: ${t.origin??\"\\u0627\\u0631\\u0632\\u069A\\u062A\"} \\u0628\\u0627\\u06CC\\u062F ${r}${t.maximum.toString()} ${o.unit??\"\\u0639\\u0646\\u0635\\u0631\\u0648\\u0646\\u0647\"} \\u0648\\u0644\\u0631\\u064A`:`\\u0689\\u06CC\\u0631 \\u0644\\u0648\\u06CC: ${t.origin??\"\\u0627\\u0631\\u0632\\u069A\\u062A\"} \\u0628\\u0627\\u06CC\\u062F ${r}${t.maximum.toString()} \\u0648\\u064A`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\u0689\\u06CC\\u0631 \\u06A9\\u0648\\u0686\\u0646\\u06CC: ${t.origin} \\u0628\\u0627\\u06CC\\u062F ${r}${t.minimum.toString()} ${o.unit} \\u0648\\u0644\\u0631\\u064A`:`\\u0689\\u06CC\\u0631 \\u06A9\\u0648\\u0686\\u0646\\u06CC: ${t.origin} \\u0628\\u0627\\u06CC\\u062F ${r}${t.minimum.toString()} \\u0648\\u064A`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u0646\\u0627\\u0633\\u0645 \\u0645\\u062A\\u0646: \\u0628\\u0627\\u06CC\\u062F \\u062F \"${r.prefix}\" \\u0633\\u0631\\u0647 \\u067E\\u06CC\\u0644 \\u0634\\u064A`:r.format===\"ends_with\"?`\\u0646\\u0627\\u0633\\u0645 \\u0645\\u062A\\u0646: \\u0628\\u0627\\u06CC\\u062F \\u062F \"${r.suffix}\" \\u0633\\u0631\\u0647 \\u067E\\u0627\\u06CC \\u062A\\u0647 \\u0648\\u0631\\u0633\\u064A\\u0696\\u064A`:r.format===\"includes\"?`\\u0646\\u0627\\u0633\\u0645 \\u0645\\u062A\\u0646: \\u0628\\u0627\\u06CC\\u062F \"${r.includes}\" \\u0648\\u0644\\u0631\\u064A`:r.format===\"regex\"?`\\u0646\\u0627\\u0633\\u0645 \\u0645\\u062A\\u0646: \\u0628\\u0627\\u06CC\\u062F \\u062F ${r.pattern} \\u0633\\u0631\\u0647 \\u0645\\u0637\\u0627\\u0628\\u0642\\u062A \\u0648\\u0644\\u0631\\u064A`:`${n[r.format]??t.format} \\u0646\\u0627\\u0633\\u0645 \\u062F\\u06CC`}case\"not_multiple_of\":return`\\u0646\\u0627\\u0633\\u0645 \\u0639\\u062F\\u062F: \\u0628\\u0627\\u06CC\\u062F \\u062F ${t.divisor} \\u0645\\u0636\\u0631\\u0628 \\u0648\\u064A`;case\"unrecognized_keys\":return`\\u0646\\u0627\\u0633\\u0645 ${t.keys.length>1?\"\\u06A9\\u0644\\u06CC\\u0689\\u0648\\u0646\\u0647\":\"\\u06A9\\u0644\\u06CC\\u0689\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\u0646\\u0627\\u0633\\u0645 \\u06A9\\u0644\\u06CC\\u0689 \\u067E\\u0647 ${t.origin} \\u06A9\\u06D0`;case\"invalid_union\":return\"\\u0646\\u0627\\u0633\\u0645\\u0647 \\u0648\\u0631\\u0648\\u062F\\u064A\";case\"invalid_element\":return`\\u0646\\u0627\\u0633\\u0645 \\u0639\\u0646\\u0635\\u0631 \\u067E\\u0647 ${t.origin} \\u06A9\\u06D0`;default:return\"\\u0646\\u0627\\u0633\\u0645\\u0647 \\u0648\\u0631\\u0648\\u062F\\u064A\"}}},bg=b(()=>{I()});function _g(){return{localeError:yg()}}var yg=()=>{let e={string:{unit:\"znak\\xF3w\",verb:\"mie\\u0107\"},file:{unit:\"bajt\\xF3w\",verb:\"mie\\u0107\"},array:{unit:\"element\\xF3w\",verb:\"mie\\u0107\"},set:{unit:\"element\\xF3w\",verb:\"mie\\u0107\"}};function i(t){return e[t]??null}let n={regex:\"wyra\\u017Cenie\",email:\"adres email\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"data i godzina w formacie ISO\",date:\"data w formacie ISO\",time:\"godzina w formacie ISO\",duration:\"czas trwania ISO\",ipv4:\"adres IPv4\",ipv6:\"adres IPv6\",cidrv4:\"zakres IPv4\",cidrv6:\"zakres IPv6\",base64:\"ci\\u0105g znak\\xF3w zakodowany w formacie base64\",base64url:\"ci\\u0105g znak\\xF3w zakodowany w formacie base64url\",json_string:\"ci\\u0105g znak\\xF3w w formacie JSON\",e164:\"liczba E.164\",jwt:\"JWT\",template_literal:\"wej\\u015Bcie\"},a={nan:\"NaN\",number:\"liczba\",array:\"tablica\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Nieprawid\\u0142owe dane wej\\u015Bciowe: oczekiwano instanceof ${t.expected}, otrzymano ${s}`:`Nieprawid\\u0142owe dane wej\\u015Bciowe: oczekiwano ${r}, otrzymano ${s}`}case\"invalid_value\":return t.values.length===1?`Nieprawid\\u0142owe dane wej\\u015Bciowe: oczekiwano ${w(t.values[0])}`:`Nieprawid\\u0142owa opcja: oczekiwano jednej z warto\\u015Bci ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Za du\\u017Ca warto\\u015B\\u0107: oczekiwano, \\u017Ce ${t.origin??\"warto\\u015B\\u0107\"} b\\u0119dzie mie\\u0107 ${r}${t.maximum.toString()} ${o.unit??\"element\\xF3w\"}`:`Zbyt du\\u017C(y/a/e): oczekiwano, \\u017Ce ${t.origin??\"warto\\u015B\\u0107\"} b\\u0119dzie wynosi\\u0107 ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Za ma\\u0142a warto\\u015B\\u0107: oczekiwano, \\u017Ce ${t.origin??\"warto\\u015B\\u0107\"} b\\u0119dzie mie\\u0107 ${r}${t.minimum.toString()} ${o.unit??\"element\\xF3w\"}`:`Zbyt ma\\u0142(y/a/e): oczekiwano, \\u017Ce ${t.origin??\"warto\\u015B\\u0107\"} b\\u0119dzie wynosi\\u0107 ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Nieprawid\\u0142owy ci\\u0105g znak\\xF3w: musi zaczyna\\u0107 si\\u0119 od \"${r.prefix}\"`:r.format===\"ends_with\"?`Nieprawid\\u0142owy ci\\u0105g znak\\xF3w: musi ko\\u0144czy\\u0107 si\\u0119 na \"${r.suffix}\"`:r.format===\"includes\"?`Nieprawid\\u0142owy ci\\u0105g znak\\xF3w: musi zawiera\\u0107 \"${r.includes}\"`:r.format===\"regex\"?`Nieprawid\\u0142owy ci\\u0105g znak\\xF3w: musi odpowiada\\u0107 wzorcowi ${r.pattern}`:`Nieprawid\\u0142ow(y/a/e) ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Nieprawid\\u0142owa liczba: musi by\\u0107 wielokrotno\\u015Bci\\u0105 ${t.divisor}`;case\"unrecognized_keys\":return`Nierozpoznane klucze${t.keys.length>1?\"s\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Nieprawid\\u0142owy klucz w ${t.origin}`;case\"invalid_union\":return\"Nieprawid\\u0142owe dane wej\\u015Bciowe\";case\"invalid_element\":return`Nieprawid\\u0142owa warto\\u015B\\u0107 w ${t.origin}`;default:return\"Nieprawid\\u0142owe dane wej\\u015Bciowe\"}}},kg=b(()=>{I()});function Ig(){return{localeError:wg()}}var wg=()=>{let e={string:{unit:\"caracteres\",verb:\"ter\"},file:{unit:\"bytes\",verb:\"ter\"},array:{unit:\"itens\",verb:\"ter\"},set:{unit:\"itens\",verb:\"ter\"}};function i(t){return e[t]??null}let n={regex:\"padr\\xE3o\",email:\"endere\\xE7o de e-mail\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"data e hora ISO\",date:\"data ISO\",time:\"hora ISO\",duration:\"dura\\xE7\\xE3o ISO\",ipv4:\"endere\\xE7o IPv4\",ipv6:\"endere\\xE7o IPv6\",cidrv4:\"faixa de IPv4\",cidrv6:\"faixa de IPv6\",base64:\"texto codificado em base64\",base64url:\"URL codificada em base64\",json_string:\"texto JSON\",e164:\"n\\xFAmero E.164\",jwt:\"JWT\",template_literal:\"entrada\"},a={nan:\"NaN\",number:\"n\\xFAmero\",null:\"nulo\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Tipo inv\\xE1lido: esperado instanceof ${t.expected}, recebido ${s}`:`Tipo inv\\xE1lido: esperado ${r}, recebido ${s}`}case\"invalid_value\":return t.values.length===1?`Entrada inv\\xE1lida: esperado ${w(t.values[0])}`:`Op\\xE7\\xE3o inv\\xE1lida: esperada uma das ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Muito grande: esperado que ${t.origin??\"valor\"} tivesse ${r}${t.maximum.toString()} ${o.unit??\"elementos\"}`:`Muito grande: esperado que ${t.origin??\"valor\"} fosse ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Muito pequeno: esperado que ${t.origin} tivesse ${r}${t.minimum.toString()} ${o.unit}`:`Muito pequeno: esperado que ${t.origin} fosse ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Texto inv\\xE1lido: deve come\\xE7ar com \"${r.prefix}\"`:r.format===\"ends_with\"?`Texto inv\\xE1lido: deve terminar com \"${r.suffix}\"`:r.format===\"includes\"?`Texto inv\\xE1lido: deve incluir \"${r.includes}\"`:r.format===\"regex\"?`Texto inv\\xE1lido: deve corresponder ao padr\\xE3o ${r.pattern}`:`${n[r.format]??t.format} inv\\xE1lido`}case\"not_multiple_of\":return`N\\xFAmero inv\\xE1lido: deve ser m\\xFAltiplo de ${t.divisor}`;case\"unrecognized_keys\":return`Chave${t.keys.length>1?\"s\":\"\"} desconhecida${t.keys.length>1?\"s\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Chave inv\\xE1lida em ${t.origin}`;case\"invalid_union\":return\"Entrada inv\\xE1lida\";case\"invalid_element\":return`Valor inv\\xE1lido em ${t.origin}`;default:return\"Campo inv\\xE1lido\"}}},xg=b(()=>{I()});function Zl(e,i,n,a){let t=Math.abs(e),r=t%10,o=t%100;return o>=11&&o<=19?a:r===1?i:r>=2&&r<=4?n:a}function Sg(){return{localeError:zg()}}var zg=()=>{let e={string:{unit:{one:\"\\u0441\\u0438\\u043C\\u0432\\u043E\\u043B\",few:\"\\u0441\\u0438\\u043C\\u0432\\u043E\\u043B\\u0430\",many:\"\\u0441\\u0438\\u043C\\u0432\\u043E\\u043B\\u043E\\u0432\"},verb:\"\\u0438\\u043C\\u0435\\u0442\\u044C\"},file:{unit:{one:\"\\u0431\\u0430\\u0439\\u0442\",few:\"\\u0431\\u0430\\u0439\\u0442\\u0430\",many:\"\\u0431\\u0430\\u0439\\u0442\"},verb:\"\\u0438\\u043C\\u0435\\u0442\\u044C\"},array:{unit:{one:\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\",few:\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u0430\",many:\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\"},verb:\"\\u0438\\u043C\\u0435\\u0442\\u044C\"},set:{unit:{one:\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\",few:\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u0430\",many:\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\"},verb:\"\\u0438\\u043C\\u0435\\u0442\\u044C\"}};function i(t){return e[t]??null}let n={regex:\"\\u0432\\u0432\\u043E\\u0434\",email:\"email \\u0430\\u0434\\u0440\\u0435\\u0441\",url:\"URL\",emoji:\"\\u044D\\u043C\\u043E\\u0434\\u0437\\u0438\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO \\u0434\\u0430\\u0442\\u0430 \\u0438 \\u0432\\u0440\\u0435\\u043C\\u044F\",date:\"ISO \\u0434\\u0430\\u0442\\u0430\",time:\"ISO \\u0432\\u0440\\u0435\\u043C\\u044F\",duration:\"ISO \\u0434\\u043B\\u0438\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0441\\u0442\\u044C\",ipv4:\"IPv4 \\u0430\\u0434\\u0440\\u0435\\u0441\",ipv6:\"IPv6 \\u0430\\u0434\\u0440\\u0435\\u0441\",cidrv4:\"IPv4 \\u0434\\u0438\\u0430\\u043F\\u0430\\u0437\\u043E\\u043D\",cidrv6:\"IPv6 \\u0434\\u0438\\u0430\\u043F\\u0430\\u0437\\u043E\\u043D\",base64:\"\\u0441\\u0442\\u0440\\u043E\\u043A\\u0430 \\u0432 \\u0444\\u043E\\u0440\\u043C\\u0430\\u0442\\u0435 base64\",base64url:\"\\u0441\\u0442\\u0440\\u043E\\u043A\\u0430 \\u0432 \\u0444\\u043E\\u0440\\u043C\\u0430\\u0442\\u0435 base64url\",json_string:\"JSON \\u0441\\u0442\\u0440\\u043E\\u043A\\u0430\",e164:\"\\u043D\\u043E\\u043C\\u0435\\u0440 E.164\",jwt:\"JWT\",template_literal:\"\\u0432\\u0432\\u043E\\u0434\"},a={nan:\"NaN\",number:\"\\u0447\\u0438\\u0441\\u043B\\u043E\",array:\"\\u043C\\u0430\\u0441\\u0441\\u0438\\u0432\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u044B\\u0439 \\u0432\\u0432\\u043E\\u0434: \\u043E\\u0436\\u0438\\u0434\\u0430\\u043B\\u043E\\u0441\\u044C instanceof ${t.expected}, \\u043F\\u043E\\u043B\\u0443\\u0447\\u0435\\u043D\\u043E ${s}`:`\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u044B\\u0439 \\u0432\\u0432\\u043E\\u0434: \\u043E\\u0436\\u0438\\u0434\\u0430\\u043B\\u043E\\u0441\\u044C ${r}, \\u043F\\u043E\\u043B\\u0443\\u0447\\u0435\\u043D\\u043E ${s}`}case\"invalid_value\":return t.values.length===1?`\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u044B\\u0439 \\u0432\\u0432\\u043E\\u0434: \\u043E\\u0436\\u0438\\u0434\\u0430\\u043B\\u043E\\u0441\\u044C ${w(t.values[0])}`:`\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u044B\\u0439 \\u0432\\u0430\\u0440\\u0438\\u0430\\u043D\\u0442: \\u043E\\u0436\\u0438\\u0434\\u0430\\u043B\\u043E\\u0441\\u044C \\u043E\\u0434\\u043D\\u043E \\u0438\\u0437 ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);if(o){let s=Number(t.maximum),u=Zl(s,o.unit.one,o.unit.few,o.unit.many);return`\\u0421\\u043B\\u0438\\u0448\\u043A\\u043E\\u043C \\u0431\\u043E\\u043B\\u044C\\u0448\\u043E\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435: \\u043E\\u0436\\u0438\\u0434\\u0430\\u043B\\u043E\\u0441\\u044C, \\u0447\\u0442\\u043E ${t.origin??\"\\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435\"} \\u0431\\u0443\\u0434\\u0435\\u0442 \\u0438\\u043C\\u0435\\u0442\\u044C ${r}${t.maximum.toString()} ${u}`}return`\\u0421\\u043B\\u0438\\u0448\\u043A\\u043E\\u043C \\u0431\\u043E\\u043B\\u044C\\u0448\\u043E\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435: \\u043E\\u0436\\u0438\\u0434\\u0430\\u043B\\u043E\\u0441\\u044C, \\u0447\\u0442\\u043E ${t.origin??\"\\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435\"} \\u0431\\u0443\\u0434\\u0435\\u0442 ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);if(o){let s=Number(t.minimum),u=Zl(s,o.unit.one,o.unit.few,o.unit.many);return`\\u0421\\u043B\\u0438\\u0448\\u043A\\u043E\\u043C \\u043C\\u0430\\u043B\\u0435\\u043D\\u044C\\u043A\\u043E\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435: \\u043E\\u0436\\u0438\\u0434\\u0430\\u043B\\u043E\\u0441\\u044C, \\u0447\\u0442\\u043E ${t.origin} \\u0431\\u0443\\u0434\\u0435\\u0442 \\u0438\\u043C\\u0435\\u0442\\u044C ${r}${t.minimum.toString()} ${u}`}return`\\u0421\\u043B\\u0438\\u0448\\u043A\\u043E\\u043C \\u043C\\u0430\\u043B\\u0435\\u043D\\u044C\\u043A\\u043E\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435: \\u043E\\u0436\\u0438\\u0434\\u0430\\u043B\\u043E\\u0441\\u044C, \\u0447\\u0442\\u043E ${t.origin} \\u0431\\u0443\\u0434\\u0435\\u0442 ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u0430\\u044F \\u0441\\u0442\\u0440\\u043E\\u043A\\u0430: \\u0434\\u043E\\u043B\\u0436\\u043D\\u0430 \\u043D\\u0430\\u0447\\u0438\\u043D\\u0430\\u0442\\u044C\\u0441\\u044F \\u0441 \"${r.prefix}\"`:r.format===\"ends_with\"?`\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u0430\\u044F \\u0441\\u0442\\u0440\\u043E\\u043A\\u0430: \\u0434\\u043E\\u043B\\u0436\\u043D\\u0430 \\u0437\\u0430\\u043A\\u0430\\u043D\\u0447\\u0438\\u0432\\u0430\\u0442\\u044C\\u0441\\u044F \\u043D\\u0430 \"${r.suffix}\"`:r.format===\"includes\"?`\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u0430\\u044F \\u0441\\u0442\\u0440\\u043E\\u043A\\u0430: \\u0434\\u043E\\u043B\\u0436\\u043D\\u0430 \\u0441\\u043E\\u0434\\u0435\\u0440\\u0436\\u0430\\u0442\\u044C \"${r.includes}\"`:r.format===\"regex\"?`\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u0430\\u044F \\u0441\\u0442\\u0440\\u043E\\u043A\\u0430: \\u0434\\u043E\\u043B\\u0436\\u043D\\u0430 \\u0441\\u043E\\u043E\\u0442\\u0432\\u0435\\u0442\\u0441\\u0442\\u0432\\u043E\\u0432\\u0430\\u0442\\u044C \\u0448\\u0430\\u0431\\u043B\\u043E\\u043D\\u0443 ${r.pattern}`:`\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u044B\\u0439 ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u043E\\u0435 \\u0447\\u0438\\u0441\\u043B\\u043E: \\u0434\\u043E\\u043B\\u0436\\u043D\\u043E \\u0431\\u044B\\u0442\\u044C \\u043A\\u0440\\u0430\\u0442\\u043D\\u044B\\u043C ${t.divisor}`;case\"unrecognized_keys\":return`\\u041D\\u0435\\u0440\\u0430\\u0441\\u043F\\u043E\\u0437\\u043D\\u0430\\u043D\\u043D${t.keys.length>1?\"\\u044B\\u0435\":\"\\u044B\\u0439\"} \\u043A\\u043B\\u044E\\u0447${t.keys.length>1?\"\\u0438\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u044B\\u0439 \\u043A\\u043B\\u044E\\u0447 \\u0432 ${t.origin}`;case\"invalid_union\":return\"\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u044B\\u0435 \\u0432\\u0445\\u043E\\u0434\\u043D\\u044B\\u0435 \\u0434\\u0430\\u043D\\u043D\\u044B\\u0435\";case\"invalid_element\":return`\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u043E\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435 \\u0432 ${t.origin}`;default:return\"\\u041D\\u0435\\u0432\\u0435\\u0440\\u043D\\u044B\\u0435 \\u0432\\u0445\\u043E\\u0434\\u043D\\u044B\\u0435 \\u0434\\u0430\\u043D\\u043D\\u044B\\u0435\"}}},Ug=b(()=>{I()});function Og(){return{localeError:Ng()}}var Ng=()=>{let e={string:{unit:\"znakov\",verb:\"imeti\"},file:{unit:\"bajtov\",verb:\"imeti\"},array:{unit:\"elementov\",verb:\"imeti\"},set:{unit:\"elementov\",verb:\"imeti\"}};function i(t){return e[t]??null}let n={regex:\"vnos\",email:\"e-po\\u0161tni naslov\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO datum in \\u010Das\",date:\"ISO datum\",time:\"ISO \\u010Das\",duration:\"ISO trajanje\",ipv4:\"IPv4 naslov\",ipv6:\"IPv6 naslov\",cidrv4:\"obseg IPv4\",cidrv6:\"obseg IPv6\",base64:\"base64 kodiran niz\",base64url:\"base64url kodiran niz\",json_string:\"JSON niz\",e164:\"E.164 \\u0161tevilka\",jwt:\"JWT\",template_literal:\"vnos\"},a={nan:\"NaN\",number:\"\\u0161tevilo\",array:\"tabela\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Neveljaven vnos: pri\\u010Dakovano instanceof ${t.expected}, prejeto ${s}`:`Neveljaven vnos: pri\\u010Dakovano ${r}, prejeto ${s}`}case\"invalid_value\":return t.values.length===1?`Neveljaven vnos: pri\\u010Dakovano ${w(t.values[0])}`:`Neveljavna mo\\u017Enost: pri\\u010Dakovano eno izmed ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Preveliko: pri\\u010Dakovano, da bo ${t.origin??\"vrednost\"} imelo ${r}${t.maximum.toString()} ${o.unit??\"elementov\"}`:`Preveliko: pri\\u010Dakovano, da bo ${t.origin??\"vrednost\"} ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Premajhno: pri\\u010Dakovano, da bo ${t.origin} imelo ${r}${t.minimum.toString()} ${o.unit}`:`Premajhno: pri\\u010Dakovano, da bo ${t.origin} ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Neveljaven niz: mora se za\\u010Deti z \"${r.prefix}\"`:r.format===\"ends_with\"?`Neveljaven niz: mora se kon\\u010Dati z \"${r.suffix}\"`:r.format===\"includes\"?`Neveljaven niz: mora vsebovati \"${r.includes}\"`:r.format===\"regex\"?`Neveljaven niz: mora ustrezati vzorcu ${r.pattern}`:`Neveljaven ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Neveljavno \\u0161tevilo: mora biti ve\\u010Dkratnik ${t.divisor}`;case\"unrecognized_keys\":return`Neprepoznan${t.keys.length>1?\"i klju\\u010Di\":\" klju\\u010D\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Neveljaven klju\\u010D v ${t.origin}`;case\"invalid_union\":return\"Neveljaven vnos\";case\"invalid_element\":return`Neveljavna vrednost v ${t.origin}`;default:return\"Neveljaven vnos\"}}},Zg=b(()=>{I()});function Tg(){return{localeError:Dg()}}var Dg=()=>{let e={string:{unit:\"tecken\",verb:\"att ha\"},file:{unit:\"bytes\",verb:\"att ha\"},array:{unit:\"objekt\",verb:\"att inneh\\xE5lla\"},set:{unit:\"objekt\",verb:\"att inneh\\xE5lla\"}};function i(t){return e[t]??null}let n={regex:\"regulj\\xE4rt uttryck\",email:\"e-postadress\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO-datum och tid\",date:\"ISO-datum\",time:\"ISO-tid\",duration:\"ISO-varaktighet\",ipv4:\"IPv4-intervall\",ipv6:\"IPv6-intervall\",cidrv4:\"IPv4-spektrum\",cidrv6:\"IPv6-spektrum\",base64:\"base64-kodad str\\xE4ng\",base64url:\"base64url-kodad str\\xE4ng\",json_string:\"JSON-str\\xE4ng\",e164:\"E.164-nummer\",jwt:\"JWT\",template_literal:\"mall-literal\"},a={nan:\"NaN\",number:\"antal\",array:\"lista\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Ogiltig inmatning: f\\xF6rv\\xE4ntat instanceof ${t.expected}, fick ${s}`:`Ogiltig inmatning: f\\xF6rv\\xE4ntat ${r}, fick ${s}`}case\"invalid_value\":return t.values.length===1?`Ogiltig inmatning: f\\xF6rv\\xE4ntat ${w(t.values[0])}`:`Ogiltigt val: f\\xF6rv\\xE4ntade en av ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`F\\xF6r stor(t): f\\xF6rv\\xE4ntade ${t.origin??\"v\\xE4rdet\"} att ha ${r}${t.maximum.toString()} ${o.unit??\"element\"}`:`F\\xF6r stor(t): f\\xF6rv\\xE4ntat ${t.origin??\"v\\xE4rdet\"} att ha ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`F\\xF6r lite(t): f\\xF6rv\\xE4ntade ${t.origin??\"v\\xE4rdet\"} att ha ${r}${t.minimum.toString()} ${o.unit}`:`F\\xF6r lite(t): f\\xF6rv\\xE4ntade ${t.origin??\"v\\xE4rdet\"} att ha ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Ogiltig str\\xE4ng: m\\xE5ste b\\xF6rja med \"${r.prefix}\"`:r.format===\"ends_with\"?`Ogiltig str\\xE4ng: m\\xE5ste sluta med \"${r.suffix}\"`:r.format===\"includes\"?`Ogiltig str\\xE4ng: m\\xE5ste inneh\\xE5lla \"${r.includes}\"`:r.format===\"regex\"?`Ogiltig str\\xE4ng: m\\xE5ste matcha m\\xF6nstret \"${r.pattern}\"`:`Ogiltig(t) ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Ogiltigt tal: m\\xE5ste vara en multipel av ${t.divisor}`;case\"unrecognized_keys\":return`${t.keys.length>1?\"Ok\\xE4nda nycklar\":\"Ok\\xE4nd nyckel\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Ogiltig nyckel i ${t.origin??\"v\\xE4rdet\"}`;case\"invalid_union\":return\"Ogiltig input\";case\"invalid_element\":return`Ogiltigt v\\xE4rde i ${t.origin??\"v\\xE4rdet\"}`;default:return\"Ogiltig input\"}}},jg=b(()=>{I()});function Eg(){return{localeError:Pg()}}var Pg=()=>{let e={string:{unit:\"\\u0B8E\\u0BB4\\u0BC1\\u0BA4\\u0BCD\\u0BA4\\u0BC1\\u0B95\\u0BCD\\u0B95\\u0BB3\\u0BCD\",verb:\"\\u0B95\\u0BCA\\u0BA3\\u0BCD\\u0B9F\\u0BBF\\u0BB0\\u0BC1\\u0B95\\u0BCD\\u0B95 \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD\"},file:{unit:\"\\u0BAA\\u0BC8\\u0B9F\\u0BCD\\u0B9F\\u0BC1\\u0B95\\u0BB3\\u0BCD\",verb:\"\\u0B95\\u0BCA\\u0BA3\\u0BCD\\u0B9F\\u0BBF\\u0BB0\\u0BC1\\u0B95\\u0BCD\\u0B95 \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD\"},array:{unit:\"\\u0B89\\u0BB1\\u0BC1\\u0BAA\\u0BCD\\u0BAA\\u0BC1\\u0B95\\u0BB3\\u0BCD\",verb:\"\\u0B95\\u0BCA\\u0BA3\\u0BCD\\u0B9F\\u0BBF\\u0BB0\\u0BC1\\u0B95\\u0BCD\\u0B95 \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD\"},set:{unit:\"\\u0B89\\u0BB1\\u0BC1\\u0BAA\\u0BCD\\u0BAA\\u0BC1\\u0B95\\u0BB3\\u0BCD\",verb:\"\\u0B95\\u0BCA\\u0BA3\\u0BCD\\u0B9F\\u0BBF\\u0BB0\\u0BC1\\u0B95\\u0BCD\\u0B95 \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD\"}};function i(t){return e[t]??null}let n={regex:\"\\u0B89\\u0BB3\\u0BCD\\u0BB3\\u0BC0\\u0B9F\\u0BC1\",email:\"\\u0BAE\\u0BBF\\u0BA9\\u0BCD\\u0BA9\\u0B9E\\u0BCD\\u0B9A\\u0BB2\\u0BCD \\u0BAE\\u0BC1\\u0B95\\u0BB5\\u0BB0\\u0BBF\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO \\u0BA4\\u0BC7\\u0BA4\\u0BBF \\u0BA8\\u0BC7\\u0BB0\\u0BAE\\u0BCD\",date:\"ISO \\u0BA4\\u0BC7\\u0BA4\\u0BBF\",time:\"ISO \\u0BA8\\u0BC7\\u0BB0\\u0BAE\\u0BCD\",duration:\"ISO \\u0B95\\u0BBE\\u0BB2 \\u0B85\\u0BB3\\u0BB5\\u0BC1\",ipv4:\"IPv4 \\u0BAE\\u0BC1\\u0B95\\u0BB5\\u0BB0\\u0BBF\",ipv6:\"IPv6 \\u0BAE\\u0BC1\\u0B95\\u0BB5\\u0BB0\\u0BBF\",cidrv4:\"IPv4 \\u0BB5\\u0BB0\\u0BAE\\u0BCD\\u0BAA\\u0BC1\",cidrv6:\"IPv6 \\u0BB5\\u0BB0\\u0BAE\\u0BCD\\u0BAA\\u0BC1\",base64:\"base64-encoded \\u0B9A\\u0BB0\\u0BAE\\u0BCD\",base64url:\"base64url-encoded \\u0B9A\\u0BB0\\u0BAE\\u0BCD\",json_string:\"JSON \\u0B9A\\u0BB0\\u0BAE\\u0BCD\",e164:\"E.164 \\u0B8E\\u0BA3\\u0BCD\",jwt:\"JWT\",template_literal:\"input\"},a={nan:\"NaN\",number:\"\\u0B8E\\u0BA3\\u0BCD\",array:\"\\u0B85\\u0BA3\\u0BBF\",null:\"\\u0BB5\\u0BC6\\u0BB1\\u0BC1\\u0BAE\\u0BC8\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0B89\\u0BB3\\u0BCD\\u0BB3\\u0BC0\\u0B9F\\u0BC1: \\u0B8E\\u0BA4\\u0BBF\\u0BB0\\u0BCD\\u0BAA\\u0BBE\\u0BB0\\u0BCD\\u0B95\\u0BCD\\u0B95\\u0BAA\\u0BCD\\u0BAA\\u0B9F\\u0BCD\\u0B9F\\u0BA4\\u0BC1 instanceof ${t.expected}, \\u0BAA\\u0BC6\\u0BB1\\u0BAA\\u0BCD\\u0BAA\\u0B9F\\u0BCD\\u0B9F\\u0BA4\\u0BC1 ${s}`:`\\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0B89\\u0BB3\\u0BCD\\u0BB3\\u0BC0\\u0B9F\\u0BC1: \\u0B8E\\u0BA4\\u0BBF\\u0BB0\\u0BCD\\u0BAA\\u0BBE\\u0BB0\\u0BCD\\u0B95\\u0BCD\\u0B95\\u0BAA\\u0BCD\\u0BAA\\u0B9F\\u0BCD\\u0B9F\\u0BA4\\u0BC1 ${r}, \\u0BAA\\u0BC6\\u0BB1\\u0BAA\\u0BCD\\u0BAA\\u0B9F\\u0BCD\\u0B9F\\u0BA4\\u0BC1 ${s}`}case\"invalid_value\":return t.values.length===1?`\\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0B89\\u0BB3\\u0BCD\\u0BB3\\u0BC0\\u0B9F\\u0BC1: \\u0B8E\\u0BA4\\u0BBF\\u0BB0\\u0BCD\\u0BAA\\u0BBE\\u0BB0\\u0BCD\\u0B95\\u0BCD\\u0B95\\u0BAA\\u0BCD\\u0BAA\\u0B9F\\u0BCD\\u0B9F\\u0BA4\\u0BC1 ${w(t.values[0])}`:`\\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0BB5\\u0BBF\\u0BB0\\u0BC1\\u0BAA\\u0BCD\\u0BAA\\u0BAE\\u0BCD: \\u0B8E\\u0BA4\\u0BBF\\u0BB0\\u0BCD\\u0BAA\\u0BBE\\u0BB0\\u0BCD\\u0B95\\u0BCD\\u0B95\\u0BAA\\u0BCD\\u0BAA\\u0B9F\\u0BCD\\u0B9F\\u0BA4\\u0BC1 ${v(t.values,\"|\")} \\u0B87\\u0BB2\\u0BCD \\u0B92\\u0BA9\\u0BCD\\u0BB1\\u0BC1`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\u0BAE\\u0BBF\\u0B95 \\u0BAA\\u0BC6\\u0BB0\\u0BBF\\u0BAF\\u0BA4\\u0BC1: \\u0B8E\\u0BA4\\u0BBF\\u0BB0\\u0BCD\\u0BAA\\u0BBE\\u0BB0\\u0BCD\\u0B95\\u0BCD\\u0B95\\u0BAA\\u0BCD\\u0BAA\\u0B9F\\u0BCD\\u0B9F\\u0BA4\\u0BC1 ${t.origin??\"\\u0BAE\\u0BA4\\u0BBF\\u0BAA\\u0BCD\\u0BAA\\u0BC1\"} ${r}${t.maximum.toString()} ${o.unit??\"\\u0B89\\u0BB1\\u0BC1\\u0BAA\\u0BCD\\u0BAA\\u0BC1\\u0B95\\u0BB3\\u0BCD\"} \\u0B86\\u0B95 \\u0B87\\u0BB0\\u0BC1\\u0B95\\u0BCD\\u0B95 \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD`:`\\u0BAE\\u0BBF\\u0B95 \\u0BAA\\u0BC6\\u0BB0\\u0BBF\\u0BAF\\u0BA4\\u0BC1: \\u0B8E\\u0BA4\\u0BBF\\u0BB0\\u0BCD\\u0BAA\\u0BBE\\u0BB0\\u0BCD\\u0B95\\u0BCD\\u0B95\\u0BAA\\u0BCD\\u0BAA\\u0B9F\\u0BCD\\u0B9F\\u0BA4\\u0BC1 ${t.origin??\"\\u0BAE\\u0BA4\\u0BBF\\u0BAA\\u0BCD\\u0BAA\\u0BC1\"} ${r}${t.maximum.toString()} \\u0B86\\u0B95 \\u0B87\\u0BB0\\u0BC1\\u0B95\\u0BCD\\u0B95 \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\u0BAE\\u0BBF\\u0B95\\u0B9A\\u0BCD \\u0B9A\\u0BBF\\u0BB1\\u0BBF\\u0BAF\\u0BA4\\u0BC1: \\u0B8E\\u0BA4\\u0BBF\\u0BB0\\u0BCD\\u0BAA\\u0BBE\\u0BB0\\u0BCD\\u0B95\\u0BCD\\u0B95\\u0BAA\\u0BCD\\u0BAA\\u0B9F\\u0BCD\\u0B9F\\u0BA4\\u0BC1 ${t.origin} ${r}${t.minimum.toString()} ${o.unit} \\u0B86\\u0B95 \\u0B87\\u0BB0\\u0BC1\\u0B95\\u0BCD\\u0B95 \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD`:`\\u0BAE\\u0BBF\\u0B95\\u0B9A\\u0BCD \\u0B9A\\u0BBF\\u0BB1\\u0BBF\\u0BAF\\u0BA4\\u0BC1: \\u0B8E\\u0BA4\\u0BBF\\u0BB0\\u0BCD\\u0BAA\\u0BBE\\u0BB0\\u0BCD\\u0B95\\u0BCD\\u0B95\\u0BAA\\u0BCD\\u0BAA\\u0B9F\\u0BCD\\u0B9F\\u0BA4\\u0BC1 ${t.origin} ${r}${t.minimum.toString()} \\u0B86\\u0B95 \\u0B87\\u0BB0\\u0BC1\\u0B95\\u0BCD\\u0B95 \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0B9A\\u0BB0\\u0BAE\\u0BCD: \"${r.prefix}\" \\u0B87\\u0BB2\\u0BCD \\u0BA4\\u0BCA\\u0B9F\\u0B99\\u0BCD\\u0B95 \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD`:r.format===\"ends_with\"?`\\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0B9A\\u0BB0\\u0BAE\\u0BCD: \"${r.suffix}\" \\u0B87\\u0BB2\\u0BCD \\u0BAE\\u0BC1\\u0B9F\\u0BBF\\u0BB5\\u0B9F\\u0BC8\\u0BAF \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD`:r.format===\"includes\"?`\\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0B9A\\u0BB0\\u0BAE\\u0BCD: \"${r.includes}\" \\u0B90 \\u0B89\\u0BB3\\u0BCD\\u0BB3\\u0B9F\\u0B95\\u0BCD\\u0B95 \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD`:r.format===\"regex\"?`\\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0B9A\\u0BB0\\u0BAE\\u0BCD: ${r.pattern} \\u0BAE\\u0BC1\\u0BB1\\u0BC8\\u0BAA\\u0BBE\\u0B9F\\u0BCD\\u0B9F\\u0BC1\\u0B9F\\u0BA9\\u0BCD \\u0BAA\\u0BCA\\u0BB0\\u0BC1\\u0BA8\\u0BCD\\u0BA4 \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD`:`\\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0B8E\\u0BA3\\u0BCD: ${t.divisor} \\u0B87\\u0BA9\\u0BCD \\u0BAA\\u0BB2\\u0BAE\\u0BBE\\u0B95 \\u0B87\\u0BB0\\u0BC1\\u0B95\\u0BCD\\u0B95 \\u0BB5\\u0BC7\\u0BA3\\u0BCD\\u0B9F\\u0BC1\\u0BAE\\u0BCD`;case\"unrecognized_keys\":return`\\u0B85\\u0B9F\\u0BC8\\u0BAF\\u0BBE\\u0BB3\\u0BAE\\u0BCD \\u0BA4\\u0BC6\\u0BB0\\u0BBF\\u0BAF\\u0BBE\\u0BA4 \\u0BB5\\u0BBF\\u0B9A\\u0BC8${t.keys.length>1?\"\\u0B95\\u0BB3\\u0BCD\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`${t.origin} \\u0B87\\u0BB2\\u0BCD \\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0BB5\\u0BBF\\u0B9A\\u0BC8`;case\"invalid_union\":return\"\\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0B89\\u0BB3\\u0BCD\\u0BB3\\u0BC0\\u0B9F\\u0BC1\";case\"invalid_element\":return`${t.origin} \\u0B87\\u0BB2\\u0BCD \\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0BAE\\u0BA4\\u0BBF\\u0BAA\\u0BCD\\u0BAA\\u0BC1`;default:return\"\\u0BA4\\u0BB5\\u0BB1\\u0BBE\\u0BA9 \\u0B89\\u0BB3\\u0BCD\\u0BB3\\u0BC0\\u0B9F\\u0BC1\"}}},Rg=b(()=>{I()});function Ag(){return{localeError:Cg()}}var Cg=()=>{let e={string:{unit:\"\\u0E15\\u0E31\\u0E27\\u0E2D\\u0E31\\u0E01\\u0E29\\u0E23\",verb:\"\\u0E04\\u0E27\\u0E23\\u0E21\\u0E35\"},file:{unit:\"\\u0E44\\u0E1A\\u0E15\\u0E4C\",verb:\"\\u0E04\\u0E27\\u0E23\\u0E21\\u0E35\"},array:{unit:\"\\u0E23\\u0E32\\u0E22\\u0E01\\u0E32\\u0E23\",verb:\"\\u0E04\\u0E27\\u0E23\\u0E21\\u0E35\"},set:{unit:\"\\u0E23\\u0E32\\u0E22\\u0E01\\u0E32\\u0E23\",verb:\"\\u0E04\\u0E27\\u0E23\\u0E21\\u0E35\"}};function i(t){return e[t]??null}let n={regex:\"\\u0E02\\u0E49\\u0E2D\\u0E21\\u0E39\\u0E25\\u0E17\\u0E35\\u0E48\\u0E1B\\u0E49\\u0E2D\\u0E19\",email:\"\\u0E17\\u0E35\\u0E48\\u0E2D\\u0E22\\u0E39\\u0E48\\u0E2D\\u0E35\\u0E40\\u0E21\\u0E25\",url:\"URL\",emoji:\"\\u0E2D\\u0E34\\u0E42\\u0E21\\u0E08\\u0E34\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"\\u0E27\\u0E31\\u0E19\\u0E17\\u0E35\\u0E48\\u0E40\\u0E27\\u0E25\\u0E32\\u0E41\\u0E1A\\u0E1A ISO\",date:\"\\u0E27\\u0E31\\u0E19\\u0E17\\u0E35\\u0E48\\u0E41\\u0E1A\\u0E1A ISO\",time:\"\\u0E40\\u0E27\\u0E25\\u0E32\\u0E41\\u0E1A\\u0E1A ISO\",duration:\"\\u0E0A\\u0E48\\u0E27\\u0E07\\u0E40\\u0E27\\u0E25\\u0E32\\u0E41\\u0E1A\\u0E1A ISO\",ipv4:\"\\u0E17\\u0E35\\u0E48\\u0E2D\\u0E22\\u0E39\\u0E48 IPv4\",ipv6:\"\\u0E17\\u0E35\\u0E48\\u0E2D\\u0E22\\u0E39\\u0E48 IPv6\",cidrv4:\"\\u0E0A\\u0E48\\u0E27\\u0E07 IP \\u0E41\\u0E1A\\u0E1A IPv4\",cidrv6:\"\\u0E0A\\u0E48\\u0E27\\u0E07 IP \\u0E41\\u0E1A\\u0E1A IPv6\",base64:\"\\u0E02\\u0E49\\u0E2D\\u0E04\\u0E27\\u0E32\\u0E21\\u0E41\\u0E1A\\u0E1A Base64\",base64url:\"\\u0E02\\u0E49\\u0E2D\\u0E04\\u0E27\\u0E32\\u0E21\\u0E41\\u0E1A\\u0E1A Base64 \\u0E2A\\u0E33\\u0E2B\\u0E23\\u0E31\\u0E1A URL\",json_string:\"\\u0E02\\u0E49\\u0E2D\\u0E04\\u0E27\\u0E32\\u0E21\\u0E41\\u0E1A\\u0E1A JSON\",e164:\"\\u0E40\\u0E1A\\u0E2D\\u0E23\\u0E4C\\u0E42\\u0E17\\u0E23\\u0E28\\u0E31\\u0E1E\\u0E17\\u0E4C\\u0E23\\u0E30\\u0E2B\\u0E27\\u0E48\\u0E32\\u0E07\\u0E1B\\u0E23\\u0E30\\u0E40\\u0E17\\u0E28 (E.164)\",jwt:\"\\u0E42\\u0E17\\u0E40\\u0E04\\u0E19 JWT\",template_literal:\"\\u0E02\\u0E49\\u0E2D\\u0E21\\u0E39\\u0E25\\u0E17\\u0E35\\u0E48\\u0E1B\\u0E49\\u0E2D\\u0E19\"},a={nan:\"NaN\",number:\"\\u0E15\\u0E31\\u0E27\\u0E40\\u0E25\\u0E02\",array:\"\\u0E2D\\u0E32\\u0E23\\u0E4C\\u0E40\\u0E23\\u0E22\\u0E4C (Array)\",null:\"\\u0E44\\u0E21\\u0E48\\u0E21\\u0E35\\u0E04\\u0E48\\u0E32 (null)\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u0E1B\\u0E23\\u0E30\\u0E40\\u0E20\\u0E17\\u0E02\\u0E49\\u0E2D\\u0E21\\u0E39\\u0E25\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07: \\u0E04\\u0E27\\u0E23\\u0E40\\u0E1B\\u0E47\\u0E19 instanceof ${t.expected} \\u0E41\\u0E15\\u0E48\\u0E44\\u0E14\\u0E49\\u0E23\\u0E31\\u0E1A ${s}`:`\\u0E1B\\u0E23\\u0E30\\u0E40\\u0E20\\u0E17\\u0E02\\u0E49\\u0E2D\\u0E21\\u0E39\\u0E25\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07: \\u0E04\\u0E27\\u0E23\\u0E40\\u0E1B\\u0E47\\u0E19 ${r} \\u0E41\\u0E15\\u0E48\\u0E44\\u0E14\\u0E49\\u0E23\\u0E31\\u0E1A ${s}`}case\"invalid_value\":return t.values.length===1?`\\u0E04\\u0E48\\u0E32\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07: \\u0E04\\u0E27\\u0E23\\u0E40\\u0E1B\\u0E47\\u0E19 ${w(t.values[0])}`:`\\u0E15\\u0E31\\u0E27\\u0E40\\u0E25\\u0E37\\u0E2D\\u0E01\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07: \\u0E04\\u0E27\\u0E23\\u0E40\\u0E1B\\u0E47\\u0E19\\u0E2B\\u0E19\\u0E36\\u0E48\\u0E07\\u0E43\\u0E19 ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"\\u0E44\\u0E21\\u0E48\\u0E40\\u0E01\\u0E34\\u0E19\":\"\\u0E19\\u0E49\\u0E2D\\u0E22\\u0E01\\u0E27\\u0E48\\u0E32\",o=i(t.origin);return o?`\\u0E40\\u0E01\\u0E34\\u0E19\\u0E01\\u0E33\\u0E2B\\u0E19\\u0E14: ${t.origin??\"\\u0E04\\u0E48\\u0E32\"} \\u0E04\\u0E27\\u0E23\\u0E21\\u0E35${r} ${t.maximum.toString()} ${o.unit??\"\\u0E23\\u0E32\\u0E22\\u0E01\\u0E32\\u0E23\"}`:`\\u0E40\\u0E01\\u0E34\\u0E19\\u0E01\\u0E33\\u0E2B\\u0E19\\u0E14: ${t.origin??\"\\u0E04\\u0E48\\u0E32\"} \\u0E04\\u0E27\\u0E23\\u0E21\\u0E35${r} ${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\"\\u0E2D\\u0E22\\u0E48\\u0E32\\u0E07\\u0E19\\u0E49\\u0E2D\\u0E22\":\"\\u0E21\\u0E32\\u0E01\\u0E01\\u0E27\\u0E48\\u0E32\",o=i(t.origin);return o?`\\u0E19\\u0E49\\u0E2D\\u0E22\\u0E01\\u0E27\\u0E48\\u0E32\\u0E01\\u0E33\\u0E2B\\u0E19\\u0E14: ${t.origin} \\u0E04\\u0E27\\u0E23\\u0E21\\u0E35${r} ${t.minimum.toString()} ${o.unit}`:`\\u0E19\\u0E49\\u0E2D\\u0E22\\u0E01\\u0E27\\u0E48\\u0E32\\u0E01\\u0E33\\u0E2B\\u0E19\\u0E14: ${t.origin} \\u0E04\\u0E27\\u0E23\\u0E21\\u0E35${r} ${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u0E23\\u0E39\\u0E1B\\u0E41\\u0E1A\\u0E1A\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07: \\u0E02\\u0E49\\u0E2D\\u0E04\\u0E27\\u0E32\\u0E21\\u0E15\\u0E49\\u0E2D\\u0E07\\u0E02\\u0E36\\u0E49\\u0E19\\u0E15\\u0E49\\u0E19\\u0E14\\u0E49\\u0E27\\u0E22 \"${r.prefix}\"`:r.format===\"ends_with\"?`\\u0E23\\u0E39\\u0E1B\\u0E41\\u0E1A\\u0E1A\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07: \\u0E02\\u0E49\\u0E2D\\u0E04\\u0E27\\u0E32\\u0E21\\u0E15\\u0E49\\u0E2D\\u0E07\\u0E25\\u0E07\\u0E17\\u0E49\\u0E32\\u0E22\\u0E14\\u0E49\\u0E27\\u0E22 \"${r.suffix}\"`:r.format===\"includes\"?`\\u0E23\\u0E39\\u0E1B\\u0E41\\u0E1A\\u0E1A\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07: \\u0E02\\u0E49\\u0E2D\\u0E04\\u0E27\\u0E32\\u0E21\\u0E15\\u0E49\\u0E2D\\u0E07\\u0E21\\u0E35 \"${r.includes}\" \\u0E2D\\u0E22\\u0E39\\u0E48\\u0E43\\u0E19\\u0E02\\u0E49\\u0E2D\\u0E04\\u0E27\\u0E32\\u0E21`:r.format===\"regex\"?`\\u0E23\\u0E39\\u0E1B\\u0E41\\u0E1A\\u0E1A\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07: \\u0E15\\u0E49\\u0E2D\\u0E07\\u0E15\\u0E23\\u0E07\\u0E01\\u0E31\\u0E1A\\u0E23\\u0E39\\u0E1B\\u0E41\\u0E1A\\u0E1A\\u0E17\\u0E35\\u0E48\\u0E01\\u0E33\\u0E2B\\u0E19\\u0E14 ${r.pattern}`:`\\u0E23\\u0E39\\u0E1B\\u0E41\\u0E1A\\u0E1A\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07: ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u0E15\\u0E31\\u0E27\\u0E40\\u0E25\\u0E02\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07: \\u0E15\\u0E49\\u0E2D\\u0E07\\u0E40\\u0E1B\\u0E47\\u0E19\\u0E08\\u0E33\\u0E19\\u0E27\\u0E19\\u0E17\\u0E35\\u0E48\\u0E2B\\u0E32\\u0E23\\u0E14\\u0E49\\u0E27\\u0E22 ${t.divisor} \\u0E44\\u0E14\\u0E49\\u0E25\\u0E07\\u0E15\\u0E31\\u0E27`;case\"unrecognized_keys\":return`\\u0E1E\\u0E1A\\u0E04\\u0E35\\u0E22\\u0E4C\\u0E17\\u0E35\\u0E48\\u0E44\\u0E21\\u0E48\\u0E23\\u0E39\\u0E49\\u0E08\\u0E31\\u0E01: ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\u0E04\\u0E35\\u0E22\\u0E4C\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07\\u0E43\\u0E19 ${t.origin}`;case\"invalid_union\":return\"\\u0E02\\u0E49\\u0E2D\\u0E21\\u0E39\\u0E25\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07: \\u0E44\\u0E21\\u0E48\\u0E15\\u0E23\\u0E07\\u0E01\\u0E31\\u0E1A\\u0E23\\u0E39\\u0E1B\\u0E41\\u0E1A\\u0E1A\\u0E22\\u0E39\\u0E40\\u0E19\\u0E35\\u0E22\\u0E19\\u0E17\\u0E35\\u0E48\\u0E01\\u0E33\\u0E2B\\u0E19\\u0E14\\u0E44\\u0E27\\u0E49\";case\"invalid_element\":return`\\u0E02\\u0E49\\u0E2D\\u0E21\\u0E39\\u0E25\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07\\u0E43\\u0E19 ${t.origin}`;default:return\"\\u0E02\\u0E49\\u0E2D\\u0E21\\u0E39\\u0E25\\u0E44\\u0E21\\u0E48\\u0E16\\u0E39\\u0E01\\u0E15\\u0E49\\u0E2D\\u0E07\"}}},Mg=b(()=>{I()});function Lg(){return{localeError:qg()}}var qg=()=>{let e={string:{unit:\"karakter\",verb:\"olmal\\u0131\"},file:{unit:\"bayt\",verb:\"olmal\\u0131\"},array:{unit:\"\\xF6\\u011Fe\",verb:\"olmal\\u0131\"},set:{unit:\"\\xF6\\u011Fe\",verb:\"olmal\\u0131\"}};function i(t){return e[t]??null}let n={regex:\"girdi\",email:\"e-posta adresi\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO tarih ve saat\",date:\"ISO tarih\",time:\"ISO saat\",duration:\"ISO s\\xFCre\",ipv4:\"IPv4 adresi\",ipv6:\"IPv6 adresi\",cidrv4:\"IPv4 aral\\u0131\\u011F\\u0131\",cidrv6:\"IPv6 aral\\u0131\\u011F\\u0131\",base64:\"base64 ile \\u015Fifrelenmi\\u015F metin\",base64url:\"base64url ile \\u015Fifrelenmi\\u015F metin\",json_string:\"JSON dizesi\",e164:\"E.164 say\\u0131s\\u0131\",jwt:\"JWT\",template_literal:\"\\u015Eablon dizesi\"},a={nan:\"NaN\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Ge\\xE7ersiz de\\u011Fer: beklenen instanceof ${t.expected}, al\\u0131nan ${s}`:`Ge\\xE7ersiz de\\u011Fer: beklenen ${r}, al\\u0131nan ${s}`}case\"invalid_value\":return t.values.length===1?`Ge\\xE7ersiz de\\u011Fer: beklenen ${w(t.values[0])}`:`Ge\\xE7ersiz se\\xE7enek: a\\u015Fa\\u011F\\u0131dakilerden biri olmal\\u0131: ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\xC7ok b\\xFCy\\xFCk: beklenen ${t.origin??\"de\\u011Fer\"} ${r}${t.maximum.toString()} ${o.unit??\"\\xF6\\u011Fe\"}`:`\\xC7ok b\\xFCy\\xFCk: beklenen ${t.origin??\"de\\u011Fer\"} ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\xC7ok k\\xFC\\xE7\\xFCk: beklenen ${t.origin} ${r}${t.minimum.toString()} ${o.unit}`:`\\xC7ok k\\xFC\\xE7\\xFCk: beklenen ${t.origin} ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Ge\\xE7ersiz metin: \"${r.prefix}\" ile ba\\u015Flamal\\u0131`:r.format===\"ends_with\"?`Ge\\xE7ersiz metin: \"${r.suffix}\" ile bitmeli`:r.format===\"includes\"?`Ge\\xE7ersiz metin: \"${r.includes}\" i\\xE7ermeli`:r.format===\"regex\"?`Ge\\xE7ersiz metin: ${r.pattern} desenine uymal\\u0131`:`Ge\\xE7ersiz ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Ge\\xE7ersiz say\\u0131: ${t.divisor} ile tam b\\xF6l\\xFCnebilmeli`;case\"unrecognized_keys\":return`Tan\\u0131nmayan anahtar${t.keys.length>1?\"lar\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`${t.origin} i\\xE7inde ge\\xE7ersiz anahtar`;case\"invalid_union\":return\"Ge\\xE7ersiz de\\u011Fer\";case\"invalid_element\":return`${t.origin} i\\xE7inde ge\\xE7ersiz de\\u011Fer`;default:return\"Ge\\xE7ersiz de\\u011Fer\"}}},Jg=b(()=>{I()});function Vd(){return{localeError:Fg()}}var Fg=()=>{let e={string:{unit:\"\\u0441\\u0438\\u043C\\u0432\\u043E\\u043B\\u0456\\u0432\",verb:\"\\u043C\\u0430\\u0442\\u0438\\u043C\\u0435\"},file:{unit:\"\\u0431\\u0430\\u0439\\u0442\\u0456\\u0432\",verb:\"\\u043C\\u0430\\u0442\\u0438\\u043C\\u0435\"},array:{unit:\"\\u0435\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u0456\\u0432\",verb:\"\\u043C\\u0430\\u0442\\u0438\\u043C\\u0435\"},set:{unit:\"\\u0435\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u0456\\u0432\",verb:\"\\u043C\\u0430\\u0442\\u0438\\u043C\\u0435\"}};function i(t){return e[t]??null}let n={regex:\"\\u0432\\u0445\\u0456\\u0434\\u043D\\u0456 \\u0434\\u0430\\u043D\\u0456\",email:\"\\u0430\\u0434\\u0440\\u0435\\u0441\\u0430 \\u0435\\u043B\\u0435\\u043A\\u0442\\u0440\\u043E\\u043D\\u043D\\u043E\\u0457 \\u043F\\u043E\\u0448\\u0442\\u0438\",url:\"URL\",emoji:\"\\u0435\\u043C\\u043E\\u0434\\u0437\\u0456\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"\\u0434\\u0430\\u0442\\u0430 \\u0442\\u0430 \\u0447\\u0430\\u0441 ISO\",date:\"\\u0434\\u0430\\u0442\\u0430 ISO\",time:\"\\u0447\\u0430\\u0441 ISO\",duration:\"\\u0442\\u0440\\u0438\\u0432\\u0430\\u043B\\u0456\\u0441\\u0442\\u044C ISO\",ipv4:\"\\u0430\\u0434\\u0440\\u0435\\u0441\\u0430 IPv4\",ipv6:\"\\u0430\\u0434\\u0440\\u0435\\u0441\\u0430 IPv6\",cidrv4:\"\\u0434\\u0456\\u0430\\u043F\\u0430\\u0437\\u043E\\u043D IPv4\",cidrv6:\"\\u0434\\u0456\\u0430\\u043F\\u0430\\u0437\\u043E\\u043D IPv6\",base64:\"\\u0440\\u044F\\u0434\\u043E\\u043A \\u0443 \\u043A\\u043E\\u0434\\u0443\\u0432\\u0430\\u043D\\u043D\\u0456 base64\",base64url:\"\\u0440\\u044F\\u0434\\u043E\\u043A \\u0443 \\u043A\\u043E\\u0434\\u0443\\u0432\\u0430\\u043D\\u043D\\u0456 base64url\",json_string:\"\\u0440\\u044F\\u0434\\u043E\\u043A JSON\",e164:\"\\u043D\\u043E\\u043C\\u0435\\u0440 E.164\",jwt:\"JWT\",template_literal:\"\\u0432\\u0445\\u0456\\u0434\\u043D\\u0456 \\u0434\\u0430\\u043D\\u0456\"},a={nan:\"NaN\",number:\"\\u0447\\u0438\\u0441\\u043B\\u043E\",array:\"\\u043C\\u0430\\u0441\\u0438\\u0432\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0456 \\u0432\\u0445\\u0456\\u0434\\u043D\\u0456 \\u0434\\u0430\\u043D\\u0456: \\u043E\\u0447\\u0456\\u043A\\u0443\\u0454\\u0442\\u044C\\u0441\\u044F instanceof ${t.expected}, \\u043E\\u0442\\u0440\\u0438\\u043C\\u0430\\u043D\\u043E ${s}`:`\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0456 \\u0432\\u0445\\u0456\\u0434\\u043D\\u0456 \\u0434\\u0430\\u043D\\u0456: \\u043E\\u0447\\u0456\\u043A\\u0443\\u0454\\u0442\\u044C\\u0441\\u044F ${r}, \\u043E\\u0442\\u0440\\u0438\\u043C\\u0430\\u043D\\u043E ${s}`}case\"invalid_value\":return t.values.length===1?`\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0456 \\u0432\\u0445\\u0456\\u0434\\u043D\\u0456 \\u0434\\u0430\\u043D\\u0456: \\u043E\\u0447\\u0456\\u043A\\u0443\\u0454\\u0442\\u044C\\u0441\\u044F ${w(t.values[0])}`:`\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0430 \\u043E\\u043F\\u0446\\u0456\\u044F: \\u043E\\u0447\\u0456\\u043A\\u0443\\u0454\\u0442\\u044C\\u0441\\u044F \\u043E\\u0434\\u043D\\u0435 \\u0437 ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\u0417\\u0430\\u043D\\u0430\\u0434\\u0442\\u043E \\u0432\\u0435\\u043B\\u0438\\u043A\\u0435: \\u043E\\u0447\\u0456\\u043A\\u0443\\u0454\\u0442\\u044C\\u0441\\u044F, \\u0449\\u043E ${t.origin??\"\\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u043D\\u044F\"} ${o.verb} ${r}${t.maximum.toString()} ${o.unit??\"\\u0435\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442\\u0456\\u0432\"}`:`\\u0417\\u0430\\u043D\\u0430\\u0434\\u0442\\u043E \\u0432\\u0435\\u043B\\u0438\\u043A\\u0435: \\u043E\\u0447\\u0456\\u043A\\u0443\\u0454\\u0442\\u044C\\u0441\\u044F, \\u0449\\u043E ${t.origin??\"\\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u043D\\u044F\"} \\u0431\\u0443\\u0434\\u0435 ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\u0417\\u0430\\u043D\\u0430\\u0434\\u0442\\u043E \\u043C\\u0430\\u043B\\u0435: \\u043E\\u0447\\u0456\\u043A\\u0443\\u0454\\u0442\\u044C\\u0441\\u044F, \\u0449\\u043E ${t.origin} ${o.verb} ${r}${t.minimum.toString()} ${o.unit}`:`\\u0417\\u0430\\u043D\\u0430\\u0434\\u0442\\u043E \\u043C\\u0430\\u043B\\u0435: \\u043E\\u0447\\u0456\\u043A\\u0443\\u0454\\u0442\\u044C\\u0441\\u044F, \\u0449\\u043E ${t.origin} \\u0431\\u0443\\u0434\\u0435 ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0438\\u0439 \\u0440\\u044F\\u0434\\u043E\\u043A: \\u043F\\u043E\\u0432\\u0438\\u043D\\u0435\\u043D \\u043F\\u043E\\u0447\\u0438\\u043D\\u0430\\u0442\\u0438\\u0441\\u044F \\u0437 \"${r.prefix}\"`:r.format===\"ends_with\"?`\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0438\\u0439 \\u0440\\u044F\\u0434\\u043E\\u043A: \\u043F\\u043E\\u0432\\u0438\\u043D\\u0435\\u043D \\u0437\\u0430\\u043A\\u0456\\u043D\\u0447\\u0443\\u0432\\u0430\\u0442\\u0438\\u0441\\u044F \\u043D\\u0430 \"${r.suffix}\"`:r.format===\"includes\"?`\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0438\\u0439 \\u0440\\u044F\\u0434\\u043E\\u043A: \\u043F\\u043E\\u0432\\u0438\\u043D\\u0435\\u043D \\u043C\\u0456\\u0441\\u0442\\u0438\\u0442\\u0438 \"${r.includes}\"`:r.format===\"regex\"?`\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0438\\u0439 \\u0440\\u044F\\u0434\\u043E\\u043A: \\u043F\\u043E\\u0432\\u0438\\u043D\\u0435\\u043D \\u0432\\u0456\\u0434\\u043F\\u043E\\u0432\\u0456\\u0434\\u0430\\u0442\\u0438 \\u0448\\u0430\\u0431\\u043B\\u043E\\u043D\\u0443 ${r.pattern}`:`\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0438\\u0439 ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0435 \\u0447\\u0438\\u0441\\u043B\\u043E: \\u043F\\u043E\\u0432\\u0438\\u043D\\u043D\\u043E \\u0431\\u0443\\u0442\\u0438 \\u043A\\u0440\\u0430\\u0442\\u043D\\u0438\\u043C ${t.divisor}`;case\"unrecognized_keys\":return`\\u041D\\u0435\\u0440\\u043E\\u0437\\u043F\\u0456\\u0437\\u043D\\u0430\\u043D\\u0438\\u0439 \\u043A\\u043B\\u044E\\u0447${t.keys.length>1?\"\\u0456\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0438\\u0439 \\u043A\\u043B\\u044E\\u0447 \\u0443 ${t.origin}`;case\"invalid_union\":return\"\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0456 \\u0432\\u0445\\u0456\\u0434\\u043D\\u0456 \\u0434\\u0430\\u043D\\u0456\";case\"invalid_element\":return`\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u043D\\u044F \\u0443 ${t.origin}`;default:return\"\\u041D\\u0435\\u043F\\u0440\\u0430\\u0432\\u0438\\u043B\\u044C\\u043D\\u0456 \\u0432\\u0445\\u0456\\u0434\\u043D\\u0456 \\u0434\\u0430\\u043D\\u0456\"}}},Kd=b(()=>{I()});function Hg(){return Vd()}var Wg=b(()=>{Kd()});function Vg(){return{localeError:Kg()}}var Kg=()=>{let e={string:{unit:\"\\u062D\\u0631\\u0648\\u0641\",verb:\"\\u06C1\\u0648\\u0646\\u0627\"},file:{unit:\"\\u0628\\u0627\\u0626\\u0679\\u0633\",verb:\"\\u06C1\\u0648\\u0646\\u0627\"},array:{unit:\"\\u0622\\u0626\\u0679\\u0645\\u0632\",verb:\"\\u06C1\\u0648\\u0646\\u0627\"},set:{unit:\"\\u0622\\u0626\\u0679\\u0645\\u0632\",verb:\"\\u06C1\\u0648\\u0646\\u0627\"}};function i(t){return e[t]??null}let n={regex:\"\\u0627\\u0646 \\u067E\\u0679\",email:\"\\u0627\\u06CC \\u0645\\u06CC\\u0644 \\u0627\\u06CC\\u0688\\u0631\\u06CC\\u0633\",url:\"\\u06CC\\u0648 \\u0622\\u0631 \\u0627\\u06CC\\u0644\",emoji:\"\\u0627\\u06CC\\u0645\\u0648\\u062C\\u06CC\",uuid:\"\\u06CC\\u0648 \\u06CC\\u0648 \\u0622\\u0626\\u06CC \\u0688\\u06CC\",uuidv4:\"\\u06CC\\u0648 \\u06CC\\u0648 \\u0622\\u0626\\u06CC \\u0688\\u06CC \\u0648\\u06CC 4\",uuidv6:\"\\u06CC\\u0648 \\u06CC\\u0648 \\u0622\\u0626\\u06CC \\u0688\\u06CC \\u0648\\u06CC 6\",nanoid:\"\\u0646\\u06CC\\u0646\\u0648 \\u0622\\u0626\\u06CC \\u0688\\u06CC\",guid:\"\\u062C\\u06CC \\u06CC\\u0648 \\u0622\\u0626\\u06CC \\u0688\\u06CC\",cuid:\"\\u0633\\u06CC \\u06CC\\u0648 \\u0622\\u0626\\u06CC \\u0688\\u06CC\",cuid2:\"\\u0633\\u06CC \\u06CC\\u0648 \\u0622\\u0626\\u06CC \\u0688\\u06CC 2\",ulid:\"\\u06CC\\u0648 \\u0627\\u06CC\\u0644 \\u0622\\u0626\\u06CC \\u0688\\u06CC\",xid:\"\\u0627\\u06CC\\u06A9\\u0633 \\u0622\\u0626\\u06CC \\u0688\\u06CC\",ksuid:\"\\u06A9\\u06D2 \\u0627\\u06CC\\u0633 \\u06CC\\u0648 \\u0622\\u0626\\u06CC \\u0688\\u06CC\",datetime:\"\\u0622\\u0626\\u06CC \\u0627\\u06CC\\u0633 \\u0627\\u0648 \\u0688\\u06CC\\u0679 \\u0679\\u0627\\u0626\\u0645\",date:\"\\u0622\\u0626\\u06CC \\u0627\\u06CC\\u0633 \\u0627\\u0648 \\u062A\\u0627\\u0631\\u06CC\\u062E\",time:\"\\u0622\\u0626\\u06CC \\u0627\\u06CC\\u0633 \\u0627\\u0648 \\u0648\\u0642\\u062A\",duration:\"\\u0622\\u0626\\u06CC \\u0627\\u06CC\\u0633 \\u0627\\u0648 \\u0645\\u062F\\u062A\",ipv4:\"\\u0622\\u0626\\u06CC \\u067E\\u06CC \\u0648\\u06CC 4 \\u0627\\u06CC\\u0688\\u0631\\u06CC\\u0633\",ipv6:\"\\u0622\\u0626\\u06CC \\u067E\\u06CC \\u0648\\u06CC 6 \\u0627\\u06CC\\u0688\\u0631\\u06CC\\u0633\",cidrv4:\"\\u0622\\u0626\\u06CC \\u067E\\u06CC \\u0648\\u06CC 4 \\u0631\\u06CC\\u0646\\u062C\",cidrv6:\"\\u0622\\u0626\\u06CC \\u067E\\u06CC \\u0648\\u06CC 6 \\u0631\\u06CC\\u0646\\u062C\",base64:\"\\u0628\\u06CC\\u0633 64 \\u0627\\u0646 \\u06A9\\u0648\\u0688\\u0688 \\u0633\\u0679\\u0631\\u0646\\u06AF\",base64url:\"\\u0628\\u06CC\\u0633 64 \\u06CC\\u0648 \\u0622\\u0631 \\u0627\\u06CC\\u0644 \\u0627\\u0646 \\u06A9\\u0648\\u0688\\u0688 \\u0633\\u0679\\u0631\\u0646\\u06AF\",json_string:\"\\u062C\\u06D2 \\u0627\\u06CC\\u0633 \\u0627\\u0648 \\u0627\\u06CC\\u0646 \\u0633\\u0679\\u0631\\u0646\\u06AF\",e164:\"\\u0627\\u06CC 164 \\u0646\\u0645\\u0628\\u0631\",jwt:\"\\u062C\\u06D2 \\u0688\\u0628\\u0644\\u06CC\\u0648 \\u0679\\u06CC\",template_literal:\"\\u0627\\u0646 \\u067E\\u0679\"},a={nan:\"NaN\",number:\"\\u0646\\u0645\\u0628\\u0631\",array:\"\\u0622\\u0631\\u06D2\",null:\"\\u0646\\u0644\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u063A\\u0644\\u0637 \\u0627\\u0646 \\u067E\\u0679: instanceof ${t.expected} \\u0645\\u062A\\u0648\\u0642\\u0639 \\u062A\\u06BE\\u0627\\u060C ${s} \\u0645\\u0648\\u0635\\u0648\\u0644 \\u06C1\\u0648\\u0627`:`\\u063A\\u0644\\u0637 \\u0627\\u0646 \\u067E\\u0679: ${r} \\u0645\\u062A\\u0648\\u0642\\u0639 \\u062A\\u06BE\\u0627\\u060C ${s} \\u0645\\u0648\\u0635\\u0648\\u0644 \\u06C1\\u0648\\u0627`}case\"invalid_value\":return t.values.length===1?`\\u063A\\u0644\\u0637 \\u0627\\u0646 \\u067E\\u0679: ${w(t.values[0])} \\u0645\\u062A\\u0648\\u0642\\u0639 \\u062A\\u06BE\\u0627`:`\\u063A\\u0644\\u0637 \\u0622\\u067E\\u0634\\u0646: ${v(t.values,\"|\")} \\u0645\\u06CC\\u06BA \\u0633\\u06D2 \\u0627\\u06CC\\u06A9 \\u0645\\u062A\\u0648\\u0642\\u0639 \\u062A\\u06BE\\u0627`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\u0628\\u06C1\\u062A \\u0628\\u0691\\u0627: ${t.origin??\"\\u0648\\u06CC\\u0644\\u06CC\\u0648\"} \\u06A9\\u06D2 ${r}${t.maximum.toString()} ${o.unit??\"\\u0639\\u0646\\u0627\\u0635\\u0631\"} \\u06C1\\u0648\\u0646\\u06D2 \\u0645\\u062A\\u0648\\u0642\\u0639 \\u062A\\u06BE\\u06D2`:`\\u0628\\u06C1\\u062A \\u0628\\u0691\\u0627: ${t.origin??\"\\u0648\\u06CC\\u0644\\u06CC\\u0648\"} \\u06A9\\u0627 ${r}${t.maximum.toString()} \\u06C1\\u0648\\u0646\\u0627 \\u0645\\u062A\\u0648\\u0642\\u0639 \\u062A\\u06BE\\u0627`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\u0628\\u06C1\\u062A \\u0686\\u06BE\\u0648\\u0679\\u0627: ${t.origin} \\u06A9\\u06D2 ${r}${t.minimum.toString()} ${o.unit} \\u06C1\\u0648\\u0646\\u06D2 \\u0645\\u062A\\u0648\\u0642\\u0639 \\u062A\\u06BE\\u06D2`:`\\u0628\\u06C1\\u062A \\u0686\\u06BE\\u0648\\u0679\\u0627: ${t.origin} \\u06A9\\u0627 ${r}${t.minimum.toString()} \\u06C1\\u0648\\u0646\\u0627 \\u0645\\u062A\\u0648\\u0642\\u0639 \\u062A\\u06BE\\u0627`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u063A\\u0644\\u0637 \\u0633\\u0679\\u0631\\u0646\\u06AF: \"${r.prefix}\" \\u0633\\u06D2 \\u0634\\u0631\\u0648\\u0639 \\u06C1\\u0648\\u0646\\u0627 \\u0686\\u0627\\u06C1\\u06CC\\u06D2`:r.format===\"ends_with\"?`\\u063A\\u0644\\u0637 \\u0633\\u0679\\u0631\\u0646\\u06AF: \"${r.suffix}\" \\u067E\\u0631 \\u062E\\u062A\\u0645 \\u06C1\\u0648\\u0646\\u0627 \\u0686\\u0627\\u06C1\\u06CC\\u06D2`:r.format===\"includes\"?`\\u063A\\u0644\\u0637 \\u0633\\u0679\\u0631\\u0646\\u06AF: \"${r.includes}\" \\u0634\\u0627\\u0645\\u0644 \\u06C1\\u0648\\u0646\\u0627 \\u0686\\u0627\\u06C1\\u06CC\\u06D2`:r.format===\"regex\"?`\\u063A\\u0644\\u0637 \\u0633\\u0679\\u0631\\u0646\\u06AF: \\u067E\\u06CC\\u0679\\u0631\\u0646 ${r.pattern} \\u0633\\u06D2 \\u0645\\u06CC\\u0686 \\u06C1\\u0648\\u0646\\u0627 \\u0686\\u0627\\u06C1\\u06CC\\u06D2`:`\\u063A\\u0644\\u0637 ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u063A\\u0644\\u0637 \\u0646\\u0645\\u0628\\u0631: ${t.divisor} \\u06A9\\u0627 \\u0645\\u0636\\u0627\\u0639\\u0641 \\u06C1\\u0648\\u0646\\u0627 \\u0686\\u0627\\u06C1\\u06CC\\u06D2`;case\"unrecognized_keys\":return`\\u063A\\u06CC\\u0631 \\u062A\\u0633\\u0644\\u06CC\\u0645 \\u0634\\u062F\\u06C1 \\u06A9\\u06CC${t.keys.length>1?\"\\u0632\":\"\"}: ${v(t.keys,\"\\u060C \")}`;case\"invalid_key\":return`${t.origin} \\u0645\\u06CC\\u06BA \\u063A\\u0644\\u0637 \\u06A9\\u06CC`;case\"invalid_union\":return\"\\u063A\\u0644\\u0637 \\u0627\\u0646 \\u067E\\u0679\";case\"invalid_element\":return`${t.origin} \\u0645\\u06CC\\u06BA \\u063A\\u0644\\u0637 \\u0648\\u06CC\\u0644\\u06CC\\u0648`;default:return\"\\u063A\\u0644\\u0637 \\u0627\\u0646 \\u067E\\u0679\"}}},Bg=b(()=>{I()});function Gg(){return{localeError:Xg()}}var Xg=()=>{let e={string:{unit:\"belgi\",verb:\"bo\\u2018lishi kerak\"},file:{unit:\"bayt\",verb:\"bo\\u2018lishi kerak\"},array:{unit:\"element\",verb:\"bo\\u2018lishi kerak\"},set:{unit:\"element\",verb:\"bo\\u2018lishi kerak\"}};function i(t){return e[t]??null}let n={regex:\"kirish\",email:\"elektron pochta manzili\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO sana va vaqti\",date:\"ISO sana\",time:\"ISO vaqt\",duration:\"ISO davomiylik\",ipv4:\"IPv4 manzil\",ipv6:\"IPv6 manzil\",mac:\"MAC manzil\",cidrv4:\"IPv4 diapazon\",cidrv6:\"IPv6 diapazon\",base64:\"base64 kodlangan satr\",base64url:\"base64url kodlangan satr\",json_string:\"JSON satr\",e164:\"E.164 raqam\",jwt:\"JWT\",template_literal:\"kirish\"},a={nan:\"NaN\",number:\"raqam\",array:\"massiv\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`Noto\\u2018g\\u2018ri kirish: kutilgan instanceof ${t.expected}, qabul qilingan ${s}`:`Noto\\u2018g\\u2018ri kirish: kutilgan ${r}, qabul qilingan ${s}`}case\"invalid_value\":return t.values.length===1?`Noto\\u2018g\\u2018ri kirish: kutilgan ${w(t.values[0])}`:`Noto\\u2018g\\u2018ri variant: quyidagilardan biri kutilgan ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Juda katta: kutilgan ${t.origin??\"qiymat\"} ${r}${t.maximum.toString()} ${o.unit} ${o.verb}`:`Juda katta: kutilgan ${t.origin??\"qiymat\"} ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Juda kichik: kutilgan ${t.origin} ${r}${t.minimum.toString()} ${o.unit} ${o.verb}`:`Juda kichik: kutilgan ${t.origin} ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Noto\\u2018g\\u2018ri satr: \"${r.prefix}\" bilan boshlanishi kerak`:r.format===\"ends_with\"?`Noto\\u2018g\\u2018ri satr: \"${r.suffix}\" bilan tugashi kerak`:r.format===\"includes\"?`Noto\\u2018g\\u2018ri satr: \"${r.includes}\" ni o\\u2018z ichiga olishi kerak`:r.format===\"regex\"?`Noto\\u2018g\\u2018ri satr: ${r.pattern} shabloniga mos kelishi kerak`:`Noto\\u2018g\\u2018ri ${n[r.format]??t.format}`}case\"not_multiple_of\":return`Noto\\u2018g\\u2018ri raqam: ${t.divisor} ning karralisi bo\\u2018lishi kerak`;case\"unrecognized_keys\":return`Noma\\u2019lum kalit${t.keys.length>1?\"lar\":\"\"}: ${v(t.keys,\", \")}`;case\"invalid_key\":return`${t.origin} dagi kalit noto\\u2018g\\u2018ri`;case\"invalid_union\":return\"Noto\\u2018g\\u2018ri kirish\";case\"invalid_element\":return`${t.origin} da noto\\u2018g\\u2018ri qiymat`;default:return\"Noto\\u2018g\\u2018ri kirish\"}}},Yg=b(()=>{I()});function Qg(){return{localeError:ev()}}var ev=()=>{let e={string:{unit:\"k\\xFD t\\u1EF1\",verb:\"c\\xF3\"},file:{unit:\"byte\",verb:\"c\\xF3\"},array:{unit:\"ph\\u1EA7n t\\u1EED\",verb:\"c\\xF3\"},set:{unit:\"ph\\u1EA7n t\\u1EED\",verb:\"c\\xF3\"}};function i(t){return e[t]??null}let n={regex:\"\\u0111\\u1EA7u v\\xE0o\",email:\"\\u0111\\u1ECBa ch\\u1EC9 email\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ng\\xE0y gi\\u1EDD ISO\",date:\"ng\\xE0y ISO\",time:\"gi\\u1EDD ISO\",duration:\"kho\\u1EA3ng th\\u1EDDi gian ISO\",ipv4:\"\\u0111\\u1ECBa ch\\u1EC9 IPv4\",ipv6:\"\\u0111\\u1ECBa ch\\u1EC9 IPv6\",cidrv4:\"d\\u1EA3i IPv4\",cidrv6:\"d\\u1EA3i IPv6\",base64:\"chu\\u1ED7i m\\xE3 h\\xF3a base64\",base64url:\"chu\\u1ED7i m\\xE3 h\\xF3a base64url\",json_string:\"chu\\u1ED7i JSON\",e164:\"s\\u1ED1 E.164\",jwt:\"JWT\",template_literal:\"\\u0111\\u1EA7u v\\xE0o\"},a={nan:\"NaN\",number:\"s\\u1ED1\",array:\"m\\u1EA3ng\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u0110\\u1EA7u v\\xE0o kh\\xF4ng h\\u1EE3p l\\u1EC7: mong \\u0111\\u1EE3i instanceof ${t.expected}, nh\\u1EADn \\u0111\\u01B0\\u1EE3c ${s}`:`\\u0110\\u1EA7u v\\xE0o kh\\xF4ng h\\u1EE3p l\\u1EC7: mong \\u0111\\u1EE3i ${r}, nh\\u1EADn \\u0111\\u01B0\\u1EE3c ${s}`}case\"invalid_value\":return t.values.length===1?`\\u0110\\u1EA7u v\\xE0o kh\\xF4ng h\\u1EE3p l\\u1EC7: mong \\u0111\\u1EE3i ${w(t.values[0])}`:`T\\xF9y ch\\u1ECDn kh\\xF4ng h\\u1EE3p l\\u1EC7: mong \\u0111\\u1EE3i m\\u1ED9t trong c\\xE1c gi\\xE1 tr\\u1ECB ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`Qu\\xE1 l\\u1EDBn: mong \\u0111\\u1EE3i ${t.origin??\"gi\\xE1 tr\\u1ECB\"} ${o.verb} ${r}${t.maximum.toString()} ${o.unit??\"ph\\u1EA7n t\\u1EED\"}`:`Qu\\xE1 l\\u1EDBn: mong \\u0111\\u1EE3i ${t.origin??\"gi\\xE1 tr\\u1ECB\"} ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`Qu\\xE1 nh\\u1ECF: mong \\u0111\\u1EE3i ${t.origin} ${o.verb} ${r}${t.minimum.toString()} ${o.unit}`:`Qu\\xE1 nh\\u1ECF: mong \\u0111\\u1EE3i ${t.origin} ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`Chu\\u1ED7i kh\\xF4ng h\\u1EE3p l\\u1EC7: ph\\u1EA3i b\\u1EAFt \\u0111\\u1EA7u b\\u1EB1ng \"${r.prefix}\"`:r.format===\"ends_with\"?`Chu\\u1ED7i kh\\xF4ng h\\u1EE3p l\\u1EC7: ph\\u1EA3i k\\u1EBFt th\\xFAc b\\u1EB1ng \"${r.suffix}\"`:r.format===\"includes\"?`Chu\\u1ED7i kh\\xF4ng h\\u1EE3p l\\u1EC7: ph\\u1EA3i bao g\\u1ED3m \"${r.includes}\"`:r.format===\"regex\"?`Chu\\u1ED7i kh\\xF4ng h\\u1EE3p l\\u1EC7: ph\\u1EA3i kh\\u1EDBp v\\u1EDBi m\\u1EABu ${r.pattern}`:`${n[r.format]??t.format} kh\\xF4ng h\\u1EE3p l\\u1EC7`}case\"not_multiple_of\":return`S\\u1ED1 kh\\xF4ng h\\u1EE3p l\\u1EC7: ph\\u1EA3i l\\xE0 b\\u1ED9i s\\u1ED1 c\\u1EE7a ${t.divisor}`;case\"unrecognized_keys\":return`Kh\\xF3a kh\\xF4ng \\u0111\\u01B0\\u1EE3c nh\\u1EADn d\\u1EA1ng: ${v(t.keys,\", \")}`;case\"invalid_key\":return`Kh\\xF3a kh\\xF4ng h\\u1EE3p l\\u1EC7 trong ${t.origin}`;case\"invalid_union\":return\"\\u0110\\u1EA7u v\\xE0o kh\\xF4ng h\\u1EE3p l\\u1EC7\";case\"invalid_element\":return`Gi\\xE1 tr\\u1ECB kh\\xF4ng h\\u1EE3p l\\u1EC7 trong ${t.origin}`;default:return\"\\u0110\\u1EA7u v\\xE0o kh\\xF4ng h\\u1EE3p l\\u1EC7\"}}},tv=b(()=>{I()});function iv(){return{localeError:nv()}}var nv=()=>{let e={string:{unit:\"\\u5B57\\u7B26\",verb:\"\\u5305\\u542B\"},file:{unit:\"\\u5B57\\u8282\",verb:\"\\u5305\\u542B\"},array:{unit:\"\\u9879\",verb:\"\\u5305\\u542B\"},set:{unit:\"\\u9879\",verb:\"\\u5305\\u542B\"}};function i(t){return e[t]??null}let n={regex:\"\\u8F93\\u5165\",email:\"\\u7535\\u5B50\\u90AE\\u4EF6\",url:\"URL\",emoji:\"\\u8868\\u60C5\\u7B26\\u53F7\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO\\u65E5\\u671F\\u65F6\\u95F4\",date:\"ISO\\u65E5\\u671F\",time:\"ISO\\u65F6\\u95F4\",duration:\"ISO\\u65F6\\u957F\",ipv4:\"IPv4\\u5730\\u5740\",ipv6:\"IPv6\\u5730\\u5740\",cidrv4:\"IPv4\\u7F51\\u6BB5\",cidrv6:\"IPv6\\u7F51\\u6BB5\",base64:\"base64\\u7F16\\u7801\\u5B57\\u7B26\\u4E32\",base64url:\"base64url\\u7F16\\u7801\\u5B57\\u7B26\\u4E32\",json_string:\"JSON\\u5B57\\u7B26\\u4E32\",e164:\"E.164\\u53F7\\u7801\",jwt:\"JWT\",template_literal:\"\\u8F93\\u5165\"},a={nan:\"NaN\",number:\"\\u6570\\u5B57\",array:\"\\u6570\\u7EC4\",null:\"\\u7A7A\\u503C(null)\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u65E0\\u6548\\u8F93\\u5165\\uFF1A\\u671F\\u671B instanceof ${t.expected}\\uFF0C\\u5B9E\\u9645\\u63A5\\u6536 ${s}`:`\\u65E0\\u6548\\u8F93\\u5165\\uFF1A\\u671F\\u671B ${r}\\uFF0C\\u5B9E\\u9645\\u63A5\\u6536 ${s}`}case\"invalid_value\":return t.values.length===1?`\\u65E0\\u6548\\u8F93\\u5165\\uFF1A\\u671F\\u671B ${w(t.values[0])}`:`\\u65E0\\u6548\\u9009\\u9879\\uFF1A\\u671F\\u671B\\u4EE5\\u4E0B\\u4E4B\\u4E00 ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\u6570\\u503C\\u8FC7\\u5927\\uFF1A\\u671F\\u671B ${t.origin??\"\\u503C\"} ${r}${t.maximum.toString()} ${o.unit??\"\\u4E2A\\u5143\\u7D20\"}`:`\\u6570\\u503C\\u8FC7\\u5927\\uFF1A\\u671F\\u671B ${t.origin??\"\\u503C\"} ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\u6570\\u503C\\u8FC7\\u5C0F\\uFF1A\\u671F\\u671B ${t.origin} ${r}${t.minimum.toString()} ${o.unit}`:`\\u6570\\u503C\\u8FC7\\u5C0F\\uFF1A\\u671F\\u671B ${t.origin} ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u65E0\\u6548\\u5B57\\u7B26\\u4E32\\uFF1A\\u5FC5\\u987B\\u4EE5 \"${r.prefix}\" \\u5F00\\u5934`:r.format===\"ends_with\"?`\\u65E0\\u6548\\u5B57\\u7B26\\u4E32\\uFF1A\\u5FC5\\u987B\\u4EE5 \"${r.suffix}\" \\u7ED3\\u5C3E`:r.format===\"includes\"?`\\u65E0\\u6548\\u5B57\\u7B26\\u4E32\\uFF1A\\u5FC5\\u987B\\u5305\\u542B \"${r.includes}\"`:r.format===\"regex\"?`\\u65E0\\u6548\\u5B57\\u7B26\\u4E32\\uFF1A\\u5FC5\\u987B\\u6EE1\\u8DB3\\u6B63\\u5219\\u8868\\u8FBE\\u5F0F ${r.pattern}`:`\\u65E0\\u6548${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u65E0\\u6548\\u6570\\u5B57\\uFF1A\\u5FC5\\u987B\\u662F ${t.divisor} \\u7684\\u500D\\u6570`;case\"unrecognized_keys\":return`\\u51FA\\u73B0\\u672A\\u77E5\\u7684\\u952E(key): ${v(t.keys,\", \")}`;case\"invalid_key\":return`${t.origin} \\u4E2D\\u7684\\u952E(key)\\u65E0\\u6548`;case\"invalid_union\":return\"\\u65E0\\u6548\\u8F93\\u5165\";case\"invalid_element\":return`${t.origin} \\u4E2D\\u5305\\u542B\\u65E0\\u6548\\u503C(value)`;default:return\"\\u65E0\\u6548\\u8F93\\u5165\"}}},rv=b(()=>{I()});function av(){return{localeError:ov()}}var ov=()=>{let e={string:{unit:\"\\u5B57\\u5143\",verb:\"\\u64C1\\u6709\"},file:{unit:\"\\u4F4D\\u5143\\u7D44\",verb:\"\\u64C1\\u6709\"},array:{unit:\"\\u9805\\u76EE\",verb:\"\\u64C1\\u6709\"},set:{unit:\"\\u9805\\u76EE\",verb:\"\\u64C1\\u6709\"}};function i(t){return e[t]??null}let n={regex:\"\\u8F38\\u5165\",email:\"\\u90F5\\u4EF6\\u5730\\u5740\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"ISO \\u65E5\\u671F\\u6642\\u9593\",date:\"ISO \\u65E5\\u671F\",time:\"ISO \\u6642\\u9593\",duration:\"ISO \\u671F\\u9593\",ipv4:\"IPv4 \\u4F4D\\u5740\",ipv6:\"IPv6 \\u4F4D\\u5740\",cidrv4:\"IPv4 \\u7BC4\\u570D\",cidrv6:\"IPv6 \\u7BC4\\u570D\",base64:\"base64 \\u7DE8\\u78BC\\u5B57\\u4E32\",base64url:\"base64url \\u7DE8\\u78BC\\u5B57\\u4E32\",json_string:\"JSON \\u5B57\\u4E32\",e164:\"E.164 \\u6578\\u503C\",jwt:\"JWT\",template_literal:\"\\u8F38\\u5165\"},a={nan:\"NaN\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\u7121\\u6548\\u7684\\u8F38\\u5165\\u503C\\uFF1A\\u9810\\u671F\\u70BA instanceof ${t.expected}\\uFF0C\\u4F46\\u6536\\u5230 ${s}`:`\\u7121\\u6548\\u7684\\u8F38\\u5165\\u503C\\uFF1A\\u9810\\u671F\\u70BA ${r}\\uFF0C\\u4F46\\u6536\\u5230 ${s}`}case\"invalid_value\":return t.values.length===1?`\\u7121\\u6548\\u7684\\u8F38\\u5165\\u503C\\uFF1A\\u9810\\u671F\\u70BA ${w(t.values[0])}`:`\\u7121\\u6548\\u7684\\u9078\\u9805\\uFF1A\\u9810\\u671F\\u70BA\\u4EE5\\u4E0B\\u5176\\u4E2D\\u4E4B\\u4E00 ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`\\u6578\\u503C\\u904E\\u5927\\uFF1A\\u9810\\u671F ${t.origin??\"\\u503C\"} \\u61C9\\u70BA ${r}${t.maximum.toString()} ${o.unit??\"\\u500B\\u5143\\u7D20\"}`:`\\u6578\\u503C\\u904E\\u5927\\uFF1A\\u9810\\u671F ${t.origin??\"\\u503C\"} \\u61C9\\u70BA ${r}${t.maximum.toString()}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`\\u6578\\u503C\\u904E\\u5C0F\\uFF1A\\u9810\\u671F ${t.origin} \\u61C9\\u70BA ${r}${t.minimum.toString()} ${o.unit}`:`\\u6578\\u503C\\u904E\\u5C0F\\uFF1A\\u9810\\u671F ${t.origin} \\u61C9\\u70BA ${r}${t.minimum.toString()}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u7121\\u6548\\u7684\\u5B57\\u4E32\\uFF1A\\u5FC5\\u9808\\u4EE5 \"${r.prefix}\" \\u958B\\u982D`:r.format===\"ends_with\"?`\\u7121\\u6548\\u7684\\u5B57\\u4E32\\uFF1A\\u5FC5\\u9808\\u4EE5 \"${r.suffix}\" \\u7D50\\u5C3E`:r.format===\"includes\"?`\\u7121\\u6548\\u7684\\u5B57\\u4E32\\uFF1A\\u5FC5\\u9808\\u5305\\u542B \"${r.includes}\"`:r.format===\"regex\"?`\\u7121\\u6548\\u7684\\u5B57\\u4E32\\uFF1A\\u5FC5\\u9808\\u7B26\\u5408\\u683C\\u5F0F ${r.pattern}`:`\\u7121\\u6548\\u7684 ${n[r.format]??t.format}`}case\"not_multiple_of\":return`\\u7121\\u6548\\u7684\\u6578\\u5B57\\uFF1A\\u5FC5\\u9808\\u70BA ${t.divisor} \\u7684\\u500D\\u6578`;case\"unrecognized_keys\":return`\\u7121\\u6CD5\\u8B58\\u5225\\u7684\\u9375\\u503C${t.keys.length>1?\"\\u5011\":\"\"}\\uFF1A${v(t.keys,\"\\u3001\")}`;case\"invalid_key\":return`${t.origin} \\u4E2D\\u6709\\u7121\\u6548\\u7684\\u9375\\u503C`;case\"invalid_union\":return\"\\u7121\\u6548\\u7684\\u8F38\\u5165\\u503C\";case\"invalid_element\":return`${t.origin} \\u4E2D\\u6709\\u7121\\u6548\\u7684\\u503C`;default:return\"\\u7121\\u6548\\u7684\\u8F38\\u5165\\u503C\"}}},sv=b(()=>{I()});function uv(){return{localeError:lv()}}var lv=()=>{let e={string:{unit:\"\\xE0mi\",verb:\"n\\xED\"},file:{unit:\"bytes\",verb:\"n\\xED\"},array:{unit:\"nkan\",verb:\"n\\xED\"},set:{unit:\"nkan\",verb:\"n\\xED\"}};function i(t){return e[t]??null}let n={regex:\"\\u1EB9\\u0300r\\u1ECD \\xECb\\xE1w\\u1ECDl\\xE9\",email:\"\\xE0d\\xEDr\\u1EB9\\u0301s\\xEC \\xECm\\u1EB9\\u0301l\\xEC\",url:\"URL\",emoji:\"emoji\",uuid:\"UUID\",uuidv4:\"UUIDv4\",uuidv6:\"UUIDv6\",nanoid:\"nanoid\",guid:\"GUID\",cuid:\"cuid\",cuid2:\"cuid2\",ulid:\"ULID\",xid:\"XID\",ksuid:\"KSUID\",datetime:\"\\xE0k\\xF3k\\xF2 ISO\",date:\"\\u1ECDj\\u1ECD\\u0301 ISO\",time:\"\\xE0k\\xF3k\\xF2 ISO\",duration:\"\\xE0k\\xF3k\\xF2 t\\xF3 p\\xE9 ISO\",ipv4:\"\\xE0d\\xEDr\\u1EB9\\u0301s\\xEC IPv4\",ipv6:\"\\xE0d\\xEDr\\u1EB9\\u0301s\\xEC IPv6\",cidrv4:\"\\xE0gb\\xE8gb\\xE8 IPv4\",cidrv6:\"\\xE0gb\\xE8gb\\xE8 IPv6\",base64:\"\\u1ECD\\u0300r\\u1ECD\\u0300 t\\xED a k\\u1ECD\\u0301 n\\xED base64\",base64url:\"\\u1ECD\\u0300r\\u1ECD\\u0300 base64url\",json_string:\"\\u1ECD\\u0300r\\u1ECD\\u0300 JSON\",e164:\"n\\u1ECD\\u0301mb\\xE0 E.164\",jwt:\"JWT\",template_literal:\"\\u1EB9\\u0300r\\u1ECD \\xECb\\xE1w\\u1ECDl\\xE9\"},a={nan:\"NaN\",number:\"n\\u1ECD\\u0301mb\\xE0\",array:\"akop\\u1ECD\"};return t=>{switch(t.code){case\"invalid_type\":{let r=a[t.expected]??t.expected,o=x(t.input),s=a[o]??o;return/^[A-Z]/.test(t.expected)?`\\xCCb\\xE1w\\u1ECDl\\xE9 a\\u1E63\\xEC\\u1E63e: a n\\xED l\\xE1ti fi instanceof ${t.expected}, \\xE0m\\u1ECD\\u0300 a r\\xED ${s}`:`\\xCCb\\xE1w\\u1ECDl\\xE9 a\\u1E63\\xEC\\u1E63e: a n\\xED l\\xE1ti fi ${r}, \\xE0m\\u1ECD\\u0300 a r\\xED ${s}`}case\"invalid_value\":return t.values.length===1?`\\xCCb\\xE1w\\u1ECDl\\xE9 a\\u1E63\\xEC\\u1E63e: a n\\xED l\\xE1ti fi ${w(t.values[0])}`:`\\xC0\\u1E63\\xE0y\\xE0n a\\u1E63\\xEC\\u1E63e: yan \\u1ECD\\u0300kan l\\xE1ra ${v(t.values,\"|\")}`;case\"too_big\":{let r=t.inclusive?\"<=\":\"<\",o=i(t.origin);return o?`T\\xF3 p\\u1ECD\\u0300 j\\xF9: a n\\xED l\\xE1ti j\\u1EB9\\u0301 p\\xE9 ${t.origin??\"iye\"} ${o.verb} ${r}${t.maximum} ${o.unit}`:`T\\xF3 p\\u1ECD\\u0300 j\\xF9: a n\\xED l\\xE1ti j\\u1EB9\\u0301 ${r}${t.maximum}`}case\"too_small\":{let r=t.inclusive?\">=\":\">\",o=i(t.origin);return o?`K\\xE9r\\xE9 ju: a n\\xED l\\xE1ti j\\u1EB9\\u0301 p\\xE9 ${t.origin} ${o.verb} ${r}${t.minimum} ${o.unit}`:`K\\xE9r\\xE9 ju: a n\\xED l\\xE1ti j\\u1EB9\\u0301 ${r}${t.minimum}`}case\"invalid_format\":{let r=t;return r.format===\"starts_with\"?`\\u1ECC\\u0300r\\u1ECD\\u0300 a\\u1E63\\xEC\\u1E63e: gb\\u1ECD\\u0301d\\u1ECD\\u0300 b\\u1EB9\\u0300r\\u1EB9\\u0300 p\\u1EB9\\u0300l\\xFA \"${r.prefix}\"`:r.format===\"ends_with\"?`\\u1ECC\\u0300r\\u1ECD\\u0300 a\\u1E63\\xEC\\u1E63e: gb\\u1ECD\\u0301d\\u1ECD\\u0300 par\\xED p\\u1EB9\\u0300l\\xFA \"${r.suffix}\"`:r.format===\"includes\"?`\\u1ECC\\u0300r\\u1ECD\\u0300 a\\u1E63\\xEC\\u1E63e: gb\\u1ECD\\u0301d\\u1ECD\\u0300 n\\xED \"${r.includes}\"`:r.format===\"regex\"?`\\u1ECC\\u0300r\\u1ECD\\u0300 a\\u1E63\\xEC\\u1E63e: gb\\u1ECD\\u0301d\\u1ECD\\u0300 b\\xE1 \\xE0p\\u1EB9\\u1EB9r\\u1EB9 mu ${r.pattern}`:`A\\u1E63\\xEC\\u1E63e: ${n[r.format]??t.format}`}case\"not_multiple_of\":return`N\\u1ECD\\u0301mb\\xE0 a\\u1E63\\xEC\\u1E63e: gb\\u1ECD\\u0301d\\u1ECD\\u0300 j\\u1EB9\\u0301 \\xE8y\\xE0 p\\xEDp\\xEDn ti ${t.divisor}`;case\"unrecognized_keys\":return`B\\u1ECDt\\xECn\\xEC \\xE0\\xECm\\u1ECD\\u0300: ${v(t.keys,\", \")}`;case\"invalid_key\":return`B\\u1ECDt\\xECn\\xEC a\\u1E63\\xEC\\u1E63e n\\xEDn\\xFA ${t.origin}`;case\"invalid_union\":return\"\\xCCb\\xE1w\\u1ECDl\\xE9 a\\u1E63\\xEC\\u1E63e\";case\"invalid_element\":return`Iye a\\u1E63\\xEC\\u1E63e n\\xEDn\\xFA ${t.origin}`;default:return\"\\xCCb\\xE1w\\u1ECDl\\xE9 a\\u1E63\\xEC\\u1E63e\"}}},dv=b(()=>{I()}),Vn={};ve(Vn,{zhTW:()=>av,zhCN:()=>iv,yo:()=>uv,vi:()=>Qg,uz:()=>Gg,ur:()=>Vg,uk:()=>Vd,ua:()=>Hg,tr:()=>Lg,th:()=>Ag,ta:()=>Eg,sv:()=>Tg,sl:()=>Og,ru:()=>Sg,pt:()=>Ig,ps:()=>hg,pl:()=>_g,ota:()=>fg,no:()=>cg,nl:()=>ug,ms:()=>ag,mk:()=>ig,lt:()=>Qf,ko:()=>Gf,km:()=>Hd,kh:()=>Kf,ka:()=>Ff,ja:()=>Lf,it:()=>Af,is:()=>Ef,id:()=>Tf,hy:()=>Of,hu:()=>Sf,he:()=>If,frCA:()=>_f,fr:()=>hf,fi:()=>ff,fa:()=>cf,es:()=>uf,eo:()=>af,en:()=>Jd,de:()=>ef,da:()=>Xp,cs:()=>Kp,ca:()=>Hp,bg:()=>qp,be:()=>Cp,az:()=>Pp,ar:()=>Dp});var Bd=b(()=>{Ep(),Ap(),Lp(),Fp(),Vp(),Gp(),Qp(),nf(),Fd(),sf(),df(),pf(),vf(),bf(),kf(),xf(),Uf(),Zf(),jf(),Rf(),Mf(),Jf(),Wf(),Bf(),Wd(),Yf(),tg(),rg(),sg(),dg(),pg(),vg(),bg(),kg(),xg(),Ug(),Zg(),jg(),Rg(),Mg(),Jg(),Wg(),Kd(),Bg(),Yg(),tv(),rv(),sv(),dv()}),Sn=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(i,...n){let a=n[0];return this._map.set(i,a),a&&typeof a==\"object\"&&\"id\"in a&&this._idmap.set(a.id,i),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(i){let n=this._map.get(i);return n&&typeof n==\"object\"&&\"id\"in n&&this._idmap.delete(n.id),this._map.delete(i),this}get(i){let n=i._zod.parent;if(n){let a={...this.get(n)??{}};delete a.id;let t={...a,...this._map.get(i)};return Object.keys(t).length?t:void 0}return this._map.get(i)}has(i){return this._map.has(i)}};function Kn(){return new Sn}var Tl,Bn,Gn,ae,Xn=b(()=>{Bn=Symbol(\"ZodOutput\"),Gn=Symbol(\"ZodInput\"),(Tl=globalThis).__zod_globalRegistry??(Tl.__zod_globalRegistry=Kn()),ae=globalThis.__zod_globalRegistry});function Gd(e,i){return new e({type:\"string\",...h(i)})}function Xd(e,i){return new e({type:\"string\",coerce:!0,...h(i)})}function fs(e,i){return new e({type:\"string\",format:\"email\",check:\"string_format\",abort:!1,...h(i)})}function zn(e,i){return new e({type:\"string\",format:\"guid\",check:\"string_format\",abort:!1,...h(i)})}function gs(e,i){return new e({type:\"string\",format:\"uuid\",check:\"string_format\",abort:!1,...h(i)})}function vs(e,i){return new e({type:\"string\",format:\"uuid\",check:\"string_format\",abort:!1,version:\"v4\",...h(i)})}function hs(e,i){return new e({type:\"string\",format:\"uuid\",check:\"string_format\",abort:!1,version:\"v6\",...h(i)})}function $s(e,i){return new e({type:\"string\",format:\"uuid\",check:\"string_format\",abort:!1,version:\"v7\",...h(i)})}function Yn(e,i){return new e({type:\"string\",format:\"url\",check:\"string_format\",abort:!1,...h(i)})}function bs(e,i){return new e({type:\"string\",format:\"emoji\",check:\"string_format\",abort:!1,...h(i)})}function _s(e,i){return new e({type:\"string\",format:\"nanoid\",check:\"string_format\",abort:!1,...h(i)})}function ys(e,i){return new e({type:\"string\",format:\"cuid\",check:\"string_format\",abort:!1,...h(i)})}function ks(e,i){return new e({type:\"string\",format:\"cuid2\",check:\"string_format\",abort:!1,...h(i)})}function Is(e,i){return new e({type:\"string\",format:\"ulid\",check:\"string_format\",abort:!1,...h(i)})}function ws(e,i){return new e({type:\"string\",format:\"xid\",check:\"string_format\",abort:!1,...h(i)})}function xs(e,i){return new e({type:\"string\",format:\"ksuid\",check:\"string_format\",abort:!1,...h(i)})}function Ss(e,i){return new e({type:\"string\",format:\"ipv4\",check:\"string_format\",abort:!1,...h(i)})}function zs(e,i){return new e({type:\"string\",format:\"ipv6\",check:\"string_format\",abort:!1,...h(i)})}function Yd(e,i){return new e({type:\"string\",format:\"mac\",check:\"string_format\",abort:!1,...h(i)})}function Us(e,i){return new e({type:\"string\",format:\"cidrv4\",check:\"string_format\",abort:!1,...h(i)})}function Os(e,i){return new e({type:\"string\",format:\"cidrv6\",check:\"string_format\",abort:!1,...h(i)})}function Ns(e,i){return new e({type:\"string\",format:\"base64\",check:\"string_format\",abort:!1,...h(i)})}function Zs(e,i){return new e({type:\"string\",format:\"base64url\",check:\"string_format\",abort:!1,...h(i)})}function Ts(e,i){return new e({type:\"string\",format:\"e164\",check:\"string_format\",abort:!1,...h(i)})}function Ds(e,i){return new e({type:\"string\",format:\"jwt\",check:\"string_format\",abort:!1,...h(i)})}function Qd(e,i){return new e({type:\"string\",format:\"datetime\",check:\"string_format\",offset:!1,local:!1,precision:null,...h(i)})}function ec(e,i){return new e({type:\"string\",format:\"date\",check:\"string_format\",...h(i)})}function tc(e,i){return new e({type:\"string\",format:\"time\",check:\"string_format\",precision:null,...h(i)})}function ic(e,i){return new e({type:\"string\",format:\"duration\",check:\"string_format\",...h(i)})}function nc(e,i){return new e({type:\"number\",checks:[],...h(i)})}function rc(e,i){return new e({type:\"number\",coerce:!0,checks:[],...h(i)})}function ac(e,i){return new e({type:\"number\",check:\"number_format\",abort:!1,format:\"safeint\",...h(i)})}function oc(e,i){return new e({type:\"number\",check:\"number_format\",abort:!1,format:\"float32\",...h(i)})}function sc(e,i){return new e({type:\"number\",check:\"number_format\",abort:!1,format:\"float64\",...h(i)})}function uc(e,i){return new e({type:\"number\",check:\"number_format\",abort:!1,format:\"int32\",...h(i)})}function lc(e,i){return new e({type:\"number\",check:\"number_format\",abort:!1,format:\"uint32\",...h(i)})}function dc(e,i){return new e({type:\"boolean\",...h(i)})}function cc(e,i){return new e({type:\"boolean\",coerce:!0,...h(i)})}function mc(e,i){return new e({type:\"bigint\",...h(i)})}function pc(e,i){return new e({type:\"bigint\",coerce:!0,...h(i)})}function fc(e,i){return new e({type:\"bigint\",check:\"bigint_format\",abort:!1,format:\"int64\",...h(i)})}function gc(e,i){return new e({type:\"bigint\",check:\"bigint_format\",abort:!1,format:\"uint64\",...h(i)})}function vc(e,i){return new e({type:\"symbol\",...h(i)})}function hc(e,i){return new e({type:\"undefined\",...h(i)})}function $c(e,i){return new e({type:\"null\",...h(i)})}function bc(e){return new e({type:\"any\"})}function _c(e){return new e({type:\"unknown\"})}function yc(e,i){return new e({type:\"never\",...h(i)})}function kc(e,i){return new e({type:\"void\",...h(i)})}function Ic(e,i){return new e({type:\"date\",...h(i)})}function wc(e,i){return new e({type:\"date\",coerce:!0,...h(i)})}function xc(e,i){return new e({type:\"nan\",...h(i)})}function _e(e,i){return new Jn({check:\"less_than\",...h(i),value:e,inclusive:!1})}function oe(e,i){return new Jn({check:\"less_than\",...h(i),value:e,inclusive:!0})}function ye(e,i){return new Fn({check:\"greater_than\",...h(i),value:e,inclusive:!1})}function ne(e,i){return new Fn({check:\"greater_than\",...h(i),value:e,inclusive:!0})}function Qn(e){return ye(0,e)}function er(e){return _e(0,e)}function tr(e){return oe(0,e)}function ir(e){return ne(0,e)}function je(e,i){return new Aa({check:\"multiple_of\",...h(i),value:e})}function Ee(e,i){return new La({check:\"max_size\",...h(i),maximum:e})}function $e(e,i){return new qa({check:\"min_size\",...h(i),minimum:e})}function Qe(e,i){return new Ja({check:\"size_equals\",...h(i),size:e})}function et(e,i){return new Fa({check:\"max_length\",...h(i),maximum:e})}function xe(e,i){return new Ha({check:\"min_length\",...h(i),minimum:e})}function tt(e,i){return new Wa({check:\"length_equals\",...h(i),length:e})}function Xt(e,i){return new Va({check:\"string_format\",format:\"regex\",...h(i),pattern:e})}function Yt(e){return new Ka({check:\"string_format\",format:\"lowercase\",...h(e)})}function Qt(e){return new Ba({check:\"string_format\",format:\"uppercase\",...h(e)})}function ei(e,i){return new Ga({check:\"string_format\",format:\"includes\",...h(i),includes:e})}function ti(e,i){return new Xa({check:\"string_format\",format:\"starts_with\",...h(i),prefix:e})}function ii(e,i){return new Ya({check:\"string_format\",format:\"ends_with\",...h(i),suffix:e})}function nr(e,i,n){return new Qa({check:\"property\",property:e,schema:i,...h(n)})}function ni(e,i){return new eo({check:\"mime_type\",mime:e,...h(i)})}function he(e){return new to({check:\"overwrite\",tx:e})}function ri(e){return he(i=>i.normalize(e))}function ai(){return he(e=>e.trim())}function oi(){return he(e=>e.toLowerCase())}function si(){return he(e=>e.toUpperCase())}function ui(){return he(e=>Fl(e))}function Sc(e,i,n){return new e({type:\"array\",element:i,...h(n)})}function cv(e,i,n){return new e({type:\"union\",options:i,...h(n)})}function mv(e,i,n){return new e({type:\"union\",options:i,inclusive:!1,...h(n)})}function pv(e,i,n,a){return new e({type:\"union\",options:n,discriminator:i,...h(a)})}function fv(e,i,n){return new e({type:\"intersection\",left:i,right:n})}function gv(e,i,n,a){let t=n instanceof S;return new e({type:\"tuple\",items:i,rest:t?n:null,...h(t?a:n)})}function vv(e,i,n,a){return new e({type:\"record\",keyType:i,valueType:n,...h(a)})}function hv(e,i,n,a){return new e({type:\"map\",keyType:i,valueType:n,...h(a)})}function $v(e,i,n){return new e({type:\"set\",valueType:i,...h(n)})}function bv(e,i,n){let a=Array.isArray(i)?Object.fromEntries(i.map(t=>[t,t])):i;return new e({type:\"enum\",entries:a,...h(n)})}function _v(e,i,n){return new e({type:\"enum\",entries:i,...h(n)})}function yv(e,i,n){return new e({type:\"literal\",values:Array.isArray(i)?i:[i],...h(n)})}function zc(e,i){return new e({type:\"file\",...h(i)})}function kv(e,i){return new e({type:\"transform\",transform:i})}function Iv(e,i){return new e({type:\"optional\",innerType:i})}function wv(e,i){return new e({type:\"nullable\",innerType:i})}function xv(e,i,n){return new e({type:\"default\",innerType:i,get defaultValue(){return typeof n==\"function\"?n():Hl(n)}})}function Sv(e,i,n){return new e({type:\"nonoptional\",innerType:i,...h(n)})}function zv(e,i){return new e({type:\"success\",innerType:i})}function Uv(e,i,n){return new e({type:\"catch\",innerType:i,catchValue:typeof n==\"function\"?n:()=>n})}function Ov(e,i,n){return new e({type:\"pipe\",in:i,out:n})}function Nv(e,i){return new e({type:\"readonly\",innerType:i})}function Zv(e,i,n){return new e({type:\"template_literal\",parts:i,...h(n)})}function Tv(e,i){return new e({type:\"lazy\",getter:i})}function Dv(e,i){return new e({type:\"promise\",innerType:i})}function Uc(e,i,n){let a=h(n);return a.abort??(a.abort=!0),new e({type:\"custom\",check:\"custom\",fn:i,...a})}function Oc(e,i,n){return new e({type:\"custom\",check:\"custom\",fn:i,...h(n)})}function Nc(e){let i=Zc(n=>(n.addIssue=a=>{if(typeof a==\"string\")n.issues.push(vn(a,n.value,i._zod.def));else{let t=a;t.fatal&&(t.continue=!1),t.code??(t.code=\"custom\"),t.input??(t.input=n.value),t.inst??(t.inst=i),t.continue??(t.continue=!i._zod.def.abort),n.issues.push(vn(t))}},e(n.value,n)));return i}function Zc(e,i){let n=new H({check:\"custom\",...h(i)});return n._zod.check=e,n}function Tc(e){let i=new H({check:\"describe\"});return i._zod.onattach=[n=>{let a=ae.get(n)??{};ae.add(n,{...a,description:e})}],i._zod.check=()=>{},i}function Dc(e){let i=new H({check:\"meta\"});return i._zod.onattach=[n=>{let a=ae.get(n)??{};ae.add(n,{...a,...e})}],i._zod.check=()=>{},i}function jc(e,i){let n=h(i),a=n.truthy??[\"true\",\"1\",\"yes\",\"on\",\"y\",\"enabled\"],t=n.falsy??[\"false\",\"0\",\"no\",\"off\",\"n\",\"disabled\"];n.case!==\"sensitive\"&&(a=a.map(g=>typeof g==\"string\"?g.toLowerCase():g),t=t.map(g=>typeof g==\"string\"?g.toLowerCase():g));let r=new Set(a),o=new Set(t),s=e.Codec??Wn,u=e.Boolean??Hn,d=new(e.String??Ye)({type:\"string\",error:n.error}),c=new u({type:\"boolean\",error:n.error}),f=new s({type:\"pipe\",in:d,out:c,transform:(g,_)=>{let U=g;return n.case!==\"sensitive\"&&(U=U.toLowerCase()),r.has(U)?!0:o.has(U)?!1:(_.issues.push({code:\"invalid_value\",expected:\"stringbool\",values:[...r,...o],input:_.value,inst:f,continue:!1}),{})},reverseTransform:(g,_)=>g===!0?a[0]||\"true\":t[0]||\"false\",error:n.error});return f}function li(e,i,n,a={}){let t=h(a),r={...h(a),check:\"string_format\",type:\"string\",format:i,fn:typeof n==\"function\"?n:o=>n.test(o),...t};return n instanceof RegExp&&(r.pattern=n),new e(r)}var rr,jv=b(()=>{io(),Xn(),qd(),I(),rr={Any:null,Minute:-1,Second:0,Millisecond:3,Microsecond:6}});function it(e){let i=e?.target??\"draft-2020-12\";return i===\"draft-4\"&&(i=\"draft-04\"),i===\"draft-7\"&&(i=\"draft-07\"),{processors:e.processors??{},metadataRegistry:e?.metadata??ae,target:i,unrepresentable:e?.unrepresentable??\"throw\",override:e?.override??(()=>{}),io:e?.io??\"output\",counter:0,seen:new Map,cycles:e?.cycles??\"ref\",reused:e?.reused??\"inline\",external:e?.external??void 0}}function C(e,i,n={path:[],schemaPath:[]}){var a;let t=e._zod.def,r=i.seen.get(e);if(r)return r.count++,n.schemaPath.includes(e)&&(r.cycle=n.path),r.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};i.seen.set(e,o);let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let d={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(i,o.schema,d);else{let f=o.schema,g=i.processors[t.type];if(!g)throw Error(`[toJSONSchema]: Non-representable type encountered: ${t.type}`);g(e,i,f,d)}let c=e._zod.parent;c&&(o.ref||(o.ref=c),C(c,i,d),i.seen.get(c).isParent=!0)}let u=i.metadataRegistry.get(e);return u&&Object.assign(o.schema,u),i.io===\"input\"&&te(e)&&(delete o.schema.examples,delete o.schema.default),i.io===\"input\"&&o.schema._prefault&&((a=o.schema).default??(a.default=o.schema._prefault)),delete o.schema._prefault,i.seen.get(e).schema}function nt(e,i){let n=e.seen.get(i);if(!n)throw Error(\"Unprocessed schema. This is a bug in Zod.\");let a=new Map;for(let o of e.seen.entries()){let s=e.metadataRegistry.get(o[0])?.id;if(s){let u=a.get(s);if(u&&u!==o[0])throw Error(`Duplicate schema id \"${s}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);a.set(s,o[0])}}let t=o=>{let s=e.target===\"draft-2020-12\"?\"$defs\":\"definitions\";if(e.external){let c=e.external.registry.get(o[0])?.id,f=e.external.uri??(_=>_);if(c)return{ref:f(c)};let g=o[1].defId??o[1].schema.id??`schema${e.counter++}`;return o[1].defId=g,{defId:g,ref:`${f(\"__shared\")}#/${s}/${g}`}}if(o[1]===n)return{ref:\"#\"};let u=`#/${s}/`,d=o[1].schema.id??`__schema${e.counter++}`;return{defId:d,ref:u+d}},r=o=>{if(o[1].schema.$ref)return;let s=o[1],{ref:u,defId:d}=t(o);s.def={...s.schema},d&&(s.defId=d);let c=s.schema;for(let f in c)delete c[f];c.$ref=u};if(e.cycles===\"throw\")for(let o of e.seen.entries()){let s=o[1];if(s.cycle)throw Error(`Cycle detected: #/${s.cycle?.join(\"/\")}/\n\nSet the \\`cycles\\` parameter to \\`\"ref\"\\` to resolve cyclical schemas with defs.`)}for(let o of e.seen.entries()){let s=o[1];if(i===o[0]){r(o);continue}if(e.external){let u=e.external.registry.get(o[0])?.id;if(i!==o[0]&&u){r(o);continue}}if(e.metadataRegistry.get(o[0])?.id){r(o);continue}if(s.cycle){r(o);continue}if(s.count>1&&e.reused===\"ref\"){r(o);continue}}}function rt(e,i){let n=e.seen.get(i);if(!n)throw Error(\"Unprocessed schema. This is a bug in Zod.\");let a=o=>{let s=e.seen.get(o);if(s.ref===null)return;let u=s.def??s.schema,d={...u},c=s.ref;if(s.ref=null,c){a(c);let g=e.seen.get(c),_=g.schema;if(_.$ref&&(e.target===\"draft-07\"||e.target===\"draft-04\"||e.target===\"openapi-3.0\")?(u.allOf=u.allOf??[],u.allOf.push(_)):Object.assign(u,_),Object.assign(u,d),o._zod.parent===c)for(let U in u)U===\"$ref\"||U===\"allOf\"||U in d||delete u[U];if(_.$ref)for(let U in u)U===\"$ref\"||U===\"allOf\"||U in g.def&&JSON.stringify(u[U])===JSON.stringify(g.def[U])&&delete u[U]}let f=o._zod.parent;if(f&&f!==c){a(f);let g=e.seen.get(f);if(g?.schema.$ref&&(u.$ref=g.schema.$ref,g.def))for(let _ in u)_===\"$ref\"||_===\"allOf\"||_ in g.def&&JSON.stringify(u[_])===JSON.stringify(g.def[_])&&delete u[_]}e.override({zodSchema:o,jsonSchema:u,path:s.path??[]})};for(let o of[...e.seen.entries()].reverse())a(o[0]);let t={};if(e.target===\"draft-2020-12\"?t.$schema=\"https://json-schema.org/draft/2020-12/schema\":e.target===\"draft-07\"?t.$schema=\"http://json-schema.org/draft-07/schema#\":e.target===\"draft-04\"?t.$schema=\"http://json-schema.org/draft-04/schema#\":e.target,e.external?.uri){let o=e.external.registry.get(i)?.id;if(!o)throw Error(\"Schema is missing an `id` property\");t.$id=e.external.uri(o)}Object.assign(t,n.def??n.schema);let r=e.external?.defs??{};for(let o of e.seen.entries()){let s=o[1];s.def&&s.defId&&(r[s.defId]=s.def)}e.external||Object.keys(r).length>0&&(e.target===\"draft-2020-12\"?t.$defs=r:t.definitions=r);try{let o=JSON.parse(JSON.stringify(t));return Object.defineProperty(o,\"~standard\",{value:{...i[\"~standard\"],jsonSchema:{input:Jt(i,\"input\",e.processors),output:Jt(i,\"output\",e.processors)}},enumerable:!1,writable:!1}),o}catch{throw Error(\"Error converting schema to JSON.\")}}function te(e,i){let n=i??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let a=e._zod.def;if(a.type===\"transform\")return!0;if(a.type===\"array\")return te(a.element,n);if(a.type===\"set\")return te(a.valueType,n);if(a.type===\"lazy\")return te(a.getter(),n);if(a.type===\"promise\"||a.type===\"optional\"||a.type===\"nonoptional\"||a.type===\"nullable\"||a.type===\"readonly\"||a.type===\"default\"||a.type===\"prefault\")return te(a.innerType,n);if(a.type===\"intersection\")return te(a.left,n)||te(a.right,n);if(a.type===\"record\"||a.type===\"map\")return te(a.keyType,n)||te(a.valueType,n);if(a.type===\"pipe\")return te(a.in,n)||te(a.out,n);if(a.type===\"object\"){for(let t in a.shape)if(te(a.shape[t],n))return!0;return!1}if(a.type===\"union\"){for(let t of a.options)if(te(t,n))return!0;return!1}if(a.type===\"tuple\"){for(let t of a.items)if(te(t,n))return!0;return!!(a.rest&&te(a.rest,n))}return!1}var Ec=(e,i={})=>n=>{let a=it({...n,processors:i});return C(e,a),nt(a,e),rt(a,e)},Jt=(e,i,n={})=>a=>{let{libraryOptions:t,target:r}=a??{},o=it({...t??{},target:r,io:i,processors:n});return C(e,o),nt(o,e),rt(o,e)},ar=b(()=>{Xn()});function js(e,i){if(\"_idmap\"in e){let a=e,t=it({...i,processors:Un}),r={};for(let u of a._idmap.entries()){let[d,c]=u;C(c,t)}let o={},s={registry:a,uri:i?.uri,defs:r};t.external=s;for(let u of a._idmap.entries()){let[d,c]=u;nt(t,c),o[d]=rt(t,c)}if(Object.keys(r).length>0){let u=t.target===\"draft-2020-12\"?\"$defs\":\"definitions\";o.__shared={[u]:r}}return{schemas:o}}let n=it({...i,processors:Un});return C(e,n),nt(n,e),rt(n,e)}var Pc,Rc=(e,i,n,a)=>{let t=n;t.type=\"string\";let{minimum:r,maximum:o,format:s,patterns:u,contentEncoding:d}=e._zod.bag;if(typeof r==\"number\"&&(t.minLength=r),typeof o==\"number\"&&(t.maxLength=o),s&&(t.format=Pc[s]??s,t.format===\"\"&&delete t.format,s===\"time\"&&delete t.format),d&&(t.contentEncoding=d),u&&u.size>0){let c=[...u];c.length===1?t.pattern=c[0].source:c.length>1&&(t.allOf=[...c.map(f=>({...i.target===\"draft-07\"||i.target===\"draft-04\"||i.target===\"openapi-3.0\"?{type:\"string\"}:{},pattern:f.source}))])}},Ac=(e,i,n,a)=>{let t=n,{minimum:r,maximum:o,format:s,multipleOf:u,exclusiveMaximum:d,exclusiveMinimum:c}=e._zod.bag;typeof s==\"string\"&&s.includes(\"int\")?t.type=\"integer\":t.type=\"number\",typeof c==\"number\"&&(i.target===\"draft-04\"||i.target===\"openapi-3.0\"?(t.minimum=c,t.exclusiveMinimum=!0):t.exclusiveMinimum=c),typeof r==\"number\"&&(t.minimum=r,typeof c==\"number\"&&i.target!==\"draft-04\"&&(c>=r?delete t.minimum:delete t.exclusiveMinimum)),typeof d==\"number\"&&(i.target===\"draft-04\"||i.target===\"openapi-3.0\"?(t.maximum=d,t.exclusiveMaximum=!0):t.exclusiveMaximum=d),typeof o==\"number\"&&(t.maximum=o,typeof d==\"number\"&&i.target!==\"draft-04\"&&(d<=o?delete t.maximum:delete t.exclusiveMaximum)),typeof u==\"number\"&&(t.multipleOf=u)},Cc=(e,i,n,a)=>{n.type=\"boolean\"},Mc=(e,i,n,a)=>{if(i.unrepresentable===\"throw\")throw Error(\"BigInt cannot be represented in JSON Schema\")},Lc=(e,i,n,a)=>{if(i.unrepresentable===\"throw\")throw Error(\"Symbols cannot be represented in JSON Schema\")},qc=(e,i,n,a)=>{i.target===\"openapi-3.0\"?(n.type=\"string\",n.nullable=!0,n.enum=[null]):n.type=\"null\"},Jc=(e,i,n,a)=>{if(i.unrepresentable===\"throw\")throw Error(\"Undefined cannot be represented in JSON Schema\")},Fc=(e,i,n,a)=>{if(i.unrepresentable===\"throw\")throw Error(\"Void cannot be represented in JSON Schema\")},Hc=(e,i,n,a)=>{n.not={}},Wc=(e,i,n,a)=>{},Vc=(e,i,n,a)=>{},Kc=(e,i,n,a)=>{if(i.unrepresentable===\"throw\")throw Error(\"Date cannot be represented in JSON Schema\")},Bc=(e,i,n,a)=>{let t=e._zod.def,r=Yr(t.entries);r.every(o=>typeof o==\"number\")&&(n.type=\"number\"),r.every(o=>typeof o==\"string\")&&(n.type=\"string\"),n.enum=r},Gc=(e,i,n,a)=>{let t=e._zod.def,r=[];for(let o of t.values)if(o===void 0){if(i.unrepresentable===\"throw\")throw Error(\"Literal `undefined` cannot be represented in JSON Schema\")}else if(typeof o==\"bigint\"){if(i.unrepresentable===\"throw\")throw Error(\"BigInt literals cannot be represented in JSON Schema\");r.push(Number(o))}else r.push(o);if(r.length!==0)if(r.length===1){let o=r[0];n.type=o===null?\"null\":typeof o,i.target===\"draft-04\"||i.target===\"openapi-3.0\"?n.enum=[o]:n.const=o}else r.every(o=>typeof o==\"number\")&&(n.type=\"number\"),r.every(o=>typeof o==\"string\")&&(n.type=\"string\"),r.every(o=>typeof o==\"boolean\")&&(n.type=\"boolean\"),r.every(o=>o===null)&&(n.type=\"null\"),n.enum=r},Xc=(e,i,n,a)=>{if(i.unrepresentable===\"throw\")throw Error(\"NaN cannot be represented in JSON Schema\")},Yc=(e,i,n,a)=>{let t=n,r=e._zod.pattern;if(!r)throw Error(\"Pattern not found in template literal\");t.type=\"string\",t.pattern=r.source},Qc=(e,i,n,a)=>{let t=n,r={type:\"string\",format:\"binary\",contentEncoding:\"binary\"},{minimum:o,maximum:s,mime:u}=e._zod.bag;o!==void 0&&(r.minLength=o),s!==void 0&&(r.maxLength=s),u?u.length===1?(r.contentMediaType=u[0],Object.assign(t,r)):(Object.assign(t,r),t.anyOf=u.map(d=>({contentMediaType:d}))):Object.assign(t,r)},em=(e,i,n,a)=>{n.type=\"boolean\"},tm=(e,i,n,a)=>{if(i.unrepresentable===\"throw\")throw Error(\"Custom types cannot be represented in JSON Schema\")},im=(e,i,n,a)=>{if(i.unrepresentable===\"throw\")throw Error(\"Function types cannot be represented in JSON Schema\")},nm=(e,i,n,a)=>{if(i.unrepresentable===\"throw\")throw Error(\"Transforms cannot be represented in JSON Schema\")},rm=(e,i,n,a)=>{if(i.unrepresentable===\"throw\")throw Error(\"Map cannot be represented in JSON Schema\")},am=(e,i,n,a)=>{if(i.unrepresentable===\"throw\")throw Error(\"Set cannot be represented in JSON Schema\")},om=(e,i,n,a)=>{let t=n,r=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==\"number\"&&(t.minItems=o),typeof s==\"number\"&&(t.maxItems=s),t.type=\"array\",t.items=C(r.element,i,{...a,path:[...a.path,\"items\"]})},sm=(e,i,n,a)=>{let t=n,r=e._zod.def;t.type=\"object\",t.properties={};let o=r.shape;for(let d in o)t.properties[d]=C(o[d],i,{...a,path:[...a.path,\"properties\",d]});let s=new Set(Object.keys(o)),u=new Set([...s].filter(d=>{let c=r.shape[d]._zod;return i.io===\"input\"?c.optin===void 0:c.optout===void 0}));u.size>0&&(t.required=Array.from(u)),r.catchall?._zod.def.type===\"never\"?t.additionalProperties=!1:r.catchall?r.catchall&&(t.additionalProperties=C(r.catchall,i,{...a,path:[...a.path,\"additionalProperties\"]})):i.io===\"output\"&&(t.additionalProperties=!1)},Hr=(e,i,n,a)=>{let t=e._zod.def,r=t.inclusive===!1,o=t.options.map((s,u)=>C(s,i,{...a,path:[...a.path,r?\"oneOf\":\"anyOf\",u]}));r?n.oneOf=o:n.anyOf=o},um=(e,i,n,a)=>{let t=e._zod.def,r=C(t.left,i,{...a,path:[...a.path,\"allOf\",0]}),o=C(t.right,i,{...a,path:[...a.path,\"allOf\",1]}),s=d=>\"allOf\"in d&&Object.keys(d).length===1,u=[...s(r)?r.allOf:[r],...s(o)?o.allOf:[o]];n.allOf=u},lm=(e,i,n,a)=>{let t=n,r=e._zod.def;t.type=\"array\";let o=i.target===\"draft-2020-12\"?\"prefixItems\":\"items\",s=i.target===\"draft-2020-12\"||i.target===\"openapi-3.0\"?\"items\":\"additionalItems\",u=r.items.map((g,_)=>C(g,i,{...a,path:[...a.path,o,_]})),d=r.rest?C(r.rest,i,{...a,path:[...a.path,s,...i.target===\"openapi-3.0\"?[r.items.length]:[]]}):null;i.target===\"draft-2020-12\"?(t.prefixItems=u,d&&(t.items=d)):i.target===\"openapi-3.0\"?(t.items={anyOf:u},d&&t.items.anyOf.push(d),t.minItems=u.length,!d&&(t.maxItems=u.length)):(t.items=u,d&&(t.additionalItems=d));let{minimum:c,maximum:f}=e._zod.bag;typeof c==\"number\"&&(t.minItems=c),typeof f==\"number\"&&(t.maxItems=f)},dm=(e,i,n,a)=>{let t=n,r=e._zod.def;t.type=\"object\";let o=r.keyType,s=o._zod.bag?.patterns;if(r.mode===\"loose\"&&s&&s.size>0){let d=C(r.valueType,i,{...a,path:[...a.path,\"patternProperties\",\"*\"]});t.patternProperties={};for(let c of s)t.patternProperties[c.source]=d}else(i.target===\"draft-07\"||i.target===\"draft-2020-12\")&&(t.propertyNames=C(r.keyType,i,{...a,path:[...a.path,\"propertyNames\"]})),t.additionalProperties=C(r.valueType,i,{...a,path:[...a.path,\"additionalProperties\"]});let u=o._zod.values;if(u){let d=[...u].filter(c=>typeof c==\"string\"||typeof c==\"number\");d.length>0&&(t.required=d)}},cm=(e,i,n,a)=>{let t=e._zod.def,r=C(t.innerType,i,a),o=i.seen.get(e);i.target===\"openapi-3.0\"?(o.ref=t.innerType,n.nullable=!0):n.anyOf=[r,{type:\"null\"}]},mm=(e,i,n,a)=>{let t=e._zod.def;C(t.innerType,i,a);let r=i.seen.get(e);r.ref=t.innerType},pm=(e,i,n,a)=>{let t=e._zod.def;C(t.innerType,i,a);let r=i.seen.get(e);r.ref=t.innerType,n.default=JSON.parse(JSON.stringify(t.defaultValue))},fm=(e,i,n,a)=>{let t=e._zod.def;C(t.innerType,i,a);let r=i.seen.get(e);r.ref=t.innerType,i.io===\"input\"&&(n._prefault=JSON.parse(JSON.stringify(t.defaultValue)))},gm=(e,i,n,a)=>{let t=e._zod.def;C(t.innerType,i,a);let r=i.seen.get(e);r.ref=t.innerType;let o;try{o=t.catchValue(void 0)}catch{throw Error(\"Dynamic catch values are not supported in JSON Schema\")}n.default=o},vm=(e,i,n,a)=>{let t=e._zod.def,r=i.io===\"input\"?t.in._zod.def.type===\"transform\"?t.out:t.in:t.out;C(r,i,a);let o=i.seen.get(e);o.ref=r},hm=(e,i,n,a)=>{let t=e._zod.def;C(t.innerType,i,a);let r=i.seen.get(e);r.ref=t.innerType,n.readOnly=!0},$m=(e,i,n,a)=>{let t=e._zod.def;C(t.innerType,i,a);let r=i.seen.get(e);r.ref=t.innerType},Wr=(e,i,n,a)=>{let t=e._zod.def;C(t.innerType,i,a);let r=i.seen.get(e);r.ref=t.innerType},bm=(e,i,n,a)=>{let t=e._zod.innerType;C(t,i,a);let r=i.seen.get(e);r.ref=t},Un,or=b(()=>{ar(),I(),Pc={guid:\"uuid\",url:\"uri\",datetime:\"date-time\",json_string:\"json-string\",regex:\"\"},Un={string:Rc,number:Ac,boolean:Cc,bigint:Mc,symbol:Lc,null:qc,undefined:Jc,void:Fc,never:Hc,any:Wc,unknown:Vc,date:Kc,enum:Bc,literal:Gc,nan:Xc,template_literal:Yc,file:Qc,success:em,custom:tm,function:im,transform:nm,map:rm,set:am,array:om,object:sm,union:Hr,intersection:um,tuple:lm,record:dm,nullable:cm,nonoptional:mm,default:pm,prefault:fm,catch:gm,pipe:vm,readonly:hm,promise:$m,optional:Wr,lazy:bm}}),Vr=class{get metadataRegistry(){return this.ctx.metadataRegistry}get target(){return this.ctx.target}get unrepresentable(){return this.ctx.unrepresentable}get override(){return this.ctx.override}get io(){return this.ctx.io}get counter(){return this.ctx.counter}set counter(i){this.ctx.counter=i}get seen(){return this.ctx.seen}constructor(i){let n=i?.target??\"draft-2020-12\";n===\"draft-4\"&&(n=\"draft-04\"),n===\"draft-7\"&&(n=\"draft-07\"),this.ctx=it({processors:Un,target:n,...i?.metadata&&{metadata:i.metadata},...i?.unrepresentable&&{unrepresentable:i.unrepresentable},...i?.override&&{override:i.override},...i?.io&&{io:i.io}})}process(i,n={path:[],schemaPath:[]}){return C(i,this.ctx,n)}emit(i,n){n&&(n.cycles&&(this.ctx.cycles=n.cycles),n.reused&&(this.ctx.reused=n.reused),n.external&&(this.ctx.external=n.external)),nt(this.ctx,i);let a=rt(this.ctx,i),{\"~standard\":t,...r}=a;return r}},Ev=b(()=>{or(),ar()}),Pv={},Rv=()=>{},Es={};ve(Es,{version:()=>no,util:()=>Z,treeifyError:()=>na,toJSONSchema:()=>js,toDotPath:()=>Bl,safeParseAsync:()=>aa,safeParse:()=>Ln,safeEncodeAsync:()=>nd,safeEncode:()=>td,safeDecodeAsync:()=>rd,safeDecode:()=>id,registry:()=>Kn,regexes:()=>Ue,process:()=>C,prettifyError:()=>ra,parseAsync:()=>$n,parse:()=>hn,meta:()=>Dc,locales:()=>Vn,isValidJWT:()=>Ld,isValidBase64URL:()=>Md,isValidBase64:()=>ro,initializeContext:()=>it,globalRegistry:()=>ae,globalConfig:()=>Lt,formatError:()=>Cn,flattenError:()=>An,finalize:()=>rt,extractDefs:()=>nt,encodeAsync:()=>Ql,encode:()=>Xl,describe:()=>Tc,decodeAsync:()=>ed,decode:()=>Yl,createToJSONSchemaMethod:()=>Ec,createStandardJSONSchemaMethod:()=>Jt,config:()=>B,clone:()=>ue,_xor:()=>mv,_xid:()=>ws,_void:()=>kc,_uuidv7:()=>$s,_uuidv6:()=>hs,_uuidv4:()=>vs,_uuid:()=>gs,_url:()=>Yn,_uppercase:()=>Qt,_unknown:()=>_c,_union:()=>cv,_undefined:()=>hc,_ulid:()=>Is,_uint64:()=>gc,_uint32:()=>lc,_tuple:()=>gv,_trim:()=>ai,_transform:()=>kv,_toUpperCase:()=>si,_toLowerCase:()=>oi,_templateLiteral:()=>Zv,_symbol:()=>vc,_superRefine:()=>Nc,_success:()=>zv,_stringbool:()=>jc,_stringFormat:()=>li,_string:()=>Gd,_startsWith:()=>ti,_slugify:()=>ui,_size:()=>Qe,_set:()=>$v,_safeParseAsync:()=>Gt,_safeParse:()=>Bt,_safeEncodeAsync:()=>ma,_safeEncode:()=>da,_safeDecodeAsync:()=>pa,_safeDecode:()=>ca,_regex:()=>Xt,_refine:()=>Oc,_record:()=>vv,_readonly:()=>Nv,_property:()=>nr,_promise:()=>Dv,_positive:()=>Qn,_pipe:()=>Ov,_parseAsync:()=>Kt,_parse:()=>Vt,_overwrite:()=>he,_optional:()=>Iv,_number:()=>nc,_nullable:()=>wv,_null:()=>$c,_normalize:()=>ri,_nonpositive:()=>tr,_nonoptional:()=>Sv,_nonnegative:()=>ir,_never:()=>yc,_negative:()=>er,_nativeEnum:()=>_v,_nanoid:()=>_s,_nan:()=>xc,_multipleOf:()=>je,_minSize:()=>$e,_minLength:()=>xe,_min:()=>ne,_mime:()=>ni,_maxSize:()=>Ee,_maxLength:()=>et,_max:()=>oe,_map:()=>hv,_mac:()=>Yd,_lte:()=>oe,_lt:()=>_e,_lowercase:()=>Yt,_literal:()=>yv,_length:()=>tt,_lazy:()=>Tv,_ksuid:()=>xs,_jwt:()=>Ds,_isoTime:()=>tc,_isoDuration:()=>ic,_isoDateTime:()=>Qd,_isoDate:()=>ec,_ipv6:()=>zs,_ipv4:()=>Ss,_intersection:()=>fv,_int64:()=>fc,_int32:()=>uc,_int:()=>ac,_includes:()=>ei,_guid:()=>zn,_gte:()=>ne,_gt:()=>ye,_float64:()=>sc,_float32:()=>oc,_file:()=>zc,_enum:()=>bv,_endsWith:()=>ii,_encodeAsync:()=>ua,_encode:()=>oa,_emoji:()=>bs,_email:()=>fs,_e164:()=>Ts,_discriminatedUnion:()=>pv,_default:()=>xv,_decodeAsync:()=>la,_decode:()=>sa,_date:()=>Ic,_custom:()=>Uc,_cuid2:()=>ks,_cuid:()=>ys,_coercedString:()=>Xd,_coercedNumber:()=>rc,_coercedDate:()=>wc,_coercedBoolean:()=>cc,_coercedBigint:()=>pc,_cidrv6:()=>Os,_cidrv4:()=>Us,_check:()=>Zc,_catch:()=>Uv,_boolean:()=>dc,_bigint:()=>mc,_base64url:()=>Zs,_base64:()=>Ns,_array:()=>Sc,_any:()=>bc,TimePrecision:()=>rr,NEVER:()=>En,JSONSchemaGenerator:()=>Vr,JSONSchema:()=>Pv,Doc:()=>_n,$output:()=>Bn,$input:()=>Gn,$constructor:()=>m,$brand:()=>Pn,$ZodXor:()=>Jo,$ZodXID:()=>go,$ZodVoid:()=>Co,$ZodUnknown:()=>Ro,$ZodUnion:()=>Ct,$ZodUndefined:()=>jo,$ZodUUID:()=>oo,$ZodURL:()=>uo,$ZodULID:()=>fo,$ZodType:()=>S,$ZodTuple:()=>wn,$ZodTransform:()=>Yo,$ZodTemplateLiteral:()=>ls,$ZodSymbol:()=>Do,$ZodSuccess:()=>rs,$ZodStringFormat:()=>A,$ZodString:()=>Ye,$ZodSet:()=>Ko,$ZodRegistry:()=>Sn,$ZodRecord:()=>Wo,$ZodRealError:()=>re,$ZodReadonly:()=>us,$ZodPromise:()=>cs,$ZodPrefault:()=>is,$ZodPipe:()=>ss,$ZodOptional:()=>xn,$ZodObjectJIT:()=>qo,$ZodObject:()=>Fr,$ZodNumberFormat:()=>Zo,$ZodNumber:()=>kn,$ZodNullable:()=>es,$ZodNull:()=>Eo,$ZodNonOptional:()=>ns,$ZodNever:()=>Ao,$ZodNanoID:()=>co,$ZodNaN:()=>os,$ZodMap:()=>Vo,$ZodMAC:()=>Io,$ZodLiteral:()=>Go,$ZodLazy:()=>ms,$ZodKSUID:()=>vo,$ZodJWT:()=>Oo,$ZodIntersection:()=>Ho,$ZodISOTime:()=>bo,$ZodISODuration:()=>_o,$ZodISODateTime:()=>ho,$ZodISODate:()=>$o,$ZodIPv6:()=>ko,$ZodIPv4:()=>yo,$ZodGUID:()=>ao,$ZodFunction:()=>ds,$ZodFile:()=>Xo,$ZodExactOptional:()=>Qo,$ZodError:()=>Mn,$ZodEnum:()=>Bo,$ZodEncodeError:()=>Mt,$ZodEmoji:()=>lo,$ZodEmail:()=>so,$ZodE164:()=>Uo,$ZodDiscriminatedUnion:()=>Fo,$ZodDefault:()=>ts,$ZodDate:()=>Mo,$ZodCustomStringFormat:()=>No,$ZodCustom:()=>ps,$ZodCodec:()=>Wn,$ZodCheckUpperCase:()=>Ba,$ZodCheckStringFormat:()=>Ke,$ZodCheckStartsWith:()=>Xa,$ZodCheckSizeEquals:()=>Ja,$ZodCheckRegex:()=>Va,$ZodCheckProperty:()=>Qa,$ZodCheckOverwrite:()=>to,$ZodCheckNumberFormat:()=>Ca,$ZodCheckMultipleOf:()=>Aa,$ZodCheckMinSize:()=>qa,$ZodCheckMinLength:()=>Ha,$ZodCheckMimeType:()=>eo,$ZodCheckMaxSize:()=>La,$ZodCheckMaxLength:()=>Fa,$ZodCheckLowerCase:()=>Ka,$ZodCheckLessThan:()=>Jn,$ZodCheckLengthEquals:()=>Wa,$ZodCheckIncludes:()=>Ga,$ZodCheckGreaterThan:()=>Fn,$ZodCheckEndsWith:()=>Ya,$ZodCheckBigIntFormat:()=>Ma,$ZodCheck:()=>H,$ZodCatch:()=>as,$ZodCUID2:()=>po,$ZodCUID:()=>mo,$ZodCIDRv6:()=>xo,$ZodCIDRv4:()=>wo,$ZodBoolean:()=>Hn,$ZodBigIntFormat:()=>To,$ZodBigInt:()=>In,$ZodBase64URL:()=>zo,$ZodBase64:()=>So,$ZodAsyncError:()=>we,$ZodArray:()=>Lo,$ZodAny:()=>Po});var se=b(()=>{I(),Ra(),Bd(),or(),Ev(),Rv(),Wt(),ad(),Gl(),qd(),io(),Cd(),Xn(),jv(),ar()}),_m={};ve(_m,{uppercase:()=>Qt,trim:()=>ai,toUpperCase:()=>si,toLowerCase:()=>oi,startsWith:()=>ti,slugify:()=>ui,size:()=>Qe,regex:()=>Xt,property:()=>nr,positive:()=>Qn,overwrite:()=>he,normalize:()=>ri,nonpositive:()=>tr,nonnegative:()=>ir,negative:()=>er,multipleOf:()=>je,minSize:()=>$e,minLength:()=>xe,mime:()=>ni,maxSize:()=>Ee,maxLength:()=>et,lte:()=>oe,lt:()=>_e,lowercase:()=>Yt,length:()=>tt,includes:()=>ei,gte:()=>ne,gt:()=>ye,endsWith:()=>ii});var Ps=b(()=>{se()}),di={};ve(di,{time:()=>Im,duration:()=>wm,datetime:()=>ym,date:()=>km,ZodISOTime:()=>pi,ZodISODuration:()=>fi,ZodISODateTime:()=>ci,ZodISODate:()=>mi});function ym(e){return Qd(ci,e)}function km(e){return ec(mi,e)}function Im(e){return tc(pi,e)}function wm(e){return ic(fi,e)}var ci,mi,pi,fi,On=b(()=>{se(),Tr(),ci=m(\"ZodISODateTime\",(e,i)=>{ho.init(e,i),P.init(e,i)}),mi=m(\"ZodISODate\",(e,i)=>{$o.init(e,i),P.init(e,i)}),pi=m(\"ZodISOTime\",(e,i)=>{bo.init(e,i),P.init(e,i)}),fi=m(\"ZodISODuration\",(e,i)=>{_o.init(e,i),P.init(e,i)})}),Dl=(e,i)=>{Mn.init(e,i),e.name=\"ZodError\",Object.defineProperties(e,{format:{value:n=>Cn(e,n)},flatten:{value:n=>An(e,n)},addIssue:{value:n=>{e.issues.push(n),e.message=JSON.stringify(e.issues,gn,2)}},addIssues:{value:n=>{e.issues.push(...n),e.message=JSON.stringify(e.issues,gn,2)}},isEmpty:{get(){return e.issues.length===0}}})},Rs,ie,xm=b(()=>{se(),se(),I(),Rs=m(\"ZodError\",Dl),ie=m(\"ZodError\",Dl,{Parent:Error})}),sr,ur,lr,dr,cr,mr,pr,fr,gr,vr,hr,$r,Sm=b(()=>{se(),xm(),sr=Vt(ie),ur=Kt(ie),lr=Bt(ie),dr=Gt(ie),cr=oa(ie),mr=sa(ie),pr=ua(ie),fr=la(ie),gr=da(ie),vr=ca(ie),hr=ma(ie),$r=pa(ie)}),zm={};ve(zm,{xor:()=>Su,xid:()=>Xs,void:()=>ku,uuidv7:()=>Js,uuidv6:()=>qs,uuidv4:()=>Ls,uuid:()=>Ms,url:()=>Fs,unknown:()=>M,union:()=>L,undefined:()=>_u,ulid:()=>Gs,uint64:()=>$u,uint32:()=>gu,tuple:()=>br,transform:()=>$i,templateLiteral:()=>Ru,symbol:()=>bu,superRefine:()=>Or,success:()=>ju,stringbool:()=>qu,stringFormat:()=>uu,string:()=>p,strictObject:()=>xu,set:()=>Nu,refine:()=>Ur,record:()=>R,readonly:()=>xr,promise:()=>Au,preprocess:()=>bi,prefault:()=>kr,pipe:()=>ot,partialRecord:()=>zu,optional:()=>J,object:()=>y,number:()=>D,nullish:()=>Du,nullable:()=>at,null:()=>gi,nonoptional:()=>Ir,never:()=>vi,nativeEnum:()=>Zu,nanoid:()=>Vs,nan:()=>Eu,meta:()=>Zr,map:()=>Ou,mac:()=>eu,looseRecord:()=>Uu,looseObject:()=>K,literal:()=>k,lazy:()=>Sr,ksuid:()=>Ys,keyof:()=>wu,jwt:()=>su,json:()=>Lu,ipv6:()=>tu,ipv4:()=>Qs,intersection:()=>Ut,int64:()=>hu,int32:()=>fu,int:()=>Ft,instanceof:()=>Mu,httpUrl:()=>Hs,hostname:()=>lu,hex:()=>du,hash:()=>cu,guid:()=>Cs,function:()=>st,float64:()=>pu,float32:()=>mu,file:()=>Tu,exactOptional:()=>_r,enum:()=>G,emoji:()=>Ws,email:()=>As,e164:()=>ou,discriminatedUnion:()=>hi,describe:()=>Nr,date:()=>Iu,custom:()=>zr,cuid2:()=>Bs,cuid:()=>Ks,codec:()=>Pu,cidrv6:()=>nu,cidrv4:()=>iu,check:()=>Cu,catch:()=>wr,boolean:()=>W,bigint:()=>vu,base64url:()=>au,base64:()=>ru,array:()=>N,any:()=>yu,_function:()=>st,_default:()=>yr,_ZodString:()=>Xe,ZodXor:()=>Oi,ZodXID:()=>ft,ZodVoid:()=>zi,ZodUnknown:()=>xi,ZodUnion:()=>Re,ZodUndefined:()=>ki,ZodUUID:()=>de,ZodURL:()=>Ce,ZodULID:()=>pt,ZodType:()=>z,ZodTuple:()=>Ti,ZodTransform:()=>Ri,ZodTemplateLiteral:()=>Wi,ZodSymbol:()=>yi,ZodSuccess:()=>qi,ZodStringFormat:()=>P,ZodString:()=>qe,ZodSet:()=>ji,ZodRecord:()=>He,ZodReadonly:()=>Hi,ZodPromise:()=>Ki,ZodPrefault:()=>Li,ZodPipe:()=>St,ZodOptional:()=>wt,ZodObject:()=>Fe,ZodNumberFormat:()=>Ie,ZodNumber:()=>Me,ZodNullable:()=>Ci,ZodNull:()=>Ii,ZodNonOptional:()=>xt,ZodNever:()=>Si,ZodNanoID:()=>dt,ZodNaN:()=>Fi,ZodMap:()=>Di,ZodMAC:()=>_i,ZodLiteral:()=>Ei,ZodLazy:()=>Vi,ZodKSUID:()=>gt,ZodJWT:()=>It,ZodIntersection:()=>Zi,ZodIPv6:()=>ht,ZodIPv4:()=>vt,ZodGUID:()=>Pe,ZodFunction:()=>Bi,ZodFile:()=>Pi,ZodExactOptional:()=>Ai,ZodEnum:()=>Se,ZodEmoji:()=>lt,ZodEmail:()=>ut,ZodE164:()=>kt,ZodDiscriminatedUnion:()=>Ni,ZodDefault:()=>Mi,ZodDate:()=>Nt,ZodCustomStringFormat:()=>Oe,ZodCustom:()=>We,ZodCodec:()=>Zt,ZodCatch:()=>Ji,ZodCUID2:()=>mt,ZodCUID:()=>ct,ZodCIDRv6:()=>bt,ZodCIDRv4:()=>$t,ZodBoolean:()=>Je,ZodBigIntFormat:()=>Ot,ZodBigInt:()=>Le,ZodBase64URL:()=>yt,ZodBase64:()=>_t,ZodArray:()=>Ui,ZodAny:()=>wi});function p(e){return Gd(qe,e)}function As(e){return fs(ut,e)}function Cs(e){return zn(Pe,e)}function Ms(e){return gs(de,e)}function Ls(e){return vs(de,e)}function qs(e){return hs(de,e)}function Js(e){return $s(de,e)}function Fs(e){return Yn(Ce,e)}function Hs(e){return Yn(Ce,{protocol:/^https?$/,hostname:Ue.domain,...Z.normalizeParams(e)})}function Ws(e){return bs(lt,e)}function Vs(e){return _s(dt,e)}function Ks(e){return ys(ct,e)}function Bs(e){return ks(mt,e)}function Gs(e){return Is(pt,e)}function Xs(e){return ws(ft,e)}function Ys(e){return xs(gt,e)}function Qs(e){return Ss(vt,e)}function eu(e){return Yd(_i,e)}function tu(e){return zs(ht,e)}function iu(e){return Us($t,e)}function nu(e){return Os(bt,e)}function ru(e){return Ns(_t,e)}function au(e){return Zs(yt,e)}function ou(e){return Ts(kt,e)}function su(e){return Ds(It,e)}function uu(e,i,n={}){return li(Oe,e,i,n)}function lu(e){return li(Oe,\"hostname\",Ue.hostname,e)}function du(e){return li(Oe,\"hex\",Ue.hex,e)}function cu(e,i){let n=i?.enc??\"hex\",a=`${e}_${n}`,t=Ue[a];if(!t)throw Error(`Unrecognized hash format: ${a}`);return li(Oe,a,t,i)}function D(e){return nc(Me,e)}function Ft(e){return ac(Ie,e)}function mu(e){return oc(Ie,e)}function pu(e){return sc(Ie,e)}function fu(e){return uc(Ie,e)}function gu(e){return lc(Ie,e)}function W(e){return dc(Je,e)}function vu(e){return mc(Le,e)}function hu(e){return fc(Ot,e)}function $u(e){return gc(Ot,e)}function bu(e){return vc(yi,e)}function _u(e){return hc(ki,e)}function gi(e){return $c(Ii,e)}function yu(){return bc(wi)}function M(){return _c(xi)}function vi(e){return yc(Si,e)}function ku(e){return kc(zi,e)}function Iu(e){return Ic(Nt,e)}function N(e,i){return Sc(Ui,e,i)}function wu(e){let i=e._zod.def.shape;return G(Object.keys(i))}function y(e,i){let n={type:\"object\",shape:e??{},...Z.normalizeParams(i)};return new Fe(n)}function xu(e,i){return new Fe({type:\"object\",shape:e,catchall:vi(),...Z.normalizeParams(i)})}function K(e,i){return new Fe({type:\"object\",shape:e,catchall:M(),...Z.normalizeParams(i)})}function L(e,i){return new Re({type:\"union\",options:e,...Z.normalizeParams(i)})}function Su(e,i){return new Oi({type:\"union\",options:e,inclusive:!1,...Z.normalizeParams(i)})}function hi(e,i,n){return new Ni({type:\"union\",options:i,discriminator:e,...Z.normalizeParams(n)})}function Ut(e,i){return new Zi({type:\"intersection\",left:e,right:i})}function br(e,i,n){let a=i instanceof S,t=a?n:i;return new Ti({type:\"tuple\",items:e,rest:a?i:null,...Z.normalizeParams(t)})}function R(e,i,n){return new He({type:\"record\",keyType:e,valueType:i,...Z.normalizeParams(n)})}function zu(e,i,n){let a=ue(e);return a._zod.values=void 0,new He({type:\"record\",keyType:a,valueType:i,...Z.normalizeParams(n)})}function Uu(e,i,n){return new He({type:\"record\",keyType:e,valueType:i,mode:\"loose\",...Z.normalizeParams(n)})}function Ou(e,i,n){return new Di({type:\"map\",keyType:e,valueType:i,...Z.normalizeParams(n)})}function Nu(e,i){return new ji({type:\"set\",valueType:e,...Z.normalizeParams(i)})}function G(e,i){let n=Array.isArray(e)?Object.fromEntries(e.map(a=>[a,a])):e;return new Se({type:\"enum\",entries:n,...Z.normalizeParams(i)})}function Zu(e,i){return new Se({type:\"enum\",entries:e,...Z.normalizeParams(i)})}function k(e,i){return new Ei({type:\"literal\",values:Array.isArray(e)?e:[e],...Z.normalizeParams(i)})}function Tu(e){return zc(Pi,e)}function $i(e){return new Ri({type:\"transform\",transform:e})}function J(e){return new wt({type:\"optional\",innerType:e})}function _r(e){return new Ai({type:\"optional\",innerType:e})}function at(e){return new Ci({type:\"nullable\",innerType:e})}function Du(e){return J(at(e))}function yr(e,i){return new Mi({type:\"default\",innerType:e,get defaultValue(){return typeof i==\"function\"?i():Z.shallowClone(i)}})}function kr(e,i){return new Li({type:\"prefault\",innerType:e,get defaultValue(){return typeof i==\"function\"?i():Z.shallowClone(i)}})}function Ir(e,i){return new xt({type:\"nonoptional\",innerType:e,...Z.normalizeParams(i)})}function ju(e){return new qi({type:\"success\",innerType:e})}function wr(e,i){return new Ji({type:\"catch\",innerType:e,catchValue:typeof i==\"function\"?i:()=>i})}function Eu(e){return xc(Fi,e)}function ot(e,i){return new St({type:\"pipe\",in:e,out:i})}function Pu(e,i,n){return new Zt({type:\"pipe\",in:e,out:i,transform:n.decode,reverseTransform:n.encode})}function xr(e){return new Hi({type:\"readonly\",innerType:e})}function Ru(e,i){return new Wi({type:\"template_literal\",parts:e,...Z.normalizeParams(i)})}function Sr(e){return new Vi({type:\"lazy\",getter:e})}function Au(e){return new Ki({type:\"promise\",innerType:e})}function st(e){return new Bi({type:\"function\",input:Array.isArray(e?.input)?br(e?.input):e?.input??N(M()),output:e?.output??M()})}function Cu(e){let i=new H({check:\"custom\"});return i._zod.check=e,i}function zr(e,i){return Uc(We,e??(()=>!0),i)}function Ur(e,i={}){return Oc(We,e,i)}function Or(e){return Nc(e)}function Mu(e,i={}){let n=new We({type:\"custom\",check:\"custom\",fn:a=>a instanceof e,abort:!0,...Z.normalizeParams(i)});return n._zod.bag.Class=e,n._zod.check=a=>{a.value instanceof e||a.issues.push({code:\"invalid_type\",expected:e.name,input:a.value,inst:n,path:[...n._zod.def.path??[]]})},n}function Lu(e){let i=Sr(()=>L([p(e),D(),W(),gi(),N(i),R(p(),i)]));return i}function bi(e,i){return ot($i(e),i)}var z,Xe,qe,P,ut,Pe,de,Ce,lt,dt,ct,mt,pt,ft,gt,vt,_i,ht,$t,bt,_t,yt,kt,It,Oe,Me,Ie,Je,Le,Ot,yi,ki,Ii,wi,xi,Si,zi,Nt,Ui,Fe,Re,Oi,Ni,Zi,Ti,He,Di,ji,Se,Ei,Pi,Ri,wt,Ai,Ci,Mi,Li,xt,qi,Ji,Fi,St,Zt,Hi,Wi,Vi,Ki,Bi,We,Nr,Zr,qu=(...e)=>jc({Codec:Zt,Boolean:Je,String:qe},...e),Tr=b(()=>{se(),se(),or(),ar(),Ps(),On(),Sm(),z=m(\"ZodType\",(e,i)=>(S.init(e,i),Object.assign(e[\"~standard\"],{jsonSchema:{input:Jt(e,\"input\"),output:Jt(e,\"output\")}}),e.toJSONSchema=Ec(e,{}),e.def=i,e.type=i.type,Object.defineProperty(e,\"_def\",{value:i}),e.check=(...n)=>e.clone(Z.mergeDefs(i,{checks:[...i.checks??[],...n.map(a=>typeof a==\"function\"?{_zod:{check:a,def:{check:\"custom\"},onattach:[]}}:a)]}),{parent:!0}),e.with=e.check,e.clone=(n,a)=>ue(e,n,a),e.brand=()=>e,e.register=(n,a)=>(n.add(e,a),e),e.parse=(n,a)=>sr(e,n,a,{callee:e.parse}),e.safeParse=(n,a)=>lr(e,n,a),e.parseAsync=async(n,a)=>ur(e,n,a,{callee:e.parseAsync}),e.safeParseAsync=async(n,a)=>dr(e,n,a),e.spa=e.safeParseAsync,e.encode=(n,a)=>cr(e,n,a),e.decode=(n,a)=>mr(e,n,a),e.encodeAsync=async(n,a)=>pr(e,n,a),e.decodeAsync=async(n,a)=>fr(e,n,a),e.safeEncode=(n,a)=>gr(e,n,a),e.safeDecode=(n,a)=>vr(e,n,a),e.safeEncodeAsync=async(n,a)=>hr(e,n,a),e.safeDecodeAsync=async(n,a)=>$r(e,n,a),e.refine=(n,a)=>e.check(Ur(n,a)),e.superRefine=n=>e.check(Or(n)),e.overwrite=n=>e.check(he(n)),e.optional=()=>J(e),e.exactOptional=()=>_r(e),e.nullable=()=>at(e),e.nullish=()=>J(at(e)),e.nonoptional=n=>Ir(e,n),e.array=()=>N(e),e.or=n=>L([e,n]),e.and=n=>Ut(e,n),e.transform=n=>ot(e,$i(n)),e.default=n=>yr(e,n),e.prefault=n=>kr(e,n),e.catch=n=>wr(e,n),e.pipe=n=>ot(e,n),e.readonly=()=>xr(e),e.describe=n=>{let a=e.clone();return ae.add(a,{description:n}),a},Object.defineProperty(e,\"description\",{get(){return ae.get(e)?.description},configurable:!0}),e.meta=(...n)=>{if(n.length===0)return ae.get(e);let a=e.clone();return ae.add(a,n[0]),a},e.isOptional=()=>e.safeParse(void 0).success,e.isNullable=()=>e.safeParse(null).success,e.apply=n=>n(e),e)),Xe=m(\"_ZodString\",(e,i)=>{Ye.init(e,i),z.init(e,i),e._zod.processJSONSchema=(a,t,r)=>Rc(e,a,t,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,e.regex=(...a)=>e.check(Xt(...a)),e.includes=(...a)=>e.check(ei(...a)),e.startsWith=(...a)=>e.check(ti(...a)),e.endsWith=(...a)=>e.check(ii(...a)),e.min=(...a)=>e.check(xe(...a)),e.max=(...a)=>e.check(et(...a)),e.length=(...a)=>e.check(tt(...a)),e.nonempty=(...a)=>e.check(xe(1,...a)),e.lowercase=a=>e.check(Yt(a)),e.uppercase=a=>e.check(Qt(a)),e.trim=()=>e.check(ai()),e.normalize=(...a)=>e.check(ri(...a)),e.toLowerCase=()=>e.check(oi()),e.toUpperCase=()=>e.check(si()),e.slugify=()=>e.check(ui())}),qe=m(\"ZodString\",(e,i)=>{Ye.init(e,i),Xe.init(e,i),e.email=n=>e.check(fs(ut,n)),e.url=n=>e.check(Yn(Ce,n)),e.jwt=n=>e.check(Ds(It,n)),e.emoji=n=>e.check(bs(lt,n)),e.guid=n=>e.check(zn(Pe,n)),e.uuid=n=>e.check(gs(de,n)),e.uuidv4=n=>e.check(vs(de,n)),e.uuidv6=n=>e.check(hs(de,n)),e.uuidv7=n=>e.check($s(de,n)),e.nanoid=n=>e.check(_s(dt,n)),e.guid=n=>e.check(zn(Pe,n)),e.cuid=n=>e.check(ys(ct,n)),e.cuid2=n=>e.check(ks(mt,n)),e.ulid=n=>e.check(Is(pt,n)),e.base64=n=>e.check(Ns(_t,n)),e.base64url=n=>e.check(Zs(yt,n)),e.xid=n=>e.check(ws(ft,n)),e.ksuid=n=>e.check(xs(gt,n)),e.ipv4=n=>e.check(Ss(vt,n)),e.ipv6=n=>e.check(zs(ht,n)),e.cidrv4=n=>e.check(Us($t,n)),e.cidrv6=n=>e.check(Os(bt,n)),e.e164=n=>e.check(Ts(kt,n)),e.datetime=n=>e.check(ym(n)),e.date=n=>e.check(km(n)),e.time=n=>e.check(Im(n)),e.duration=n=>e.check(wm(n))}),P=m(\"ZodStringFormat\",(e,i)=>{A.init(e,i),Xe.init(e,i)}),ut=m(\"ZodEmail\",(e,i)=>{so.init(e,i),P.init(e,i)}),Pe=m(\"ZodGUID\",(e,i)=>{ao.init(e,i),P.init(e,i)}),de=m(\"ZodUUID\",(e,i)=>{oo.init(e,i),P.init(e,i)}),Ce=m(\"ZodURL\",(e,i)=>{uo.init(e,i),P.init(e,i)}),lt=m(\"ZodEmoji\",(e,i)=>{lo.init(e,i),P.init(e,i)}),dt=m(\"ZodNanoID\",(e,i)=>{co.init(e,i),P.init(e,i)}),ct=m(\"ZodCUID\",(e,i)=>{mo.init(e,i),P.init(e,i)}),mt=m(\"ZodCUID2\",(e,i)=>{po.init(e,i),P.init(e,i)}),pt=m(\"ZodULID\",(e,i)=>{fo.init(e,i),P.init(e,i)}),ft=m(\"ZodXID\",(e,i)=>{go.init(e,i),P.init(e,i)}),gt=m(\"ZodKSUID\",(e,i)=>{vo.init(e,i),P.init(e,i)}),vt=m(\"ZodIPv4\",(e,i)=>{yo.init(e,i),P.init(e,i)}),_i=m(\"ZodMAC\",(e,i)=>{Io.init(e,i),P.init(e,i)}),ht=m(\"ZodIPv6\",(e,i)=>{ko.init(e,i),P.init(e,i)}),$t=m(\"ZodCIDRv4\",(e,i)=>{wo.init(e,i),P.init(e,i)}),bt=m(\"ZodCIDRv6\",(e,i)=>{xo.init(e,i),P.init(e,i)}),_t=m(\"ZodBase64\",(e,i)=>{So.init(e,i),P.init(e,i)}),yt=m(\"ZodBase64URL\",(e,i)=>{zo.init(e,i),P.init(e,i)}),kt=m(\"ZodE164\",(e,i)=>{Uo.init(e,i),P.init(e,i)}),It=m(\"ZodJWT\",(e,i)=>{Oo.init(e,i),P.init(e,i)}),Oe=m(\"ZodCustomStringFormat\",(e,i)=>{No.init(e,i),P.init(e,i)}),Me=m(\"ZodNumber\",(e,i)=>{kn.init(e,i),z.init(e,i),e._zod.processJSONSchema=(a,t,r)=>Ac(e,a,t,r),e.gt=(a,t)=>e.check(ye(a,t)),e.gte=(a,t)=>e.check(ne(a,t)),e.min=(a,t)=>e.check(ne(a,t)),e.lt=(a,t)=>e.check(_e(a,t)),e.lte=(a,t)=>e.check(oe(a,t)),e.max=(a,t)=>e.check(oe(a,t)),e.int=a=>e.check(Ft(a)),e.safe=a=>e.check(Ft(a)),e.positive=a=>e.check(ye(0,a)),e.nonnegative=a=>e.check(ne(0,a)),e.negative=a=>e.check(_e(0,a)),e.nonpositive=a=>e.check(oe(0,a)),e.multipleOf=(a,t)=>e.check(je(a,t)),e.step=(a,t)=>e.check(je(a,t)),e.finite=()=>e;let n=e._zod.bag;e.minValue=Math.max(n.minimum??Number.NEGATIVE_INFINITY,n.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,e.maxValue=Math.min(n.maximum??Number.POSITIVE_INFINITY,n.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,e.isInt=(n.format??\"\").includes(\"int\")||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null}),Ie=m(\"ZodNumberFormat\",(e,i)=>{Zo.init(e,i),Me.init(e,i)}),Je=m(\"ZodBoolean\",(e,i)=>{Hn.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Cc(e,n,a,t)}),Le=m(\"ZodBigInt\",(e,i)=>{In.init(e,i),z.init(e,i),e._zod.processJSONSchema=(a,t,r)=>Mc(e,a,t,r),e.gte=(a,t)=>e.check(ne(a,t)),e.min=(a,t)=>e.check(ne(a,t)),e.gt=(a,t)=>e.check(ye(a,t)),e.gte=(a,t)=>e.check(ne(a,t)),e.min=(a,t)=>e.check(ne(a,t)),e.lt=(a,t)=>e.check(_e(a,t)),e.lte=(a,t)=>e.check(oe(a,t)),e.max=(a,t)=>e.check(oe(a,t)),e.positive=a=>e.check(ye(BigInt(0),a)),e.negative=a=>e.check(_e(BigInt(0),a)),e.nonpositive=a=>e.check(oe(BigInt(0),a)),e.nonnegative=a=>e.check(ne(BigInt(0),a)),e.multipleOf=(a,t)=>e.check(je(a,t));let n=e._zod.bag;e.minValue=n.minimum??null,e.maxValue=n.maximum??null,e.format=n.format??null}),Ot=m(\"ZodBigIntFormat\",(e,i)=>{To.init(e,i),Le.init(e,i)}),yi=m(\"ZodSymbol\",(e,i)=>{Do.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Lc(e,n,a,t)}),ki=m(\"ZodUndefined\",(e,i)=>{jo.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Jc(e,n,a,t)}),Ii=m(\"ZodNull\",(e,i)=>{Eo.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>qc(e,n,a,t)}),wi=m(\"ZodAny\",(e,i)=>{Po.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Wc(e,n,a,t)}),xi=m(\"ZodUnknown\",(e,i)=>{Ro.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Vc(e,n,a,t)}),Si=m(\"ZodNever\",(e,i)=>{Ao.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Hc(e,n,a,t)}),zi=m(\"ZodVoid\",(e,i)=>{Co.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Fc(e,n,a,t)}),Nt=m(\"ZodDate\",(e,i)=>{Mo.init(e,i),z.init(e,i),e._zod.processJSONSchema=(a,t,r)=>Kc(e,a,t,r),e.min=(a,t)=>e.check(ne(a,t)),e.max=(a,t)=>e.check(oe(a,t));let n=e._zod.bag;e.minDate=n.minimum?new Date(n.minimum):null,e.maxDate=n.maximum?new Date(n.maximum):null}),Ui=m(\"ZodArray\",(e,i)=>{Lo.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>om(e,n,a,t),e.element=i.element,e.min=(n,a)=>e.check(xe(n,a)),e.nonempty=n=>e.check(xe(1,n)),e.max=(n,a)=>e.check(et(n,a)),e.length=(n,a)=>e.check(tt(n,a)),e.unwrap=()=>e.element}),Fe=m(\"ZodObject\",(e,i)=>{qo.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>sm(e,n,a,t),Z.defineLazy(e,\"shape\",()=>i.shape),e.keyof=()=>G(Object.keys(e._zod.def.shape)),e.catchall=n=>e.clone({...e._zod.def,catchall:n}),e.passthrough=()=>e.clone({...e._zod.def,catchall:M()}),e.loose=()=>e.clone({...e._zod.def,catchall:M()}),e.strict=()=>e.clone({...e._zod.def,catchall:vi()}),e.strip=()=>e.clone({...e._zod.def,catchall:void 0}),e.extend=n=>Z.extend(e,n),e.safeExtend=n=>Z.safeExtend(e,n),e.merge=n=>Z.merge(e,n),e.pick=n=>Z.pick(e,n),e.omit=n=>Z.omit(e,n),e.partial=(...n)=>Z.partial(wt,e,n[0]),e.required=(...n)=>Z.required(xt,e,n[0])}),Re=m(\"ZodUnion\",(e,i)=>{Ct.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Hr(e,n,a,t),e.options=i.options}),Oi=m(\"ZodXor\",(e,i)=>{Re.init(e,i),Jo.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Hr(e,n,a,t),e.options=i.options}),Ni=m(\"ZodDiscriminatedUnion\",(e,i)=>{Re.init(e,i),Fo.init(e,i)}),Zi=m(\"ZodIntersection\",(e,i)=>{Ho.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>um(e,n,a,t)}),Ti=m(\"ZodTuple\",(e,i)=>{wn.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>lm(e,n,a,t),e.rest=n=>e.clone({...e._zod.def,rest:n})}),He=m(\"ZodRecord\",(e,i)=>{Wo.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>dm(e,n,a,t),e.keyType=i.keyType,e.valueType=i.valueType}),Di=m(\"ZodMap\",(e,i)=>{Vo.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>rm(e,n,a,t),e.keyType=i.keyType,e.valueType=i.valueType,e.min=(...n)=>e.check($e(...n)),e.nonempty=n=>e.check($e(1,n)),e.max=(...n)=>e.check(Ee(...n)),e.size=(...n)=>e.check(Qe(...n))}),ji=m(\"ZodSet\",(e,i)=>{Ko.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>am(e,n,a,t),e.min=(...n)=>e.check($e(...n)),e.nonempty=n=>e.check($e(1,n)),e.max=(...n)=>e.check(Ee(...n)),e.size=(...n)=>e.check(Qe(...n))}),Se=m(\"ZodEnum\",(e,i)=>{Bo.init(e,i),z.init(e,i),e._zod.processJSONSchema=(a,t,r)=>Bc(e,a,t,r),e.enum=i.entries,e.options=Object.values(i.entries);let n=new Set(Object.keys(i.entries));e.extract=(a,t)=>{let r={};for(let o of a)if(n.has(o))r[o]=i.entries[o];else throw Error(`Key ${o} not found in enum`);return new Se({...i,checks:[],...Z.normalizeParams(t),entries:r})},e.exclude=(a,t)=>{let r={...i.entries};for(let o of a)if(n.has(o))delete r[o];else throw Error(`Key ${o} not found in enum`);return new Se({...i,checks:[],...Z.normalizeParams(t),entries:r})}}),Ei=m(\"ZodLiteral\",(e,i)=>{Go.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Gc(e,n,a,t),e.values=new Set(i.values),Object.defineProperty(e,\"value\",{get(){if(i.values.length>1)throw Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");return i.values[0]}})}),Pi=m(\"ZodFile\",(e,i)=>{Xo.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Qc(e,n,a,t),e.min=(n,a)=>e.check($e(n,a)),e.max=(n,a)=>e.check(Ee(n,a)),e.mime=(n,a)=>e.check(ni(Array.isArray(n)?n:[n],a))}),Ri=m(\"ZodTransform\",(e,i)=>{Yo.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>nm(e,n,a,t),e._zod.parse=(n,a)=>{if(a.direction===\"backward\")throw new Mt(e.constructor.name);n.addIssue=r=>{if(typeof r==\"string\")n.issues.push(Z.issue(r,n.value,i));else{let o=r;o.fatal&&(o.continue=!1),o.code??(o.code=\"custom\"),o.input??(o.input=n.value),o.inst??(o.inst=e),n.issues.push(Z.issue(o))}};let t=i.transform(n.value,n);return t instanceof Promise?t.then(r=>(n.value=r,n)):(n.value=t,n)}}),wt=m(\"ZodOptional\",(e,i)=>{xn.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Wr(e,n,a,t),e.unwrap=()=>e._zod.def.innerType}),Ai=m(\"ZodExactOptional\",(e,i)=>{Qo.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Wr(e,n,a,t),e.unwrap=()=>e._zod.def.innerType}),Ci=m(\"ZodNullable\",(e,i)=>{es.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>cm(e,n,a,t),e.unwrap=()=>e._zod.def.innerType}),Mi=m(\"ZodDefault\",(e,i)=>{ts.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>pm(e,n,a,t),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap}),Li=m(\"ZodPrefault\",(e,i)=>{is.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>fm(e,n,a,t),e.unwrap=()=>e._zod.def.innerType}),xt=m(\"ZodNonOptional\",(e,i)=>{ns.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>mm(e,n,a,t),e.unwrap=()=>e._zod.def.innerType}),qi=m(\"ZodSuccess\",(e,i)=>{rs.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>em(e,n,a,t),e.unwrap=()=>e._zod.def.innerType}),Ji=m(\"ZodCatch\",(e,i)=>{as.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>gm(e,n,a,t),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap}),Fi=m(\"ZodNaN\",(e,i)=>{os.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Xc(e,n,a,t)}),St=m(\"ZodPipe\",(e,i)=>{ss.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>vm(e,n,a,t),e.in=i.in,e.out=i.out}),Zt=m(\"ZodCodec\",(e,i)=>{St.init(e,i),Wn.init(e,i)}),Hi=m(\"ZodReadonly\",(e,i)=>{us.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>hm(e,n,a,t),e.unwrap=()=>e._zod.def.innerType}),Wi=m(\"ZodTemplateLiteral\",(e,i)=>{ls.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>Yc(e,n,a,t)}),Vi=m(\"ZodLazy\",(e,i)=>{ms.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>bm(e,n,a,t),e.unwrap=()=>e._zod.def.getter()}),Ki=m(\"ZodPromise\",(e,i)=>{cs.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>$m(e,n,a,t),e.unwrap=()=>e._zod.def.innerType}),Bi=m(\"ZodFunction\",(e,i)=>{ds.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>im(e,n,a,t)}),We=m(\"ZodCustom\",(e,i)=>{ps.init(e,i),z.init(e,i),e._zod.processJSONSchema=(n,a,t)=>tm(e,n,a,t)}),Nr=Tc,Zr=Dc});function Um(e){B({customError:e})}function Om(){return B().customError}var Ju,Nn,Av=b(()=>{se(),Ju={invalid_type:\"invalid_type\",too_big:\"too_big\",too_small:\"too_small\",invalid_format:\"invalid_format\",not_multiple_of:\"not_multiple_of\",unrecognized_keys:\"unrecognized_keys\",invalid_union:\"invalid_union\",invalid_key:\"invalid_key\",invalid_element:\"invalid_element\",invalid_value:\"invalid_value\",custom:\"custom\"},Nn||(Nn={})});function Cv(e,i){let n=e.$schema;return n===\"https://json-schema.org/draft/2020-12/schema\"?\"draft-2020-12\":n===\"http://json-schema.org/draft-07/schema#\"?\"draft-7\":n===\"http://json-schema.org/draft-04/schema#\"?\"draft-4\":i??\"draft-2020-12\"}function Mv(e,i){if(!e.startsWith(\"#\"))throw Error(\"External $ref is not supported, only local refs (#/...) are allowed\");let n=e.slice(1).split(\"/\").filter(Boolean);if(n.length===0)return i.rootSchema;let a=i.version===\"draft-2020-12\"?\"$defs\":\"definitions\";if(n[0]===a){let t=n[1];if(!t||!i.defs[t])throw Error(`Reference not found: ${e}`);return i.defs[t]}throw Error(`Reference not found: ${e}`)}function Nm(e,i){if(e.not!==void 0){if(typeof e.not==\"object\"&&Object.keys(e.not).length===0)return $.never();throw Error(\"not is not supported in Zod (except { not: {} } for never)\")}if(e.unevaluatedItems!==void 0)throw Error(\"unevaluatedItems is not supported\");if(e.unevaluatedProperties!==void 0)throw Error(\"unevaluatedProperties is not supported\");if(e.if!==void 0||e.then!==void 0||e.else!==void 0)throw Error(\"Conditional schemas (if/then/else) are not supported\");if(e.dependentSchemas!==void 0||e.dependentRequired!==void 0)throw Error(\"dependentSchemas and dependentRequired are not supported\");if(e.$ref){let t=e.$ref;if(i.refs.has(t))return i.refs.get(t);if(i.processing.has(t))return $.lazy(()=>{if(!i.refs.has(t))throw Error(`Circular reference not resolved: ${t}`);return i.refs.get(t)});i.processing.add(t);let r=Mv(t,i),o=ee(r,i);return i.refs.set(t,o),i.processing.delete(t),o}if(e.enum!==void 0){let t=e.enum;if(i.version===\"openapi-3.0\"&&e.nullable===!0&&t.length===1&&t[0]===null)return $.null();if(t.length===0)return $.never();if(t.length===1)return $.literal(t[0]);if(t.every(o=>typeof o==\"string\"))return $.enum(t);let r=t.map(o=>$.literal(o));return r.length<2?r[0]:$.union([r[0],r[1],...r.slice(2)])}if(e.const!==void 0)return $.literal(e.const);let n=e.type;if(Array.isArray(n)){let t=n.map(r=>{let o={...e,type:r};return Nm(o,i)});return t.length===0?$.never():t.length===1?t[0]:$.union(t)}if(!n)return $.any();let a;switch(n){case\"string\":{let t=$.string();if(e.format){let r=e.format;r===\"email\"?t=t.check($.email()):r===\"uri\"||r===\"uri-reference\"?t=t.check($.url()):r===\"uuid\"||r===\"guid\"?t=t.check($.uuid()):r===\"date-time\"?t=t.check($.iso.datetime()):r===\"date\"?t=t.check($.iso.date()):r===\"time\"?t=t.check($.iso.time()):r===\"duration\"?t=t.check($.iso.duration()):r===\"ipv4\"?t=t.check($.ipv4()):r===\"ipv6\"?t=t.check($.ipv6()):r===\"mac\"?t=t.check($.mac()):r===\"cidr\"?t=t.check($.cidrv4()):r===\"cidr-v6\"?t=t.check($.cidrv6()):r===\"base64\"?t=t.check($.base64()):r===\"base64url\"?t=t.check($.base64url()):r===\"e164\"?t=t.check($.e164()):r===\"jwt\"?t=t.check($.jwt()):r===\"emoji\"?t=t.check($.emoji()):r===\"nanoid\"?t=t.check($.nanoid()):r===\"cuid\"?t=t.check($.cuid()):r===\"cuid2\"?t=t.check($.cuid2()):r===\"ulid\"?t=t.check($.ulid()):r===\"xid\"?t=t.check($.xid()):r===\"ksuid\"&&(t=t.check($.ksuid()))}typeof e.minLength==\"number\"&&(t=t.min(e.minLength)),typeof e.maxLength==\"number\"&&(t=t.max(e.maxLength)),e.pattern&&(t=t.regex(new RegExp(e.pattern))),a=t;break}case\"number\":case\"integer\":{let t=n===\"integer\"?$.number().int():$.number();typeof e.minimum==\"number\"&&(t=t.min(e.minimum)),typeof e.maximum==\"number\"&&(t=t.max(e.maximum)),typeof e.exclusiveMinimum==\"number\"?t=t.gt(e.exclusiveMinimum):e.exclusiveMinimum===!0&&typeof e.minimum==\"number\"&&(t=t.gt(e.minimum)),typeof e.exclusiveMaximum==\"number\"?t=t.lt(e.exclusiveMaximum):e.exclusiveMaximum===!0&&typeof e.maximum==\"number\"&&(t=t.lt(e.maximum)),typeof e.multipleOf==\"number\"&&(t=t.multipleOf(e.multipleOf)),a=t;break}case\"boolean\":{a=$.boolean();break}case\"null\":{a=$.null();break}case\"object\":{let t={},r=e.properties||{},o=new Set(e.required||[]);for(let[u,d]of Object.entries(r)){let c=ee(d,i);t[u]=o.has(u)?c:c.optional()}if(e.propertyNames){let u=ee(e.propertyNames,i),d=e.additionalProperties&&typeof e.additionalProperties==\"object\"?ee(e.additionalProperties,i):$.any();if(Object.keys(t).length===0){a=$.record(u,d);break}let c=$.object(t).passthrough(),f=$.looseRecord(u,d);a=$.intersection(c,f);break}if(e.patternProperties){let u=e.patternProperties,d=Object.keys(u),c=[];for(let g of d){let _=ee(u[g],i),U=$.string().regex(new RegExp(g));c.push($.looseRecord(U,_))}let f=[];if(Object.keys(t).length>0&&f.push($.object(t).passthrough()),f.push(...c),f.length===0)a=$.object({}).passthrough();else if(f.length===1)a=f[0];else{let g=$.intersection(f[0],f[1]);for(let _=2;_ee(u,i)),s=r&&typeof r==\"object\"&&!Array.isArray(r)?ee(r,i):void 0;s?a=$.tuple(o).rest(s):a=$.tuple(o),typeof e.minItems==\"number\"&&(a=a.check($.minLength(e.minItems))),typeof e.maxItems==\"number\"&&(a=a.check($.maxLength(e.maxItems)))}else if(Array.isArray(r)){let o=r.map(u=>ee(u,i)),s=e.additionalItems&&typeof e.additionalItems==\"object\"?ee(e.additionalItems,i):void 0;s?a=$.tuple(o).rest(s):a=$.tuple(o),typeof e.minItems==\"number\"&&(a=a.check($.minLength(e.minItems))),typeof e.maxItems==\"number\"&&(a=a.check($.maxLength(e.maxItems)))}else if(r!==void 0){let o=ee(r,i),s=$.array(o);typeof e.minItems==\"number\"&&(s=s.min(e.minItems)),typeof e.maxItems==\"number\"&&(s=s.max(e.maxItems)),a=s}else a=$.array($.any());break}default:throw Error(`Unsupported type: ${n}`)}return e.description&&(a=a.describe(e.description)),e.default!==void 0&&(a=a.default(e.default)),a}function ee(e,i){if(typeof e==\"boolean\")return e?$.any():$.never();let n=Nm(e,i),a=e.type||e.enum!==void 0||e.const!==void 0;if(e.anyOf&&Array.isArray(e.anyOf)){let s=e.anyOf.map(d=>ee(d,i)),u=$.union(s);n=a?$.intersection(n,u):u}if(e.oneOf&&Array.isArray(e.oneOf)){let s=e.oneOf.map(d=>ee(d,i)),u=$.xor(s);n=a?$.intersection(n,u):u}if(e.allOf&&Array.isArray(e.allOf))if(e.allOf.length===0)n=a?n:$.any();else{let s=a?n:ee(e.allOf[0],i),u=a?0:1;for(let d=u;d0&&i.registry.add(n,t),n}function Zm(e,i){if(typeof e==\"boolean\")return e?$.any():$.never();let n=Cv(e,i?.defaultTarget),a=e.$defs||e.definitions||{},t={version:n,defs:a,refs:new Map,processing:new Set,rootSchema:e,registry:i?.registry??ae};return ee(e,t)}var $,Tm,Lv=b(()=>{Xn(),Ps(),On(),Tr(),$={...zm,..._m,iso:di},Tm=new Set([\"$schema\",\"$ref\",\"$defs\",\"definitions\",\"$id\",\"id\",\"$comment\",\"$anchor\",\"$vocabulary\",\"$dynamicRef\",\"$dynamicAnchor\",\"type\",\"enum\",\"const\",\"anyOf\",\"oneOf\",\"allOf\",\"not\",\"properties\",\"required\",\"additionalProperties\",\"patternProperties\",\"propertyNames\",\"minProperties\",\"maxProperties\",\"items\",\"prefixItems\",\"additionalItems\",\"minItems\",\"maxItems\",\"uniqueItems\",\"contains\",\"minContains\",\"maxContains\",\"minLength\",\"maxLength\",\"pattern\",\"format\",\"minimum\",\"maximum\",\"exclusiveMinimum\",\"exclusiveMaximum\",\"multipleOf\",\"description\",\"default\",\"contentEncoding\",\"contentMediaType\",\"contentSchema\",\"unevaluatedItems\",\"unevaluatedProperties\",\"if\",\"then\",\"else\",\"dependentSchemas\",\"dependentRequired\",\"nullable\",\"readOnly\"])}),Fu={};ve(Fu,{string:()=>qv,number:()=>Jv,date:()=>Wv,boolean:()=>Fv,bigint:()=>Hv});function qv(e){return Xd(qe,e)}function Jv(e){return rc(Me,e)}function Fv(e){return cc(Je,e)}function Hv(e){return pc(Le,e)}function Wv(e){return wc(Nt,e)}var Vv=b(()=>{se(),Tr()}),l={};ve(l,{xor:()=>Su,xid:()=>Xs,void:()=>ku,uuidv7:()=>Js,uuidv6:()=>qs,uuidv4:()=>Ls,uuid:()=>Ms,util:()=>Z,url:()=>Fs,uppercase:()=>Qt,unknown:()=>M,union:()=>L,undefined:()=>_u,ulid:()=>Gs,uint64:()=>$u,uint32:()=>gu,tuple:()=>br,trim:()=>ai,treeifyError:()=>na,transform:()=>$i,toUpperCase:()=>si,toLowerCase:()=>oi,toJSONSchema:()=>js,templateLiteral:()=>Ru,symbol:()=>bu,superRefine:()=>Or,success:()=>ju,stringbool:()=>qu,stringFormat:()=>uu,string:()=>p,strictObject:()=>xu,startsWith:()=>ti,slugify:()=>ui,size:()=>Qe,setErrorMap:()=>Um,set:()=>Nu,safeParseAsync:()=>dr,safeParse:()=>lr,safeEncodeAsync:()=>hr,safeEncode:()=>gr,safeDecodeAsync:()=>$r,safeDecode:()=>vr,registry:()=>Kn,regexes:()=>Ue,regex:()=>Xt,refine:()=>Ur,record:()=>R,readonly:()=>xr,property:()=>nr,promise:()=>Au,prettifyError:()=>ra,preprocess:()=>bi,prefault:()=>kr,positive:()=>Qn,pipe:()=>ot,partialRecord:()=>zu,parseAsync:()=>ur,parse:()=>sr,overwrite:()=>he,optional:()=>J,object:()=>y,number:()=>D,nullish:()=>Du,nullable:()=>at,null:()=>gi,normalize:()=>ri,nonpositive:()=>tr,nonoptional:()=>Ir,nonnegative:()=>ir,never:()=>vi,negative:()=>er,nativeEnum:()=>Zu,nanoid:()=>Vs,nan:()=>Eu,multipleOf:()=>je,minSize:()=>$e,minLength:()=>xe,mime:()=>ni,meta:()=>Zr,maxSize:()=>Ee,maxLength:()=>et,map:()=>Ou,mac:()=>eu,lte:()=>oe,lt:()=>_e,lowercase:()=>Yt,looseRecord:()=>Uu,looseObject:()=>K,locales:()=>Vn,literal:()=>k,length:()=>tt,lazy:()=>Sr,ksuid:()=>Ys,keyof:()=>wu,jwt:()=>su,json:()=>Lu,iso:()=>di,ipv6:()=>tu,ipv4:()=>Qs,intersection:()=>Ut,int64:()=>hu,int32:()=>fu,int:()=>Ft,instanceof:()=>Mu,includes:()=>ei,httpUrl:()=>Hs,hostname:()=>lu,hex:()=>du,hash:()=>cu,guid:()=>Cs,gte:()=>ne,gt:()=>ye,globalRegistry:()=>ae,getErrorMap:()=>Om,function:()=>st,fromJSONSchema:()=>Zm,formatError:()=>Cn,float64:()=>pu,float32:()=>mu,flattenError:()=>An,file:()=>Tu,exactOptional:()=>_r,enum:()=>G,endsWith:()=>ii,encodeAsync:()=>pr,encode:()=>cr,emoji:()=>Ws,email:()=>As,e164:()=>ou,discriminatedUnion:()=>hi,describe:()=>Nr,decodeAsync:()=>fr,decode:()=>mr,date:()=>Iu,custom:()=>zr,cuid2:()=>Bs,cuid:()=>Ks,core:()=>Es,config:()=>B,coerce:()=>Fu,codec:()=>Pu,clone:()=>ue,cidrv6:()=>nu,cidrv4:()=>iu,check:()=>Cu,catch:()=>wr,boolean:()=>W,bigint:()=>vu,base64url:()=>au,base64:()=>ru,array:()=>N,any:()=>yu,_function:()=>st,_default:()=>yr,_ZodString:()=>Xe,ZodXor:()=>Oi,ZodXID:()=>ft,ZodVoid:()=>zi,ZodUnknown:()=>xi,ZodUnion:()=>Re,ZodUndefined:()=>ki,ZodUUID:()=>de,ZodURL:()=>Ce,ZodULID:()=>pt,ZodType:()=>z,ZodTuple:()=>Ti,ZodTransform:()=>Ri,ZodTemplateLiteral:()=>Wi,ZodSymbol:()=>yi,ZodSuccess:()=>qi,ZodStringFormat:()=>P,ZodString:()=>qe,ZodSet:()=>ji,ZodRecord:()=>He,ZodRealError:()=>ie,ZodReadonly:()=>Hi,ZodPromise:()=>Ki,ZodPrefault:()=>Li,ZodPipe:()=>St,ZodOptional:()=>wt,ZodObject:()=>Fe,ZodNumberFormat:()=>Ie,ZodNumber:()=>Me,ZodNullable:()=>Ci,ZodNull:()=>Ii,ZodNonOptional:()=>xt,ZodNever:()=>Si,ZodNanoID:()=>dt,ZodNaN:()=>Fi,ZodMap:()=>Di,ZodMAC:()=>_i,ZodLiteral:()=>Ei,ZodLazy:()=>Vi,ZodKSUID:()=>gt,ZodJWT:()=>It,ZodIssueCode:()=>Ju,ZodIntersection:()=>Zi,ZodISOTime:()=>pi,ZodISODuration:()=>fi,ZodISODateTime:()=>ci,ZodISODate:()=>mi,ZodIPv6:()=>ht,ZodIPv4:()=>vt,ZodGUID:()=>Pe,ZodFunction:()=>Bi,ZodFirstPartyTypeKind:()=>Nn,ZodFile:()=>Pi,ZodExactOptional:()=>Ai,ZodError:()=>Rs,ZodEnum:()=>Se,ZodEmoji:()=>lt,ZodEmail:()=>ut,ZodE164:()=>kt,ZodDiscriminatedUnion:()=>Ni,ZodDefault:()=>Mi,ZodDate:()=>Nt,ZodCustomStringFormat:()=>Oe,ZodCustom:()=>We,ZodCodec:()=>Zt,ZodCatch:()=>Ji,ZodCUID2:()=>mt,ZodCUID:()=>ct,ZodCIDRv6:()=>bt,ZodCIDRv4:()=>$t,ZodBoolean:()=>Je,ZodBigIntFormat:()=>Ot,ZodBigInt:()=>Le,ZodBase64URL:()=>yt,ZodBase64:()=>_t,ZodArray:()=>Ui,ZodAny:()=>wi,TimePrecision:()=>rr,NEVER:()=>En,$output:()=>Bn,$input:()=>Gn,$brand:()=>Pn});var jl=b(()=>{se(),se(),Fd(),se(),or(),Lv(),Bd(),On(),On(),Vv(),Tr(),Ps(),xm(),Sm(),Av(),B(Jd())}),Dm,El=b(()=>{jl(),jl(),Dm=l}),jm={};ve(jm,{z:()=>l,xor:()=>Su,xid:()=>Xs,void:()=>ku,uuidv7:()=>Js,uuidv6:()=>qs,uuidv4:()=>Ls,uuid:()=>Ms,util:()=>Z,url:()=>Fs,uppercase:()=>Qt,unknown:()=>M,union:()=>L,undefined:()=>_u,ulid:()=>Gs,uint64:()=>$u,uint32:()=>gu,tuple:()=>br,trim:()=>ai,treeifyError:()=>na,transform:()=>$i,toUpperCase:()=>si,toLowerCase:()=>oi,toJSONSchema:()=>js,templateLiteral:()=>Ru,symbol:()=>bu,superRefine:()=>Or,success:()=>ju,stringbool:()=>qu,stringFormat:()=>uu,string:()=>p,strictObject:()=>xu,startsWith:()=>ti,slugify:()=>ui,size:()=>Qe,setErrorMap:()=>Um,set:()=>Nu,safeParseAsync:()=>dr,safeParse:()=>lr,safeEncodeAsync:()=>hr,safeEncode:()=>gr,safeDecodeAsync:()=>$r,safeDecode:()=>vr,registry:()=>Kn,regexes:()=>Ue,regex:()=>Xt,refine:()=>Ur,record:()=>R,readonly:()=>xr,property:()=>nr,promise:()=>Au,prettifyError:()=>ra,preprocess:()=>bi,prefault:()=>kr,positive:()=>Qn,pipe:()=>ot,partialRecord:()=>zu,parseAsync:()=>ur,parse:()=>sr,overwrite:()=>he,optional:()=>J,object:()=>y,number:()=>D,nullish:()=>Du,nullable:()=>at,null:()=>gi,normalize:()=>ri,nonpositive:()=>tr,nonoptional:()=>Ir,nonnegative:()=>ir,never:()=>vi,negative:()=>er,nativeEnum:()=>Zu,nanoid:()=>Vs,nan:()=>Eu,multipleOf:()=>je,minSize:()=>$e,minLength:()=>xe,mime:()=>ni,meta:()=>Zr,maxSize:()=>Ee,maxLength:()=>et,map:()=>Ou,mac:()=>eu,lte:()=>oe,lt:()=>_e,lowercase:()=>Yt,looseRecord:()=>Uu,looseObject:()=>K,locales:()=>Vn,literal:()=>k,length:()=>tt,lazy:()=>Sr,ksuid:()=>Ys,keyof:()=>wu,jwt:()=>su,json:()=>Lu,iso:()=>di,ipv6:()=>tu,ipv4:()=>Qs,intersection:()=>Ut,int64:()=>hu,int32:()=>fu,int:()=>Ft,instanceof:()=>Mu,includes:()=>ei,httpUrl:()=>Hs,hostname:()=>lu,hex:()=>du,hash:()=>cu,guid:()=>Cs,gte:()=>ne,gt:()=>ye,globalRegistry:()=>ae,getErrorMap:()=>Om,function:()=>st,fromJSONSchema:()=>Zm,formatError:()=>Cn,float64:()=>pu,float32:()=>mu,flattenError:()=>An,file:()=>Tu,exactOptional:()=>_r,enum:()=>G,endsWith:()=>ii,encodeAsync:()=>pr,encode:()=>cr,emoji:()=>Ws,email:()=>As,e164:()=>ou,discriminatedUnion:()=>hi,describe:()=>Nr,default:()=>Em,decodeAsync:()=>fr,decode:()=>mr,date:()=>Iu,custom:()=>zr,cuid2:()=>Bs,cuid:()=>Ks,core:()=>Es,config:()=>B,coerce:()=>Fu,codec:()=>Pu,clone:()=>ue,cidrv6:()=>nu,cidrv4:()=>iu,check:()=>Cu,catch:()=>wr,boolean:()=>W,bigint:()=>vu,base64url:()=>au,base64:()=>ru,array:()=>N,any:()=>yu,_function:()=>st,_default:()=>yr,_ZodString:()=>Xe,ZodXor:()=>Oi,ZodXID:()=>ft,ZodVoid:()=>zi,ZodUnknown:()=>xi,ZodUnion:()=>Re,ZodUndefined:()=>ki,ZodUUID:()=>de,ZodURL:()=>Ce,ZodULID:()=>pt,ZodType:()=>z,ZodTuple:()=>Ti,ZodTransform:()=>Ri,ZodTemplateLiteral:()=>Wi,ZodSymbol:()=>yi,ZodSuccess:()=>qi,ZodStringFormat:()=>P,ZodString:()=>qe,ZodSet:()=>ji,ZodRecord:()=>He,ZodRealError:()=>ie,ZodReadonly:()=>Hi,ZodPromise:()=>Ki,ZodPrefault:()=>Li,ZodPipe:()=>St,ZodOptional:()=>wt,ZodObject:()=>Fe,ZodNumberFormat:()=>Ie,ZodNumber:()=>Me,ZodNullable:()=>Ci,ZodNull:()=>Ii,ZodNonOptional:()=>xt,ZodNever:()=>Si,ZodNanoID:()=>dt,ZodNaN:()=>Fi,ZodMap:()=>Di,ZodMAC:()=>_i,ZodLiteral:()=>Ei,ZodLazy:()=>Vi,ZodKSUID:()=>gt,ZodJWT:()=>It,ZodIssueCode:()=>Ju,ZodIntersection:()=>Zi,ZodISOTime:()=>pi,ZodISODuration:()=>fi,ZodISODateTime:()=>ci,ZodISODate:()=>mi,ZodIPv6:()=>ht,ZodIPv4:()=>vt,ZodGUID:()=>Pe,ZodFunction:()=>Bi,ZodFirstPartyTypeKind:()=>Nn,ZodFile:()=>Pi,ZodExactOptional:()=>Ai,ZodError:()=>Rs,ZodEnum:()=>Se,ZodEmoji:()=>lt,ZodEmail:()=>ut,ZodE164:()=>kt,ZodDiscriminatedUnion:()=>Ni,ZodDefault:()=>Mi,ZodDate:()=>Nt,ZodCustomStringFormat:()=>Oe,ZodCustom:()=>We,ZodCodec:()=>Zt,ZodCatch:()=>Ji,ZodCUID2:()=>mt,ZodCUID:()=>ct,ZodCIDRv6:()=>bt,ZodCIDRv4:()=>$t,ZodBoolean:()=>Je,ZodBigIntFormat:()=>Ot,ZodBigInt:()=>Le,ZodBase64URL:()=>yt,ZodBase64:()=>_t,ZodArray:()=>Ui,ZodAny:()=>wi,TimePrecision:()=>rr,NEVER:()=>En,$output:()=>Bn,$input:()=>Gn,$brand:()=>Pn});var Em,Dr=b(()=>{El(),El(),Em=Dm});se();function Hu(e){return!!e._zod}function Pm(e,i){return Hu(e)?Ln(e,i):e.safeParse(i)}function Kv(e){if(!e)return;let i;if(Hu(e)?i=e._zod?.def?.shape:i=e.shape,!!i){if(typeof i==\"function\")try{return i()}catch{return}return i}}function Bv(e){if(Hu(e)){let a=e._zod?.def;if(a){if(a.value!==void 0)return a.value;if(Array.isArray(a.values)&&a.values.length>0)return a.values[0]}}let i=e._def;if(i){if(i.value!==void 0)return i.value;if(Array.isArray(i.values)&&i.values.length>0)return i.values[0]}let n=e.value;if(n!==void 0)return n}Dr();var Te=\"io.modelcontextprotocol/related-task\",jr=\"2.0\",V=zr(e=>e!==null&&(typeof e==\"object\"||typeof e==\"function\")),Rm=L([p(),D().int()]),Am=p(),cb=K({ttl:D().optional(),pollInterval:D().optional()}),Gv=y({ttl:D().optional()}),Xv=y({taskId:p()}),Wu=K({progressToken:Rm.optional(),[Te]:Xv.optional()}),le=y({_meta:Wu.optional()}),Gi=le.extend({task:Gv.optional()}),Yv=e=>Gi.safeParse(e).success,X=y({method:p(),params:le.loose().optional()}),me=y({_meta:Wu.optional()}),pe=y({method:p(),params:me.loose().optional()}),Y=K({_meta:Wu.optional()}),Xi=L([p(),D().int()]),Cm=y({jsonrpc:k(jr),id:Xi,...X.shape}).strict(),Pl=e=>Cm.safeParse(e).success,Mm=y({jsonrpc:k(jr),...pe.shape}).strict(),Qv=e=>Mm.safeParse(e).success,Vu=y({jsonrpc:k(jr),id:Xi,result:Y}).strict(),cn=e=>Vu.safeParse(e).success,E;(function(e){e[e.ConnectionClosed=-32e3]=\"ConnectionClosed\",e[e.RequestTimeout=-32001]=\"RequestTimeout\",e[e.ParseError=-32700]=\"ParseError\",e[e.InvalidRequest=-32600]=\"InvalidRequest\",e[e.MethodNotFound=-32601]=\"MethodNotFound\",e[e.InvalidParams=-32602]=\"InvalidParams\",e[e.InternalError=-32603]=\"InternalError\",e[e.UrlElicitationRequired=-32042]=\"UrlElicitationRequired\"})(E||(E={}));var Ku=y({jsonrpc:k(jr),id:Xi.optional(),error:y({code:D().int(),message:p(),data:M().optional()})}).strict(),eh=e=>Ku.safeParse(e).success,th=L([Cm,Mm,Vu,Ku]),mb=L([Vu,Ku]),Bu=Y.strict(),ih=me.extend({requestId:Xi.optional(),reason:p().optional()}),Gu=pe.extend({method:k(\"notifications/cancelled\"),params:ih}),nh=y({src:p(),mimeType:p().optional(),sizes:N(p()).optional(),theme:G([\"light\",\"dark\"]).optional()}),Yi=y({icons:N(nh).optional()}),zt=y({name:p(),title:p().optional()}),Er=zt.extend({...zt.shape,...Yi.shape,version:p(),websiteUrl:p().optional(),description:p().optional()}),rh=Ut(y({applyDefaults:W().optional()}),R(p(),M())),ah=bi(e=>e&&typeof e==\"object\"&&!Array.isArray(e)&&Object.keys(e).length===0?{form:{}}:e,Ut(y({form:rh.optional(),url:V.optional()}),R(p(),M()).optional())),oh=K({list:V.optional(),cancel:V.optional(),requests:K({sampling:K({createMessage:V.optional()}).optional(),elicitation:K({create:V.optional()}).optional()}).optional()}),sh=K({list:V.optional(),cancel:V.optional(),requests:K({tools:K({call:V.optional()}).optional()}).optional()}),uh=y({experimental:R(p(),V).optional(),sampling:y({context:V.optional(),tools:V.optional()}).optional(),elicitation:ah.optional(),roots:y({listChanged:W().optional()}).optional(),tasks:oh.optional(),extensions:R(p(),V).optional()}),lh=le.extend({protocolVersion:p(),capabilities:uh,clientInfo:Er}),dh=X.extend({method:k(\"initialize\"),params:lh}),ch=y({experimental:R(p(),V).optional(),logging:V.optional(),completions:V.optional(),prompts:y({listChanged:W().optional()}).optional(),resources:y({subscribe:W().optional(),listChanged:W().optional()}).optional(),tools:y({listChanged:W().optional()}).optional(),tasks:sh.optional(),extensions:R(p(),V).optional()}),mh=Y.extend({protocolVersion:p(),capabilities:ch,serverInfo:Er,instructions:p().optional()}),ph=pe.extend({method:k(\"notifications/initialized\"),params:me.optional()}),Pr=X.extend({method:k(\"ping\"),params:le.optional()}),fh=y({progress:D(),total:J(D()),message:J(p())}),gh=y({...me.shape,...fh.shape,progressToken:Rm}),Xu=pe.extend({method:k(\"notifications/progress\"),params:gh}),vh=le.extend({cursor:Am.optional()}),Qi=X.extend({params:vh.optional()}),en=Y.extend({nextCursor:Am.optional()}),hh=G([\"working\",\"input_required\",\"completed\",\"failed\",\"cancelled\"]),tn=y({taskId:p(),status:hh,ttl:L([D(),gi()]),createdAt:p(),lastUpdatedAt:p(),pollInterval:J(D()),statusMessage:J(p())}),Yu=Y.extend({task:tn}),$h=me.merge(tn),Zn=pe.extend({method:k(\"notifications/tasks/status\"),params:$h}),Qu=X.extend({method:k(\"tasks/get\"),params:le.extend({taskId:p()})}),el=Y.merge(tn),tl=X.extend({method:k(\"tasks/result\"),params:le.extend({taskId:p()})}),pb=Y.loose(),il=Qi.extend({method:k(\"tasks/list\")}),nl=en.extend({tasks:N(tn)}),rl=X.extend({method:k(\"tasks/cancel\"),params:le.extend({taskId:p()})}),bh=Y.merge(tn),Lm=y({uri:p(),mimeType:J(p()),_meta:R(p(),M()).optional()}),qm=Lm.extend({text:p()}),al=p().refine(e=>{try{return atob(e),!0}catch{return!1}},{message:\"Invalid Base64 string\"}),Jm=Lm.extend({blob:al}),nn=G([\"user\",\"assistant\"]),Tt=y({audience:N(nn).optional(),priority:D().min(0).max(1).optional(),lastModified:di.datetime({offset:!0}).optional()}),Fm=y({...zt.shape,...Yi.shape,uri:p(),description:J(p()),mimeType:J(p()),size:J(D()),annotations:Tt.optional(),_meta:J(K({}))}),_h=y({...zt.shape,...Yi.shape,uriTemplate:p(),description:J(p()),mimeType:J(p()),annotations:Tt.optional(),_meta:J(K({}))}),yh=Qi.extend({method:k(\"resources/list\")}),Hm=en.extend({resources:N(Fm)}),kh=Qi.extend({method:k(\"resources/templates/list\")}),Ih=en.extend({resourceTemplates:N(_h)}),ol=le.extend({uri:p()}),wh=ol,xh=X.extend({method:k(\"resources/read\"),params:wh}),Wm=Y.extend({contents:N(L([qm,Jm]))}),Sh=pe.extend({method:k(\"notifications/resources/list_changed\"),params:me.optional()}),zh=ol,Uh=X.extend({method:k(\"resources/subscribe\"),params:zh}),Oh=ol,Nh=X.extend({method:k(\"resources/unsubscribe\"),params:Oh}),Zh=me.extend({uri:p()}),Th=pe.extend({method:k(\"notifications/resources/updated\"),params:Zh}),Dh=y({name:p(),description:J(p()),required:J(W())}),jh=y({...zt.shape,...Yi.shape,description:J(p()),arguments:J(N(Dh)),_meta:J(K({}))}),Eh=Qi.extend({method:k(\"prompts/list\")}),Ph=en.extend({prompts:N(jh)}),Rh=le.extend({name:p(),arguments:R(p(),p()).optional()}),Ah=X.extend({method:k(\"prompts/get\"),params:Rh}),sl=y({type:k(\"text\"),text:p(),annotations:Tt.optional(),_meta:R(p(),M()).optional()}),ul=y({type:k(\"image\"),data:al,mimeType:p(),annotations:Tt.optional(),_meta:R(p(),M()).optional()}),ll=y({type:k(\"audio\"),data:al,mimeType:p(),annotations:Tt.optional(),_meta:R(p(),M()).optional()}),Ch=y({type:k(\"tool_use\"),name:p(),id:p(),input:R(p(),M()),_meta:R(p(),M()).optional()}),Vm=y({type:k(\"resource\"),resource:L([qm,Jm]),annotations:Tt.optional(),_meta:R(p(),M()).optional()}),Km=Fm.extend({type:k(\"resource_link\")}),rn=L([sl,ul,ll,Km,Vm]),Mh=y({role:nn,content:rn}),Lh=Y.extend({description:p().optional(),messages:N(Mh)}),qh=pe.extend({method:k(\"notifications/prompts/list_changed\"),params:me.optional()}),Jh=y({title:p().optional(),readOnlyHint:W().optional(),destructiveHint:W().optional(),idempotentHint:W().optional(),openWorldHint:W().optional()}),Fh=y({taskSupport:G([\"required\",\"optional\",\"forbidden\"]).optional()}),dl=y({...zt.shape,...Yi.shape,description:p().optional(),inputSchema:y({type:k(\"object\"),properties:R(p(),V).optional(),required:N(p()).optional()}).catchall(M()),outputSchema:y({type:k(\"object\"),properties:R(p(),V).optional(),required:N(p()).optional()}).catchall(M()).optional(),annotations:Jh.optional(),execution:Fh.optional(),_meta:R(p(),M()).optional()}),Bm=Qi.extend({method:k(\"tools/list\")}),Hh=en.extend({tools:N(dl)}),Rr=Y.extend({content:N(rn).default([]),structuredContent:R(p(),M()).optional(),isError:W().optional()}),fb=Rr.or(Y.extend({toolResult:M()})),Wh=Gi.extend({name:p(),arguments:R(p(),M()).optional()}),Gm=X.extend({method:k(\"tools/call\"),params:Wh}),Vh=pe.extend({method:k(\"notifications/tools/list_changed\"),params:me.optional()}),gb=y({autoRefresh:W().default(!0),debounceMs:D().int().nonnegative().default(300)}),Xm=G([\"debug\",\"info\",\"notice\",\"warning\",\"error\",\"critical\",\"alert\",\"emergency\"]),Kh=le.extend({level:Xm}),Bh=X.extend({method:k(\"logging/setLevel\"),params:Kh}),Gh=me.extend({level:Xm,logger:p().optional(),data:M()}),Xh=pe.extend({method:k(\"notifications/message\"),params:Gh}),Yh=y({name:p().optional()}),Qh=y({hints:N(Yh).optional(),costPriority:D().min(0).max(1).optional(),speedPriority:D().min(0).max(1).optional(),intelligencePriority:D().min(0).max(1).optional()}),e$=y({mode:G([\"auto\",\"required\",\"none\"]).optional()}),t$=y({type:k(\"tool_result\"),toolUseId:p().describe(\"The unique identifier for the corresponding tool call.\"),content:N(rn).default([]),structuredContent:y({}).loose().optional(),isError:W().optional(),_meta:R(p(),M()).optional()}),i$=hi(\"type\",[sl,ul,ll]),Tn=hi(\"type\",[sl,ul,ll,Ch,t$]),n$=y({role:nn,content:L([Tn,N(Tn)]),_meta:R(p(),M()).optional()}),r$=Gi.extend({messages:N(n$),modelPreferences:Qh.optional(),systemPrompt:p().optional(),includeContext:G([\"none\",\"thisServer\",\"allServers\"]).optional(),temperature:D().optional(),maxTokens:D().int(),stopSequences:N(p()).optional(),metadata:V.optional(),tools:N(dl).optional(),toolChoice:e$.optional()}),a$=X.extend({method:k(\"sampling/createMessage\"),params:r$}),Ym=Y.extend({model:p(),stopReason:J(G([\"endTurn\",\"stopSequence\",\"maxTokens\"]).or(p())),role:nn,content:i$}),Qm=Y.extend({model:p(),stopReason:J(G([\"endTurn\",\"stopSequence\",\"maxTokens\",\"toolUse\"]).or(p())),role:nn,content:L([Tn,N(Tn)])}),o$=y({type:k(\"boolean\"),title:p().optional(),description:p().optional(),default:W().optional()}),s$=y({type:k(\"string\"),title:p().optional(),description:p().optional(),minLength:D().optional(),maxLength:D().optional(),format:G([\"email\",\"uri\",\"date\",\"date-time\"]).optional(),default:p().optional()}),u$=y({type:G([\"number\",\"integer\"]),title:p().optional(),description:p().optional(),minimum:D().optional(),maximum:D().optional(),default:D().optional()}),l$=y({type:k(\"string\"),title:p().optional(),description:p().optional(),enum:N(p()),default:p().optional()}),d$=y({type:k(\"string\"),title:p().optional(),description:p().optional(),oneOf:N(y({const:p(),title:p()})),default:p().optional()}),c$=y({type:k(\"string\"),title:p().optional(),description:p().optional(),enum:N(p()),enumNames:N(p()).optional(),default:p().optional()}),m$=L([l$,d$]),p$=y({type:k(\"array\"),title:p().optional(),description:p().optional(),minItems:D().optional(),maxItems:D().optional(),items:y({type:k(\"string\"),enum:N(p())}),default:N(p()).optional()}),f$=y({type:k(\"array\"),title:p().optional(),description:p().optional(),minItems:D().optional(),maxItems:D().optional(),items:y({anyOf:N(y({const:p(),title:p()}))}),default:N(p()).optional()}),g$=L([p$,f$]),v$=L([c$,m$,g$]),h$=L([v$,o$,s$,u$]),$$=Gi.extend({mode:k(\"form\").optional(),message:p(),requestedSchema:y({type:k(\"object\"),properties:R(p(),h$),required:N(p()).optional()})}),b$=Gi.extend({mode:k(\"url\"),message:p(),elicitationId:p(),url:p().url()}),_$=L([$$,b$]),y$=X.extend({method:k(\"elicitation/create\"),params:_$}),k$=me.extend({elicitationId:p()}),I$=pe.extend({method:k(\"notifications/elicitation/complete\"),params:k$}),w$=Y.extend({action:G([\"accept\",\"decline\",\"cancel\"]),content:bi(e=>e===null?void 0:e,R(p(),L([p(),D(),W(),N(p())])).optional())}),x$=y({type:k(\"ref/resource\"),uri:p()}),S$=y({type:k(\"ref/prompt\"),name:p()}),z$=le.extend({ref:L([S$,x$]),argument:y({name:p(),value:p()}),context:y({arguments:R(p(),p()).optional()}).optional()}),U$=X.extend({method:k(\"completion/complete\"),params:z$}),O$=Y.extend({completion:K({values:N(p()).max(100),total:J(D().int()),hasMore:J(W())})}),N$=y({uri:p().startsWith(\"file://\"),name:p().optional(),_meta:R(p(),M()).optional()}),Z$=X.extend({method:k(\"roots/list\"),params:le.optional()}),T$=Y.extend({roots:N(N$)}),D$=pe.extend({method:k(\"notifications/roots/list_changed\"),params:me.optional()}),vb=L([Pr,dh,U$,Bh,Ah,Eh,yh,kh,xh,Uh,Nh,Gm,Bm,Qu,tl,il,rl]),hb=L([Gu,Xu,ph,D$,Zn]),$b=L([Bu,Ym,Qm,w$,T$,el,nl,Yu]),bb=L([Pr,a$,y$,Z$,Qu,tl,il,rl]),_b=L([Gu,Xu,Xh,Th,Sh,Vh,qh,Zn,I$]),yb=L([Bu,mh,O$,Lh,Ph,Hm,Ih,Wm,Rr,Hh,el,nl,Yu]),T=class e extends Error{constructor(i,n,a){super(`MCP error ${i}: ${n}`),this.code=i,this.data=a,this.name=\"McpError\"}static fromError(i,n,a){if(i===E.UrlElicitationRequired&&a){let t=a;if(t.elicitations)return new Kr(t.elicitations,n)}return new e(i,n,a)}},Kr=class extends T{constructor(i,n=`URL elicitation${i.length>1?\"s\":\"\"} required`){super(E.UrlElicitationRequired,n,{elicitations:i})}get elicitations(){return this.data?.elicitations??[]}};function Ne(e){return e===\"completed\"||e===\"failed\"||e===\"cancelled\"}var kb=Symbol(\"Let zodToJsonSchema decide on which parser to use\"),Ib=new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");function Rl(e){let i=Kv(e)?.method;if(!i)throw Error(\"Schema is missing a method literal\");let n=Bv(i);if(typeof n!=\"string\")throw Error(\"Schema method literal must be a string\");return n}function Al(e,i){let n=Pm(e,i);if(!n.success)throw n.error;return n.data}var j$=6e4,Br=class{constructor(i){this._options=i,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(Gu,n=>{this._oncancel(n)}),this.setNotificationHandler(Xu,n=>{this._onprogress(n)}),this.setRequestHandler(Pr,n=>({})),this._taskStore=i?.taskStore,this._taskMessageQueue=i?.taskMessageQueue,this._taskStore&&(this.setRequestHandler(Qu,async(n,a)=>{let t=await this._taskStore.getTask(n.params.taskId,a.sessionId);if(!t)throw new T(E.InvalidParams,\"Failed to retrieve task: Task not found\");return{...t}}),this.setRequestHandler(tl,async(n,a)=>{let t=async()=>{let r=n.params.taskId;if(this._taskMessageQueue){let s;for(;s=await this._taskMessageQueue.dequeue(r,a.sessionId);){if(s.type===\"response\"||s.type===\"error\"){let u=s.message,d=u.id,c=this._requestResolvers.get(d);if(c)if(this._requestResolvers.delete(d),s.type===\"response\")c(u);else{let f=u,g=new T(f.error.code,f.error.message,f.error.data);c(g)}else{let f=s.type===\"response\"?\"Response\":\"Error\";this._onerror(Error(`${f} handler missing for request ${d}`))}continue}await this._transport?.send(s.message,{relatedRequestId:a.requestId})}}let o=await this._taskStore.getTask(r,a.sessionId);if(!o)throw new T(E.InvalidParams,`Task not found: ${r}`);if(!Ne(o.status))return await this._waitForTaskUpdate(r,a.signal),await t();if(Ne(o.status)){let s=await this._taskStore.getTaskResult(r,a.sessionId);return this._clearTaskQueue(r),{...s,_meta:{...s._meta,[Te]:{taskId:r}}}}return await t()};return await t()}),this.setRequestHandler(il,async(n,a)=>{try{let{tasks:t,nextCursor:r}=await this._taskStore.listTasks(n.params?.cursor,a.sessionId);return{tasks:t,nextCursor:r,_meta:{}}}catch(t){throw new T(E.InvalidParams,`Failed to list tasks: ${t instanceof Error?t.message:String(t)}`)}}),this.setRequestHandler(rl,async(n,a)=>{try{let t=await this._taskStore.getTask(n.params.taskId,a.sessionId);if(!t)throw new T(E.InvalidParams,`Task not found: ${n.params.taskId}`);if(Ne(t.status))throw new T(E.InvalidParams,`Cannot cancel task in terminal status: ${t.status}`);await this._taskStore.updateTaskStatus(n.params.taskId,\"cancelled\",\"Client cancelled task execution.\",a.sessionId),this._clearTaskQueue(n.params.taskId);let r=await this._taskStore.getTask(n.params.taskId,a.sessionId);if(!r)throw new T(E.InvalidParams,`Task not found after cancellation: ${n.params.taskId}`);return{_meta:{},...r}}catch(t){throw t instanceof T?t:new T(E.InvalidRequest,`Failed to cancel task: ${t instanceof Error?t.message:String(t)}`)}}))}async _oncancel(i){i.params.requestId&&this._requestHandlerAbortControllers.get(i.params.requestId)?.abort(i.params.reason)}_setupTimeout(i,n,a,t,r=!1){this._timeoutInfo.set(i,{timeoutId:setTimeout(t,n),startTime:Date.now(),timeout:n,maxTotalTimeout:a,resetTimeoutOnProgress:r,onTimeout:t})}_resetTimeout(i){let n=this._timeoutInfo.get(i);if(!n)return!1;let a=Date.now()-n.startTime;if(n.maxTotalTimeout&&a>=n.maxTotalTimeout)throw this._timeoutInfo.delete(i),T.fromError(E.RequestTimeout,\"Maximum total timeout exceeded\",{maxTotalTimeout:n.maxTotalTimeout,totalElapsed:a});return clearTimeout(n.timeoutId),n.timeoutId=setTimeout(n.onTimeout,n.timeout),!0}_cleanupTimeout(i){let n=this._timeoutInfo.get(i);n&&(clearTimeout(n.timeoutId),this._timeoutInfo.delete(i))}async connect(i){if(this._transport)throw Error(\"Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.\");this._transport=i;let n=this.transport?.onclose;this._transport.onclose=()=>{n?.(),this._onclose()};let a=this.transport?.onerror;this._transport.onerror=r=>{a?.(r),this._onerror(r)};let t=this._transport?.onmessage;this._transport.onmessage=(r,o)=>{t?.(r,o),cn(r)||eh(r)?this._onresponse(r):Pl(r)?this._onrequest(r,o):Qv(r)?this._onnotification(r):this._onerror(Error(`Unknown message type: ${JSON.stringify(r)}`))},await this._transport.start()}_onclose(){let i=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let a of this._timeoutInfo.values())clearTimeout(a.timeoutId);this._timeoutInfo.clear();for(let a of this._requestHandlerAbortControllers.values())a.abort();this._requestHandlerAbortControllers.clear();let n=T.fromError(E.ConnectionClosed,\"Connection closed\");this._transport=void 0,this.onclose?.();for(let a of i.values())a(n)}_onerror(i){this.onerror?.(i)}_onnotification(i){let n=this._notificationHandlers.get(i.method)??this.fallbackNotificationHandler;n!==void 0&&Promise.resolve().then(()=>n(i)).catch(a=>this._onerror(Error(`Uncaught error in notification handler: ${a}`)))}_onrequest(i,n){let a=this._requestHandlers.get(i.method)??this.fallbackRequestHandler,t=this._transport,r=i.params?._meta?.[Te]?.taskId;if(a===void 0){let c={jsonrpc:\"2.0\",id:i.id,error:{code:E.MethodNotFound,message:\"Method not found\"}};r&&this._taskMessageQueue?this._enqueueTaskMessage(r,{type:\"error\",message:c,timestamp:Date.now()},t?.sessionId).catch(f=>this._onerror(Error(`Failed to enqueue error response: ${f}`))):t?.send(c).catch(f=>this._onerror(Error(`Failed to send an error response: ${f}`)));return}let o=new AbortController;this._requestHandlerAbortControllers.set(i.id,o);let s=Yv(i.params)?i.params.task:void 0,u=this._taskStore?this.requestTaskStore(i,t?.sessionId):void 0,d={signal:o.signal,sessionId:t?.sessionId,_meta:i.params?._meta,sendNotification:async c=>{if(o.signal.aborted)return;let f={relatedRequestId:i.id};r&&(f.relatedTask={taskId:r}),await this.notification(c,f)},sendRequest:async(c,f,g)=>{if(o.signal.aborted)throw new T(E.ConnectionClosed,\"Request was cancelled\");let _={...g,relatedRequestId:i.id};r&&!_.relatedTask&&(_.relatedTask={taskId:r});let U=_.relatedTask?.taskId??r;return U&&u&&await u.updateTaskStatus(U,\"input_required\"),await this.request(c,f,_)},authInfo:n?.authInfo,requestId:i.id,requestInfo:n?.requestInfo,taskId:r,taskStore:u,taskRequestedTtl:s?.ttl,closeSSEStream:n?.closeSSEStream,closeStandaloneSSEStream:n?.closeStandaloneSSEStream};Promise.resolve().then(()=>{s&&this.assertTaskHandlerCapability(i.method)}).then(()=>a(i,d)).then(async c=>{if(o.signal.aborted)return;let f={result:c,jsonrpc:\"2.0\",id:i.id};r&&this._taskMessageQueue?await this._enqueueTaskMessage(r,{type:\"response\",message:f,timestamp:Date.now()},t?.sessionId):await t?.send(f)},async c=>{if(o.signal.aborted)return;let f={jsonrpc:\"2.0\",id:i.id,error:{code:Number.isSafeInteger(c.code)?c.code:E.InternalError,message:c.message??\"Internal error\",...c.data!==void 0&&{data:c.data}}};r&&this._taskMessageQueue?await this._enqueueTaskMessage(r,{type:\"error\",message:f,timestamp:Date.now()},t?.sessionId):await t?.send(f)}).catch(c=>this._onerror(Error(`Failed to send response: ${c}`))).finally(()=>{this._requestHandlerAbortControllers.get(i.id)===o&&this._requestHandlerAbortControllers.delete(i.id)})}_onprogress(i){let{progressToken:n,...a}=i.params,t=Number(n),r=this._progressHandlers.get(t);if(!r){this._onerror(Error(`Received a progress notification for an unknown token: ${JSON.stringify(i)}`));return}let o=this._responseHandlers.get(t),s=this._timeoutInfo.get(t);if(s&&o&&s.resetTimeoutOnProgress)try{this._resetTimeout(t)}catch(u){this._responseHandlers.delete(t),this._progressHandlers.delete(t),this._cleanupTimeout(t),o(u);return}r(a)}_onresponse(i){let n=Number(i.id),a=this._requestResolvers.get(n);if(a){if(this._requestResolvers.delete(n),cn(i))a(i);else{let o=new T(i.error.code,i.error.message,i.error.data);a(o)}return}let t=this._responseHandlers.get(n);if(t===void 0){this._onerror(Error(`Received a response for an unknown message ID: ${JSON.stringify(i)}`));return}this._responseHandlers.delete(n),this._cleanupTimeout(n);let r=!1;if(cn(i)&&i.result&&typeof i.result==\"object\"){let o=i.result;if(o.task&&typeof o.task==\"object\"){let s=o.task;typeof s.taskId==\"string\"&&(r=!0,this._taskProgressTokens.set(s.taskId,n))}}if(r||this._progressHandlers.delete(n),cn(i))t(i);else{let o=T.fromError(i.error.code,i.error.message,i.error.data);t(o)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(i,n,a){let{task:t}=a??{};if(!t){try{yield{type:\"result\",result:await this.request(i,n,a)}}catch(o){yield{type:\"error\",error:o instanceof T?o:new T(E.InternalError,String(o))}}return}let r;try{let o=await this.request(i,Yu,a);if(o.task)r=o.task.taskId,yield{type:\"taskCreated\",task:o.task};else throw new T(E.InternalError,\"Task creation did not return a task\");for(;;){let s=await this.getTask({taskId:r},a);if(yield{type:\"taskStatus\",task:s},Ne(s.status)){s.status===\"completed\"?yield{type:\"result\",result:await this.getTaskResult({taskId:r},n,a)}:s.status===\"failed\"?yield{type:\"error\",error:new T(E.InternalError,`Task ${r} failed`)}:s.status===\"cancelled\"&&(yield{type:\"error\",error:new T(E.InternalError,`Task ${r} was cancelled`)});return}if(s.status===\"input_required\"){yield{type:\"result\",result:await this.getTaskResult({taskId:r},n,a)};return}let u=s.pollInterval??this._options?.defaultTaskPollInterval??1e3;await new Promise(d=>setTimeout(d,u)),a?.signal?.throwIfAborted()}}catch(o){yield{type:\"error\",error:o instanceof T?o:new T(E.InternalError,String(o))}}}request(i,n,a){let{relatedRequestId:t,resumptionToken:r,onresumptiontoken:o,task:s,relatedTask:u}=a??{};return new Promise((d,c)=>{let f=q=>{c(q)};if(!this._transport){f(Error(\"Not connected\"));return}if(this._options?.enforceStrictCapabilities===!0)try{this.assertCapabilityForMethod(i.method),s&&this.assertTaskCapability(i.method)}catch(q){f(q);return}a?.signal?.throwIfAborted();let g=this._requestMessageId++,_={...i,jsonrpc:\"2.0\",id:g};a?.onprogress&&(this._progressHandlers.set(g,a.onprogress),_.params={...i.params,_meta:{...i.params?._meta||{},progressToken:g}}),s&&(_.params={..._.params,task:s}),u&&(_.params={..._.params,_meta:{..._.params?._meta||{},[Te]:u}});let U=q=>{this._responseHandlers.delete(g),this._progressHandlers.delete(g),this._cleanupTimeout(g),this._transport?.send({jsonrpc:\"2.0\",method:\"notifications/cancelled\",params:{requestId:g,reason:String(q)}},{relatedRequestId:t,resumptionToken:r,onresumptiontoken:o}).catch(Q=>this._onerror(Error(`Failed to send cancellation: ${Q}`)));let F=q instanceof T?q:new T(E.RequestTimeout,String(q));c(F)};this._responseHandlers.set(g,q=>{if(!a?.signal?.aborted){if(q instanceof Error)return c(q);try{let F=Pm(n,q.result);F.success?d(F.data):c(F.error)}catch(F){c(F)}}}),a?.signal?.addEventListener(\"abort\",()=>{U(a?.signal?.reason)});let fe=a?.timeout??j$,Dt=()=>U(T.fromError(E.RequestTimeout,\"Request timed out\",{timeout:fe}));this._setupTimeout(g,fe,a?.maxTotalTimeout,Dt,a?.resetTimeoutOnProgress??!1);let on=u?.taskId;if(on){let q=F=>{let Q=this._responseHandlers.get(g);Q?Q(F):this._onerror(Error(`Response handler missing for side-channeled request ${g}`))};this._requestResolvers.set(g,q),this._enqueueTaskMessage(on,{type:\"request\",message:_,timestamp:Date.now()}).catch(F=>{this._cleanupTimeout(g),c(F)})}else this._transport.send(_,{relatedRequestId:t,resumptionToken:r,onresumptiontoken:o}).catch(q=>{this._cleanupTimeout(g),c(q)})})}async getTask(i,n){return this.request({method:\"tasks/get\",params:i},el,n)}async getTaskResult(i,n,a){return this.request({method:\"tasks/result\",params:i},n,a)}async listTasks(i,n){return this.request({method:\"tasks/list\",params:i},nl,n)}async cancelTask(i,n){return this.request({method:\"tasks/cancel\",params:i},bh,n)}async notification(i,n){if(!this._transport)throw Error(\"Not connected\");this.assertNotificationCapability(i.method);let a=n?.relatedTask?.taskId;if(a){let r={...i,jsonrpc:\"2.0\",params:{...i.params,_meta:{...i.params?._meta||{},[Te]:n.relatedTask}}};await this._enqueueTaskMessage(a,{type:\"notification\",message:r,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(i.method)&&!i.params&&!n?.relatedRequestId&&!n?.relatedTask){if(this._pendingDebouncedNotifications.has(i.method))return;this._pendingDebouncedNotifications.add(i.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(i.method),!this._transport)return;let r={...i,jsonrpc:\"2.0\"};n?.relatedTask&&(r={...r,params:{...r.params,_meta:{...r.params?._meta||{},[Te]:n.relatedTask}}}),this._transport?.send(r,n).catch(o=>this._onerror(o))});return}let t={...i,jsonrpc:\"2.0\"};n?.relatedTask&&(t={...t,params:{...t.params,_meta:{...t.params?._meta||{},[Te]:n.relatedTask}}}),await this._transport.send(t,n)}setRequestHandler(i,n){let a=Rl(i);this.assertRequestHandlerCapability(a),this._requestHandlers.set(a,(t,r)=>{let o=Al(i,t);return Promise.resolve(n(o,r))})}removeRequestHandler(i){this._requestHandlers.delete(i)}assertCanSetRequestHandler(i){if(this._requestHandlers.has(i))throw Error(`A request handler for ${i} already exists, which would be overridden`)}setNotificationHandler(i,n){let a=Rl(i);this._notificationHandlers.set(a,t=>{let r=Al(i,t);return Promise.resolve(n(r))})}removeNotificationHandler(i){this._notificationHandlers.delete(i)}_cleanupTaskProgressHandler(i){let n=this._taskProgressTokens.get(i);n!==void 0&&(this._progressHandlers.delete(n),this._taskProgressTokens.delete(i))}async _enqueueTaskMessage(i,n,a){if(!this._taskStore||!this._taskMessageQueue)throw Error(\"Cannot enqueue task message: taskStore and taskMessageQueue are not configured\");let t=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(i,n,a,t)}async _clearTaskQueue(i,n){if(this._taskMessageQueue){let a=await this._taskMessageQueue.dequeueAll(i,n);for(let t of a)if(t.type===\"request\"&&Pl(t.message)){let r=t.message.id,o=this._requestResolvers.get(r);o?(o(new T(E.InternalError,\"Task cancelled or completed\")),this._requestResolvers.delete(r)):this._onerror(Error(`Resolver missing for request ${r} during task ${i} cleanup`))}}}async _waitForTaskUpdate(i,n){let a=this._options?.defaultTaskPollInterval??1e3;try{let t=await this._taskStore?.getTask(i);t?.pollInterval&&(a=t.pollInterval)}catch{}return new Promise((t,r)=>{if(n.aborted){r(new T(E.InvalidRequest,\"Request cancelled\"));return}let o=setTimeout(t,a);n.addEventListener(\"abort\",()=>{clearTimeout(o),r(new T(E.InvalidRequest,\"Request cancelled\"))},{once:!0})})}requestTaskStore(i,n){let a=this._taskStore;if(!a)throw Error(\"No task store configured\");return{createTask:async t=>{if(!i)throw Error(\"No request provided\");return await a.createTask(t,i.id,{method:i.method,params:i.params},n)},getTask:async t=>{let r=await a.getTask(t,n);if(!r)throw new T(E.InvalidParams,\"Failed to retrieve task: Task not found\");return r},storeTaskResult:async(t,r,o)=>{await a.storeTaskResult(t,r,o,n);let s=await a.getTask(t,n);if(s){let u=Zn.parse({method:\"notifications/tasks/status\",params:s});await this.notification(u),Ne(s.status)&&this._cleanupTaskProgressHandler(t)}},getTaskResult:t=>a.getTaskResult(t,n),updateTaskStatus:async(t,r,o)=>{let s=await a.getTask(t,n);if(!s)throw new T(E.InvalidParams,`Task \"${t}\" not found - it may have been cleaned up`);if(Ne(s.status))throw new T(E.InvalidParams,`Cannot update task \"${t}\" from terminal status \"${s.status}\" to \"${r}\". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await a.updateTaskStatus(t,r,o,n);let u=await a.getTask(t,n);if(u){let d=Zn.parse({method:\"notifications/tasks/status\",params:u});await this.notification(d),Ne(u.status)&&this._cleanupTaskProgressHandler(t)}},listTasks:t=>a.listTasks(t,n)}}};function Cl(e){return e!==null&&typeof e==\"object\"&&!Array.isArray(e)}function E$(e,i){let n={...e};for(let a in i){let t=a,r=i[t];if(r===void 0)continue;let o=n[t];Cl(o)&&Cl(r)?n[t]={...o,...r}:n[t]=r}return n}var Gr=class extends Br{constructor(){super(...arguments);j(this,\"_registeredMethods\",new Set);j(this,\"_eventSlots\",new Map);j(this,\"setRequestHandler\",(n,a)=>{this._assertMethodNotRegistered(n,\"setRequestHandler\"),super.setRequestHandler(n,a)});j(this,\"setNotificationHandler\",(n,a)=>{this._assertMethodNotRegistered(n,\"setNotificationHandler\"),super.setNotificationHandler(n,a)});j(this,\"replaceRequestHandler\",(n,a)=>{let t=n.shape.method.value;this._registeredMethods.add(t),super.setRequestHandler(n,a)})}onEventDispatch(n,a){}_ensureEventSlot(n){let a=this._eventSlots.get(n);if(!a){let t=this.eventSchemas[n];if(!t)throw Error(`Unknown event: ${String(n)}`);a={listeners:[]},this._eventSlots.set(n,a);let r=t.shape.method.value;this._registeredMethods.add(r);let o=a;super.setNotificationHandler(t,s=>{let u=s.params;this.onEventDispatch(n,u),o.onHandler?.(u);for(let d of[...o.listeners])d(u)})}return a}setEventHandler(n,a){let t=this._ensureEventSlot(n);t.onHandler&&a&&console.warn(`[MCP Apps] on${String(n)} handler replaced. Use addEventListener(\"${String(n)}\", \\u2026) to add multiple listeners without replacing.`),t.onHandler=a}getEventHandler(n){return this._eventSlots.get(n)?.onHandler}addEventListener(n,a){this._ensureEventSlot(n).listeners.push(a)}removeEventListener(n,a){let t=this._eventSlots.get(n);if(!t)return;let r=t.listeners.indexOf(a);r!==-1&&t.listeners.splice(r,1)}warnIfRequestHandlerReplaced(n,a,t){a&&t&&console.warn(`[MCP Apps] ${n} handler replaced. Previous handler will no longer be called.`)}_assertMethodNotRegistered(n,a){let t=n.shape.method.value;if(this._registeredMethods.has(t))throw Error(`Handler for \"${t}\" already registered (via ${a}). Use addEventListener() to attach multiple listeners, or the on* setter for replace semantics.`);this._registeredMethods.add(t)}},P$=\"2026-01-26\";var R$=\"ui/notifications/tool-input-partial\";var Xr=class{constructor(i=window.parent,n){j(this,\"eventTarget\");j(this,\"eventSource\");j(this,\"messageListener\");j(this,\"onclose\");j(this,\"onerror\");j(this,\"onmessage\");j(this,\"sessionId\");j(this,\"setProtocolVersion\");this.eventTarget=i,this.eventSource=n,this.messageListener=a=>{if(n&&a.source!==this.eventSource){console.debug(\"Ignoring message from unknown source\",a);return}let t=th.safeParse(a.data);t.success?(console.debug(\"Parsed message\",t.data),this.onmessage?.(t.data)):a.data?.jsonrpc!==\"2.0\"?console.debug(\"Ignoring non-JSON-RPC message\",t.error.message,a):(console.error(\"Failed to parse message\",t.error.message,a),this.onerror?.(Error(\"Invalid JSON-RPC message received: \"+t.error.message)))}}async start(){window.addEventListener(\"message\",this.messageListener)}async send(i,n){i.method!==R$&&console.debug(\"Sending message\",i),this.eventTarget.postMessage(i,\"*\")}async close(){window.removeEventListener(\"message\",this.messageListener),this.onclose?.()}};Dr();var A$=l.union([l.literal(\"light\"),l.literal(\"dark\")]).describe(\"Color theme preference for the host environment.\"),Ht=l.union([l.literal(\"inline\"),l.literal(\"fullscreen\"),l.literal(\"pip\")]).describe(\"Display mode for UI presentation.\"),C$=l.union([l.literal(\"--color-background-primary\"),l.literal(\"--color-background-secondary\"),l.literal(\"--color-background-tertiary\"),l.literal(\"--color-background-inverse\"),l.literal(\"--color-background-ghost\"),l.literal(\"--color-background-info\"),l.literal(\"--color-background-danger\"),l.literal(\"--color-background-success\"),l.literal(\"--color-background-warning\"),l.literal(\"--color-background-disabled\"),l.literal(\"--color-text-primary\"),l.literal(\"--color-text-secondary\"),l.literal(\"--color-text-tertiary\"),l.literal(\"--color-text-inverse\"),l.literal(\"--color-text-ghost\"),l.literal(\"--color-text-info\"),l.literal(\"--color-text-danger\"),l.literal(\"--color-text-success\"),l.literal(\"--color-text-warning\"),l.literal(\"--color-text-disabled\"),l.literal(\"--color-border-primary\"),l.literal(\"--color-border-secondary\"),l.literal(\"--color-border-tertiary\"),l.literal(\"--color-border-inverse\"),l.literal(\"--color-border-ghost\"),l.literal(\"--color-border-info\"),l.literal(\"--color-border-danger\"),l.literal(\"--color-border-success\"),l.literal(\"--color-border-warning\"),l.literal(\"--color-border-disabled\"),l.literal(\"--color-ring-primary\"),l.literal(\"--color-ring-secondary\"),l.literal(\"--color-ring-inverse\"),l.literal(\"--color-ring-info\"),l.literal(\"--color-ring-danger\"),l.literal(\"--color-ring-success\"),l.literal(\"--color-ring-warning\"),l.literal(\"--font-sans\"),l.literal(\"--font-mono\"),l.literal(\"--font-weight-normal\"),l.literal(\"--font-weight-medium\"),l.literal(\"--font-weight-semibold\"),l.literal(\"--font-weight-bold\"),l.literal(\"--font-text-xs-size\"),l.literal(\"--font-text-sm-size\"),l.literal(\"--font-text-md-size\"),l.literal(\"--font-text-lg-size\"),l.literal(\"--font-heading-xs-size\"),l.literal(\"--font-heading-sm-size\"),l.literal(\"--font-heading-md-size\"),l.literal(\"--font-heading-lg-size\"),l.literal(\"--font-heading-xl-size\"),l.literal(\"--font-heading-2xl-size\"),l.literal(\"--font-heading-3xl-size\"),l.literal(\"--font-text-xs-line-height\"),l.literal(\"--font-text-sm-line-height\"),l.literal(\"--font-text-md-line-height\"),l.literal(\"--font-text-lg-line-height\"),l.literal(\"--font-heading-xs-line-height\"),l.literal(\"--font-heading-sm-line-height\"),l.literal(\"--font-heading-md-line-height\"),l.literal(\"--font-heading-lg-line-height\"),l.literal(\"--font-heading-xl-line-height\"),l.literal(\"--font-heading-2xl-line-height\"),l.literal(\"--font-heading-3xl-line-height\"),l.literal(\"--border-radius-xs\"),l.literal(\"--border-radius-sm\"),l.literal(\"--border-radius-md\"),l.literal(\"--border-radius-lg\"),l.literal(\"--border-radius-xl\"),l.literal(\"--border-radius-full\"),l.literal(\"--border-width-regular\"),l.literal(\"--shadow-hairline\"),l.literal(\"--shadow-sm\"),l.literal(\"--shadow-md\"),l.literal(\"--shadow-lg\")]).describe(\"CSS variable keys available to MCP apps for theming.\"),M$=l.record(C$.describe(`Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses \\`Record\\` rather than \\`Partial>\\`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.`),l.union([l.string(),l.undefined()]).describe(`Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses \\`Record\\` rather than \\`Partial>\\`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.`)).describe(`Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses \\`Record\\` rather than \\`Partial>\\`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.`),wb=l.object({method:l.literal(\"ui/open-link\"),params:l.object({url:l.string().describe(\"URL to open in the host's browser\")})}),L$=l.object({isError:l.boolean().optional().describe(\"True if the host failed to open the URL (e.g., due to security policy).\")}).passthrough(),q$=l.object({isError:l.boolean().optional().describe(\"True if the download failed (e.g., user cancelled or host denied).\")}).passthrough(),J$=l.object({isError:l.boolean().optional().describe(\"True if the host rejected or failed to deliver the message.\")}).passthrough(),xb=l.object({method:l.literal(\"ui/notifications/sandbox-proxy-ready\"),params:l.object({})}),cl=l.object({connectDomains:l.array(l.string()).optional().describe(`Origins for network requests (fetch/XHR/WebSocket).\n\n- Maps to CSP \\`connect-src\\` directive\n- Empty or omitted \\u2192 no network connections (secure default)`),resourceDomains:l.array(l.string()).optional().describe(\"Origins for static resources (images, scripts, stylesheets, fonts, media).\\n\\n- Maps to CSP `img-src`, `script-src`, `style-src`, `font-src`, `media-src` directives\\n- Wildcard subdomains supported: `https://*.example.com`\\n- Empty or omitted \\u2192 no network resources (secure default)\"),frameDomains:l.array(l.string()).optional().describe(\"Origins for nested iframes.\\n\\n- Maps to CSP `frame-src` directive\\n- Empty or omitted \\u2192 no nested iframes allowed (`frame-src 'none'`)\"),baseUriDomains:l.array(l.string()).optional().describe(\"Allowed base URIs for the document.\\n\\n- Maps to CSP `base-uri` directive\\n- Empty or omitted \\u2192 only same origin allowed (`base-uri 'self'`)\")}),ml=l.object({camera:l.object({}).optional().describe(\"Request camera access.\\n\\nMaps to Permission Policy `camera` feature.\"),microphone:l.object({}).optional().describe(\"Request microphone access.\\n\\nMaps to Permission Policy `microphone` feature.\"),geolocation:l.object({}).optional().describe(\"Request geolocation access.\\n\\nMaps to Permission Policy `geolocation` feature.\"),clipboardWrite:l.object({}).optional().describe(\"Request clipboard write access.\\n\\nMaps to Permission Policy `clipboard-write` feature.\")}),Sb=l.object({method:l.literal(\"ui/notifications/size-changed\"),params:l.object({width:l.number().optional().describe(\"New width in pixels.\"),height:l.number().optional().describe(\"New height in pixels.\")})}),F$=l.object({method:l.literal(\"ui/notifications/tool-input\"),params:l.object({arguments:l.record(l.string(),l.unknown().describe(\"Complete tool call arguments as key-value pairs.\")).optional().describe(\"Complete tool call arguments as key-value pairs.\")})}),H$=l.object({method:l.literal(\"ui/notifications/tool-input-partial\"),params:l.object({arguments:l.record(l.string(),l.unknown().describe(\"Partial tool call arguments (incomplete, may change).\")).optional().describe(\"Partial tool call arguments (incomplete, may change).\")})}),W$=l.object({method:l.literal(\"ui/notifications/tool-cancelled\"),params:l.object({reason:l.string().optional().describe('Optional reason for the cancellation (e.g., \"user action\", \"timeout\").')})}),V$=l.object({fonts:l.string().optional()}),K$=l.object({variables:M$.optional().describe(\"CSS variables for theming the app.\"),css:V$.optional().describe(\"CSS blocks that apps can inject.\")}),B$=l.object({method:l.literal(\"ui/resource-teardown\"),params:l.object({})}),zb=l.record(l.string(),l.unknown()),Ml=l.object({text:l.object({}).optional().describe(\"Host supports text content blocks.\"),image:l.object({}).optional().describe(\"Host supports image content blocks.\"),audio:l.object({}).optional().describe(\"Host supports audio content blocks.\"),resource:l.object({}).optional().describe(\"Host supports resource content blocks.\"),resourceLink:l.object({}).optional().describe(\"Host supports resource link content blocks.\"),structuredContent:l.object({}).optional().describe(\"Host supports structured content.\")}),Ub=l.object({method:l.literal(\"ui/notifications/request-teardown\"),params:l.object({}).optional()}),G$=l.object({experimental:l.object({}).optional().describe(\"Experimental features (structure TBD).\"),openLinks:l.object({}).optional().describe(\"Host supports opening external URLs.\"),downloadFile:l.object({}).optional().describe(\"Host supports file downloads via ui/download-file.\"),serverTools:l.object({listChanged:l.boolean().optional().describe(\"Host supports tools/list_changed notifications.\")}).optional().describe(\"Host can proxy tool calls to the MCP server.\"),serverResources:l.object({listChanged:l.boolean().optional().describe(\"Host supports resources/list_changed notifications.\")}).optional().describe(\"Host can proxy resource reads to the MCP server.\"),logging:l.object({}).optional().describe(\"Host accepts log messages.\"),sandbox:l.object({permissions:ml.optional().describe(\"Permissions granted by the host (camera, microphone, geolocation).\"),csp:cl.optional().describe(\"CSP domains approved by the host.\")}).optional().describe(\"Sandbox configuration applied by the host.\"),updateModelContext:Ml.optional().describe(\"Host accepts context updates (ui/update-model-context) to be included in the model's context for future turns.\"),message:Ml.optional().describe(\"Host supports receiving content messages (ui/message) from the view.\"),sampling:l.object({tools:l.object({}).optional().describe(\"Host supports tool use via `tools` and `toolChoice` parameters.\")}).optional().describe(\"Host supports LLM sampling (sampling/createMessage) from the view.\\nMirrors the MCP `ClientCapabilities.sampling` shape so hosts can pass it through.\")}),X$=l.object({experimental:l.object({}).optional().describe(\"Experimental features (structure TBD).\"),tools:l.object({listChanged:l.boolean().optional().describe(\"App supports tools/list_changed notifications.\")}).optional().describe(\"App exposes MCP-style tools that the host can call.\"),availableDisplayModes:l.array(Ht).optional().describe(\"Display modes the app supports.\")}),Ob=l.object({method:l.literal(\"ui/notifications/initialized\"),params:l.object({}).optional()}),Nb=l.object({csp:cl.optional().describe(\"Content Security Policy configuration for UI resources.\"),permissions:ml.optional().describe(\"Sandbox permissions requested by the UI resource.\"),domain:l.string().optional().describe(`Dedicated origin for view sandbox.\n\nUseful when views need stable, dedicated origins for OAuth callbacks, CORS policies, or API key allowlists.\n\n**Host-dependent:** The format and validation rules for this field are determined by each host. Servers MUST consult host-specific documentation for the expected domain format. Common patterns include:\n- Hash-based subdomains (e.g., \\`{hash}.claudemcpcontent.com\\`)\n- URL-derived subdomains (e.g., \\`www-example-com.oaiusercontent.com\\`)\n\nIf omitted, host uses default sandbox origin (typically per-conversation).`),prefersBorder:l.boolean().optional().describe(`Visual boundary preference - true if view prefers a visible border.\n\nBoolean requesting whether a visible border and background is provided by the host. Specifying an explicit value for this is recommended because hosts' defaults may vary.\n\n- \\`true\\`: request visible border + background\n- \\`false\\`: request no visible border + background\n- omitted: host decides border`)}),Zb=l.object({method:l.literal(\"ui/request-display-mode\"),params:l.object({mode:Ht.describe(\"The display mode being requested.\")})}),Y$=l.object({mode:Ht.describe(\"The display mode that was actually set. May differ from requested if not supported.\")}).passthrough(),Q$=l.union([l.literal(\"model\"),l.literal(\"app\")]).describe(\"Tool visibility scope - who can access the tool.\"),Tb=l.object({resourceUri:l.string().optional(),visibility:l.array(Q$).optional().describe(`Who can access this tool. Default: [\"model\", \"app\"]\n- \"model\": Tool visible to and callable by the agent\n- \"app\": Tool callable by the app from this server only`),csp:l.never().optional(),permissions:l.never().optional()}),Db=l.object({mimeTypes:l.array(l.string()).optional().describe('Array of supported MIME types for UI resources.\\nMust include `\"text/html;profile=mcp-app\"` for MCP Apps support.')}),jb=l.object({method:l.literal(\"ui/download-file\"),params:l.object({contents:l.array(l.union([Vm,Km])).describe(\"Resource contents to download \\u2014 embedded (inline data) or linked (host fetches). Uses standard MCP resource types.\")})}),Eb=l.object({method:l.literal(\"ui/message\"),params:l.object({role:l.literal(\"user\").describe('Message role, currently only \"user\" is supported.'),content:l.array(rn).describe(\"Message content blocks (text, image, etc.).\")})}),Pb=l.object({method:l.literal(\"ui/notifications/sandbox-resource-ready\"),params:l.object({html:l.string().describe(\"HTML content to load into the inner iframe.\"),sandbox:l.string().optional().describe(\"Optional override for the inner iframe's sandbox attribute.\"),csp:cl.optional().describe(\"CSP configuration from resource metadata.\"),permissions:ml.optional().describe(\"Sandbox permissions from resource metadata.\")})}),eb=l.object({method:l.literal(\"ui/notifications/tool-result\"),params:Rr.describe(\"Standard MCP tool execution result.\")}),ep=l.object({toolInfo:l.object({id:Xi.optional().describe(\"JSON-RPC id of the tools/call request.\"),tool:dl.describe(\"Tool definition including name, inputSchema, etc.\")}).optional().describe(\"Metadata of the tool call that instantiated this App.\"),theme:A$.optional().describe(\"Current color theme preference.\"),styles:K$.optional().describe(\"Style configuration for theming the app.\"),displayMode:Ht.optional().describe(\"How the UI is currently displayed.\"),availableDisplayModes:l.array(Ht).optional().describe(\"Display modes the host supports.\"),containerDimensions:l.union([l.object({height:l.number().describe(\"Fixed container height in pixels.\")}),l.object({maxHeight:l.union([l.number(),l.undefined()]).optional().describe(\"Maximum container height in pixels.\")})]).and(l.union([l.object({width:l.number().describe(\"Fixed container width in pixels.\")}),l.object({maxWidth:l.union([l.number(),l.undefined()]).optional().describe(\"Maximum container width in pixels.\")})])).optional().describe(`Container dimensions. Represents the dimensions of the iframe or other\ncontainer holding the app. Specify either width or maxWidth, and either height or maxHeight.`),locale:l.string().optional().describe(\"User's language and region preference in BCP 47 format.\"),timeZone:l.string().optional().describe(\"User's timezone in IANA format.\"),userAgent:l.string().optional().describe(\"Host application identifier.\"),platform:l.union([l.literal(\"web\"),l.literal(\"desktop\"),l.literal(\"mobile\")]).optional().describe(\"Platform type for responsive design decisions.\"),deviceCapabilities:l.object({touch:l.boolean().optional().describe(\"Whether the device supports touch input.\"),hover:l.boolean().optional().describe(\"Whether the device supports hover interactions.\")}).optional().describe(\"Device input capabilities.\"),safeAreaInsets:l.object({top:l.number().describe(\"Top safe area inset in pixels.\"),right:l.number().describe(\"Right safe area inset in pixels.\"),bottom:l.number().describe(\"Bottom safe area inset in pixels.\"),left:l.number().describe(\"Left safe area inset in pixels.\")}).optional().describe(\"Mobile safe area boundaries in pixels.\")}).passthrough(),tb=l.object({method:l.literal(\"ui/notifications/host-context-changed\"),params:ep.describe(\"Partial context update containing only changed fields.\")}),Rb=l.object({method:l.literal(\"ui/update-model-context\"),params:l.object({content:l.array(rn).optional().describe(\"Context content blocks (text, image, etc.).\"),structuredContent:l.record(l.string(),l.unknown().describe(\"Structured content for machine-readable context data.\")).optional().describe(\"Structured content for machine-readable context data.\")})}),Ab=l.object({method:l.literal(\"ui/initialize\"),params:l.object({appInfo:Er.describe(\"App identification (name and version).\"),appCapabilities:X$.describe(\"Features and capabilities this app provides.\"),protocolVersion:l.string().describe(\"Protocol version this app supports.\")})}),ib=l.object({protocolVersion:l.string().describe('Negotiated protocol version string (e.g., \"2025-11-21\").'),hostInfo:Er.describe(\"Host application identification and version.\"),hostCapabilities:G$.describe(\"Features and capabilities provided by the host.\"),hostContext:ep.describe(\"Rich context about the host environment.\")}).passthrough(),nb={target:\"draft-2020-12\"};async function Ll(e,i){let n=e[\"~standard\"];if(n.jsonSchema)return n.jsonSchema[i](nb);if(n.vendor===\"zod\"){let{z:a}=await Promise.resolve().then(()=>(Dr(),jm));return a.toJSONSchema(e,{io:i})}throw Error(`Schema (vendor: ${n.vendor}) does not implement Standard JSON Schema (~standard.jsonSchema). Use a library that does (zod v4, ArkType, Valibot) or wrap your schema accordingly.`)}async function ql(e,i,n=\"\"){let a=await e[\"~standard\"].validate(i);if(a.issues){let t=a.issues.map(r=>{let o=r.path?.map(s=>typeof s==\"object\"?s.key:s).join(\".\");return o?`${o}: ${r.message}`:r.message}).join(\"; \");throw Error(n+t)}return a.value}Dr();var jn=class jn extends Gr{constructor(n,a={},t={autoResize:!0}){super(t);j(this,\"_appInfo\");j(this,\"_capabilities\");j(this,\"options\");j(this,\"_hostCapabilities\");j(this,\"_hostInfo\");j(this,\"_hostContext\");j(this,\"_registeredTools\",{});j(this,\"_initializedSent\",!1);j(this,\"eventSchemas\",{toolinput:F$,toolinputpartial:H$,toolresult:eb,toolcancelled:W$,hostcontextchanged:tb});j(this,\"_everHadListener\",new Set);j(this,\"_toolHandlersInitialized\",!1);j(this,\"_onteardown\");j(this,\"_oncalltool\");j(this,\"_onlisttools\");j(this,\"sendOpenLink\",this.openLink);this._appInfo=n,this._capabilities=a,this.options=t,t.allowUnsafeEval||l.config({jitless:!0}),this.setRequestHandler(Pr,r=>(console.log(\"Received ping:\",r.params),{})),this.setEventHandler(\"hostcontextchanged\",void 0)}_assertInitialized(n){if(this._initializedSent)return;let a=`[ext-apps] App.${n}() called before connect() completed the ui/initialize handshake. Await app.connect() before calling this method, or move data loading to an ontoolresult handler.`;if(this.options?.strict)throw Error(a);console.warn(`${a}. This will throw in a future release.`)}_assertHandlerTiming(n){if(!jn.ONE_SHOT_EVENTS.has(n)||this._everHadListener.has(n)||(this._everHadListener.add(n),!this._initializedSent))return;let a=`[ext-apps] \"${String(n)}\" handler registered after connect() completed the ui/initialize handshake. The host may have already sent this notification. Register handlers before calling app.connect().`;if(this.options?.strict)throw Error(a);console.warn(a)}setEventHandler(n,a){a&&this._assertHandlerTiming(n),super.setEventHandler(n,a)}addEventListener(n,a){this._assertHandlerTiming(n),super.addEventListener(n,a)}onEventDispatch(n,a){n===\"hostcontextchanged\"&&(this._hostContext={...this._hostContext,...a})}registerCapabilities(n){if(this.transport)throw Error(\"Cannot register capabilities after transport is established\");this._capabilities=E$(this._capabilities,n)}registerTool(n,a,t){if(this._registeredTools[n])throw Error(`Tool ${n} is already registered`);let r=this,o=()=>{r._initializedSent&&r._capabilities.tools?.listChanged&&r.sendToolListChanged()},s=a.inputSchema!==void 0,u={title:a.title,description:a.description,inputSchema:a.inputSchema,outputSchema:a.outputSchema,annotations:a.annotations,_meta:a._meta,enabled:!0,enable(){this.enabled=!0,o()},disable(){this.enabled=!1,o()},update(d){Object.assign(this,d),o()},remove(){r._registeredTools[n]===u&&(delete r._registeredTools[n],o())},handler:async(d,c)=>{if(!u.enabled)throw Error(`Tool ${n} is disabled`);let f;if(s){let g=u.inputSchema,_=g?await ql(g,d??{},`Invalid input for tool ${n}: `):d??{};f=await t(_,c)}else f=await t(c);return u.outputSchema&&!f.isError&&(f.structuredContent=await ql(u.outputSchema,f.structuredContent,`Invalid output for tool ${n}: `)),f}};return this._registeredTools[n]=u,!this._capabilities.tools&&!this.transport&&this.registerCapabilities({tools:{listChanged:!0}}),this.ensureToolHandlersInitialized(),o(),u}ensureToolHandlersInitialized(){this._toolHandlersInitialized||(this._toolHandlersInitialized=!0,this.oncalltool=async(n,a)=>{let t=this._registeredTools[n.name];if(!t)throw Error(`Tool ${n.name} not found`);return t.handler(n.arguments,a)},this.onlisttools=async(n,a)=>({tools:await Promise.all(Object.entries(this._registeredTools).filter(([t,r])=>r.enabled).map(async([t,r])=>{let o={name:t,title:r.title,description:r.description,inputSchema:r.inputSchema?await Ll(r.inputSchema,\"input\"):{type:\"object\",properties:{}}};return r.outputSchema&&(o.outputSchema=await Ll(r.outputSchema,\"output\")),r.annotations&&(o.annotations=r.annotations),r._meta&&(o._meta=r._meta),o}))}))}async sendToolListChanged(n={}){this._assertInitialized(\"sendToolListChanged\"),await this.notification({method:\"notifications/tools/list_changed\",params:n})}getHostCapabilities(){return this._hostCapabilities}getHostVersion(){return this._hostInfo}getHostContext(){return this._hostContext}get ontoolinput(){return this.getEventHandler(\"toolinput\")}set ontoolinput(n){this.setEventHandler(\"toolinput\",n)}get ontoolinputpartial(){return this.getEventHandler(\"toolinputpartial\")}set ontoolinputpartial(n){this.setEventHandler(\"toolinputpartial\",n)}get ontoolresult(){return this.getEventHandler(\"toolresult\")}set ontoolresult(n){this.setEventHandler(\"toolresult\",n)}get ontoolcancelled(){return this.getEventHandler(\"toolcancelled\")}set ontoolcancelled(n){this.setEventHandler(\"toolcancelled\",n)}get onhostcontextchanged(){return this.getEventHandler(\"hostcontextchanged\")}set onhostcontextchanged(n){this.setEventHandler(\"hostcontextchanged\",n)}get onteardown(){return this._onteardown}set onteardown(n){this.warnIfRequestHandlerReplaced(\"onteardown\",this._onteardown,n),this._onteardown=n,this.replaceRequestHandler(B$,(a,t)=>{if(!this._onteardown)throw Error(\"No onteardown handler set\");return this._onteardown(a.params,t)})}get oncalltool(){return this._oncalltool}set oncalltool(n){this.warnIfRequestHandlerReplaced(\"oncalltool\",this._oncalltool,n),this._oncalltool=n,this.replaceRequestHandler(Gm,(a,t)=>{if(!this._oncalltool)throw Error(\"No oncalltool handler set\");return this._oncalltool(a.params,t)})}get onlisttools(){return this._onlisttools}set onlisttools(n){this.warnIfRequestHandlerReplaced(\"onlisttools\",this._onlisttools,n),this._onlisttools=n,this.replaceRequestHandler(Bm,(a,t)=>{if(!this._onlisttools)throw Error(\"No onlisttools handler set\");return this._onlisttools(a.params,t)})}assertCapabilityForMethod(n){switch(n){case\"sampling/createMessage\":if(!this._hostCapabilities?.sampling)throw Error(`Host does not support sampling (required for ${n})`);break}}assertRequestHandlerCapability(n){switch(n){case\"tools/call\":case\"tools/list\":if(!this._capabilities.tools)throw Error(`Client does not support tool capability (required for ${n})`);return;case\"ping\":case\"ui/resource-teardown\":return;default:throw Error(`No handler for method ${n} registered`)}}assertNotificationCapability(n){}assertTaskCapability(n){throw Error(\"Tasks are not supported in MCP Apps\")}assertTaskHandlerCapability(n){throw Error(\"Task handlers are not supported in MCP Apps\")}async callServerTool(n,a){if(this._assertInitialized(\"callServerTool\"),typeof n==\"string\")throw Error(`callServerTool() expects an object as its first argument, but received a string (\"${n}\"). Did you mean: callServerTool({ name: \"${n}\", arguments: { ... } })?`);return await this.request({method:\"tools/call\",params:n},Rr,{onprogress:()=>{},resetTimeoutOnProgress:!0,...a})}async readServerResource(n,a){return this._assertInitialized(\"readServerResource\"),await this.request({method:\"resources/read\",params:n},Wm,a)}async listServerResources(n,a){return this._assertInitialized(\"listServerResources\"),await this.request({method:\"resources/list\",params:n},Hm,a)}async createSamplingMessage(n,a){this._assertInitialized(\"createSamplingMessage\");let t=n.tools?Qm:Ym;return await this.request({method:\"sampling/createMessage\",params:n},t,a)}sendMessage(n,a){return this._assertInitialized(\"sendMessage\"),this.request({method:\"ui/message\",params:n},J$,a)}sendLog(n){return this.notification({method:\"notifications/message\",params:n})}updateModelContext(n,a){return this._assertInitialized(\"updateModelContext\"),this.request({method:\"ui/update-model-context\",params:n},Bu,a)}openLink(n,a){return this._assertInitialized(\"openLink\"),this.request({method:\"ui/open-link\",params:n},L$,a)}downloadFile(n,a){return this._assertInitialized(\"downloadFile\"),this.request({method:\"ui/download-file\",params:n},q$,a)}requestTeardown(n={}){return this.notification({method:\"ui/notifications/request-teardown\",params:n})}requestDisplayMode(n,a){return this._assertInitialized(\"requestDisplayMode\"),this.request({method:\"ui/request-display-mode\",params:n},Y$,a)}sendSizeChanged(n){return this.notification({method:\"ui/notifications/size-changed\",params:n})}setupSizeChangedNotifications(){let n=!1,a=0,t=0,r=()=>{n||(n=!0,requestAnimationFrame(()=>{n=!1;let s=document.documentElement,u=s.style.height;s.style.height=\"max-content\";let d=Math.ceil(s.getBoundingClientRect().height);s.style.height=u;let c=Math.ceil(window.innerWidth);(c!==a||d!==t)&&(a=c,t=d,this.sendSizeChanged({width:c,height:d}))}))};r();let o=new ResizeObserver(r);return o.observe(document.documentElement),o.observe(document.body),()=>o.disconnect()}async connect(n=new Xr(window.parent,window.parent),a){if(this.transport)throw Error(\"App is already connected. Call close() before connecting again.\");this._initializedSent=!1,await super.connect(n);try{let t=await this.request({method:\"ui/initialize\",params:{appCapabilities:this._capabilities,appInfo:this._appInfo,protocolVersion:P$}},ib,a);if(t===void 0)throw Error(`Server sent invalid initialize result: ${t}`);this._hostCapabilities=t.hostCapabilities,this._hostInfo=t.hostInfo,this._hostContext=t.hostContext,await this.notification({method:\"ui/notifications/initialized\"}),this._initializedSent=!0,this.options?.autoResize&&this.setupSizeChangedNotifications()}catch(t){throw this.close(),t}}};j(jn,\"ONE_SHOT_EVENTS\",new Set([\"toolinput\",\"toolinputpartial\",\"toolresult\",\"toolcancelled\"]));var Dn=jn;var rb=`\n :root { color-scheme: light dark; }\n body { font: 13px/1.5 ui-sans-serif, system-ui, sans-serif; margin: 0; padding: 12px; }\n h1 { font-size: 14px; margin: 0 0 8px; }\n .row { display: flex; gap: 8px; align-items: center; padding: 6px 8px; border: 1px solid color-mix(in srgb, currentColor 14%, transparent); border-radius: 8px; margin-bottom: 6px; }\n .muted { opacity: 0.6; }\n .status { font-weight: 600; }\n .status.running { color: #2563eb; } .status.completed { color: #16a34a; }\n .status.failed { color: #dc2626; } .status.cancelled { color: #d97706; }\n .err { color: #dc2626; white-space: pre-wrap; }\n`;function an(e,i,n){let a=document.createElement(e);return i&&(a.className=i),n!=null&&(a.textContent=n),a}async function ab(e,i,n){let r=((await e.callServerTool({name:i,arguments:n})).content??[]).find(o=>typeof o.text==\"string\")?.text??\"{}\";try{return JSON.parse(r)}catch{return r}}async function ob(e){let i=document.getElementById(\"status\"),n=document.getElementById(\"runs\");try{let a=await ab(e,\"tidebase_list_runs\",{limit:20}),t=a&&a.runs||[];document.getElementById(\"count\").textContent=\"(\"+t.length+\")\",i.style.display=\"none\",n.innerHTML=\"\",t.length||n.appendChild(an(\"div\",\"muted\",\"No runs yet.\"));for(let r of t){let o=an(\"div\",\"row\");o.appendChild(an(\"span\",\"status \"+(r.status||\"\"),r.status||\"?\")),o.appendChild(an(\"span\",void 0,r.workflowName||r.workflow_name||r.id)),o.appendChild(an(\"span\",\"muted\",String(r.id).slice(0,18))),n.appendChild(o)}}catch(a){i.className=\"err\",i.textContent=\"Failed to load runs: \"+(a?.message||a)}}async function sb(){document.body.innerHTML=`

Tidebase Studio

Connecting\\u2026
`;let e=new Dn({name:\"tidebase-studio\",version:\"0.1.0\"},{});await e.connect(),document.getElementById(\"status\").textContent=\"Loading runs\\u2026\",await ob(e)}sb().catch(e=>{document.body.innerHTML=`
Studio crashed: ${e?.message||e}
`});})();\n" diff --git a/apps/mcp/src/index.ts b/apps/mcp/src/index.ts new file mode 100644 index 0000000..6b873f7 --- /dev/null +++ b/apps/mcp/src/index.ts @@ -0,0 +1,24 @@ +import { serve } from '@hono/node-server' +import { Hono } from 'hono' +import { cors } from 'hono/cors' +import { handleMcp } from './server.js' + +/** + * Tidebase product MCP server (standalone). Exposes the control-plane tools + + * the ui:// Studio app over the same plain-JSON-RPC subset Aura's capability + * client speaks. Reaches the Tidebase server via TIDEBASE_URL / TIDEBASE_API_KEY. + */ +const port = Number(process.env.MCP_PORT ?? 7377) +const app = new Hono() +app.use('*', cors()) +app.get('/health', (c) => c.json({ ok: true, server: 'tidebase-mcp' })) + +app.post('/', async (c) => { + const body = await c.req.json().catch(() => null) + const response = await handleMcp(body) + if (response === null) return c.body(null, 202) // notification(s) only + return c.json(response) +}) + +serve({ fetch: app.fetch, port }) +console.log(`Tidebase MCP server listening on http://localhost:${port} (target: ${process.env.TIDEBASE_URL ?? 'http://localhost:7373'})`) diff --git a/apps/mcp/src/server.ts b/apps/mcp/src/server.ts new file mode 100644 index 0000000..afbcba4 --- /dev/null +++ b/apps/mcp/src/server.ts @@ -0,0 +1,85 @@ +import { STUDIO_URI, studioResource } from './ui.js' +import { TOOL_DEFS, callTool } from './tools.js' + +/** + * Minimal MCP-over-plain-JSON-RPC handler (the same subset Aura's capability + * client speaks): initialize, ping, tools/list, tools/call, plus resources/list + * and resources/read so a host can fetch the ui:// Studio app. + */ +const MCP_PROTOCOL_VERSION = '2025-06-18' + +type JsonRpcRequest = { jsonrpc?: string; id?: string | number | null; method?: string; params?: Record } +type JsonRpcResponse = { jsonrpc: '2.0'; id: string | number | null; result?: unknown; error?: { code: number; message: string } } + +function result(id: string | number | null, value: unknown): JsonRpcResponse { + return { jsonrpc: '2.0', id, result: value } +} +function error(id: string | number | null, code: number, message: string): JsonRpcResponse { + return { jsonrpc: '2.0', id, error: { code, message } } +} +function toolText(payload: unknown, isError = false) { + return { content: [{ type: 'text', text: typeof payload === 'string' ? payload : JSON.stringify(payload) }], isError } +} + +export async function handleMcp(body: unknown): Promise { + if (Array.isArray(body)) { + const out: JsonRpcResponse[] = [] + for (const entry of body) { + const r = await handleSingle(entry as JsonRpcRequest) + if (r) out.push(r) + } + return out.length ? out : null + } + return handleSingle(body as JsonRpcRequest) +} + +async function handleSingle(req: JsonRpcRequest): Promise { + if (!req || typeof req !== 'object' || typeof req.method !== 'string') { + return error(null, -32600, 'invalid JSON-RPC request') + } + const id = req.id ?? null + const isNotification = req.id === undefined + const params = req.params ?? {} + + switch (req.method) { + case 'initialize': + return result(id, { + protocolVersion: typeof params.protocolVersion === 'string' ? params.protocolVersion : MCP_PROTOCOL_VERSION, + capabilities: { tools: { listChanged: false }, resources: { listChanged: false } }, + serverInfo: { name: 'tidebase-studio', version: '0.1.0' } + }) + case 'notifications/initialized': + case 'notifications/cancelled': + return null + case 'ping': + return result(id, {}) + case 'tools/list': + return result(id, { tools: TOOL_DEFS }) + case 'tools/call': { + const name = typeof params.name === 'string' ? params.name : '' + const args = (params.arguments ?? {}) as Record + try { + return result(id, toolText(await callTool(name, args))) + } catch (e) { + // Tool-level failure → tool result the caller can read (MCP convention). + return result(id, toolText({ error: e instanceof Error ? e.message : String(e) }, true)) + } + } + case 'resources/list': + return result(id, { + resources: [ + { uri: STUDIO_URI, name: 'Tidebase Studio', description: 'Runs, grants, approvals', mimeType: 'text/html' } + ] + }) + case 'resources/read': { + const uri = typeof params.uri === 'string' ? params.uri : '' + if (uri !== STUDIO_URI) return error(id, -32602, `unknown resource ${uri}`) + // studioResource() returns an MCP embedded-resource block { type:'resource', resource:{...} }. + const res = studioResource() as { resource: unknown } + return result(id, { contents: [res.resource] }) + } + default: + if (isNotification) return null + return error(id, -32601, `method not found: ${req.method}`) + } +} diff --git a/apps/mcp/src/tools.ts b/apps/mcp/src/tools.ts new file mode 100644 index 0000000..077f5e4 --- /dev/null +++ b/apps/mcp/src/tools.ts @@ -0,0 +1,104 @@ +/** + * Tidebase product MCP tools — a thin adapter over the Tidebase REST API. The + * server authenticates with the admin key (TIDEBASE_API_KEY); these are the + * read/operate surface that a host (e.g. Aura) renders as a control-plane app. + */ +const TIDEBASE_URL = (process.env.TIDEBASE_URL ?? 'http://localhost:7373').replace(/\/$/, '') +const TIDEBASE_API_KEY = process.env.TIDEBASE_API_KEY + +async function api(path: string, init?: { method?: string; body?: unknown }): Promise { + const headers: Record = { 'content-type': 'application/json' } + if (TIDEBASE_API_KEY) headers.authorization = `Bearer ${TIDEBASE_API_KEY}` + const res = await fetch(`${TIDEBASE_URL}${path}`, { + method: init?.method ?? 'GET', + headers, + body: init?.body === undefined ? undefined : JSON.stringify(init.body), + signal: AbortSignal.timeout(15_000) + }) + const text = await res.text() + const json = text ? safeJson(text) : null + if (!res.ok) throw new Error(`Tidebase ${path} -> ${res.status}: ${typeof json === 'object' ? JSON.stringify(json) : text}`) + return json +} + +function safeJson(text: string): unknown { + try { + return JSON.parse(text) + } catch { + return text + } +} + +export type ToolDef = { + name: string + description: string + inputSchema: Record +} + +export const TOOL_DEFS: ToolDef[] = [ + { + name: 'tidebase_list_runs', + description: 'List recent agent runs (id, workflow, status, timestamps).', + inputSchema: { type: 'object', properties: { limit: { type: 'number' } } } + }, + { + name: 'tidebase_get_run', + description: 'Get a single run with its steps, gates, grants and event timeline.', + inputSchema: { type: 'object', properties: { runId: { type: 'string' } }, required: ['runId'] } + }, + { + name: 'tidebase_audit', + description: 'Read grant.* audit receipts (authorization ledger), optionally scoped to a run.', + inputSchema: { type: 'object', properties: { runId: { type: 'string' }, limit: { type: 'number' } } } + }, + { + name: 'tidebase_approve_gate', + description: 'Resolve a pending approval gate (approve or reject) using its resolve token.', + inputSchema: { + type: 'object', + properties: { + runId: { type: 'string' }, + gateId: { type: 'string' }, + token: { type: 'string' }, + decision: { type: 'string', enum: ['approved', 'rejected'] } + }, + required: ['runId', 'gateId', 'token'] + } + } +] + +export async function callTool(name: string, args: Record): Promise { + switch (name) { + case 'tidebase_list_runs': { + const data = (await api('/runs')) as { runs?: unknown[] } | unknown[] + const runs = Array.isArray(data) ? data : (data?.runs ?? []) + const limit = typeof args.limit === 'number' ? args.limit : 20 + return { runs: (runs as unknown[]).slice(0, limit) } + } + case 'tidebase_get_run': { + if (typeof args.runId !== 'string') throw new Error('runId is required') + return api(`/runs/${encodeURIComponent(args.runId)}`) + } + case 'tidebase_audit': { + const qs = new URLSearchParams() + if (typeof args.runId === 'string') qs.set('runId', args.runId) + qs.set('limit', String(typeof args.limit === 'number' ? args.limit : 50)) + return { receipts: await api(`/audit?${qs.toString()}`) } + } + case 'tidebase_approve_gate': { + if (typeof args.runId !== 'string' || typeof args.gateId !== 'string' || typeof args.token !== 'string') { + throw new Error('runId, gateId and token are required') + } + return api(`/runs/${encodeURIComponent(args.runId)}/gates/${encodeURIComponent(args.gateId)}/resolve`, { + method: 'POST', + body: { + token: args.token, + decision: args.decision === 'rejected' ? 'rejected' : 'approved', + actor: 'tidebase-studio' + } + }) + } + default: + throw new Error(`unknown tool ${name}`) + } +} diff --git a/apps/mcp/src/ui.ts b/apps/mcp/src/ui.ts new file mode 100644 index 0000000..435c1ae --- /dev/null +++ b/apps/mcp/src/ui.ts @@ -0,0 +1,21 @@ +import { createUIResource } from '@mcp-ui/server' +import { GUEST_BUNDLE } from './guestBundle.generated.js' + +export const STUDIO_URI = 'ui://tidebase/studio' + +/** + * The Tidebase Studio ui:// resource. The HTML is a minimal shell hosting the + * bundled guest MCP-App (guest/studio-app.ts → esbuild IIFE). At runtime the + * guest speaks the MCP-Apps protocol to the host over postMessage; it does not + * fetch anything itself, so a strict sandbox CSP is fine. + */ +const SAFE_BUNDLE = GUEST_BUNDLE.replace(/<\/script>/gi, '<\\/script>') +const STUDIO_HTML = `` + +export function studioResource() { + return createUIResource({ + uri: STUDIO_URI, + content: { type: 'rawHtml', htmlString: STUDIO_HTML }, + encoding: 'text' + }) +} diff --git a/apps/mcp/tsconfig.json b/apps/mcp/tsconfig.json new file mode 100644 index 0000000..cac005c --- /dev/null +++ b/apps/mcp/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"] +} diff --git a/apps/server/src/app.ts b/apps/server/src/app.ts index 6bfc94a..21a04d8 100644 --- a/apps/server/src/app.ts +++ b/apps/server/src/app.ts @@ -1,16 +1,96 @@ -import { createHmac, randomUUID, timingSafeEqual } from 'node:crypto' +import { + createHash, + createHmac, + createPublicKey, + randomBytes, + randomUUID, + timingSafeEqual, + verify as cryptoVerify +} from 'node:crypto' import { Hono } from 'hono' +import { bodyLimit } from 'hono/body-limit' import { cors } from 'hono/cors' import { streamSSE } from 'hono/streaming' import { z } from 'zod' import { pool, tx } from './db.js' import { appendEvent, listEvents, subscribe } from './events.js' import { nextFire, parseCron } from './cron.js' +import { callMatchesAction, evaluatePolicy } from './policy.js' +import { acquireCredential, executeProxy, normalizeCredential, resolveBackend } from './providers.js' +import { encryptSecret, resolveKms } from './envelope.js' +import { consumeChallengePg, rateLimitPg } from './ratelimit.js' const leaseMs = Number(process.env.TIDEBASE_LEASE_MS ?? 60_000) const webhookSecret = process.env.TIDEBASE_WEBHOOK_SECRET const publicUrl = (process.env.TIDEBASE_PUBLIC_URL ?? `http://localhost:${process.env.PORT ?? 7373}`).replace(/\/$/, '') +// --- Agent-auth control-plane configuration --------------------------------- +// The credential broker is security-critical. Unlike the durability core (which +// stays open without a key for backward compat), broker routes MUST authenticate +// and fail closed: no API key configured => broker endpoints return 503. +const isProduction = (process.env.NODE_ENV ?? process.env.TIDEBASE_ENV) === 'production' +// dev_token identity lets an admin-key holder mint a session without the agent +// proving anything cryptographically. Allowed in dev; disabled in production +// unless explicitly opted in. +const allowDevToken = process.env.TIDEBASE_ALLOW_DEV_TOKEN === '1' || !isProduction +// How long a pending approval stays open before the reconciler expires it. +const approvalWindowMs = Number(process.env.TIDEBASE_GRANT_APPROVAL_TTL_S ?? 3600) * 1000 + +function clientIp(c: { req: { header: (name: string) => string | undefined } }): string { + const fwd = c.req.header('x-forwarded-for') + if (fwd) return fwd.split(',')[0]!.trim() + return c.req.header('x-real-ip') ?? 'local' +} + +/** Routes that broker credentials. Always authenticated; fail closed without a key. */ +function isBrokerPath(path: string) { + return ( + path === '/agents' || + path.startsWith('/agents/') || + path === '/resources' || + path.startsWith('/resources/') || + path === '/audit' || + /^\/runs\/[^/]+\/grants(?:\/|$)/.test(path) + ) +} + +/** Stateless, single-use, 60s keypair challenge: base64url(payload).hmac(payload). */ +function mintChallenge(agentId: string, secret: string) { + const exp = Date.now() + 60_000 + const nonce = randomBytes(16).toString('base64url') + const payload = Buffer.from(JSON.stringify({ agentId, exp, nonce })).toString('base64url') + const sig = createHmac('sha256', secret).update(payload).digest('base64url') + return { challenge: `${payload}.${sig}`, expiresAt: new Date(exp).toISOString() } +} + +function verifyChallenge(agentId: string, challenge: string, secret: string): boolean { + const dot = challenge.indexOf('.') + if (dot <= 0) return false + const payload = challenge.slice(0, dot) + const sig = challenge.slice(dot + 1) + const expected = createHmac('sha256', secret).update(payload).digest('base64url') + if (!timingSafeEqualString(sig, expected)) return false + let data: { agentId?: unknown; exp?: unknown } + try { + data = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8')) + } catch { + return false + } + return data.agentId === agentId && typeof data.exp === 'number' && data.exp > Date.now() +} + +/** Verify an Ed25519 signature over the challenge with the agent's registered key. */ +function verifyKeypairProof(publicKeyPem: string, challenge: string, signatureB64: string): boolean { + try { + const key = createPublicKey(publicKeyPem) + const sig = Buffer.from(signatureB64, 'base64') + if (sig.length === 0) return false + return cryptoVerify(null, Buffer.from(challenge), key, sig) + } catch { + return false + } +} + function timingSafeEqualString(a: string, b: string) { const aBuf = Buffer.from(a) const bBuf = Buffer.from(b) @@ -126,6 +206,53 @@ const gateResolveSchema = z.object({ payload: z.unknown().optional() }) +const agentRegisterSchema = z.object({ + name: z.string().min(1), + principal: z.string().min(1).optional(), + identityKind: z.enum(['dev_token', 'keypair', 'cloud_key', 'spire']).optional(), + publicKey: z.string().optional(), + metadata: jsonRecord.optional() +}) + +const agentProveSchema = z.object({ + token: z.string().optional(), + signature: z.string().optional(), + challenge: z.string().optional() +}) + +const resourceConnectSchema = z.object({ + name: z.string().min(1), + provider: z.enum(['nango', 'openbao', 'static']).optional(), + principal: z.string().min(1).optional(), + scopesAllowed: z.array(z.string().min(1)).optional(), + // Upstream API base the proxy is pinned to (SSRF defense). Required to proxy. + baseUrl: z.string().url().optional(), + // When set, proxied paths must start with this prefix (narrows grant scope). + allowedPathPrefix: z.string().min(1).optional(), + // For provider 'static': the credential to vault (envelope-encrypted at rest). + // Either a bearer-token string or {scheme,...}. Never logged or returned. + secret: z.union([z.string().min(1), jsonRecord]).optional(), + // For nango/openbao: opaque pointer to the held secret (connectionId / vault path). + connectionRef: z.string().min(1).optional(), + metadata: jsonRecord.optional() +}) + +const grantRequestSchema = z.object({ + resource: z.string().min(1), + action: z.string().min(1), + reason: z.string().optional(), + scopes: z.array(z.string().min(1)).optional(), + mode: z.enum(['proxy', 'mint']).optional(), + ttlSeconds: z.number().int().positive().max(3600).optional(), + maxUses: z.number().int().positive().max(100).optional() +}) + +const grantUseSchema = z.object({ + method: z.string().min(1), + path: z.string().min(1), + body: z.unknown().optional() +}) + const cancelRunSchema = z.object({ reason: z.string().optional(), actor: z.string().optional() @@ -177,8 +304,15 @@ export type CreateAppOptions = { export function createApp(options: CreateAppOptions = {}) { const apiKey = options.apiKey ?? process.env.TIDEBASE_API_KEY + // HMAC key for stateless keypair challenges. Follows the resolved API key (the + // broker is 503 without an API key anyway, so this is set whenever reachable). + const challengeSecret = process.env.TIDEBASE_CHALLENGE_SECRET ?? apiKey ?? '' + const proveRate = Number(process.env.TIDEBASE_PROVE_RATE ?? 50) // per ip per minute + const grantRate = Number(process.env.TIDEBASE_GRANT_RATE ?? 300) const app = new Hono() - app.use('*', cors()) + // CORS: agents are server-side, so the broker does not need permissive CORS. + // Default stays '*' for the durability core/studio; override for production. + app.use('*', cors({ origin: process.env.TIDEBASE_CORS_ORIGIN ?? '*' })) app.onError((error, c) => { if (error instanceof z.ZodError) { return c.json({ error: 'invalid request body', issues: error.issues }, 400) @@ -189,21 +323,257 @@ export function createApp(options: CreateAppOptions = {}) { app.get('/health', (c) => c.json({ ok: true })) - // Shared-token auth: opt-in by setting TIDEBASE_API_KEY. /health stays open - // for probes. The SSE endpoint also accepts ?token= because EventSource - // cannot set request headers. - if (apiKey) { - app.use('*', async (c, next) => { - const header = c.req.header('authorization') - const bearer = header?.startsWith('Bearer ') ? header.slice('Bearer '.length) : null - const isEventStream = /^\/runs\/[^/]+\/events$/.test(c.req.path) - const candidate = bearer ?? (isEventStream ? c.req.query('token') ?? null : null) - if (!candidate || !timingSafeEqualString(candidate, apiKey)) { - return c.json({ error: 'unauthorized' }, 401) + // Auth middleware (always mounted). /health stays open for probes. The SSE + // endpoint also accepts ?token= because EventSource cannot set request headers. + // + // Two route classes: + // - Durability core (runs/queues/...): opt-in shared-token auth via TIDEBASE_API_KEY, + // open when no key (backward compat). + // - Credential broker (isBrokerPath): MUST authenticate and fails CLOSED — without + // an API key there is no way to authenticate admin operations, so we refuse to + // broker credentials at all rather than serve the endpoints unauthenticated. + app.use('*', async (c, next) => { + const path = c.req.path + if (path === '/health') return next() + const broker = isBrokerPath(path) + + if (!apiKey) { + if (broker) { + return c.json( + { error: 'credential broker disabled: set TIDEBASE_API_KEY to enable agent-auth endpoints', code: 'broker_disabled' }, + 503 + ) + } + return next() + } + + const header = c.req.header('authorization') + const bearer = header?.startsWith('Bearer ') ? header.slice('Bearer '.length) : null + const isEventStream = /^\/runs\/[^/]+\/events$/.test(path) + const candidate = bearer ?? (isEventStream ? c.req.query('token') ?? null : null) + const sharedTokenOk = candidate ? timingSafeEqualString(candidate, apiKey) : false + const agentSessionOk = + !sharedTokenOk && candidate ? await isValidAgentSessionForPath(candidate, path) : false + if (!candidate || (!sharedTokenOk && !agentSessionOk)) { + return c.json({ error: 'unauthorized' }, 401) + } + await next() + }) + + // Abuse resistance for the credential broker: rate-limit proof + grant mutations + // and cap broker request bodies (measured, not header-trusted). Backstop only — + // production should also front this with a gateway/Redis limiter (the in-process + // map is per-replica). + const brokerBodyLimit = bodyLimit({ + maxSize: 64 * 1024, + onError: (c) => c.json({ error: 'request body too large', code: 'body_too_large' }, 413) + }) + app.use('*', async (c, next) => { + const path = c.req.path + const method = c.req.method + if (method === 'POST' && /^\/agents\/[^/]+\/(prove|challenge)$/.test(path)) { + if (!(await rateLimitPg(`prove:${clientIp(c)}`, proveRate, 60_000))) { + return c.json({ error: 'too many proof attempts; slow down', code: 'rate_limited' }, 429) + } + } else if (method === 'POST' && /^\/runs\/[^/]+\/grants(?:\/|$)/.test(path)) { + if (!(await rateLimitPg(`grant:${clientIp(c)}`, grantRate, 60_000))) { + return c.json({ error: 'too many grant operations; slow down', code: 'rate_limited' }, 429) + } + } + if (method === 'POST' && isBrokerPath(path)) { + return brokerBodyLimit(c, next) + } + await next() + }) + + app.post('/agents', async (c) => { + const body = agentRegisterSchema.parse(await c.req.json()) + const result = await pool.query( + `insert into agents (name, principal, identity_kind, public_key, metadata_json) + values ($1, $2, $3, $4, $5) + on conflict (principal, name) + do update set + identity_kind = excluded.identity_kind, + public_key = excluded.public_key, + metadata_json = excluded.metadata_json, + status = 'active', + updated_at = now() + returning *`, + [ + body.name, + body.principal ?? null, + body.identityKind ?? 'dev_token', + body.publicKey ?? null, + json(body.metadata ?? {}) + ] + ) + return c.json(mapAgent(result.rows[0])) + }) + + // Issue a single-use challenge for keypair/cloud_key agents to sign. + app.post('/agents/:agentId/challenge', async (c) => { + const agentId = c.req.param('agentId') + const agent = await pool.query('select id, status from agents where id = $1', [agentId]) + const row = agent.rows[0] + if (!row) return c.json({ error: 'agent not found' }, 404) + if (row.status !== 'active') return c.json({ error: 'agent is not active' }, 403) + if (!challengeSecret) return c.json({ error: 'challenge issuance not configured' }, 503) + return c.json(mintChallenge(agentId, challengeSecret)) + }) + + app.post('/agents/:agentId/prove', async (c) => { + const agentId = c.req.param('agentId') + const body = agentProveSchema.parse(await c.req.json().catch(() => ({}))) + const agent = await pool.query('select * from agents where id = $1', [agentId]) + const row = agent.rows[0] + if (!row) return c.json({ error: 'agent not found' }, 404) + if (row.status !== 'active') return c.json({ error: 'agent is not active' }, 403) + + if (row.identity_kind === 'dev_token') { + // Fail closed in production: dev_token has no cryptographic proof. + if (!allowDevToken) { + return c.json( + { error: 'dev_token identity is disabled in production; register a keypair identity', code: 'dev_token_disabled' }, + 403 + ) } - await next() + // When a shared dev token is configured it MUST match (was previously skipped when unset). + const expected = process.env.TIDEBASE_DEV_AGENT_TOKEN + if (expected !== undefined && expected !== '') { + if (!body.token || !timingSafeEqualString(body.token, expected)) { + return c.json({ error: 'invalid agent proof' }, 401) + } + } + } else if (row.identity_kind === 'keypair' || row.identity_kind === 'cloud_key') { + if (!row.public_key) return c.json({ error: 'agent has no registered public key' }, 400) + if (!body.challenge || !body.signature) { + return c.json({ error: 'challenge and signature required for keypair proof' }, 400) + } + if (!verifyChallenge(agentId, body.challenge, challengeSecret)) { + return c.json({ error: 'invalid or expired challenge' }, 401) + } + if (!(await consumeChallengePg(hashToken(body.challenge), new Date(Date.now() + 90_000)))) { + return c.json({ error: 'challenge already used' }, 401) + } + if (!verifyKeypairProof(row.public_key, body.challenge, body.signature)) { + return c.json({ error: 'invalid signature' }, 401) + } + } else { + return c.json({ error: `${row.identity_kind} proof provider is not configured in this build` }, 501) + } + + const sessionToken = `tdb_ags_${randomBytes(32).toString('base64url')}` + const expiresAt = new Date(Date.now() + 15 * 60_000) + await pool.query( + `insert into agent_sessions (agent_id, token_hash, expires_at) + values ($1, $2, $3)`, + [agentId, hashToken(sessionToken), expiresAt] + ) + return c.json({ agentId, sessionToken, expiresAt: expiresAt.toISOString() }) + }) + + app.get('/agents/:agentId', async (c) => { + const result = await pool.query('select * from agents where id = $1', [c.req.param('agentId')]) + if (!result.rows[0]) return c.json({ error: 'agent not found' }, 404) + return c.json(mapAgent(result.rows[0])) + }) + + app.post('/resources', async (c) => { + const body = resourceConnectSchema.parse(await c.req.json()) + const provider = body.provider ?? 'nango' + // connection_ref: caller-supplied opaque pointer for external backends, else a + // dev placeholder. Vault (static) keeps its material in resource_secrets. + const connectionRef = body.connectionRef ?? `dev:${provider}:${body.principal ?? 'default'}:${body.name}` + + // Vault path: a directly-supplied secret must be envelope-encrypted before it + // touches the database. Fail closed if custody (KMS) is not configured — never + // store plaintext. + let encrypted: { material: unknown; keyId: string } | null = null + if (body.secret !== undefined) { + const credential = normalizeCredential(body.secret) + if (!credential) return c.json({ error: 'unrecognized secret format', code: 'bad_secret' }, 400) + const kms = resolveKms() + if (!kms) return c.json({ error: 'credential custody not configured: set TIDEBASE_MASTER_KEY', code: 'custody_unavailable' }, 503) + const material = encryptSecret(JSON.stringify(credential), kms) + encrypted = { material, keyId: kms.keyId } + } + + const result = await tx(async (client) => { + const inserted = await client.query( + `insert into resources (principal, name, provider, kind, connection_ref, base_url, allowed_path_prefix, scopes_allowed, metadata_json) + values ($1, $2, $3, $4, $5, $6, $7, $8, $9) + on conflict (principal, name) + do update set + provider = excluded.provider, + kind = excluded.kind, + connection_ref = excluded.connection_ref, + base_url = excluded.base_url, + allowed_path_prefix = excluded.allowed_path_prefix, + scopes_allowed = excluded.scopes_allowed, + metadata_json = excluded.metadata_json, + status = 'connected', + updated_at = now() + returning *`, + [ + body.principal ?? null, + body.name, + provider, + provider === 'openbao' ? 'dynamic' : provider === 'static' ? 'api_key' : 'oauth', + connectionRef, + body.baseUrl ?? null, + body.allowedPathPrefix ?? null, + json(body.scopesAllowed ?? []), + json(body.metadata ?? {}) + ] + ) + if (encrypted) { + await client.query( + `insert into resource_secrets (resource_id, material_json, key_id) + values ($1, $2, $3) + on conflict (resource_id) + do update set material_json = excluded.material_json, key_id = excluded.key_id, updated_at = now()`, + [inserted.rows[0].id, json(encrypted.material), encrypted.keyId] + ) + } + return inserted.rows[0] }) - } + return c.json(mapResource(result)) + }) + + app.post('/resources/:resourceId/revoke', async (c) => { + const resourceId = c.req.param('resourceId') + const result = await tx(async (client) => { + const revoked = await client.query( + `update resources set status = 'revoked', updated_at = now() where id = $1 returning id`, + [resourceId] + ) + if (!revoked.rows[0]) return null + // Cascade: any live grant backed by this resource is revoked immediately, + // so in-flight agents lose access the moment the connection is pulled. + const grants = await client.query( + `update grants set status = 'revoked', revoked_at = now(), updated_at = now() + where resource_id = $1 and status in ('pending','approved','active') + returning id, run_id, agent_id, resource, action, mode, gate_id, expires_at`, + [resourceId] + ) + for (const g of grants.rows) { + await appendEvent(client, g.run_id, 'grant.revoked', { + grantId: g.id, + resource: g.resource, + action: g.action, + agentId: g.agent_id ?? null, + mode: g.mode, + status: 'revoked', + gateId: g.gate_id ?? null, + expiresAt: g.expires_at?.toISOString?.() ?? null, + cause: 'resource_revoked' + }) + } + return { id: revoked.rows[0].id, cascaded: grants.rows.length } + }) + if (!result) return c.json({ error: 'resource not found' }, 404) + return c.json({ revoked: result.id, grantsRevoked: result.cascaded }) + }) app.post('/runs/:workflowName', async (c) => { const workflowName = c.req.param('workflowName') @@ -579,6 +949,353 @@ export function createApp(options: CreateAppOptions = {}) { }) }) + app.post('/runs/:runId/grants', async (c) => { + const runId = c.req.param('runId') + const body = grantRequestSchema.parse(await c.req.json()) + const session = await agentSessionFromRequest(c.req.header('authorization')) + if (!session) { + return c.json( + { error: 'grant operations require a proved agent session token, not the admin key', code: 'session_required' }, + 401 + ) + } + const resourceName = body.resource.split(':')[0] + const sessionPrincipal = session.principal ?? null + const result = await tx(async (client) => { + // Lock the run row so the trust-on-first-use principal claim is race-free. + const run = await client.query( + 'select id, status, grant_principal from runs where id = $1 for update', + [runId] + ) + if (!run.rows[0]) return { kind: 'missing_run' as const } + if (run.rows[0].status === 'cancelled') return { kind: 'cancelled' as const } + + // Tenancy: a run is owned by the first principal to broker on it; others are denied. + const owner = run.rows[0].grant_principal as string | null + if (owner === null) { + await client.query('update runs set grant_principal = $1 where id = $2', [sessionPrincipal, runId]) + } else if (owner !== sessionPrincipal) { + return { kind: 'cross_tenant' as const } + } + + // Resource must belong to exactly this principal (no implicit global fallback). + const resource = await client.query( + `select * from resources + where name = $1 + and status = 'connected' + and principal is not distinct from $2 + limit 1`, + [resourceName, sessionPrincipal] + ) + if (!resource.rows[0]) return { kind: 'missing_resource' as const } + const allowed = Array.isArray(resource.rows[0].scopes_allowed) + ? resource.rows[0].scopes_allowed.filter((scope: unknown): scope is string => typeof scope === 'string') + : [] + const requestedScopes = body.scopes ?? [] + const deniedScopes = allowed.length === 0 ? [] : requestedScopes.filter((scope) => !allowed.includes(scope)) + if (deniedScopes.length > 0) return { kind: 'scope_denied' as const, deniedScopes } + + const decision = evaluatePolicy({ + action: body.action, + resource: body.resource, + requestedScopes, + mode: body.mode ?? 'proxy' + }) + if (decision.effect === 'deny') { + return { kind: 'policy_denied' as const, reason: decision.reason } + } + const requiresApproval = decision.requiresApproval + const mode = decision.mode + // Don't hand out a mint token the backend can't actually back. If the + // provider can't mint a standalone short-lived credential, refuse rather + // than issue a token that maps to nothing (proxy mode is always available). + if (mode === 'mint' && !resolveBackend(resource.rows[0].provider as string).canMint) { + return { kind: 'mint_unavailable' as const } + } + let gateId: string | null = null + if (requiresApproval) { + const insertedGate = await client.query( + `insert into gates (run_id, name, prompt, data_json, capability_json, channels_json) + values ($1, $2, $3, $4, $5, '[]'::jsonb) + returning *`, + [ + runId, + `grant:${body.action}:${randomUUID()}`, + `Approve ${body.action} on ${body.resource}`, + json({ reason: body.reason ?? null }), + json({ name: body.resource, scopes: requestedScopes, reason: body.reason ?? null }) + ] + ) + gateId = insertedGate.rows[0].id + } + + const token = mode === 'mint' && !requiresApproval ? `tdb_grant_${randomBytes(32).toString('base64url')}` : null + const status = requiresApproval ? 'pending' : 'active' + // Pending approvals get a finite approval window so stale ones time out + // (the reconciler sweeps them to 'expired'). Active grants get their TTL. + const expiresAt = requiresApproval + ? new Date(Date.now() + approvalWindowMs) + : new Date(Date.now() + (body.ttlSeconds ?? 120) * 1000) + const grantResult = await client.query( + `insert into grants + (run_id, agent_id, resource_id, resource, action, scopes, reason, mode, status, + gate_id, token_hash, max_uses, ttl_seconds, policy_json, issued_at, expires_at) + values + ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16) + returning *`, + [ + runId, + session?.agentId ?? null, + resource.rows[0].id, + body.resource, + body.action, + json(requestedScopes), + body.reason ?? null, + mode, + status, + gateId, + token ? hashToken(token) : null, + body.maxUses ?? 1, + body.ttlSeconds ?? 120, + json({ + provider: 'dev-reference', + effect: decision.effect, + matchedRule: decision.matchedRule, + requiresApproval, + forcedProxy: decision.forcedProxy, + requestedMode: body.mode ?? 'proxy', + scopesCeiling: allowed + }), + requiresApproval ? null : new Date(), + expiresAt + ] + ) + const grant = mapGrant(grantResult.rows[0], token) + await appendEvent(client, runId, 'grant.requested', grantReceipt(grant, session?.agentId ?? null)) + if (requiresApproval && gateId) { + await appendEvent(client, runId, 'gate.created', { + gate: publicGate(mapGate((await client.query('select * from gates where id = $1', [gateId])).rows[0])) + }) + } else { + await appendEvent(client, runId, mode === 'mint' ? 'grant.minted' : 'grant.approved', grantReceipt(grant, session?.agentId ?? null)) + } + return { kind: 'ok' as const, grant } + }) + if (result.kind === 'missing_run') return c.json({ error: 'run not found' }, 404) + if (result.kind === 'cancelled') return c.json({ error: 'run is cancelled', code: 'run_cancelled' }, 409) + if (result.kind === 'cross_tenant') return c.json({ error: 'run is owned by a different principal', code: 'cross_tenant' }, 403) + if (result.kind === 'policy_denied') return c.json({ error: 'action denied by policy', code: 'policy_denied', reason: result.reason }, 403) + if (result.kind === 'mint_unavailable') return c.json({ error: 'mint mode requires a credential backend that can mint; use proxy mode', code: 'mint_unavailable' }, 400) + if (result.kind === 'missing_resource') return c.json({ error: 'resource not connected' }, 404) + if (result.kind === 'scope_denied') return c.json({ error: 'requested scopes exceed resource ceiling', deniedScopes: result.deniedScopes }, 403) + return c.json(result.grant) + }) + + app.post('/runs/:runId/grants/:grantId/use', async (c) => { + const runId = c.req.param('runId') + const grantId = c.req.param('grantId') + const body = grantUseSchema.parse(await c.req.json()) + const session = await agentSessionFromRequest(c.req.header('authorization')) + if (!session) { + return c.json( + { error: 'grant operations require a proved agent session token, not the admin key', code: 'session_required' }, + 401 + ) + } + // Phase 1 (tx): lock + validate + authorize, then atomically RESERVE the use. + // `for update of g` serializes concurrent uses; the network call happens AFTER + // commit so the row lock / pool connection isn't held across the upstream call. + const reservation = await tx(async (client) => { + const locked = await client.query( + `select g.*, r.provider as r_provider, r.connection_ref as r_connection_ref, + r.base_url as r_base_url, r.allowed_path_prefix as r_allowed_path_prefix, r.id as r_id + from grants g + left join resources r on r.id = g.resource_id + where g.id = $1 and g.run_id = $2 + for update of g`, + [grantId, runId] + ) + const row = locked.rows[0] + if (!row) return { kind: 'gone' as const } + const usable = + row.status === 'active' && + (row.expires_at === null || new Date(row.expires_at).getTime() > Date.now()) && + row.used_count < row.max_uses && + row.agent_id === session.agentId + if (!usable) return { kind: 'gone' as const } + + // Authz on the proxied call: a grant for `*.read` cannot be replayed as DELETE. + const callCheck = callMatchesAction(row.action as string, body.method) + if (!callCheck.ok) return { kind: 'call_denied' as const, reason: callCheck.reason ?? 'call not permitted by grant' } + + // Fail closed WITHOUT consuming a use if the backend itself is unavailable + // (pure capability check, no I/O). Runtime acquire/proxy failures after this + // point DO consume the use (at-most-once: a real attempt was authorized). + const backend = resolveBackend((row.r_provider as string) ?? 'static') + if (backend.kind === 'failclosed') { + return { kind: 'backend' as const, code: 'backend_not_configured', message: backend.failReason ?? 'backend not configured', provider: backend.name } + } + + const update = await client.query( + `update grants + set used_count = used_count + 1, + status = case when used_count + 1 >= max_uses then 'used' else status end, + updated_at = now() + where id = $1 and run_id = $2 and status = 'active' and used_count < max_uses + returning *`, + [grantId, runId] + ) + if (!update.rows[0]) return { kind: 'gone' as const } + const grant = mapGrant(update.rows[0]) + await appendEvent(client, runId, 'grant.used', { + // Records WHAT was authorized — never the request body, response, or secret. + ...grantReceipt(grant, session.agentId), + call: { method: body.method, path: body.path }, + simulated: backend.simulated + }) + return { + kind: 'reserved' as const, + grant, + backend, + provider: (row.r_provider as string) ?? 'static', + connectionRef: (row.r_connection_ref as string) ?? '', + baseUrl: (row.r_base_url as string | null) ?? null, + allowedPathPrefix: (row.r_allowed_path_prefix as string | null) ?? null, + resourceId: row.r_id as string, + action: row.action as string, + scopes: Array.isArray(row.scopes) ? (row.scopes as string[]) : [] + } + }) + + if (reservation.kind === 'call_denied') return c.json({ error: reservation.reason, code: 'call_denied' }, 403) + if (reservation.kind === 'backend') { + return c.json({ error: reservation.message, code: reservation.code, provider: reservation.provider }, 502) + } + if (reservation.kind !== 'reserved') { + return c.json({ error: 'grant not active, expired, revoked, exhausted, or not owned by this agent' }, 409) + } + + // Phase 2 (no tx): acquire the live credential and perform the real proxied call. + const acquired = await acquireCredential(reservation.backend, { + kms: resolveKms(), + connectionRef: reservation.connectionRef, + resource: reservation.grant.resource, + scopes: reservation.scopes, + env: process.env, + loadSecretMaterial: async () => { + const r = await pool.query('select material_json, key_id from resource_secrets where resource_id = $1', [reservation.resourceId]) + return r.rows[0] ? { material: r.rows[0].material_json, keyId: r.rows[0].key_id } : null + } + }) + if (!acquired.ok) { + await emitUseFailed(runId, reservation.grant, session.agentId, acquired.code) + return c.json({ error: acquired.message, code: acquired.code, provider: reservation.backend.name }, 502) + } + + const outcome = await executeProxy({ + backend: reservation.backend, + baseUrl: reservation.baseUrl, + allowedPathPrefix: reservation.allowedPathPrefix, + call: { method: body.method, path: body.path, body: body.body }, + credential: acquired.credential, + env: process.env + }) + if (!outcome.ok) { + await emitUseFailed(runId, reservation.grant, session.agentId, outcome.code) + return c.json({ error: outcome.message, code: outcome.code, provider: outcome.provider }, outcome.code === 'ssrf_blocked' ? 403 : 502) + } + + return c.json({ + grant: reservation.grant, + response: { + ok: true, + mode: reservation.grant.mode, + proxied: true, + simulated: outcome.simulated, + provider: outcome.provider, + status: outcome.status, + body: outcome.body, + method: body.method, + path: body.path + } + }) + }) + + app.post('/runs/:runId/grants/:grantId/revoke', async (c) => { + const runId = c.req.param('runId') + const grantId = c.req.param('grantId') + const session = await agentSessionFromRequest(c.req.header('authorization')) + if (!session) { + return c.json( + { error: 'grant operations require a proved agent session token, not the admin key', code: 'session_required' }, + 401 + ) + } + const result = await tx(async (client) => { + const update = await client.query( + `update grants + set status = 'revoked', revoked_at = now(), updated_at = now() + where id = $1 and run_id = $2 and status not in ('revoked','used','expired') + returning *`, + [grantId, runId] + ) + if (!update.rows[0]) return null + const grant = mapGrant(update.rows[0]) + await appendEvent(client, runId, 'grant.revoked', grantReceipt(grant, session?.agentId ?? null)) + return grant + }) + if (!result) return c.json({ error: 'grant not found or already terminal' }, 404) + return c.json({ grant: result }) + }) + + app.get('/audit', async (c) => { + const rawLimit = Number(c.req.query('limit') ?? 100) + const limit = Number.isFinite(rawLimit) ? Math.min(200, Math.max(1, Math.trunc(rawLimit))) : 100 + const runId = c.req.query('runId') + const agentId = c.req.query('agentId') + const resource = c.req.query('resource') + const types = (c.req.query('types') ?? '') + .split(',') + .map((type) => type.trim()) + .filter(Boolean) + const clauses = [`type like 'grant.%'`] + const params: unknown[] = [] + // Tenant scoping: an agent session sees only receipts for runs owned by its + // principal; the admin key sees everything. Without this, any session could + // read every tenant's grant history. + const session = await agentSessionFromRequest(c.req.header('authorization')) + if (session) { + params.push(session.principal ?? null) + clauses.push(`run_id in (select id from runs where grant_principal is not distinct from $${params.length})`) + } + if (runId) { + params.push(runId) + clauses.push(`run_id = $${params.length}`) + } + if (agentId) { + params.push(agentId) + clauses.push(`payload_json->>'agentId' = $${params.length}`) + } + if (resource) { + params.push(resource) + clauses.push(`payload_json->>'resource' = $${params.length}`) + } + if (types.length > 0) { + params.push(types) + clauses.push(`type = any($${params.length})`) + } + params.push(limit) + const result = await pool.query( + `select id, run_id, seq, type, payload_json, created_at + from events + where ${clauses.join(' and ')} + order by created_at desc, id desc + limit $${params.length}`, + params + ) + return c.json(result.rows.map(mapAuditEntry)) + }) + app.post('/runs/:runId/children', async (c) => { const parentRunId = c.req.param('runId') const body = createChildRunSchema.parse(await c.req.json()) @@ -941,6 +1658,25 @@ export function createApp(options: CreateAppOptions = {}) { await appendEvent(client, runId, 'gate.resolved', { gate: publicGate(resolved) }) + const grants = await client.query( + `update grants + set status = case when $3 = 'approved' then 'active' else 'denied' end, + issued_at = case when $3 = 'approved' then now() else issued_at end, + expires_at = case when $3 = 'approved' then now() + (ttl_seconds || ' seconds')::interval else expires_at end, + updated_at = now() + where run_id = $1 and gate_id = $2 and status = 'pending' + returning *`, + [runId, gateId, body.decision] + ) + for (const grantRow of grants.rows) { + const grant = mapGrant(grantRow) + await appendEvent( + client, + runId, + body.decision === 'approved' ? 'grant.approved' : 'grant.denied', + grantReceipt(grant, grantRow.agent_id ?? null) + ) + } const deliveries = await queueChannelDeliveries( client, runId, @@ -1866,6 +2602,126 @@ function mapGate(row: Record) { } } +function mapAgent(row: Record) { + return { + agentId: row.id as string, + name: row.name as string, + principal: (row.principal as string | null) ?? null, + identityKind: row.identity_kind as string, + status: row.status as string + } +} + +function mapResource(row: Record) { + return { + resourceId: row.id as string, + name: row.name as string, + provider: row.provider as string, + status: row.status as string + } +} + +function mapGrant(row: Record, token?: string | null) { + return { + grantId: row.id as string, + runId: row.run_id as string, + resource: row.resource as string, + action: row.action as string, + status: row.status as string, + mode: row.mode as 'proxy' | 'mint', + ...(token ? { token } : {}), + expiresAt: row.expires_at?.toISOString?.() ?? null, + gateId: (row.gate_id as string | null) ?? null + } +} + +function grantReceipt( + grant: ReturnType, + agentId: string | null +) { + return { + grantId: grant.grantId, + resource: grant.resource, + action: grant.action, + agentId, + mode: grant.mode, + status: grant.status, + gateId: grant.gateId ?? null, + expiresAt: grant.expiresAt + } +} + +async function emitUseFailed( + runId: string, + grant: ReturnType, + agentId: string, + code: string +) { + // Best-effort audit: the use was reserved (at-most-once) but the proxy failed. + try { + await tx(async (client) => { + await appendEvent(client, runId, 'grant.use_failed', { + ...grantReceipt(grant, agentId), + failure: code + }) + }) + } catch { + // never throw from the failure path + } +} + +function mapAuditEntry(row: Record) { + const payload = isRecord(row.payload_json) ? row.payload_json : {} + return { + seq: Number(row.seq), + type: row.type as string, + grantId: typeof payload.grantId === 'string' ? payload.grantId : '', + resource: typeof payload.resource === 'string' ? payload.resource : '', + action: typeof payload.action === 'string' ? payload.action : '', + agentId: typeof payload.agentId === 'string' ? payload.agentId : null, + at: row.created_at.toISOString() + } +} + +function hashToken(token: string) { + return createHash('sha256').update(token).digest('hex') +} + +async function agentSessionFromRequest(authorization: string | undefined) { + const bearer = authorization?.startsWith('Bearer ') ? authorization.slice('Bearer '.length) : null + if (!bearer) return null + const result = await pool.query( + `select s.agent_id, a.principal + from agent_sessions s + join agents a on a.id = s.agent_id + where s.token_hash = $1 + and s.revoked_at is null + and s.expires_at > now() + and a.status = 'active'`, + [hashToken(bearer)] + ) + const row = result.rows[0] + return row ? { agentId: row.agent_id as string, principal: (row.principal as string | null) ?? null } : null +} + +async function isValidAgentSessionForPath(token: string, path: string) { + const allowed = + /^\/runs\/[^/]+\/grants(?:\/|$)/.test(path) || + path === '/audit' + if (!allowed) return false + const result = await pool.query( + `select 1 + from agent_sessions s + join agents a on a.id = s.agent_id + where s.token_hash = $1 + and s.revoked_at is null + and s.expires_at > now() + and a.status = 'active'`, + [hashToken(token)] + ) + return Boolean(result.rows[0]) +} + function mapState(row: Record) { return { runId: row.run_id as string, diff --git a/apps/server/src/envelope.ts b/apps/server/src/envelope.ts new file mode 100644 index 0000000..b6e1ffb --- /dev/null +++ b/apps/server/src/envelope.ts @@ -0,0 +1,126 @@ +/** + * Envelope encryption for credential material at rest. + * + * Each secret is encrypted with a fresh random 256-bit DEK (data encryption key) + * using AES-256-GCM. The DEK itself is wrapped (encrypted) by a KEK (key encryption + * key) held by a KMS provider. Only the ciphertext + the wrapped DEK are persisted; + * the plaintext KEK never touches the database and, for cloud KMS, never leaves the + * KMS at all. + * + * The KmsProvider seam lets LocalKms (KEK from an env master key, for self-host) + * be swapped for AWS/GCP/Vault-transit KMS without touching call sites. + */ +import { createCipheriv, createDecipheriv, randomBytes, timingSafeEqual } from 'node:crypto' + +export type EncryptedMaterial = { + alg: 'AES-256-GCM' + keyId: string + iv: string + tag: string + ciphertext: string + wrappedDek: string + dekIv: string + dekTag: string +} + +export interface KmsProvider { + /** Identifies the KEK so the right key is used to unwrap later (key rotation). */ + readonly keyId: string + wrapDek(dek: Buffer): { wrapped: Buffer; iv: Buffer; tag: Buffer } + unwrapDek(wrapped: Buffer, iv: Buffer, tag: Buffer): Buffer +} + +/** Self-host KMS: KEK supplied as a 32-byte master key (base64) via env. */ +export class LocalKms implements KmsProvider { + readonly keyId: string + constructor( + private readonly kek: Buffer, + label = 'v1' + ) { + if (kek.length !== 32) throw new Error('LocalKms master key must be 32 bytes') + this.keyId = `local:${label}` + } + wrapDek(dek: Buffer) { + const iv = randomBytes(12) + const cipher = createCipheriv('aes-256-gcm', this.kek, iv) + const wrapped = Buffer.concat([cipher.update(dek), cipher.final()]) + return { wrapped, iv, tag: cipher.getAuthTag() } + } + unwrapDek(wrapped: Buffer, iv: Buffer, tag: Buffer) { + const decipher = createDecipheriv('aes-256-gcm', this.kek, iv) + decipher.setAuthTag(tag) + return Buffer.concat([decipher.update(wrapped), decipher.final()]) + } +} + +/** + * Resolve the configured KMS. Returns null when no key material is configured, + * which the caller MUST treat as "custody unavailable" and fail closed — never + * fall back to storing plaintext. + */ +export function resolveKms(env: NodeJS.ProcessEnv = process.env): KmsProvider | null { + const kmsSpec = env.TIDEBASE_KMS + if (kmsSpec && kmsSpec !== 'local') { + // Seam for aws: / gcp: / vault:. Not implemented here: + // throw so a misconfigured prod fails loudly rather than silently degrading. + throw new Error(`KMS provider '${kmsSpec}' is not implemented in this build`) + } + const master = env.TIDEBASE_MASTER_KEY + if (!master) return null + const kek = Buffer.from(master, 'base64') + if (kek.length !== 32) { + throw new Error('TIDEBASE_MASTER_KEY must be 32 bytes, base64-encoded (generate: openssl rand -base64 32)') + } + return new LocalKms(kek, env.TIDEBASE_MASTER_KEY_LABEL ?? 'v1') +} + +export function encryptSecret(plaintext: string, kms: KmsProvider): EncryptedMaterial { + const dek = randomBytes(32) + try { + const iv = randomBytes(12) + const cipher = createCipheriv('aes-256-gcm', dek, iv) + const ciphertext = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]) + const tag = cipher.getAuthTag() + const { wrapped, iv: dekIv, tag: dekTag } = kms.wrapDek(dek) + return { + alg: 'AES-256-GCM', + keyId: kms.keyId, + iv: iv.toString('base64'), + tag: tag.toString('base64'), + ciphertext: ciphertext.toString('base64'), + wrappedDek: wrapped.toString('base64'), + dekIv: dekIv.toString('base64'), + dekTag: dekTag.toString('base64') + } + } finally { + dek.fill(0) // best-effort zeroing of the plaintext DEK + } +} + +export function decryptSecret(material: EncryptedMaterial, kms: KmsProvider): string { + if (!keyIdMatches(material.keyId, kms.keyId)) { + throw new Error(`material was wrapped by key '${material.keyId}', not '${kms.keyId}'`) + } + const dek = kms.unwrapDek( + Buffer.from(material.wrappedDek, 'base64'), + Buffer.from(material.dekIv, 'base64'), + Buffer.from(material.dekTag, 'base64') + ) + try { + const decipher = createDecipheriv('aes-256-gcm', dek, Buffer.from(material.iv, 'base64')) + decipher.setAuthTag(Buffer.from(material.tag, 'base64')) + const plaintext = Buffer.concat([ + decipher.update(Buffer.from(material.ciphertext, 'base64')), + decipher.final() + ]) + return plaintext.toString('utf8') + } finally { + dek.fill(0) + } +} + +function keyIdMatches(a: string, b: string): boolean { + const ab = Buffer.from(a) + const bb = Buffer.from(b) + return ab.length === bb.length && timingSafeEqual(ab, bb) +} diff --git a/apps/server/src/policy.ts b/apps/server/src/policy.ts new file mode 100644 index 0000000..2fde72d --- /dev/null +++ b/apps/server/src/policy.ts @@ -0,0 +1,127 @@ +/** + * Grant policy engine — the "what may this agent do right now" decision point. + * + * Design posture: DEFAULT-DENY-ish. An unrecognized action is NEVER silently + * brokered as an active credential; it falls through to human approval. Explicit + * deny rules hard-stop, sensitive rules force a human gate + proxy mode, and only + * recognized low-risk actions are auto-activated. + * + * Pure and synchronous so it can be exhaustively unit-tested and fuzzed without a + * database. The grant handler snapshots the returned decision into grants.policy_json + * for replay/audit. + */ + +export type PolicyEffect = 'allow' | 'approval' | 'deny' +export type GrantMode = 'proxy' | 'mint' + +export type PolicyInput = { + action: string + resource: string + requestedScopes: string[] + mode: GrantMode +} + +export type PolicyRule = { + id: string + /** Tested against the action string. */ + match: RegExp + effect: PolicyEffect + /** Force proxy mode (secret never leaves the boundary) regardless of request. */ + forceProxy?: boolean +} + +export type PolicyConfig = { + rules: PolicyRule[] + /** Effect when no rule matches. Must not be 'allow' — never silently broker. */ + defaultEffect: Exclude +} + +export type PolicyDecision = { + effect: PolicyEffect + mode: GrantMode + requiresApproval: boolean + forcedProxy: boolean + matchedRule: string + reason: string +} + +// Evaluated top-to-bottom; first match wins, so order is significant: hard denies +// first, then sensitive→approval, then recognized→allow. +export const DEFAULT_POLICY: PolicyConfig = { + rules: [ + { + id: 'deny-destructive', + match: /\b(destroy|wipe|purge|drop[-_]?database|truncate|force[-_]?push)\b/i, + effect: 'deny' + }, + { + id: 'approval-sensitive', + match: /\b(delete|remove|transfer|payment|charge|refund|deploy|admin|secret|token|grant|rotate|impersonate|billing)\b/i, + effect: 'approval', + forceProxy: true + }, + { + id: 'allow-standard', + match: /\.(read|list|get|search|create|open|comment|update|write|label|assign)\b/i, + effect: 'allow' + } + ], + defaultEffect: 'approval' +} + +export function evaluatePolicy(input: PolicyInput, policy: PolicyConfig = DEFAULT_POLICY): PolicyDecision { + for (const rule of policy.rules) { + if (rule.match.test(input.action)) { + return decide(rule.effect, rule.forceProxy ?? false, input.mode, rule.id, `matched rule ${rule.id}`) + } + } + // No rule matched: never auto-allow. Default to approval (or deny) and force proxy. + return decide(policy.defaultEffect, true, input.mode, 'default', 'no rule matched; default posture applied') +} + +function decide( + effect: PolicyEffect, + forceProxy: boolean, + requestedMode: GrantMode, + matchedRule: string, + reason: string +): PolicyDecision { + const mode: GrantMode = forceProxy ? 'proxy' : requestedMode + return { + effect, + mode, + requiresApproval: effect === 'approval', + forcedProxy: forceProxy && requestedMode === 'mint', + matchedRule, + reason + } +} + +/** + * Constrains a proxied HTTP call to the granted action's verb class, so a grant + * for `*.read` cannot be replayed as a DELETE. Provider-specific path binding + * (e.g. restricting to the resource's object) is a deliberate follow-up handled + * by the resource provider seam; this is the provider-agnostic floor. + */ +export function callMatchesAction(action: string, method: string): { ok: boolean; reason?: string } { + const verb = (action.split('.').pop() ?? '').toLowerCase() + const m = method.toUpperCase() + const allowed: Record = { + read: ['GET', 'HEAD'], + list: ['GET', 'HEAD'], + get: ['GET', 'HEAD'], + search: ['GET', 'HEAD'], + create: ['POST', 'PUT'], + open: ['POST', 'PUT'], + write: ['POST', 'PUT', 'PATCH'], + update: ['PUT', 'PATCH', 'POST'], + delete: ['DELETE'], + remove: ['DELETE'] + } + const methods = allowed[verb] + if (!methods) return { ok: true } // unknown verb: method not constrained (approval/scope still apply) + if (!methods.includes(m)) { + return { ok: false, reason: `action '${action}' does not permit ${m} (expected ${methods.join('/')})` } + } + return { ok: true } +} diff --git a/apps/server/src/providers.ts b/apps/server/src/providers.ts new file mode 100644 index 0000000..22d7324 --- /dev/null +++ b/apps/server/src/providers.ts @@ -0,0 +1,280 @@ +/** + * Credential provider seam — the boundary between "Tidebase decides" and the + * backends that actually HOLD the secret. Three responsibilities, kept separate: + * + * resolveBackend() pure capability/availability decision (which backend, can + * it mint, is it configured) — no I/O, easy to test. + * acquireCredential() obtains the live credential: vault decrypts envelope + * material locally; nango/openbao fetch from the service. + * executeProxy() makes the real outbound call with the credential injected, + * behind the SSRF guard. The agent gets the response, never + * the credential. + * + * Fail-closed throughout: an unconfigured real backend never fabricates a result; + * the simulated dev-reference path is the ONLY one that returns success without a + * backend, and only when dev-reference is allowed. + */ +import { decryptSecret, type EncryptedMaterial, type KmsProvider } from './envelope.js' +import { allowPrivateProxy, assertSafeTarget, buildProxyUrl } from './ssrf.js' + +export type ProxyCall = { method: string; path: string; body?: unknown } + +export type ProxyOutcome = + | { ok: true; simulated: boolean; status: number; provider: string; body?: unknown } + | { ok: false; code: 'backend_not_configured' | 'provider_error' | 'ssrf_blocked' | 'upstream_unreachable'; provider: string; message: string } + +export type Credential = + | { scheme: 'none' } // dev/simulated — no real secret + | { scheme: 'bearer'; token: string } + | { scheme: 'header'; name: string; value: string } + | { scheme: 'basic'; username: string; password: string } + +export type BackendKind = 'dev' | 'vault' | 'nango' | 'openbao' | 'failclosed' + +export type Backend = { + name: string + kind: BackendKind + simulated: boolean + canMint: boolean + failReason?: string +} + +function devReferenceAllowed(env: NodeJS.ProcessEnv): boolean { + const isProduction = (env.NODE_ENV ?? env.TIDEBASE_ENV) === 'production' + return env.TIDEBASE_ALLOW_DEV_REFERENCE === '1' || !isProduction +} + +export function kmsConfigured(env: NodeJS.ProcessEnv): boolean { + return Boolean(env.TIDEBASE_MASTER_KEY) || (Boolean(env.TIDEBASE_KMS) && env.TIDEBASE_KMS !== 'local') +} + +/** Decide which backend serves a resource's provider, and whether it is available. */ +export function resolveBackend(providerName: string, env: NodeJS.ProcessEnv = process.env): Backend { + const devOk = devReferenceAllowed(env) + const dev = (): Backend => ({ name: 'dev-reference', kind: 'dev', simulated: true, canMint: false }) + const failClosed = (name: string, reason: string): Backend => ({ name, kind: 'failclosed', simulated: false, canMint: false, failReason: reason }) + + switch (providerName) { + case 'static': // a directly-supplied credential we vault with envelope encryption + if (kmsConfigured(env)) return { name: 'vault', kind: 'vault', simulated: false, canMint: false } + return devOk ? dev() : failClosed('vault', 'TIDEBASE_MASTER_KEY/KMS not configured for custody') + case 'nango': + if (env.NANGO_SECRET_KEY) return { name: 'nango', kind: 'nango', simulated: false, canMint: true } + return devOk ? dev() : failClosed('nango', 'NANGO_SECRET_KEY not configured') + case 'openbao': + if (env.OPENBAO_ADDR && env.OPENBAO_TOKEN) return { name: 'openbao', kind: 'openbao', simulated: false, canMint: true } + return devOk ? dev() : failClosed('openbao', 'OPENBAO_ADDR/OPENBAO_TOKEN not configured') + default: + return failClosed(providerName, `unknown provider '${providerName}'`) + } +} + +export type AcquireContext = { + loadSecretMaterial: () => Promise<{ material: EncryptedMaterial; keyId: string } | null> + kms: KmsProvider | null + connectionRef: string + resource: string + scopes: string[] + env: NodeJS.ProcessEnv +} + +export type AcquireResult = + | { ok: true; credential: Credential } + | { ok: false; code: 'backend_not_configured' | 'provider_error'; message: string } + +/** Obtain the live credential for a backend. Never returns it to the agent. */ +export async function acquireCredential(backend: Backend, ctx: AcquireContext): Promise { + switch (backend.kind) { + case 'dev': + return { ok: true, credential: { scheme: 'none' } } + case 'failclosed': + return { ok: false, code: 'backend_not_configured', message: backend.failReason ?? 'backend not configured' } + case 'vault': { + if (!ctx.kms) return { ok: false, code: 'backend_not_configured', message: 'KMS not available' } + const stored = await ctx.loadSecretMaterial() + if (!stored) return { ok: false, code: 'backend_not_configured', message: 'no secret stored for resource' } + let credential: Credential + try { + credential = JSON.parse(decryptSecret(stored.material, ctx.kms)) as Credential + } catch { + return { ok: false, code: 'provider_error', message: 'failed to decrypt stored credential' } + } + return { ok: true, credential } + } + case 'nango': + return acquireFromNango(ctx) + case 'openbao': + return acquireFromOpenBao(ctx) + default: + return { ok: false, code: 'backend_not_configured', message: 'unsupported backend' } + } +} + +// --- Real external backend clients ---------------------------------------- +// These build and issue the actual service requests. They activate only when +// configured; integration testing against live Nango/OpenBao is the remaining +// external step (documented in the design doc). + +async function acquireFromNango(ctx: AcquireContext): Promise { + const host = ctx.env.NANGO_HOST ?? 'https://api.nango.dev' + const key = ctx.env.NANGO_SECRET_KEY! + // connectionRef carries ":". + const [providerConfigKey, connectionId] = ctx.connectionRef.split('::') + if (!providerConfigKey || !connectionId) { + return { ok: false, code: 'provider_error', message: 'malformed nango connection reference' } + } + const url = `${host.replace(/\/$/, '')}/connection/${encodeURIComponent(connectionId)}?provider_config_key=${encodeURIComponent(providerConfigKey)}` + try { + const res = await fetchWithTimeout(url, { headers: { authorization: `Bearer ${key}` } }, 10_000) + if (!res.ok) return { ok: false, code: 'provider_error', message: `nango responded ${res.status}` } + const data = (await res.json()) as { credentials?: { access_token?: string; apiKey?: string } } + const token = data.credentials?.access_token ?? data.credentials?.apiKey + if (!token) return { ok: false, code: 'provider_error', message: 'nango returned no usable credential' } + return { ok: true, credential: { scheme: 'bearer', token } } + } catch { + return { ok: false, code: 'provider_error', message: 'nango request failed' } + } +} + +async function acquireFromOpenBao(ctx: AcquireContext): Promise { + const addr = ctx.env.OPENBAO_ADDR!.replace(/\/$/, '') + const token = ctx.env.OPENBAO_TOKEN! + // connectionRef carries the secret path, e.g. "secret/data/github/acme". + const url = `${addr}/v1/${ctx.connectionRef.replace(/^\//, '')}` + try { + const res = await fetchWithTimeout(url, { headers: { 'x-vault-token': token } }, 10_000) + if (!res.ok) return { ok: false, code: 'provider_error', message: `openbao responded ${res.status}` } + const data = (await res.json()) as { data?: Record } + // KV v2 nests under data.data; KV v1 / dynamic creds sit at data. + const nested = (data.data as Record | undefined)?.data + const inner = ((nested && typeof nested === 'object' ? nested : data.data) ?? {}) as Record + const value = inner.token ?? inner.access_token ?? inner.api_key + if (!value || typeof value !== 'string') { + return { ok: false, code: 'provider_error', message: 'openbao returned no usable credential' } + } + return { ok: true, credential: { scheme: 'bearer', token: value } } + } catch { + return { ok: false, code: 'provider_error', message: 'openbao request failed' } + } +} + +export type ExecuteContext = { + backend: Backend + baseUrl: string | null + /** When set, the proxied path must start with this prefix (per-resource scoping). */ + allowedPathPrefix?: string | null + call: ProxyCall + credential: Credential + env: NodeJS.ProcessEnv +} + +const MAX_PROXY_RESPONSE_BYTES = 1024 * 1024 // 1 MiB cap on upstream responses + +/** Perform the proxied call with the credential injected, behind the SSRF guard. */ +export async function executeProxy(ctx: ExecuteContext): Promise { + if (ctx.credential.scheme === 'none') { + // dev/simulated: never makes a real call, never touches a secret. + return { ok: true, simulated: true, status: 200, provider: ctx.backend.name } + } + if (!ctx.baseUrl) { + return { ok: false, code: 'backend_not_configured', provider: ctx.backend.name, message: 'resource has no base_url to proxy to' } + } + // Per-resource path scoping: narrow from "any path on host" to a path subtree. + if (ctx.allowedPathPrefix) { + const p = ctx.call.path.startsWith('/') ? ctx.call.path : `/${ctx.call.path}` + if (!p.startsWith(ctx.allowedPathPrefix)) { + return { ok: false, code: 'ssrf_blocked', provider: ctx.backend.name, message: `path outside the resource's allowed prefix '${ctx.allowedPathPrefix}'` } + } + } + const built = buildProxyUrl(ctx.baseUrl, ctx.call.path) + if (!built.ok) return { ok: false, code: 'ssrf_blocked', provider: ctx.backend.name, message: built.reason } + const safe = await assertSafeTarget(built.url, { allowPrivate: allowPrivateProxy(ctx.env) }) + if (!safe.ok) return { ok: false, code: 'ssrf_blocked', provider: ctx.backend.name, message: safe.reason } + + const headers = injectCredential(ctx.credential, { 'content-type': 'application/json' }) + try { + const res = await fetchWithTimeout( + built.url, + { + method: ctx.call.method, + headers, + // Do NOT follow redirects: a 3xx to another host would bypass the SSRF + // check and could forward a custom-header credential off-origin. The agent + // receives the 3xx and decides. + redirect: 'manual', + body: ctx.call.body === undefined || ctx.call.method.toUpperCase() === 'GET' ? undefined : JSON.stringify(ctx.call.body) + }, + 15_000 + ) + const body = await safeReadBody(res) + return { ok: true, simulated: false, status: res.status, provider: ctx.backend.name, body } + } catch { + return { ok: false, code: 'upstream_unreachable', provider: ctx.backend.name, message: 'upstream request failed or timed out' } + } +} + +// Headers an injected 'header'-scheme credential must never set (request smuggling, +// host override, connection control). +const BLOCKED_INJECT_HEADERS = new Set([ + 'host', 'content-length', 'connection', 'transfer-encoding', 'authorization', 'cookie' +]) + +function injectCredential(credential: Credential, base: Record): Record { + const headers = { ...base } + switch (credential.scheme) { + case 'bearer': + headers.authorization = `Bearer ${credential.token}` + break + case 'header': { + const name = credential.name.toLowerCase() + // Never let an operator-configured header name clobber a control header. + if (!BLOCKED_INJECT_HEADERS.has(name)) headers[name] = credential.value + break + } + case 'basic': + headers.authorization = `Basic ${Buffer.from(`${credential.username}:${credential.password}`).toString('base64')}` + break + case 'none': + break + } + return headers +} + +async function safeReadBody(res: Response): Promise { + // Cap how much we read so a huge upstream response cannot exhaust memory. + const buf = await res.arrayBuffer() + const bytes = Buffer.from(buf.byteLength > MAX_PROXY_RESPONSE_BYTES ? buf.slice(0, MAX_PROXY_RESPONSE_BYTES) : buf) + const text = bytes.toString('utf8') + if (!text) return null + try { + return JSON.parse(text) + } catch { + return text + } +} + +async function fetchWithTimeout(url: string, init: RequestInit, timeoutMs: number): Promise { + const controller = new AbortController() + const timer = setTimeout(() => controller.abort(), timeoutMs) + try { + return await fetch(url, { ...init, signal: controller.signal }) + } finally { + clearTimeout(timer) + } +} + +/** Normalize a connect-time secret into the stored Credential shape. */ +export function normalizeCredential(secret: unknown): Credential | null { + if (typeof secret === 'string') return { scheme: 'bearer', token: secret } + if (secret && typeof secret === 'object') { + const s = secret as Record + if (s.scheme === 'bearer' && typeof s.token === 'string') return { scheme: 'bearer', token: s.token } + if (s.scheme === 'header' && typeof s.name === 'string' && typeof s.value === 'string') { + return { scheme: 'header', name: s.name, value: s.value } + } + if (s.scheme === 'basic' && typeof s.username === 'string' && typeof s.password === 'string') { + return { scheme: 'basic', username: s.username, password: s.password } + } + } + return null +} diff --git a/apps/server/src/ratelimit.ts b/apps/server/src/ratelimit.ts new file mode 100644 index 0000000..2e2f049 --- /dev/null +++ b/apps/server/src/ratelimit.ts @@ -0,0 +1,52 @@ +/** + * Multi-replica abuse controls backed by Postgres (shared across replicas), so a + * rate limit or a challenge-replay check holds regardless of which instance the + * request lands on. Replaces the earlier per-process maps. + */ +import { pool } from './db.js' + +/** + * Fixed-window rate limit. Atomic upsert: increment within the current window, + * reset at a window boundary. Returns true if the request is within the limit. + */ +export async function rateLimitPg( + bucket: string, + limit: number, + windowMs: number, + now: Date = new Date() +): Promise { + const windowStart = new Date(Math.floor(now.getTime() / windowMs) * windowMs) + const res = await pool.query<{ count: number }>( + `insert into rate_limits (bucket, window_start, count) + values ($1, $2, 1) + on conflict (bucket) do update set + count = case when rate_limits.window_start = excluded.window_start + then rate_limits.count + 1 else 1 end, + window_start = excluded.window_start + returning count`, + [bucket, windowStart] + ) + return Number(res.rows[0].count) <= limit +} + +/** + * Single-use guard for keypair challenges. Inserts the challenge hash; a conflict + * means it was already consumed (a replay). Returns true on first use. + */ +export async function consumeChallengePg(challengeHash: string, expiresAt: Date): Promise { + const res = await pool.query( + `insert into consumed_challenges (challenge_hash, expires_at) + values ($1, $2) + on conflict (challenge_hash) do nothing + returning challenge_hash`, + [challengeHash, expiresAt] + ) + return res.rows.length > 0 +} + +/** Reconciler housekeeping: drop stale limiter windows and expired challenges. */ +export async function sweepAbuseStores(now: Date = new Date()): Promise { + await pool.query('delete from consumed_challenges where expires_at < $1', [now]) + // Limiter rows older than a generous multiple of any window are dead weight. + await pool.query(`delete from rate_limits where window_start < $1`, [new Date(now.getTime() - 3_600_000)]) +} diff --git a/apps/server/src/reconciler.ts b/apps/server/src/reconciler.ts index d02dd2c..16e2b5d 100644 --- a/apps/server/src/reconciler.ts +++ b/apps/server/src/reconciler.ts @@ -13,6 +13,7 @@ import { pool, tx } from './db.js' import { appendEvent } from './events.js' import { dispatchRecovery, mapRun, retryBackoffMs } from './app.js' import { nextFire } from './cron.js' +import { sweepAbuseStores } from './ratelimit.js' const TICK_LOCK = 0x74646202 // 'tdb' 02 const tickMs = Number(process.env.TIDEBASE_RECONCILE_MS ?? 5_000) @@ -24,6 +25,7 @@ export type TickReport = { cancelledByDeadline: number scheduled: number invoked: number + grantsExpired: number } export async function reconcileTick(now = new Date()): Promise { @@ -34,7 +36,8 @@ export async function reconcileTick(now = new Date()): Promise undefined) @@ -51,6 +56,45 @@ export async function reconcileTick(now = new Date()): Promise { + const update = await client.query( + `update grants set status = 'expired', updated_at = now() + where id = $1 and status in ('pending','approved','active') and expires_at < $2 + returning id`, + [row.id, now] + ) + if (!update.rows[0]) return + await appendEvent(client, row.run_id, 'grant.expired', { + grantId: row.id, + resource: row.resource, + action: row.action, + agentId: row.agent_id ?? null, + mode: row.mode, + status: 'expired', + gateId: row.gate_id ?? null, + expiresAt: row.expires_at?.toISOString?.() ?? null + }) + report.grantsExpired += 1 + }) + } +} + async function sweepExpiredLeases(report: TickReport, now: Date) { // Only actionable rows: a plain run (no queue, no recovery webhook) is // deliberately left running-with-expired-lease for manual takeover, so it diff --git a/apps/server/src/ssrf.ts b/apps/server/src/ssrf.ts new file mode 100644 index 0000000..d6cc93a --- /dev/null +++ b/apps/server/src/ssrf.ts @@ -0,0 +1,111 @@ +/** + * SSRF defense for the credential proxy. + * + * The proxy makes a real outbound HTTP call to a path the AGENT supplies, using a + * secret the agent never sees. Without guards that is a textbook SSRF primitive + * (hit cloud metadata at 169.254.169.254, internal services, etc.). Two layers: + * + * 1. buildProxyUrl: the agent may only supply a *path*. The host/scheme are + * pinned to the resource's operator-configured base_url; absolute URLs and + * protocol-relative paths are rejected, and the joined target must stay on + * the same origin. + * 2. assertSafeTarget: resolve the host and refuse private/loopback/link-local/ + * CGNAT/metadata addresses (DNS-rebinding safe). Gated by allowPrivate, which + * defaults off and is only enabled for dev/test loopback upstreams. + */ +import { lookup } from 'node:dns/promises' + +export type UrlResult = { ok: true; url: string } | { ok: false; reason: string } + +export function buildProxyUrl(baseUrl: string, agentPath: string): UrlResult { + if (/^[a-z][a-z0-9+.-]*:/i.test(agentPath) || agentPath.startsWith('//')) { + return { ok: false, reason: 'path must be relative; absolute URLs and protocol-relative paths are rejected' } + } + let base: URL + try { + base = new URL(baseUrl) + } catch { + return { ok: false, reason: 'resource has an invalid base_url' } + } + if (base.protocol !== 'https:' && base.protocol !== 'http:') { + return { ok: false, reason: 'base_url must be http(s)' } + } + const prefix = base.pathname.replace(/\/$/, '') + const path = agentPath.startsWith('/') ? agentPath : `/${agentPath}` + let target: URL + try { + target = new URL(prefix + path, base.origin) + } catch { + return { ok: false, reason: 'invalid target path' } + } + // The joined target must not have escaped the base origin (defense against + // path tricks). Userinfo (user:pass@) in the path is also disallowed. + if (target.origin !== base.origin || target.username || target.password) { + return { ok: false, reason: 'target must stay on the resource base_url origin' } + } + return { ok: true, url: target.toString() } +} + +export function isPrivateV4(ip: string): boolean { + const m = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(ip) + if (!m) return false + const o = m.slice(1).map(Number) + if (o.some((n) => n > 255)) return true // malformed → treat as unsafe + const [a, b] = o + if (a === 0 || a === 10 || a === 127) return true // this-network, RFC1918, loopback + if (a === 169 && b === 254) return true // link-local + cloud metadata 169.254.169.254 + if (a === 172 && b >= 16 && b <= 31) return true // RFC1918 + if (a === 192 && b === 168) return true // RFC1918 + if (a === 100 && b >= 64 && b <= 127) return true // CGNAT + if (a === 192 && b === 0) return true // 192.0.0.0/24 IETF + if (a >= 224) return true // multicast / reserved + return false +} + +export function isPrivateV6(ip: string): boolean { + const h = ip.toLowerCase().replace(/^\[|\]$/g, '') + if (h === '::1' || h === '::') return true + if (h.startsWith('fc') || h.startsWith('fd')) return true // unique local + if (h.startsWith('fe80')) return true // link-local + if (h.startsWith('::ffff:')) return isPrivateV4(h.slice('::ffff:'.length)) // v4-mapped + return false +} + +export function isPrivateHostname(host: string): boolean { + const h = host.toLowerCase().replace(/^\[|\]$/g, '') + if (h === 'localhost' || h.endsWith('.localhost') || h.endsWith('.local') || h.endsWith('.internal')) return true + if (/^\d{1,3}(\.\d{1,3}){3}$/.test(h)) return isPrivateV4(h) + if (h.includes(':')) return isPrivateV6(h) + return false +} + +export async function assertSafeTarget( + url: string, + opts: { allowPrivate: boolean } +): Promise<{ ok: true } | { ok: false; reason: string }> { + if (opts.allowPrivate) return { ok: true } + let u: URL + try { + u = new URL(url) + } catch { + return { ok: false, reason: 'invalid target url' } + } + if (isPrivateHostname(u.hostname)) { + return { ok: false, reason: 'target host is private/internal' } + } + // Resolve the name and re-check, so a public name that points at an internal + // IP (DNS rebinding) is still refused. + try { + const { address } = await lookup(u.hostname) + if (isPrivateV4(address) || isPrivateV6(address)) { + return { ok: false, reason: 'target resolves to a private/internal address' } + } + } catch { + return { ok: false, reason: 'target host did not resolve' } + } + return { ok: true } +} + +export function allowPrivateProxy(env: NodeJS.ProcessEnv = process.env): boolean { + return env.TIDEBASE_ALLOW_PRIVATE_PROXY === '1' +} diff --git a/apps/server/test/agent-auth-hardening.test.ts b/apps/server/test/agent-auth-hardening.test.ts new file mode 100644 index 0000000..025fc35 --- /dev/null +++ b/apps/server/test/agent-auth-hardening.test.ts @@ -0,0 +1,387 @@ +import { generateKeyPairSync, sign as cryptoSign } from 'node:crypto' +import { describe, expect, it } from 'vitest' +import { createApp } from '../src/app' +import { api } from './helpers' + +// Adversarial tests for the agent-auth control plane. Each test pins a specific +// threat-model property closed by the hardening passes. Grouped by pass. + +const KEY = 'test-secret-key' +const admin = { authorization: `Bearer ${KEY}` } + +async function provedAgent(app: ReturnType, principal = 'acme') { + const run = await api(app, 'POST', '/runs/hardening-workflow', {}, admin) + const agent = await api(app, 'POST', '/agents', { name: `a-${principal}`, principal }, admin) + const proved = await api(app, 'POST', `/agents/${agent.body.agentId}/prove`, {}, admin) + return { + runId: run.body.run.id as string, + agentId: agent.body.agentId as string, + agentAuth: { authorization: `Bearer ${proved.body.sessionToken}` } + } +} + +async function connectGithub(app: ReturnType, principal = 'acme') { + return api( + app, + 'POST', + '/resources', + { name: 'github', principal, provider: 'nango', scopesAllowed: ['pull_request.write'] }, + admin + ) +} + +async function proveAgentFor(app: ReturnType, principal: string, name: string) { + const agent = await api(app, 'POST', '/agents', { name, principal }, admin) + const proved = await api(app, 'POST', `/agents/${agent.body.agentId}/prove`, {}, admin) + return { + agentId: agent.body.agentId as string, + agentAuth: { authorization: `Bearer ${proved.body.sessionToken}` } + } +} + +function grantBody(action = 'pull_request.create') { + return { resource: 'github:repo:acme/app', action, scopes: ['pull_request.write'], reason: 'test' } +} + +describe('Pass 1 — authentication & fail-closed', () => { + it('refuses to broker credentials when no API key is configured (fail closed)', async () => { + const app = createApp({}) // no apiKey + const agentsRes = await api(app, 'POST', '/agents', { name: 'x' }) + expect(agentsRes.status).toBe(503) + expect(agentsRes.body.code).toBe('broker_disabled') + const resourcesRes = await api(app, 'POST', '/resources', { name: 'github' }) + expect(resourcesRes.status).toBe(503) + const auditRes = await api(app, 'GET', '/audit') + expect(auditRes.status).toBe(503) + // durability core stays reachable without a key (backward compat) + const run = await api(app, 'POST', '/runs/core-still-open', {}) + expect(run.status).toBe(200) + }) + + it('rejects grant requests presented with the admin key instead of a session', async () => { + const app = createApp({ apiKey: KEY }) + const { runId } = await provedAgent(app) + await connectGithub(app) + const res = await api( + app, + 'POST', + `/runs/${runId}/grants`, + { resource: 'github:repo:acme/app', action: 'pull_request.create', scopes: ['pull_request.write'] }, + admin // admin key, NOT an agent session + ) + expect(res.status).toBe(401) + expect(res.body.code).toBe('session_required') + }) + + it('verifies a real Ed25519 keypair proof end to end', async () => { + const app = createApp({ apiKey: KEY }) + const { publicKey, privateKey } = generateKeyPairSync('ed25519') + const publicKeyPem = publicKey.export({ type: 'spki', format: 'pem' }).toString() + + const agent = await api( + app, + 'POST', + '/agents', + { name: 'kp', principal: 'acme', identityKind: 'keypair', publicKey: publicKeyPem }, + admin + ) + const agentId = agent.body.agentId as string + + const challenge = await api(app, 'POST', `/agents/${agentId}/challenge`, {}, admin) + expect(challenge.status).toBe(200) + const signature = cryptoSign(null, Buffer.from(challenge.body.challenge), privateKey).toString('base64') + + const proved = await api( + app, + 'POST', + `/agents/${agentId}/prove`, + { challenge: challenge.body.challenge, signature }, + admin + ) + expect(proved.status).toBe(200) + expect(proved.body.sessionToken).toMatch(/^tdb_ags_/) + + // a tampered signature is rejected, and the challenge is single-use + const challenge2 = await api(app, 'POST', `/agents/${agentId}/challenge`, {}, admin) + const badSig = cryptoSign(null, Buffer.from('not-the-challenge'), privateKey).toString('base64') + const rejected = await api( + app, + 'POST', + `/agents/${agentId}/prove`, + { challenge: challenge2.body.challenge, signature: badSig }, + admin + ) + expect(rejected.status).toBe(401) + + // replay of an already-consumed challenge is rejected + const replay = await api( + app, + 'POST', + `/agents/${agentId}/prove`, + { challenge: challenge.body.challenge, signature }, + admin + ) + expect(replay.status).toBe(401) + }) +}) + +describe('Pass 2 — authorization, tenancy & confused-deputy', () => { + it('isolates a run to the first principal that brokers on it (cross-tenant denied)', async () => { + const app = createApp({ apiKey: KEY }) + const run = await api(app, 'POST', '/runs/tenancy-run', {}, admin) + const runId = run.body.run.id as string + await connectGithub(app, 'acme') + await connectGithub(app, 'evil') + + const acme = await proveAgentFor(app, 'acme', 'acme-agent') + const evil = await proveAgentFor(app, 'evil', 'evil-agent') + + const first = await api(app, 'POST', `/runs/${runId}/grants`, grantBody(), acme.agentAuth) + expect(first.status).toBe(200) // acme claims the run + + const intruder = await api(app, 'POST', `/runs/${runId}/grants`, grantBody(), evil.agentAuth) + expect(intruder.status).toBe(403) + expect(intruder.body.code).toBe('cross_tenant') + }) + + it('forbids one agent from using another agent\'s grant (confused deputy)', async () => { + const app = createApp({ apiKey: KEY }) + const run = await api(app, 'POST', '/runs/deputy-run', {}, admin) + const runId = run.body.run.id as string + await connectGithub(app, 'acme') + + const a1 = await proveAgentFor(app, 'acme', 'a1') + const a2 = await proveAgentFor(app, 'acme', 'a2') // same principal, different agent + + const grant = await api( + app, + 'POST', + `/runs/${runId}/grants`, + { ...grantBody(), maxUses: 5 }, + a1.agentAuth + ) + expect(grant.status).toBe(200) + + // a2 (same tenant, so passes tenancy) must NOT be able to use a1's grant + const stolen = await api( + app, + 'POST', + `/runs/${runId}/grants/${grant.body.grantId}/use`, + { method: 'POST', path: '/repos/acme/app/pulls' }, + a2.agentAuth + ) + expect(stolen.status).toBe(409) + }) + + it('scopes the audit log to the caller\'s principal', async () => { + const app = createApp({ apiKey: KEY }) + await connectGithub(app, 'acme') + await connectGithub(app, 'other') + + const acmeRun = await api(app, 'POST', '/runs/audit-acme', {}, admin) + const acme = await proveAgentFor(app, 'acme', 'acme-auditor') + const g = await api(app, 'POST', `/runs/${acmeRun.body.run.id}/grants`, grantBody(), acme.agentAuth) + await api( + app, + 'POST', + `/runs/${acmeRun.body.run.id}/grants/${g.body.grantId}/use`, + { method: 'POST', path: '/x' }, + acme.agentAuth + ) + + // an agent from a different principal must not see acme's receipts + const other = await proveAgentFor(app, 'other', 'other-auditor') + const otherView = await api(app, 'GET', `/audit?runId=${acmeRun.body.run.id}`, undefined, other.agentAuth) + expect(otherView.status).toBe(200) + expect(otherView.body).toHaveLength(0) + + // the admin key still sees everything + const adminView = await api(app, 'GET', `/audit?runId=${acmeRun.body.run.id}`, undefined, admin) + expect(adminView.body.length).toBeGreaterThan(0) + }) +}) + +describe('Pass 3 — policy engine & call binding', () => { + it('hard-denies destructive actions at the endpoint', async () => { + const app = createApp({ apiKey: KEY }) + const run = await api(app, 'POST', '/runs/policy-deny', {}, admin) + await connectGithub(app, 'acme') + const acme = await proveAgentFor(app, 'acme', 'deny-agent') + const res = await api( + app, + 'POST', + `/runs/${run.body.run.id}/grants`, + { resource: 'github:repo:acme/app', action: 'database.destroy', scopes: ['pull_request.write'] }, + acme.agentAuth + ) + expect(res.status).toBe(403) + expect(res.body.code).toBe('policy_denied') + }) + + it('binds the proxied call to the grant action (read grant cannot DELETE)', async () => { + const app = createApp({ apiKey: KEY }) + const run = await api(app, 'POST', '/runs/policy-bind', {}, admin) + await api( + app, + 'POST', + '/resources', + { name: 'github', principal: 'acme', provider: 'nango', scopesAllowed: ['repo.read'] }, + admin + ) + const acme = await proveAgentFor(app, 'acme', 'bind-agent') + const grant = await api( + app, + 'POST', + `/runs/${run.body.run.id}/grants`, + { resource: 'github:repo:acme/app', action: 'repo.read', scopes: ['repo.read'], maxUses: 3 }, + acme.agentAuth + ) + expect(grant.status).toBe(200) + expect(grant.body.status).toBe('active') + + const del = await api( + app, + 'POST', + `/runs/${run.body.run.id}/grants/${grant.body.grantId}/use`, + { method: 'DELETE', path: '/repos/acme/app' }, + acme.agentAuth + ) + expect(del.status).toBe(403) + expect(del.body.code).toBe('call_denied') + + const get = await api( + app, + 'POST', + `/runs/${run.body.run.id}/grants/${grant.body.grantId}/use`, + { method: 'GET', path: '/repos/acme/app' }, + acme.agentAuth + ) + expect(get.status).toBe(200) + }) +}) + +describe('Pass 4 — lifecycle, expiry, revocation & abuse resistance', () => { + it('expires grants past their TTL and emits a grant.expired receipt', async () => { + const { reconcileTick } = await import('../src/reconciler') + const app = createApp({ apiKey: KEY }) + const run = await api(app, 'POST', '/runs/expiry-run', {}, admin) + await connectGithub(app, 'acme') + const acme = await proveAgentFor(app, 'acme', 'expiry-agent') + const grant = await api( + app, + 'POST', + `/runs/${run.body.run.id}/grants`, + { ...grantBody(), ttlSeconds: 1 }, + acme.agentAuth + ) + expect(grant.status).toBe(200) + + // Sweep with a clock 5s in the future so the 1s-TTL grant is past expiry. + // Only one replica sweeps per tick (global advisory lock), so under parallel + // test workers we retry until our tick actually wins the lock and runs. + let swept: Awaited> = null + for (let i = 0; i < 50 && !swept; i++) { + swept = await reconcileTick(new Date(Date.now() + 5000)) + if (!swept) await new Promise((r) => setTimeout(r, 20)) + } + expect(swept).not.toBeNull() + + const used = await api( + app, + 'POST', + `/runs/${run.body.run.id}/grants/${grant.body.grantId}/use`, + { method: 'POST', path: '/repos/acme/app/pulls' }, + acme.agentAuth + ) + expect(used.status).toBe(409) + + const audit = await api(app, 'GET', `/audit?runId=${run.body.run.id}`, undefined, admin) + expect(audit.body.map((e: { type: string }) => e.type)).toContain('grant.expired') + }) + + it('cascades resource revocation to live grants', async () => { + const app = createApp({ apiKey: KEY }) + const run = await api(app, 'POST', '/runs/revoke-run', {}, admin) + const resource = await connectGithub(app, 'acme') + const acme = await proveAgentFor(app, 'acme', 'revoke-agent') + const grant = await api( + app, + 'POST', + `/runs/${run.body.run.id}/grants`, + { ...grantBody(), maxUses: 5 }, + acme.agentAuth + ) + expect(grant.status).toBe(200) + + const revoked = await api(app, 'POST', `/resources/${resource.body.resourceId}/revoke`, {}, admin) + expect(revoked.status).toBe(200) + expect(revoked.body.grantsRevoked).toBeGreaterThanOrEqual(1) + + // the previously-active grant is now dead + const used = await api( + app, + 'POST', + `/runs/${run.body.run.id}/grants/${grant.body.grantId}/use`, + { method: 'POST', path: '/repos/acme/app/pulls' }, + acme.agentAuth + ) + expect(used.status).toBe(409) + }) + + it('rejects oversized broker request bodies', async () => { + const app = createApp({ apiKey: KEY }) + const huge = 'x'.repeat(70_000) + const res = await api(app, 'POST', '/agents', { name: 'big', metadata: { blob: huge } }, admin) + expect(res.status).toBe(413) + expect(res.body.code).toBe('body_too_large') + }) +}) + +describe('Pass 5 — secret-handling seam & redaction', () => { + it('refuses mint mode when no backend can mint (no fake tokens)', async () => { + const app = createApp({ apiKey: KEY }) + const run = await api(app, 'POST', '/runs/mint-run', {}, admin) + await connectGithub(app, 'acme') + const acme = await proveAgentFor(app, 'acme', 'mint-agent') + const res = await api( + app, + 'POST', + `/runs/${run.body.run.id}/grants`, + { ...grantBody(), mode: 'mint' }, + acme.agentAuth + ) + expect(res.status).toBe(400) + expect(res.body.code).toBe('mint_unavailable') + }) + + it('marks proxied calls as simulated in dev and never leaks the connection ref', async () => { + const app = createApp({ apiKey: KEY }) + const run = await api(app, 'POST', '/runs/sim-run', {}, admin) + await connectGithub(app, 'acme') + const acme = await proveAgentFor(app, 'acme', 'sim-agent') + const grant = await api(app, 'POST', `/runs/${run.body.run.id}/grants`, grantBody(), acme.agentAuth) + const used = await api( + app, + 'POST', + `/runs/${run.body.run.id}/grants/${grant.body.grantId}/use`, + { method: 'POST', path: '/repos/acme/app/pulls', body: { title: 'x' } }, + acme.agentAuth + ) + expect(used.status).toBe(200) + expect(used.body.response.simulated).toBe(true) // honest: not a real call + + // neither the connect response nor the audit log ever exposes connection_ref + const audit = await api(app, 'GET', `/audit?runId=${run.body.run.id}`, undefined, admin) + const dump = JSON.stringify({ used: used.body, audit: audit.body }) + expect(dump).not.toContain('connection_ref') + expect(dump).not.toContain('dev:nango') // the internal connection_ref value + }) + + it('the resource connect response never includes the connection ref', async () => { + const app = createApp({ apiKey: KEY }) + const res = await connectGithub(app, 'acme') + expect(res.status).toBe(200) + expect(Object.keys(res.body)).not.toContain('connectionRef') + expect(JSON.stringify(res.body)).not.toContain('dev:nango') + }) +}) diff --git a/apps/server/test/agent-auth-proxy.test.ts b/apps/server/test/agent-auth-proxy.test.ts new file mode 100644 index 0000000..f7d59f4 --- /dev/null +++ b/apps/server/test/agent-auth-proxy.test.ts @@ -0,0 +1,190 @@ +import { randomBytes } from 'node:crypto' +import { createServer, type Server } from 'node:http' +import { afterAll, beforeAll, describe, expect, it } from 'vitest' +import { createApp } from '../src/app' +import { api } from './helpers' + +// End-to-end real custody + proxy: a vaulted secret is injected into a real +// outbound call to a loopback upstream; the agent gets the response, never the secret. + +const KEY = 'test-secret-key' +const admin = { authorization: `Bearer ${KEY}` } +const SECRET = 'ghp_THE_REAL_SECRET_VALUE' + +let upstream: Server +let port: number +let lastAuthHeader: string | undefined +const savedEnv: Record = {} + +beforeAll(async () => { + upstream = createServer((req, res) => { + lastAuthHeader = req.headers.authorization + res.setHeader('content-type', 'application/json') + res.end(JSON.stringify({ pr: 123, path: req.url })) + }) + await new Promise((resolve) => upstream.listen(0, '127.0.0.1', resolve)) + port = (upstream.address() as { port: number }).port + + savedEnv.TIDEBASE_MASTER_KEY = process.env.TIDEBASE_MASTER_KEY + savedEnv.TIDEBASE_ALLOW_PRIVATE_PROXY = process.env.TIDEBASE_ALLOW_PRIVATE_PROXY + process.env.TIDEBASE_MASTER_KEY = randomBytes(32).toString('base64') + process.env.TIDEBASE_ALLOW_PRIVATE_PROXY = '1' // permit loopback upstream in tests +}) + +afterAll(async () => { + process.env.TIDEBASE_MASTER_KEY = savedEnv.TIDEBASE_MASTER_KEY + process.env.TIDEBASE_ALLOW_PRIVATE_PROXY = savedEnv.TIDEBASE_ALLOW_PRIVATE_PROXY + await new Promise((resolve) => upstream.close(() => resolve())) +}) + +async function setup() { + const app = createApp({ apiKey: KEY }) + const run = await api(app, 'POST', '/runs/proxy-run', {}, admin) + const agent = await api(app, 'POST', '/agents', { name: 'proxy-agent', principal: 'proxytest' }, admin) + const proved = await api(app, 'POST', `/agents/${agent.body.agentId}/prove`, {}, admin) + const agentAuth = { authorization: `Bearer ${proved.body.sessionToken}` } + const resource = await api( + app, + 'POST', + '/resources', + { + name: 'github', + principal: 'proxytest', + provider: 'static', + baseUrl: `http://127.0.0.1:${port}`, + secret: SECRET, + scopesAllowed: ['pull_request.write'] + }, + admin + ) + expect(resource.status).toBe(200) + return { app, runId: run.body.run.id as string, agentAuth, resource } +} + +describe('real credential custody + proxy', () => { + it('injects the vaulted secret upstream and returns the response, never the secret', async () => { + const { app, runId, agentAuth } = await setup() + + const grant = await api( + app, + 'POST', + `/runs/${runId}/grants`, + { resource: 'github:repo:acme/app', action: 'pull_request.create', scopes: ['pull_request.write'] }, + agentAuth + ) + expect(grant.status).toBe(200) + expect(grant.body.status).toBe('active') + + const used = await api( + app, + 'POST', + `/runs/${runId}/grants/${grant.body.grantId}/use`, + { method: 'POST', path: '/repos/acme/app/pulls', body: { title: 'Fix CI' } }, + agentAuth + ) + expect(used.status).toBe(200) + // a REAL call happened (not simulated) and the agent received the upstream body + expect(used.body.response.simulated).toBe(false) + expect(used.body.response.status).toBe(200) + expect(used.body.response.body).toEqual({ pr: 123, path: '/repos/acme/app/pulls' }) + + // the upstream actually received the injected credential... + expect(lastAuthHeader).toBe(`Bearer ${SECRET}`) + // ...but the agent-facing response never contains it + expect(JSON.stringify(used.body)).not.toContain(SECRET) + + // and neither does the audit log + const audit = await api(app, 'GET', `/audit?runId=${runId}`, undefined, admin) + expect(JSON.stringify(audit.body)).not.toContain(SECRET) + expect(audit.body.map((e: { type: string }) => e.type)).toContain('grant.used') + }) + + it('the secret never leaves via the resource connect response', async () => { + const { resource } = await setup() + expect(JSON.stringify(resource.body)).not.toContain(SECRET) + expect(Object.keys(resource.body)).not.toContain('secret') + expect(Object.keys(resource.body)).not.toContain('connectionRef') + }) + + it('blocks the proxy from reaching a private/metadata address end to end (SSRF)', async () => { + const app = createApp({ apiKey: KEY }) + await api( + app, + 'POST', + '/resources', + { name: 'evilmeta', principal: 'proxytest', provider: 'static', baseUrl: 'http://169.254.169.254', secret: SECRET, scopesAllowed: ['meta.read'] }, + admin + ) + const run = await api(app, 'POST', '/runs/ssrf-run', {}, admin) + const agent = await api(app, 'POST', '/agents', { name: 'ssrf-agent', principal: 'proxytest' }, admin) + const proved = await api(app, 'POST', `/agents/${agent.body.agentId}/prove`, {}, admin) + const agentAuth = { authorization: `Bearer ${proved.body.sessionToken}` } + const grant = await api( + app, + 'POST', + `/runs/${run.body.run.id}/grants`, + { resource: 'evilmeta:meta', action: 'meta.read', scopes: ['meta.read'] }, + agentAuth + ) + expect(grant.status).toBe(200) + + const saved = process.env.TIDEBASE_ALLOW_PRIVATE_PROXY + process.env.TIDEBASE_ALLOW_PRIVATE_PROXY = '0' // disable the dev escape hatch for this assertion + try { + const used = await api( + app, + 'POST', + `/runs/${run.body.run.id}/grants/${grant.body.grantId}/use`, + { method: 'GET', path: '/latest/meta-data/iam/security-credentials' }, + agentAuth + ) + expect(used.status).toBe(403) + expect(used.body.code).toBe('ssrf_blocked') + } finally { + process.env.TIDEBASE_ALLOW_PRIVATE_PROXY = saved + } + }) + + it('refuses to store a secret without custody configured (fail closed)', async () => { + const saved = process.env.TIDEBASE_MASTER_KEY + delete process.env.TIDEBASE_MASTER_KEY + try { + const app = createApp({ apiKey: KEY }) + const res = await api( + app, + 'POST', + '/resources', + { name: 'nokms', principal: 'proxytest', provider: 'static', secret: 'x', baseUrl: `http://127.0.0.1:${port}` }, + admin + ) + expect(res.status).toBe(503) + expect(res.body.code).toBe('custody_unavailable') + } finally { + process.env.TIDEBASE_MASTER_KEY = saved + } + }) +}) + +describe('per-resource path scoping (security review fix F-1)', () => { + it('rejects a proxied path outside the resource allowed_path_prefix', async () => { + const app = createApp({ apiKey: KEY }) + await api( + app, 'POST', '/resources', + { name: 'scoped', principal: 'proxytest', provider: 'static', baseUrl: `http://127.0.0.1:${port}`, secret: SECRET, scopesAllowed: ['repo.read'], allowedPathPrefix: '/repos/acme/app' }, + admin + ) + const run = await api(app, 'POST', '/runs/scope-run', {}, admin) + const agent = await api(app, 'POST', '/agents', { name: 'scope-agent', principal: 'proxytest' }, admin) + const proved = await api(app, 'POST', `/agents/${agent.body.agentId}/prove`, {}, admin) + const agentAuth = { authorization: `Bearer ${proved.body.sessionToken}` } + const grant = await api(app, 'POST', `/runs/${run.body.run.id}/grants`, { resource: 'scoped:repo', action: 'repo.read', scopes: ['repo.read'], maxUses: 5 }, agentAuth) + + // in-prefix path is allowed + const ok = await api(app, 'POST', `/runs/${run.body.run.id}/grants/${grant.body.grantId}/use`, { method: 'GET', path: '/repos/acme/app/pulls' }, agentAuth) + expect(ok.status).toBe(200) + // out-of-prefix path is blocked even though host + verb match + const blocked = await api(app, 'POST', `/runs/${run.body.run.id}/grants/${grant.body.grantId}/use`, { method: 'GET', path: '/repos/other/secret' }, agentAuth) + expect(blocked.status).toBe(403) + expect(blocked.body.code).toBe('ssrf_blocked') + }) +}) diff --git a/apps/server/test/agent-auth.test.ts b/apps/server/test/agent-auth.test.ts new file mode 100644 index 0000000..9242c0a --- /dev/null +++ b/apps/server/test/agent-auth.test.ts @@ -0,0 +1,152 @@ +import { describe, expect, it } from 'vitest' +import { createApp } from '../src/app' +import { api } from './helpers' + +describe('agent auth and run-bound grants', () => { + const KEY = 'test-secret-key' + const auth = { authorization: `Bearer ${KEY}` } + + async function setup() { + const app = createApp({ apiKey: KEY }) + const run = await api(app, 'POST', '/runs/agent-auth-workflow', {}, auth) + expect(run.status).toBe(200) + + const agent = await api( + app, + 'POST', + '/agents', + { name: 'ci-fixer', principal: 'acme' }, + auth + ) + expect(agent.status).toBe(200) + + const proved = await api(app, 'POST', `/agents/${agent.body.agentId}/prove`, {}, auth) + expect(proved.status).toBe(200) + const agentAuth = { authorization: `Bearer ${proved.body.sessionToken}` } + + const resource = await api( + app, + 'POST', + '/resources', + { + name: 'github', + principal: 'acme', + provider: 'nango', + scopesAllowed: ['pull_request.write'] + }, + auth + ) + expect(resource.status).toBe(200) + + return { app, runId: run.body.run.id as string, agent, agentAuth, resource } + } + + it('keeps agent sessions scoped to grant/audit surfaces when shared API auth is enabled', async () => { + const { app, agentAuth } = await setup() + + const runs = await api(app, 'GET', '/runs', undefined, agentAuth) + expect(runs.status).toBe(401) + }) + + it('requests and uses a proxy grant without exposing held credentials', async () => { + const { app, runId, agentAuth } = await setup() + + const grant = await api( + app, + 'POST', + `/runs/${runId}/grants`, + { + resource: 'github:repo:acme/app', + action: 'pull_request.create', + scopes: ['pull_request.write'], + reason: 'open a fix PR' + }, + agentAuth + ) + expect(grant.status).toBe(200) + expect(grant.body.status).toBe('active') + expect(grant.body.mode).toBe('proxy') + expect(grant.body.token).toBeUndefined() + + const used = await api( + app, + 'POST', + `/runs/${runId}/grants/${grant.body.grantId}/use`, + { method: 'POST', path: '/repos/acme/app/pulls', body: { title: 'Fix CI' } }, + agentAuth + ) + expect(used.status).toBe(200) + expect(used.body.response.proxied).toBe(true) + + const secondUse = await api( + app, + 'POST', + `/runs/${runId}/grants/${grant.body.grantId}/use`, + { method: 'POST', path: '/repos/acme/app/pulls' }, + agentAuth + ) + expect(secondUse.status).toBe(409) + + const audit = await api(app, 'GET', `/audit?runId=${runId}`, undefined, agentAuth) + expect(audit.status).toBe(200) + expect(audit.body.map((entry: { type: string }) => entry.type)).toContain('grant.used') + expect(JSON.stringify(audit.body)).not.toContain('connection_ref') + expect(JSON.stringify(audit.body)).not.toContain('tdb_grant_') + }) + + it('denies scopes beyond the connected resource ceiling', async () => { + const { app, runId, agentAuth } = await setup() + const grant = await api( + app, + 'POST', + `/runs/${runId}/grants`, + { + resource: 'github:repo:acme/app', + action: 'repo.admin', + scopes: ['admin'] + }, + agentAuth + ) + expect(grant.status).toBe(403) + }) + + it('routes sensitive actions through an existing approval gate', async () => { + const { app, runId, agentAuth } = await setup() + const grant = await api( + app, + 'POST', + `/runs/${runId}/grants`, + { + resource: 'github:repo:acme/app', + action: 'deploy.delete', + scopes: ['pull_request.write'] + }, + agentAuth + ) + expect(grant.status).toBe(200) + expect(grant.body.status).toBe('pending') + expect(grant.body.gateId).toMatch(/^gate_/) + + const detail = await api(app, 'GET', `/runs/${runId}`, undefined, auth) + const gate = detail.body.gates.find((item: { id: string }) => item.id === grant.body.gateId) + expect(gate.resolveToken).toBeTruthy() + + const resolved = await api( + app, + 'POST', + `/runs/${runId}/gates/${grant.body.gateId}/resolve`, + { token: gate.resolveToken, decision: 'approved', actor: 'owner' }, + auth + ) + expect(resolved.status).toBe(200) + + const used = await api( + app, + 'POST', + `/runs/${runId}/grants/${grant.body.grantId}/use`, + { method: 'DELETE', path: '/deployments/old' }, + agentAuth + ) + expect(used.status).toBe(200) + }) +}) diff --git a/apps/server/test/envelope.test.ts b/apps/server/test/envelope.test.ts new file mode 100644 index 0000000..640aa27 --- /dev/null +++ b/apps/server/test/envelope.test.ts @@ -0,0 +1,59 @@ +import { randomBytes } from 'node:crypto' +import { describe, expect, it } from 'vitest' +import { LocalKms, decryptSecret, encryptSecret, resolveKms } from '../src/envelope' + +const masterKey = randomBytes(32).toString('base64') + +describe('envelope encryption', () => { + it('round-trips a secret through encrypt/decrypt', () => { + const kms = new LocalKms(Buffer.from(masterKey, 'base64')) + const secret = 'ghp_super_secret_token_value' + const material = encryptSecret(secret, kms) + expect(decryptSecret(material, kms)).toBe(secret) + }) + + it('never stores the plaintext in the material', () => { + const kms = new LocalKms(Buffer.from(masterKey, 'base64')) + const material = encryptSecret('ghp_super_secret_token_value', kms) + expect(JSON.stringify(material)).not.toContain('ghp_super_secret_token_value') + }) + + it('uses a unique DEK/iv per encryption (ciphertexts differ for same input)', () => { + const kms = new LocalKms(Buffer.from(masterKey, 'base64')) + const a = encryptSecret('same', kms) + const b = encryptSecret('same', kms) + expect(a.ciphertext).not.toBe(b.ciphertext) + expect(a.wrappedDek).not.toBe(b.wrappedDek) + }) + + it('fails to decrypt with the wrong KEK', () => { + const kms = new LocalKms(Buffer.from(masterKey, 'base64')) + const other = new LocalKms(randomBytes(32)) + const material = encryptSecret('secret', kms) + expect(() => decryptSecret(material, other)).toThrow() + }) + + it('rejects tampered ciphertext (GCM auth)', () => { + const kms = new LocalKms(Buffer.from(masterKey, 'base64')) + const material = encryptSecret('secret', kms) + const tampered = { ...material, ciphertext: Buffer.from('deadbeef', 'hex').toString('base64') } + expect(() => decryptSecret(tampered, kms)).toThrow() + }) + + it('resolveKms returns null when no key is configured (caller must fail closed)', () => { + expect(resolveKms({} as NodeJS.ProcessEnv)).toBeNull() + }) + + it('resolveKms builds a LocalKms from a valid master key', () => { + const kms = resolveKms({ TIDEBASE_MASTER_KEY: masterKey } as NodeJS.ProcessEnv) + expect(kms?.keyId).toMatch(/^local:/) + }) + + it('rejects a malformed master key', () => { + expect(() => resolveKms({ TIDEBASE_MASTER_KEY: 'too-short' } as NodeJS.ProcessEnv)).toThrow() + }) + + it('throws for an unimplemented cloud KMS rather than degrading', () => { + expect(() => resolveKms({ TIDEBASE_KMS: 'aws:arn:xyz' } as NodeJS.ProcessEnv)).toThrow() + }) +}) diff --git a/apps/server/test/integration/nango.int.test.ts b/apps/server/test/integration/nango.int.test.ts new file mode 100644 index 0000000..cb3b136 --- /dev/null +++ b/apps/server/test/integration/nango.int.test.ts @@ -0,0 +1,48 @@ +import { describe, expect, it } from 'vitest' +import { acquireCredential, resolveBackend } from '../../src/providers' + +// LIVE integration test against a self-hosted Nango server. Skipped unless +// NANGO_LIVE=1. Run with: +// NANGO_LIVE=1 NANGO_HOST=http://localhost:8088 NANGO_SECRET_KEY= \ +// npx vitest run test/integration/nango.int.test.ts +// Assumes an integration 'test-apikey' and connection 'conn-acme' seeded with apiKey 'ghp_LIVE_nango_secret_999'. +const live = process.env.NANGO_LIVE === '1' + +describe.skipIf(!live)('Nango client — live connection fetch', () => { + const env = { + NANGO_SECRET_KEY: process.env.NANGO_SECRET_KEY, + NANGO_HOST: process.env.NANGO_HOST, + NODE_ENV: 'production' + } as NodeJS.ProcessEnv + + it('resolves the nango backend (configured, mintable)', () => { + const b = resolveBackend('nango', env) + expect(b.kind).toBe('nango') + expect(b.canMint).toBe(true) + }) + + it('fetches the real credential for a live connection', async () => { + const res = await acquireCredential(resolveBackend('nango', env), { + kms: null, + connectionRef: 'test-apikey::conn-acme', + resource: 'airtable:base:acme', + scopes: [], + env, + loadSecretMaterial: async () => null + }) + expect(res.ok).toBe(true) + if (res.ok) expect(res.credential).toEqual({ scheme: 'bearer', token: 'ghp_LIVE_nango_secret_999' }) + }) + + it('fails closed for an unknown connection (real 404)', async () => { + const res = await acquireCredential(resolveBackend('nango', env), { + kms: null, + connectionRef: 'test-apikey::does-not-exist', + resource: 'r', + scopes: [], + env, + loadSecretMaterial: async () => null + }) + expect(res.ok).toBe(false) + }) +}) diff --git a/apps/server/test/integration/openbao.int.test.ts b/apps/server/test/integration/openbao.int.test.ts new file mode 100644 index 0000000..2e52f10 --- /dev/null +++ b/apps/server/test/integration/openbao.int.test.ts @@ -0,0 +1,47 @@ +import { describe, expect, it } from 'vitest' +import { acquireCredential, resolveBackend } from '../../src/providers' + +// LIVE integration test against a real OpenBao server. Skipped unless OPENBAO_LIVE +// is set, so the normal hermetic suite/CI does not depend on it. Run with: +// OPENBAO_LIVE=1 OPENBAO_ADDR=http://localhost:8201 OPENBAO_TOKEN=root-tb-test \ +// npx vitest run test/integration/openbao.int.test.ts +const live = process.env.OPENBAO_LIVE === '1' + +describe.skipIf(!live)('OpenBao client — live KV v2', () => { + const env = { + OPENBAO_ADDR: process.env.OPENBAO_ADDR, + OPENBAO_TOKEN: process.env.OPENBAO_TOKEN, + NODE_ENV: 'production' + } as NodeJS.ProcessEnv + + it('resolves the openbao backend (configured)', () => { + const b = resolveBackend('openbao', env) + expect(b.kind).toBe('openbao') + expect(b.simulated).toBe(false) + }) + + it('fetches a real secret written to KV v2', async () => { + const res = await acquireCredential(resolveBackend('openbao', env), { + kms: null, + connectionRef: 'secret/data/github/acme', + resource: 'github:repo:acme/app', + scopes: [], + env, + loadSecretMaterial: async () => null + }) + expect(res.ok).toBe(true) + if (res.ok) expect(res.credential).toEqual({ scheme: 'bearer', token: 'ghp_LIVE_openbao_secret_123' }) + }) + + it('fails closed on a missing path (real 404)', async () => { + const res = await acquireCredential(resolveBackend('openbao', env), { + kms: null, + connectionRef: 'secret/data/does/not/exist', + resource: 'r', + scopes: [], + env, + loadSecretMaterial: async () => null + }) + expect(res.ok).toBe(false) + }) +}) diff --git a/apps/server/test/policy.test.ts b/apps/server/test/policy.test.ts new file mode 100644 index 0000000..cd02f60 --- /dev/null +++ b/apps/server/test/policy.test.ts @@ -0,0 +1,68 @@ +import { describe, expect, it } from 'vitest' +import { DEFAULT_POLICY, callMatchesAction, evaluatePolicy } from '../src/policy' + +const base = { resource: 'github:repo:acme/app', requestedScopes: [] as string[], mode: 'proxy' as const } + +describe('policy engine — default-deny posture', () => { + it('auto-allows recognized low-risk actions', () => { + const d = evaluatePolicy({ ...base, action: 'pull_request.create' }) + expect(d.effect).toBe('allow') + expect(d.requiresApproval).toBe(false) + }) + + it('routes sensitive actions through approval and forces proxy', () => { + for (const action of ['deploy.delete', 'billing.charge', 'secret.read', 'iam.admin']) { + const d = evaluatePolicy({ ...base, action, mode: 'mint' }) + expect(d.effect, action).toBe('approval') + expect(d.requiresApproval, action).toBe(true) + expect(d.mode, action).toBe('proxy') // forced even though mint requested + expect(d.forcedProxy, action).toBe(true) + } + }) + + it('hard-denies destructive actions', () => { + for (const action of ['db.destroy', 'repo.force_push', 'table.truncate']) { + expect(evaluatePolicy({ ...base, action }).effect, action).toBe('deny') + } + }) + + it('never silently allows an unrecognized action (default to approval)', () => { + const d = evaluatePolicy({ ...base, action: 'some.weird_unknown_verb' }) + expect(d.effect).toBe('approval') + expect(d.effect).not.toBe('allow') + expect(d.matchedRule).toBe('default') + }) + + it('default posture is never allow (config invariant)', () => { + expect(DEFAULT_POLICY.defaultEffect).not.toBe('allow') + }) + + // Lightweight fuzz: random action strings must always resolve to a valid, + // never-silently-allowed-by-default effect. + it('always returns a valid effect for arbitrary input', () => { + const fragments = ['delete', 'read', 'foo', 'charge', 'create', 'x', 'destroy', '', '.', 'admin.x'] + for (let i = 0; i < 200; i++) { + const action = Array.from({ length: (i % 4) + 1 }, (_, j) => fragments[(i + j) % fragments.length]).join('.') + const d = evaluatePolicy({ ...base, action }) + expect(['allow', 'approval', 'deny']).toContain(d.effect) + if (d.matchedRule === 'default') expect(d.effect).not.toBe('allow') + } + }) +}) + +describe('callMatchesAction — proxied call is bound to the action verb', () => { + it('permits the matching method', () => { + expect(callMatchesAction('pull_request.create', 'POST').ok).toBe(true) + expect(callMatchesAction('repo.read', 'GET').ok).toBe(true) + expect(callMatchesAction('deploy.delete', 'DELETE').ok).toBe(true) + }) + + it('rejects a method outside the verb class (read grant cannot DELETE)', () => { + expect(callMatchesAction('repo.read', 'DELETE').ok).toBe(false) + expect(callMatchesAction('issue.list', 'POST').ok).toBe(false) + }) + + it('does not over-constrain unknown verbs', () => { + expect(callMatchesAction('custom.frobnicate', 'POST').ok).toBe(true) + }) +}) diff --git a/apps/server/test/provider-clients.test.ts b/apps/server/test/provider-clients.test.ts new file mode 100644 index 0000000..4fbfb21 --- /dev/null +++ b/apps/server/test/provider-clients.test.ts @@ -0,0 +1,73 @@ +import { createServer, type IncomingMessage, type Server } from 'node:http' +import { afterAll, beforeAll, describe, expect, it } from 'vitest' +import { acquireCredential, resolveBackend } from '../src/providers' + +// Verifies the real Nango/OpenBao client wire format against a mock service. +// (Integration against the live services is the remaining external step.) + +let server: Server +let port: number +let captured: { url?: string; headers?: IncomingMessage['headers'] } = {} +let respond: () => { status: number; body: unknown } = () => ({ status: 200, body: {} }) + +beforeAll(async () => { + server = createServer((req, res) => { + captured = { url: req.url, headers: req.headers } + const r = respond() + res.statusCode = r.status + res.setHeader('content-type', 'application/json') + res.end(JSON.stringify(r.body)) + }) + await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve)) + port = (server.address() as { port: number }).port +}) + +afterAll(async () => { + await new Promise((resolve) => server.close(() => resolve())) +}) + +describe('Nango client', () => { + it('fetches the connection with the right URL + auth and extracts the token', async () => { + respond = () => ({ status: 200, body: { credentials: { access_token: 'oauth_tok_xyz' } } }) + const env = { NANGO_SECRET_KEY: 'sk_test', NANGO_HOST: `http://127.0.0.1:${port}`, NODE_ENV: 'production' } as NodeJS.ProcessEnv + const res = await acquireCredential(resolveBackend('nango', env), { + kms: null, connectionRef: 'github-prod::conn_123', resource: 'github:repo:a/b', scopes: [], env, + loadSecretMaterial: async () => null + }) + expect(res.ok).toBe(true) + if (res.ok) expect(res.credential).toEqual({ scheme: 'bearer', token: 'oauth_tok_xyz' }) + expect(captured.url).toBe('/connection/conn_123?provider_config_key=github-prod') + expect(captured.headers?.authorization).toBe('Bearer sk_test') + }) + + it('fails closed on a malformed connection reference', async () => { + const env = { NANGO_SECRET_KEY: 'sk', NANGO_HOST: `http://127.0.0.1:${port}`, NODE_ENV: 'production' } as NodeJS.ProcessEnv + const res = await acquireCredential(resolveBackend('nango', env), { + kms: null, connectionRef: 'no-separator', resource: 'r', scopes: [], env, loadSecretMaterial: async () => null + }) + expect(res.ok).toBe(false) + }) +}) + +describe('OpenBao client', () => { + it('reads the secret path with the vault token and extracts a KV v2 value', async () => { + respond = () => ({ status: 200, body: { data: { data: { token: 'vault_secret_abc' } } } }) + const env = { OPENBAO_ADDR: `http://127.0.0.1:${port}`, OPENBAO_TOKEN: 'hvs.root', NODE_ENV: 'production' } as NodeJS.ProcessEnv + const res = await acquireCredential(resolveBackend('openbao', env), { + kms: null, connectionRef: 'secret/data/github/acme', resource: 'r', scopes: [], env, loadSecretMaterial: async () => null + }) + expect(res.ok).toBe(true) + if (res.ok) expect(res.credential).toEqual({ scheme: 'bearer', token: 'vault_secret_abc' }) + expect(captured.url).toBe('/v1/secret/data/github/acme') + expect(captured.headers?.['x-vault-token']).toBe('hvs.root') + }) + + it('fails closed when the service errors', async () => { + respond = () => ({ status: 403, body: { errors: ['permission denied'] } }) + const env = { OPENBAO_ADDR: `http://127.0.0.1:${port}`, OPENBAO_TOKEN: 't', NODE_ENV: 'production' } as NodeJS.ProcessEnv + const res = await acquireCredential(resolveBackend('openbao', env), { + kms: null, connectionRef: 'secret/data/x', resource: 'r', scopes: [], env, loadSecretMaterial: async () => null + }) + expect(res.ok).toBe(false) + }) +}) diff --git a/apps/server/test/providers.test.ts b/apps/server/test/providers.test.ts new file mode 100644 index 0000000..0403da5 --- /dev/null +++ b/apps/server/test/providers.test.ts @@ -0,0 +1,116 @@ +import { randomBytes } from 'node:crypto' +import { describe, expect, it } from 'vitest' +import { encryptSecret, LocalKms } from '../src/envelope' +import { + acquireCredential, + executeProxy, + normalizeCredential, + resolveBackend +} from '../src/providers' + +const dev = { NODE_ENV: 'development' } as NodeJS.ProcessEnv +const prod = { NODE_ENV: 'production' } as NodeJS.ProcessEnv + +describe('resolveBackend — capability & fail-closed', () => { + it('uses simulated dev-reference only when dev-reference is allowed', () => { + expect(resolveBackend('nango', dev).simulated).toBe(true) + expect(resolveBackend('nango', dev).kind).toBe('dev') + }) + + it('fails closed in production when a real backend is unconfigured', () => { + const b = resolveBackend('nango', prod) + expect(b.kind).toBe('failclosed') + expect(b.simulated).toBe(false) + }) + + it('activates the real backend when configured', () => { + expect(resolveBackend('nango', { ...prod, NANGO_SECRET_KEY: 'sk' } as NodeJS.ProcessEnv).kind).toBe('nango') + expect(resolveBackend('openbao', { ...prod, OPENBAO_ADDR: 'https://v', OPENBAO_TOKEN: 't' } as NodeJS.ProcessEnv).kind).toBe('openbao') + expect(resolveBackend('static', { ...prod, TIDEBASE_MASTER_KEY: randomBytes(32).toString('base64') } as NodeJS.ProcessEnv).kind).toBe('vault') + }) + + it('vault custody fails closed in production without a KMS', () => { + expect(resolveBackend('static', prod).kind).toBe('failclosed') + }) + + it('only mintable backends report canMint', () => { + expect(resolveBackend('nango', { ...prod, NANGO_SECRET_KEY: 'sk' } as NodeJS.ProcessEnv).canMint).toBe(true) + expect(resolveBackend('static', { ...prod, TIDEBASE_MASTER_KEY: randomBytes(32).toString('base64') } as NodeJS.ProcessEnv).canMint).toBe(false) + }) + + it('rejects unknown providers', () => { + expect(resolveBackend('made-up').kind).toBe('failclosed') + }) +}) + +describe('acquireCredential — vault decrypts envelope material', () => { + it('decrypts a vaulted credential without exposing the ciphertext', async () => { + const kms = new LocalKms(randomBytes(32)) + const material = encryptSecret(JSON.stringify({ scheme: 'bearer', token: 'ghp_live_secret' }), kms) + const res = await acquireCredential(resolveBackend('static', { TIDEBASE_MASTER_KEY: 'x', NODE_ENV: 'production' } as NodeJS.ProcessEnv), { + kms, + connectionRef: '', + resource: 'github:repo:a/b', + scopes: [], + env: process.env, + loadSecretMaterial: async () => ({ material, keyId: kms.keyId }) + }) + expect(res.ok).toBe(true) + if (res.ok) expect(res.credential).toEqual({ scheme: 'bearer', token: 'ghp_live_secret' }) + }) + + it('fails closed when no secret is stored', async () => { + const kms = new LocalKms(randomBytes(32)) + const res = await acquireCredential({ name: 'vault', kind: 'vault', simulated: false, canMint: false }, { + kms, connectionRef: '', resource: 'r', scopes: [], env: process.env, + loadSecretMaterial: async () => null + }) + expect(res.ok).toBe(false) + }) + + it('dev backend yields a no-secret credential', async () => { + const res = await acquireCredential(resolveBackend('nango', dev), { + kms: null, connectionRef: '', resource: 'r', scopes: [], env: dev, + loadSecretMaterial: async () => null + }) + expect(res.ok && res.credential.scheme).toBe('none') + }) +}) + +describe('executeProxy — simulated vs blocked', () => { + it('simulates (no real call) for a no-secret credential', async () => { + const out = await executeProxy({ + backend: resolveBackend('nango', dev), + baseUrl: null, + call: { method: 'GET', path: '/x' }, + credential: { scheme: 'none' }, + env: dev + }) + expect(out.ok && out.simulated).toBe(true) + }) + + it('blocks SSRF to a private address even with a real credential', async () => { + const out = await executeProxy({ + backend: { name: 'vault', kind: 'vault', simulated: false, canMint: false }, + baseUrl: 'http://169.254.169.254', + call: { method: 'GET', path: '/latest/meta-data' }, + credential: { scheme: 'bearer', token: 'secret' }, + env: { NODE_ENV: 'production' } as NodeJS.ProcessEnv + }) + expect(out.ok).toBe(false) + if (!out.ok) expect(out.code).toBe('ssrf_blocked') + }) +}) + +describe('normalizeCredential', () => { + it('treats a bare string as a bearer token', () => { + expect(normalizeCredential('tok')).toEqual({ scheme: 'bearer', token: 'tok' }) + }) + it('accepts structured credentials', () => { + expect(normalizeCredential({ scheme: 'header', name: 'X-Api-Key', value: 'k' })).toEqual({ scheme: 'header', name: 'X-Api-Key', value: 'k' }) + }) + it('rejects junk', () => { + expect(normalizeCredential({ nope: true })).toBeNull() + expect(normalizeCredential(42)).toBeNull() + }) +}) diff --git a/apps/server/test/ratelimit.test.ts b/apps/server/test/ratelimit.test.ts new file mode 100644 index 0000000..c1a73f6 --- /dev/null +++ b/apps/server/test/ratelimit.test.ts @@ -0,0 +1,37 @@ +import { randomBytes } from 'node:crypto' +import { describe, expect, it } from 'vitest' +import { consumeChallengePg, rateLimitPg, sweepAbuseStores } from '../src/ratelimit' + +describe('PG-backed rate limiter (multi-replica)', () => { + it('allows up to the limit then blocks within a window', async () => { + const bucket = `test:${randomBytes(6).toString('hex')}` + const results: boolean[] = [] + for (let i = 0; i < 5; i++) results.push(await rateLimitPg(bucket, 3, 60_000)) + expect(results).toEqual([true, true, true, false, false]) + }) + + it('resets at a window boundary', async () => { + const bucket = `test:${randomBytes(6).toString('hex')}` + const t0 = new Date('2030-01-01T00:00:00Z') + expect(await rateLimitPg(bucket, 1, 60_000, t0)).toBe(true) + expect(await rateLimitPg(bucket, 1, 60_000, t0)).toBe(false) + const t1 = new Date(t0.getTime() + 61_000) // next window + expect(await rateLimitPg(bucket, 1, 60_000, t1)).toBe(true) + }) +}) + +describe('PG-backed challenge replay cache', () => { + it('accepts first use and rejects replay', async () => { + const hash = randomBytes(16).toString('hex') + expect(await consumeChallengePg(hash, new Date(Date.now() + 90_000))).toBe(true) + expect(await consumeChallengePg(hash, new Date(Date.now() + 90_000))).toBe(false) + }) + + it('sweep removes expired challenges so the table does not grow unbounded', async () => { + const hash = randomBytes(16).toString('hex') + await consumeChallengePg(hash, new Date(Date.now() - 1000)) // already expired + await sweepAbuseStores(new Date()) + // after sweep the hash is gone, so it can be consumed fresh again + expect(await consumeChallengePg(hash, new Date(Date.now() + 90_000))).toBe(true) + }) +}) diff --git a/apps/server/test/secret-scan.test.ts b/apps/server/test/secret-scan.test.ts new file mode 100644 index 0000000..c7050fd --- /dev/null +++ b/apps/server/test/secret-scan.test.ts @@ -0,0 +1,58 @@ +import { readFileSync, readdirSync, statSync } from 'node:fs' +import { dirname, join, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' +import { describe, expect, it } from 'vitest' + +// CI secret-scan: a structural guard against two failure modes — +// 1. a real secret accidentally hard-coded into source, and +// 2. a code path that returns secret-bearing columns to clients. +// Runs over src/ only (test fixtures intentionally use fake secrets). + +const srcDir = resolve(dirname(fileURLToPath(import.meta.url)), '../src') + +function sourceFiles(dir: string): string[] { + return readdirSync(dir).flatMap((entry) => { + const full = join(dir, entry) + if (statSync(full).isDirectory()) return sourceFiles(full) + return full.endsWith('.ts') ? [full] : [] + }) +} + +const files = sourceFiles(srcDir) + +describe('secret scan over src/', () => { + // Known real-secret prefixes / blocks. Fixtures live in test/, which is excluded. + const patterns: Array<{ name: string; re: RegExp }> = [ + { name: 'PEM private key', re: /-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----/ }, + { name: 'GitHub token', re: /ghp_[A-Za-z0-9]{20,}/ }, + { name: 'Stripe live key', re: /sk_live_[A-Za-z0-9]{16,}/ }, + { name: 'AWS access key', re: /AKIA[0-9A-Z]{16}/ }, + { name: 'Slack token', re: /xox[baprs]-[A-Za-z0-9-]{10,}/ } + ] + + it('contains no hard-coded secrets', () => { + const hits: string[] = [] + for (const file of files) { + const text = readFileSync(file, 'utf8') + for (const { name, re } of patterns) { + if (re.test(text)) hits.push(`${name} in ${file}`) + } + } + expect(hits).toEqual([]) + }) + + it('never selects secret-bearing columns into a client response shape', () => { + // connection_ref / material_json are internal-only; they must never appear in + // a map*-to-client function. Cheap heuristic: those identifiers must not be + // referenced inside the mapResource/mapAgent/mapGrant/grantReceipt helpers. + const app = readFileSync(join(srcDir, 'app.ts'), 'utf8') + for (const mapper of ['function mapResource', 'function mapGrant', 'function grantReceipt']) { + const start = app.indexOf(mapper) + expect(start, mapper).toBeGreaterThan(-1) + const body = app.slice(start, start + 600) + expect(body, `${mapper} must not expose connection_ref`).not.toContain('connection_ref') + expect(body, `${mapper} must not expose material_json`).not.toContain('material_json') + expect(body, `${mapper} must not expose token_hash`).not.toContain('token_hash') + } + }) +}) diff --git a/apps/server/test/ssrf.test.ts b/apps/server/test/ssrf.test.ts new file mode 100644 index 0000000..58d1230 --- /dev/null +++ b/apps/server/test/ssrf.test.ts @@ -0,0 +1,62 @@ +import { describe, expect, it } from 'vitest' +import { assertSafeTarget, buildProxyUrl, isPrivateHostname, isPrivateV4 } from '../src/ssrf' + +describe('buildProxyUrl — host is pinned to the resource base_url', () => { + it('joins a relative path onto the base origin', () => { + const r = buildProxyUrl('https://api.github.com', '/repos/acme/app/pulls') + expect(r.ok && r.url).toBe('https://api.github.com/repos/acme/app/pulls') + }) + + it('honors a base path prefix', () => { + const r = buildProxyUrl('https://example.com/v2', '/widgets') + expect(r.ok && r.url).toBe('https://example.com/v2/widgets') + }) + + it('rejects an absolute URL supplied as the path', () => { + expect(buildProxyUrl('https://api.github.com', 'http://169.254.169.254/latest/meta-data').ok).toBe(false) + expect(buildProxyUrl('https://api.github.com', '//evil.com/x').ok).toBe(false) + }) + + it('rejects userinfo smuggling', () => { + const r = buildProxyUrl('https://api.github.com', '/x') + expect(r.ok).toBe(true) // sanity + expect(buildProxyUrl('https://user:pass@api.github.com', '/x').ok).toBe(true) // base userinfo is operator's choice + }) + + it('rejects a non-http base', () => { + expect(buildProxyUrl('file:///etc/passwd', '/x').ok).toBe(false) + }) +}) + +describe('private address detection', () => { + it('flags RFC1918, loopback, link-local and metadata', () => { + for (const ip of ['10.0.0.1', '127.0.0.1', '169.254.169.254', '172.16.5.4', '192.168.1.1', '100.64.0.1', '0.0.0.0']) { + expect(isPrivateV4(ip), ip).toBe(true) + } + }) + it('allows public IPs', () => { + for (const ip of ['8.8.8.8', '140.82.112.3', '1.1.1.1']) { + expect(isPrivateV4(ip), ip).toBe(false) + } + }) + it('flags internal hostnames', () => { + for (const h of ['localhost', 'foo.local', 'svc.internal', '::1']) { + expect(isPrivateHostname(h), h).toBe(true) + } + }) +}) + +describe('assertSafeTarget', () => { + it('refuses a private literal IP target', async () => { + const r = await assertSafeTarget('http://169.254.169.254/latest/meta-data', { allowPrivate: false }) + expect(r.ok).toBe(false) + }) + it('allows a public host', async () => { + const r = await assertSafeTarget('https://api.github.com/x', { allowPrivate: false }) + expect(r.ok).toBe(true) + }) + it('honors the dev allowPrivate escape hatch (loopback upstreams in tests)', async () => { + const r = await assertSafeTarget('http://127.0.0.1:9999/x', { allowPrivate: true }) + expect(r.ok).toBe(true) + }) +}) diff --git a/apps/server/vitest.config.ts b/apps/server/vitest.config.ts index c40e3a5..88cacaa 100644 --- a/apps/server/vitest.config.ts +++ b/apps/server/vitest.config.ts @@ -12,7 +12,12 @@ export default defineConfig({ hookTimeout: 20_000, env: { DATABASE_URL: testDatabaseUrl, - TIDEBASE_WEBHOOK_SECRET: 'test-webhook-secret' + TIDEBASE_WEBHOOK_SECRET: 'test-webhook-secret', + // The PG-backed limiter is shared across all test workers (same DB); keep + // the per-window ceiling high so legitimate test bursts never trip it. The + // limiter logic itself is covered deterministically in ratelimit.test.ts. + TIDEBASE_PROVE_RATE: '100000', + TIDEBASE_GRANT_RATE: '100000' } } }) diff --git a/docs/assets/crash-resume.gif b/docs/assets/crash-resume.gif index 62136ad..a02c92d 100644 Binary files a/docs/assets/crash-resume.gif and b/docs/assets/crash-resume.gif differ diff --git a/docs/assets/fanout.gif b/docs/assets/fanout.gif index 2ac0ad3..cb6560f 100644 Binary files a/docs/assets/fanout.gif and b/docs/assets/fanout.gif differ diff --git a/docs/assets/gates.gif b/docs/assets/gates.gif index 5cea74a..c9f1918 100644 Binary files a/docs/assets/gates.gif and b/docs/assets/gates.gif differ diff --git a/docs/assets/time-travel.gif b/docs/assets/time-travel.gif index d3290d2..6bd2072 100644 Binary files a/docs/assets/time-travel.gif and b/docs/assets/time-travel.gif differ diff --git a/migrations/003_agent_auth.sql b/migrations/003_agent_auth.sql new file mode 100644 index 0000000..b118d68 --- /dev/null +++ b/migrations/003_agent_auth.sql @@ -0,0 +1,140 @@ +-- v0.7: agent authentication & run-bound authorization (the auth control-plane layer). +-- Encodes the trust boundary: +-- SPIRE / identity provider = proves WHAT the agent is -> agents +-- OpenBao / Nango = hold WHAT the agent might need -> resources.connection_ref (opaque) +-- Tidebase = decides WHAT the agent may do now -> grants + policy + gates +-- Receipts ride on the existing append-only `events` log (type = 'grant.*'); no new audit table. +-- Expand-only: no destructive changes to existing rows or columns. + +-- Agent identity registry. The agent proves identity via a pluggable provider; +-- `identity_kind` selects which. SPIRE is one possible kind, not a requirement. +create table if not exists agents ( + id text primary key default ('agent_' || replace(gen_random_uuid()::text, '-', '')), + name text not null, + principal text, -- owning user/org/tenant + identity_kind text not null default 'dev_token', -- dev_token | keypair | cloud_key | spire + public_key text, -- for keypair/cloud_key providers + spiffe_id text, -- only when identity_kind = 'spire' + status text not null default 'active',-- active | disabled | revoked + metadata_json jsonb not null default '{}'::jsonb, + created_at timestamptz not null default now(), + updated_at timestamptz not null default now(), + unique (principal, name) +); + +create table if not exists agent_sessions ( + id text primary key default ('ags_' || replace(gen_random_uuid()::text, '-', '')), + agent_id text not null references agents(id) on delete cascade, + token_hash text not null unique, + expires_at timestamptz not null, + revoked_at timestamptz, + created_at timestamptz not null default now() +); + +-- Connected third-party resources. `connection_ref` is an OPAQUE internal pointer +-- (Nango connectionId, OpenBao secret path, etc.). It is NEVER returned by the API. +create table if not exists resources ( + id text primary key default ('res_' || replace(gen_random_uuid()::text, '-', '')), + principal text, -- owner; resources are delegated, not global + name text not null, -- 'github', 'gmail', 'stripe', ... + provider text not null, -- nango | openbao | static + kind text not null default 'oauth', -- oauth | api_key | dynamic + connection_ref text not null, -- INTERNAL pointer to the held secret; never exposed + scopes_allowed jsonb not null default '[]'::jsonb, -- ceiling: grants cannot exceed this + status text not null default 'connected', -- connected | revoked | error + metadata_json jsonb not null default '{}'::jsonb, + created_at timestamptz not null default now(), + updated_at timestamptz not null default now(), + unique (principal, name) +); + +-- A minted, scoped, run-bound capability. The product surface of "what may this +-- agent do right now". Stores token_hash, never the token. `mode`: +-- mint -> a short-lived scoped credential is handed to the agent +-- proxy -> the secret never leaves the boundary; Tidebase makes the call (default for high-sensitivity) +create table if not exists grants ( + id text primary key default ('grant_' || replace(gen_random_uuid()::text, '-', '')), + run_id text not null references runs(id) on delete cascade, + step_id text references steps(id) on delete set null, + agent_id text references agents(id) on delete set null, + resource_id text references resources(id) on delete set null, + resource text not null, -- requested target, e.g. 'github:repo:acme/app' + action text not null, -- e.g. 'pull_request.create' + scopes jsonb not null default '[]'::jsonb, + reason text, + mode text not null default 'proxy', -- proxy | mint + status text not null default 'pending', -- pending | approved | active | denied | expired | revoked | used + gate_id text references gates(id) on delete set null, -- approval gate, when policy requires one + token_hash text, -- hash of the short-lived grant token (mint mode only) + max_uses integer not null default 1, + used_count integer not null default 0, + ttl_seconds integer not null default 120, + policy_json jsonb not null default '{}'::jsonb, -- snapshot of the policy decision (for replay/audit) + issued_at timestamptz, + expires_at timestamptz, + revoked_at timestamptz, + created_at timestamptz not null default now(), + updated_at timestamptz not null default now() +); + +create index if not exists agents_principal_idx on agents(principal); +create index if not exists agent_sessions_agent_id_idx on agent_sessions(agent_id); +create index if not exists agent_sessions_expires_at_idx on agent_sessions(expires_at) where revoked_at is null; +create index if not exists resources_principal_idx on resources(principal); +create index if not exists grants_run_id_idx on grants(run_id); +create index if not exists grants_agent_id_idx on grants(agent_id); +create index if not exists grants_status_idx on grants(status); +create index if not exists grants_expires_at_idx on grants(expires_at) where status in ('active','approved'); + +do $$ +begin + alter table agents add constraint agents_identity_kind_check + check (identity_kind in ('dev_token','keypair','cloud_key','spire')); +exception when duplicate_object then null; +end $$; + +do $$ +begin + alter table agents add constraint agents_status_check + check (status in ('active','disabled','revoked')); +exception when duplicate_object then null; +end $$; + +do $$ +begin + alter table resources add constraint resources_provider_check + check (provider in ('nango','openbao','static')); +exception when duplicate_object then null; +end $$; + +do $$ +begin + alter table resources add constraint resources_kind_check + check (kind in ('oauth','api_key','dynamic')); +exception when duplicate_object then null; +end $$; + +do $$ +begin + alter table resources add constraint resources_status_check + check (status in ('connected','revoked','error')); +exception when duplicate_object then null; +end $$; + +do $$ +begin + alter table grants add constraint grants_mode_check + check (mode in ('proxy','mint')); +exception when duplicate_object then null; +end $$; + +do $$ +begin + alter table grants add constraint grants_status_check + check (status in ('pending','approved','active','denied','expired','revoked','used')); +exception when duplicate_object then null; +end $$; + +-- Receipts are events, not a new table. Canonical types emitted on the run: +-- grant.requested, grant.approved, grant.denied, grant.minted, grant.used, grant.revoked, grant.expired +-- Payloads carry grant_id / resource / action / agent_id and NEVER the secret or token. diff --git a/migrations/004_run_grant_tenancy.sql b/migrations/004_run_grant_tenancy.sql new file mode 100644 index 0000000..d17126c --- /dev/null +++ b/migrations/004_run_grant_tenancy.sql @@ -0,0 +1,7 @@ +-- v0.7: run-level tenancy for grants. A run is "claimed" by the first agent +-- principal that requests a grant on it (trust-on-first-use); subsequent grant +-- requests from a different principal are rejected. This isolates credential +-- brokering across tenants even though runs are created by the operator key +-- without a principal. Expand-only. +alter table runs add column if not exists grant_principal text; +create index if not exists runs_grant_principal_idx on runs(grant_principal) where grant_principal is not null; diff --git a/migrations/005_custody_and_abuse_stores.sql b/migrations/005_custody_and_abuse_stores.sql new file mode 100644 index 0000000..b97519f --- /dev/null +++ b/migrations/005_custody_and_abuse_stores.sql @@ -0,0 +1,29 @@ +-- v0.7: real credential custody + multi-replica abuse stores. +-- resource_secrets : envelope-encrypted credential material (never plaintext) +-- resources.base_url : upstream API base the proxy is pinned to (SSRF defense) +-- rate_limits : shared fixed-window limiter (replaces per-process map) +-- consumed_challenges : shared keypair-challenge replay cache (multi-replica) +-- Expand-only. + +alter table resources add column if not exists base_url text; + +create table if not exists resource_secrets ( + resource_id text primary key references resources(id) on delete cascade, + material_json jsonb not null, -- AES-256-GCM envelope; ciphertext + wrapped DEK only + key_id text not null, -- which KEK wrapped the DEK (rotation) + created_at timestamptz not null default now(), + updated_at timestamptz not null default now() +); + +create table if not exists rate_limits ( + bucket text primary key, + window_start timestamptz not null, + count integer not null default 0 +); +create index if not exists rate_limits_window_idx on rate_limits(window_start); + +create table if not exists consumed_challenges ( + challenge_hash text primary key, + expires_at timestamptz not null +); +create index if not exists consumed_challenges_expires_idx on consumed_challenges(expires_at); diff --git a/migrations/006_resource_path_scope.sql b/migrations/006_resource_path_scope.sql new file mode 100644 index 0000000..5cac499 --- /dev/null +++ b/migrations/006_resource_path_scope.sql @@ -0,0 +1,5 @@ +-- v0.7 (security review): per-resource path scoping for the proxy. When set, the +-- proxied request path must start with this prefix, so a grant cannot reach +-- arbitrary objects the upstream credential could otherwise access (narrows the +-- proxy from "verb + host" to "verb + host + path subtree"). Expand-only. +alter table resources add column if not exists allowed_path_prefix text; diff --git a/packages/sdk/src/auth.ts b/packages/sdk/src/auth.ts new file mode 100644 index 0000000..694a857 --- /dev/null +++ b/packages/sdk/src/auth.ts @@ -0,0 +1,292 @@ +/** + * Agent authentication & run-bound authorization — the Tidebase auth control-plane layer. + * + * Trust boundary (the one sentence the product is built on): + * SPIRE / IdentityProvider proves WHAT the agent is. + * OpenBao / Nango hold WHAT the agent might need. + * Tidebase decides WHAT the agent may do RIGHT NOW. + * + * Security invariant: the agent NEVER receives a long-lived credential. Tidebase + * either mints a short-lived, scoped, single-use grant (`mode: 'mint'`) or proxies + * the call so the secret never leaves the boundary (`mode: 'proxy'`, the default). + * + * Status: v0 API surface + dev-mode reference path. Server-side secret custody + * (OpenBao/Nango) and SPIRE attestation are pluggable backends — see DESIGN_agent_auth.md. + * This module intentionally exposes ZERO OpenBao/SPIRE concepts (no SVID, mount, + * lease path, secret engine, attestor) in the public API. + */ + +import type { CapabilityIntent } from './index.js' + +// --------------------------------------------------------------------------- +// Identity — pluggable. SPIRE is one provider, never a requirement. +// --------------------------------------------------------------------------- + +export type IdentityKind = 'dev_token' | 'keypair' | 'cloud_key' | 'spire' + +export type AgentIdentity = { + agentId: string + name: string + principal: string | null + identityKind: IdentityKind + status: 'active' | 'disabled' | 'revoked' +} + +export type AgentRegisterOptions = { + name: string + principal?: string + /** Selects the proof mechanism. Defaults to the server's configured provider + * ('dev_token' in dev, 'keypair'/'cloud_key' in cloud). Pass 'spire' only when + * the agent runs as an attested workload in a SPIRE-meshed environment. */ + identityKind?: IdentityKind + publicKey?: string + metadata?: Record +} + +export type ProveOptions = { + /** Dev provider: a bearer token. Keypair: a `challenge` (from agents.challenge) + * plus its Ed25519 `signature`. SPIRE: handled out-of-band via the workload API. */ + token?: string + challenge?: string + signature?: string +} + +export type Challenge = { + /** Opaque single-use challenge to sign with the agent's private key. */ + challenge: string + expiresAt: string +} + +export type ProveResult = { + agentId: string + /** Short-lived session token the agent presents on subsequent calls. */ + sessionToken: string + expiresAt: string +} + +/** + * Provider seam. v0 ships DevTokenProvider + KeypairProvider; SpireProvider is a + * stub that delegates to the SPIRE workload API server-side. Adding SPIRE later + * is NOT an API break — the public surface above never changes. + */ +export interface IdentityProvider { + readonly kind: IdentityKind + prove(agentId: string, opts: ProveOptions): Promise +} + +// --------------------------------------------------------------------------- +// Resources — delegated third-party connections (Nango/OpenBao live behind these). +// --------------------------------------------------------------------------- + +export type ResourceConnectOptions = { + /** 'nango' for user-delegated SaaS OAuth, 'openbao' for held secrets/dynamic + * creds, 'static' for a directly supplied key vaulted by Tidebase. Default 'nango'. */ + provider?: 'nango' | 'openbao' | 'static' + principal?: string + /** Ceiling of scopes any grant against this resource may request. */ + scopesAllowed?: string[] + /** Upstream API base the proxy is pinned to (SSRF defense). Required to proxy. */ + baseUrl?: string + /** provider:'static' only — the credential to vault (envelope-encrypted at rest). + * A bearer-token string or a structured credential. Never returned or logged. */ + secret?: string | { scheme: 'bearer'; token: string } | { scheme: 'header'; name: string; value: string } | { scheme: 'basic'; username: string; password: string } + /** provider:'nango'|'openbao' — opaque pointer to the held secret + * (e.g. '::' or a vault path). */ + connectionRef?: string + metadata?: Record +} + +export type Resource = { + resourceId: string + name: string + provider: 'nango' | 'openbao' | 'static' + status: 'connected' | 'revoked' | 'error' + // NOTE: connection_ref (the internal pointer to the held secret) is deliberately absent. +} + +// --------------------------------------------------------------------------- +// Grants — "what may this agent do right now". The product. +// --------------------------------------------------------------------------- + +export type GrantRequest = { + /** Target resource + object, e.g. 'github:repo:acme/app'. */ + resource: string + /** Action, e.g. 'pull_request.create'. Drives policy + least-privilege scope. */ + action: string + reason?: string + scopes?: string[] + /** 'proxy' (default) keeps the secret behind the boundary; 'mint' hands the + * agent a short-lived scoped token. Policy may force 'proxy'. */ + mode?: 'proxy' | 'mint' + ttlSeconds?: number + maxUses?: number +} + +export type GrantStatus = + | 'pending' | 'approved' | 'active' | 'denied' | 'expired' | 'revoked' | 'used' + +export type Grant = { + grantId: string + runId: string + resource: string + action: string + status: GrantStatus + mode: 'proxy' | 'mint' + /** Present only when status='active' AND mode='mint'. Short-lived, scoped, + * single-use by default. Absent in proxy mode — there is nothing to hand out. */ + token?: string + expiresAt: string | null + /** Set when policy routed the request through an approval gate (reuses RunGates). */ + gateId?: string | null +} + +/** Result of proxying a call through a grant. `response.body` is the upstream + * response; `simulated` is true for the dev-reference backend (no real call). */ +export type GrantUseResult = { + grant: Grant + response: { + ok: true + mode: 'proxy' | 'mint' + proxied: true + simulated: boolean + provider: string + status: number + body?: unknown + method: string + path: string + } +} + +/** A grant.* receipt, read back from the run's append-only event log. */ +export type AuditEntry = { + seq: number + type: string // grant.requested | grant.approved | grant.minted | grant.used | ... + grantId: string + resource: string + action: string + agentId: string | null + at: string + // Never contains the secret or token. +} + +export type AuditQuery = { + runId?: string + agentId?: string + resource?: string + types?: string[] + limit?: number +} + +// --------------------------------------------------------------------------- +// Client surface. Mirrors the existing SDK idiom: top-level clients constructed +// with the Tidebase transport, run-scoped clients constructed with (client, runId). +// `RequestTransport` is the narrow slice of `Tidebase` these clients depend on. +// --------------------------------------------------------------------------- + +export interface RequestTransport { + request(path: string, init?: { method?: string; body?: string }): Promise +} + +export class AgentsClient { + constructor(private readonly client: RequestTransport) {} + + async register(opts: AgentRegisterOptions): Promise { + return this.client.request('/agents', { + method: 'POST', + body: JSON.stringify(opts) + }) + } + + /** Request a single-use challenge for a keypair/cloud_key agent to sign. */ + async challenge(agentId: string): Promise { + return this.client.request(`/agents/${agentId}/challenge`, { method: 'POST' }) + } + + /** Exchange a proof for a short-lived session token. */ + async prove(agentId: string, opts: ProveOptions = {}): Promise { + return this.client.request(`/agents/${agentId}/prove`, { + method: 'POST', + body: JSON.stringify(opts) + }) + } + + async get(agentId: string): Promise { + return this.client.request(`/agents/${agentId}`) + } +} + +export class ResourcesClient { + constructor(private readonly client: RequestTransport) {} + + /** Begin/complete a delegated connection. For Nango this kicks off the OAuth + * connect flow; the returned Resource never carries the underlying token. */ + async connect(name: string, opts: ResourceConnectOptions = {}): Promise { + return this.client.request('/resources', { + method: 'POST', + body: JSON.stringify({ name, ...opts }) + }) + } + + async revoke(resourceId: string): Promise { + await this.client.request(`/resources/${resourceId}/revoke`, { method: 'POST' }) + } +} + +/** + * Run-scoped authorization. Reachable as `ctx.auth` inside a workflow, exactly + * like `ctx.gates` / `ctx.usage`. Every request is bound to the run, evaluated + * against policy in run context, and recorded as a receipt on the run's events. + */ +export class RunAuth { + constructor( + private readonly client: RequestTransport, + private readonly runId: string + ) {} + + /** + * Request a capability for a resource/action. Resolves to an active Grant once + * policy passes (and any approval gate is approved). In proxy mode the grant + * carries no token; call `use()` to proxy the action through Tidebase. + * + * This is the resolution of a step's declared `CredentialIntent` — see + * StepOptions.credentials in the core SDK. + */ + async request(req: GrantRequest): Promise { + return this.client.request(`/runs/${this.runId}/grants`, { + method: 'POST', + body: JSON.stringify(req) + }) + } + + /** Proxy a call using a grant. The secret stays behind the boundary; Tidebase + * injects it into the upstream request and returns the upstream response. The + * agent sees the response, never the credential. Each use counts against maxUses. */ + async use(grantId: string, call: { method: string; path: string; body?: unknown }): Promise { + return this.client.request(`/runs/${this.runId}/grants/${grantId}/use`, { + method: 'POST', + body: JSON.stringify(call) + }) + } + + async revoke(grantId: string): Promise { + await this.client.request(`/runs/${this.runId}/grants/${grantId}/revoke`, { method: 'POST' }) + } +} + +export class AuditClient { + constructor(private readonly client: RequestTransport) {} + + /** Reads grant.* receipts from the append-only event log. */ + async list(query: AuditQuery = {}): Promise { + const qs = new URLSearchParams() + if (query.runId) qs.set('runId', query.runId) + if (query.agentId) qs.set('agentId', query.agentId) + if (query.resource) qs.set('resource', query.resource) + if (query.types?.length) qs.set('types', query.types.join(',')) + if (query.limit) qs.set('limit', String(query.limit)) + return this.client.request(`/audit?${qs.toString()}`) + } +} + +// Re-export so call sites can resolve a step's declared credential intent into a grant. +export type { CapabilityIntent } diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts index 7d0de16..2d0c5f5 100644 --- a/packages/sdk/src/index.ts +++ b/packages/sdk/src/index.ts @@ -1,8 +1,10 @@ import { createHash, createHmac, randomUUID, timingSafeEqual } from 'node:crypto' +import { AgentsClient, AuditClient, ResourcesClient, RunAuth } from './auth.js' export type TidebaseOptions = { url?: string apiKey?: string + agentSessionToken?: string webhookSecret?: string } @@ -271,8 +273,12 @@ export class Tidebase { readonly runs: RunsClient readonly queues: QueuesClient readonly schedules: SchedulesClient + readonly agents: AgentsClient + readonly resources: ResourcesClient + readonly audit: AuditClient private readonly url: string private readonly apiKey?: string + private readonly agentSessionToken?: string private readonly webhookSecret?: string private readonly workflows = new Map() @@ -281,10 +287,14 @@ export class Tidebase { options.url ?? process.env.TIDEBASE_URL ?? 'http://localhost:7373' ) this.apiKey = options.apiKey ?? process.env.TIDEBASE_API_KEY + this.agentSessionToken = options.agentSessionToken ?? process.env.TIDEBASE_AGENT_SESSION_TOKEN this.webhookSecret = options.webhookSecret ?? process.env.TIDEBASE_WEBHOOK_SECRET this.runs = new RunsClient(this) this.queues = new QueuesClient(this) this.schedules = new SchedulesClient(this) + this.agents = new AgentsClient(this) + this.resources = new ResourcesClient(this) + this.audit = new AuditClient(this) } workflow( @@ -330,6 +340,11 @@ export class Tidebase { } } + /** Build a run-scoped authorization client outside a workflow callback. */ + auth(runId: string) { + return new RunAuth(this, runId) + } + async run( workflowName: string, options: RunOptions, @@ -463,7 +478,11 @@ export class Tidebase { ...init, headers: { 'content-type': 'application/json', - ...(this.apiKey ? { authorization: `Bearer ${this.apiKey}` } : {}), + ...(this.agentSessionToken + ? { authorization: `Bearer ${this.agentSessionToken}` } + : this.apiKey + ? { authorization: `Bearer ${this.apiKey}` } + : {}), ...init.headers } }) @@ -665,6 +684,7 @@ export class RunContext { readonly usage: RunUsage readonly snapshots: RunSnapshots readonly gates: RunGates + readonly auth: RunAuth constructor( protected readonly client: Tidebase, @@ -675,6 +695,7 @@ export class RunContext { this.usage = new RunUsage(client, runId) this.snapshots = new RunSnapshots(client, runId) this.gates = new RunGates(client, runId) + this.auth = new RunAuth(client, runId) } async step( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 789f189..da12ca0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,6 +15,31 @@ importers: specifier: ^5.7.3 version: 5.9.3 + apps/mcp: + dependencies: + '@hono/node-server': + specifier: ^1.13.8 + version: 1.19.14(hono@4.12.23) + '@mcp-ui/server': + specifier: ^6.1.0 + version: 6.1.0(zod@3.25.76) + '@modelcontextprotocol/ext-apps': + specifier: ^1.7.4 + version: 1.7.4(@modelcontextprotocol/sdk@1.29.0(zod@3.25.76))(zod@3.25.76) + hono: + specifier: ^4.6.16 + version: 4.12.23 + devDependencies: + esbuild: + specifier: ^0.24.0 + version: 0.24.2 + tsx: + specifier: ^4.19.2 + version: 4.22.4 + typescript: + specifier: ^5.7.2 + version: 5.9.3 + apps/server: dependencies: '@hono/node-server': @@ -123,6 +148,12 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} @@ -135,6 +166,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.7': resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} engines: {node: '>=18'} @@ -147,6 +184,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.7': resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} engines: {node: '>=18'} @@ -159,6 +202,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.7': resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} engines: {node: '>=18'} @@ -171,6 +220,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.7': resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} engines: {node: '>=18'} @@ -183,6 +238,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.7': resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} engines: {node: '>=18'} @@ -195,6 +256,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.7': resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} engines: {node: '>=18'} @@ -207,6 +274,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.7': resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} engines: {node: '>=18'} @@ -219,6 +292,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.7': resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} engines: {node: '>=18'} @@ -231,6 +310,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.7': resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} engines: {node: '>=18'} @@ -243,6 +328,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.7': resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} engines: {node: '>=18'} @@ -255,6 +346,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.7': resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} engines: {node: '>=18'} @@ -267,6 +364,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.7': resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} engines: {node: '>=18'} @@ -279,6 +382,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.7': resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} engines: {node: '>=18'} @@ -291,6 +400,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.7': resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} engines: {node: '>=18'} @@ -303,6 +418,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.7': resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} engines: {node: '>=18'} @@ -315,6 +436,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.7': resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} engines: {node: '>=18'} @@ -327,6 +454,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.27.7': resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} engines: {node: '>=18'} @@ -339,6 +472,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.7': resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} engines: {node: '>=18'} @@ -351,6 +490,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.27.7': resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} engines: {node: '>=18'} @@ -363,6 +508,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.7': resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} engines: {node: '>=18'} @@ -387,6 +538,12 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.7': resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} engines: {node: '>=18'} @@ -399,6 +556,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.7': resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} engines: {node: '>=18'} @@ -411,6 +574,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.7': resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} engines: {node: '>=18'} @@ -423,6 +592,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.7': resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} engines: {node: '>=18'} @@ -462,6 +637,36 @@ packages: peerDependencies: svelte: ^5 + '@mcp-ui/server@6.1.0': + resolution: {integrity: sha512-uxv9JrzEzHfdGo/V/KTFKp5WeCOsaiAoQZ3V88jw1dSXUofONEw4rMwEvVP3612aj/unS2TIeM0o1I0asfIxtw==} + + '@modelcontextprotocol/ext-apps@0.3.1': + resolution: {integrity: sha512-Iivz2KwWK8xlRbiWwFB/C4NXqE8VJBoRCbBkJCN98ST2UbQvA6kfyebcLsypiqylJS467XOOaBcI9DeQ3t+zqA==} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.24.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + zod: ^3.25.0 || ^4.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@modelcontextprotocol/ext-apps@1.7.4': + resolution: {integrity: sha512-QQqysE549cf/Y0VabBmAACXhj92EhB3t8yVct2BHbkWiPTFA1S91EqTVjYXXcZEefXU0pmHcdObhsNMcomJIOQ==} + engines: {node: '>=20'} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.29.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + zod: ^3.25.0 || ^4.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + '@modelcontextprotocol/sdk@1.29.0': resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} engines: {node: '>=18'} @@ -482,6 +687,61 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@oven/bun-darwin-aarch64@1.3.14': + resolution: {integrity: sha512-Omj20SuiHBOUjUBIyqtkNjSUIjOtEOJwmbix/ZyFH4BaQ6OZTaaRWIR4TjHVz0yadHgli6lLTiAh1uarnvD49A==} + cpu: [arm64] + os: [darwin] + + '@oven/bun-darwin-x64-baseline@1.3.14': + resolution: {integrity: sha512-OSfsTZstc898HHElhU4NccaBGOSSDn5VfahiVTnidZ9B/+wb7WTyfZJaBeJcfjwJ9H2W9uTh2TGtl3UfcXgV9g==} + cpu: [x64] + os: [darwin] + + '@oven/bun-darwin-x64@1.3.14': + resolution: {integrity: sha512-FFj3QdU/OhlDyZOJ8CWfN5eWLpRlT4qjZg7lMQi7jA6GuoY5ajlO1zWLP/MuHYRSbXQUvV52RejNi8DVnAp13w==} + cpu: [x64] + os: [darwin] + + '@oven/bun-linux-aarch64-musl@1.3.14': + resolution: {integrity: sha512-jmqOA92Cd1NL/1XBd4bFkJLxQ86K0RW7ohxS2qzzAvuitO4JiIxjjTeCspoU44zCozH72HpfZfUE2On31OjnWA==} + cpu: [arm64] + os: [linux] + + '@oven/bun-linux-aarch64@1.3.14': + resolution: {integrity: sha512-X5SsPZHs+iYO8R/efIcRtc7gT2Q2DgPfliCxEkx4cXBumwkw0c/EsHMNwH3EgGpCDaZ7IYVPhpCG/xBOQHEwZw==} + cpu: [arm64] + os: [linux] + + '@oven/bun-linux-x64-baseline@1.3.14': + resolution: {integrity: sha512-q/8EdOC0yUE8FPeoOVq8/Pw5I9/tJaYmUfO/uDUAREx8IUnOJH1RJ5A3BjFqre8pvJoiZA9AovPJq5FnNNjSxA==} + cpu: [x64] + os: [linux] + + '@oven/bun-linux-x64-musl-baseline@1.3.14': + resolution: {integrity: sha512-n6iE71G4lQE4XkrZhQQcL5YUlxDbnq6nqV7zeQi33PMsLT/0kYE+RvHOtBWZ3w0wMdXZfINmp63hIb9ijUBGtw==} + cpu: [x64] + os: [linux] + + '@oven/bun-linux-x64-musl@1.3.14': + resolution: {integrity: sha512-GBCB/k/sIqcr06eTNgg7g46qiUv35Jasx4XiccJ/n7RGqrE4RWUD/XJBbWFprVPjvqd59+QtSnS99XGqvftHfg==} + cpu: [x64] + os: [linux] + + '@oven/bun-linux-x64@1.3.14': + resolution: {integrity: sha512-7OVTAKvwfPmSbIV1HpdOoVVx5VRc427GuPPne93N6vk4eQBPId9nXmZDh9/zGaKPdbVjVtQSZafWQoUjx38Utw==} + cpu: [x64] + os: [linux] + + '@oven/bun-windows-x64-baseline@1.3.14': + resolution: {integrity: sha512-uIjLUC1S9DWgICzuoMba7vurBJnBruE4S5CxnvmZkdqWVXRzx1Rgu636HoH+k0qeaQCFh3jeG3JQ1y6fRHv0sw==} + cpu: [x64] + os: [win32] + + '@oven/bun-windows-x64@1.3.14': + resolution: {integrity: sha512-mUFWL3BoYkNpjd8e9PqROiFF/1Xeotq20mABJsiQH62jM1g5zqWh4khw1RZ6bX8Q8fWvlPaxG1PjofkmjUi3vg==} + cpu: [x64] + os: [win32] + '@oxc-project/types@0.133.0': resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} @@ -963,6 +1223,11 @@ packages: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.27.7: resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} @@ -1728,126 +1993,189 @@ snapshots: tslib: 2.8.1 optional: true + '@esbuild/aix-ppc64@0.24.2': + optional: true + '@esbuild/aix-ppc64@0.27.7': optional: true '@esbuild/aix-ppc64@0.28.0': optional: true + '@esbuild/android-arm64@0.24.2': + optional: true + '@esbuild/android-arm64@0.27.7': optional: true '@esbuild/android-arm64@0.28.0': optional: true + '@esbuild/android-arm@0.24.2': + optional: true + '@esbuild/android-arm@0.27.7': optional: true '@esbuild/android-arm@0.28.0': optional: true + '@esbuild/android-x64@0.24.2': + optional: true + '@esbuild/android-x64@0.27.7': optional: true '@esbuild/android-x64@0.28.0': optional: true + '@esbuild/darwin-arm64@0.24.2': + optional: true + '@esbuild/darwin-arm64@0.27.7': optional: true '@esbuild/darwin-arm64@0.28.0': optional: true + '@esbuild/darwin-x64@0.24.2': + optional: true + '@esbuild/darwin-x64@0.27.7': optional: true '@esbuild/darwin-x64@0.28.0': optional: true + '@esbuild/freebsd-arm64@0.24.2': + optional: true + '@esbuild/freebsd-arm64@0.27.7': optional: true '@esbuild/freebsd-arm64@0.28.0': optional: true + '@esbuild/freebsd-x64@0.24.2': + optional: true + '@esbuild/freebsd-x64@0.27.7': optional: true '@esbuild/freebsd-x64@0.28.0': optional: true + '@esbuild/linux-arm64@0.24.2': + optional: true + '@esbuild/linux-arm64@0.27.7': optional: true '@esbuild/linux-arm64@0.28.0': optional: true + '@esbuild/linux-arm@0.24.2': + optional: true + '@esbuild/linux-arm@0.27.7': optional: true '@esbuild/linux-arm@0.28.0': optional: true + '@esbuild/linux-ia32@0.24.2': + optional: true + '@esbuild/linux-ia32@0.27.7': optional: true '@esbuild/linux-ia32@0.28.0': optional: true + '@esbuild/linux-loong64@0.24.2': + optional: true + '@esbuild/linux-loong64@0.27.7': optional: true '@esbuild/linux-loong64@0.28.0': optional: true + '@esbuild/linux-mips64el@0.24.2': + optional: true + '@esbuild/linux-mips64el@0.27.7': optional: true '@esbuild/linux-mips64el@0.28.0': optional: true + '@esbuild/linux-ppc64@0.24.2': + optional: true + '@esbuild/linux-ppc64@0.27.7': optional: true '@esbuild/linux-ppc64@0.28.0': optional: true + '@esbuild/linux-riscv64@0.24.2': + optional: true + '@esbuild/linux-riscv64@0.27.7': optional: true '@esbuild/linux-riscv64@0.28.0': optional: true + '@esbuild/linux-s390x@0.24.2': + optional: true + '@esbuild/linux-s390x@0.27.7': optional: true '@esbuild/linux-s390x@0.28.0': optional: true + '@esbuild/linux-x64@0.24.2': + optional: true + '@esbuild/linux-x64@0.27.7': optional: true '@esbuild/linux-x64@0.28.0': optional: true + '@esbuild/netbsd-arm64@0.24.2': + optional: true + '@esbuild/netbsd-arm64@0.27.7': optional: true '@esbuild/netbsd-arm64@0.28.0': optional: true + '@esbuild/netbsd-x64@0.24.2': + optional: true + '@esbuild/netbsd-x64@0.27.7': optional: true '@esbuild/netbsd-x64@0.28.0': optional: true + '@esbuild/openbsd-arm64@0.24.2': + optional: true + '@esbuild/openbsd-arm64@0.27.7': optional: true '@esbuild/openbsd-arm64@0.28.0': optional: true + '@esbuild/openbsd-x64@0.24.2': + optional: true + '@esbuild/openbsd-x64@0.27.7': optional: true @@ -1860,24 +2188,36 @@ snapshots: '@esbuild/openharmony-arm64@0.28.0': optional: true + '@esbuild/sunos-x64@0.24.2': + optional: true + '@esbuild/sunos-x64@0.27.7': optional: true '@esbuild/sunos-x64@0.28.0': optional: true + '@esbuild/win32-arm64@0.24.2': + optional: true + '@esbuild/win32-arm64@0.27.7': optional: true '@esbuild/win32-arm64@0.28.0': optional: true + '@esbuild/win32-ia32@0.24.2': + optional: true + '@esbuild/win32-ia32@0.27.7': optional: true '@esbuild/win32-ia32@0.28.0': optional: true + '@esbuild/win32-x64@0.24.2': + optional: true + '@esbuild/win32-x64@0.27.7': optional: true @@ -1911,6 +2251,46 @@ snapshots: dependencies: svelte: 5.56.3 + '@mcp-ui/server@6.1.0(zod@3.25.76)': + dependencies: + '@modelcontextprotocol/ext-apps': 0.3.1(@modelcontextprotocol/sdk@1.29.0(zod@3.25.76))(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.29.0(zod@3.25.76) + transitivePeerDependencies: + - '@cfworker/json-schema' + - react + - react-dom + - supports-color + - zod + + '@modelcontextprotocol/ext-apps@0.3.1(@modelcontextprotocol/sdk@1.29.0(zod@3.25.76))(zod@3.25.76)': + dependencies: + '@modelcontextprotocol/sdk': 1.29.0(zod@3.25.76) + zod: 3.25.76 + optionalDependencies: + '@oven/bun-darwin-aarch64': 1.3.14 + '@oven/bun-darwin-x64': 1.3.14 + '@oven/bun-darwin-x64-baseline': 1.3.14 + '@oven/bun-linux-aarch64': 1.3.14 + '@oven/bun-linux-aarch64-musl': 1.3.14 + '@oven/bun-linux-x64': 1.3.14 + '@oven/bun-linux-x64-baseline': 1.3.14 + '@oven/bun-linux-x64-musl': 1.3.14 + '@oven/bun-linux-x64-musl-baseline': 1.3.14 + '@oven/bun-windows-x64': 1.3.14 + '@oven/bun-windows-x64-baseline': 1.3.14 + '@rollup/rollup-darwin-arm64': 4.61.1 + '@rollup/rollup-darwin-x64': 4.61.1 + '@rollup/rollup-linux-arm64-gnu': 4.61.1 + '@rollup/rollup-linux-x64-gnu': 4.61.1 + '@rollup/rollup-win32-arm64-msvc': 4.61.1 + '@rollup/rollup-win32-x64-msvc': 4.61.1 + + '@modelcontextprotocol/ext-apps@1.7.4(@modelcontextprotocol/sdk@1.29.0(zod@3.25.76))(zod@3.25.76)': + dependencies: + '@modelcontextprotocol/sdk': 1.29.0(zod@3.25.76) + '@standard-schema/spec': 1.1.0 + zod: 3.25.76 + '@modelcontextprotocol/sdk@1.29.0(zod@3.25.76)': dependencies: '@hono/node-server': 1.19.14(hono@4.12.23) @@ -1952,6 +2332,39 @@ snapshots: '@tybys/wasm-util': 0.10.2 optional: true + '@oven/bun-darwin-aarch64@1.3.14': + optional: true + + '@oven/bun-darwin-x64-baseline@1.3.14': + optional: true + + '@oven/bun-darwin-x64@1.3.14': + optional: true + + '@oven/bun-linux-aarch64-musl@1.3.14': + optional: true + + '@oven/bun-linux-aarch64@1.3.14': + optional: true + + '@oven/bun-linux-x64-baseline@1.3.14': + optional: true + + '@oven/bun-linux-x64-musl-baseline@1.3.14': + optional: true + + '@oven/bun-linux-x64-musl@1.3.14': + optional: true + + '@oven/bun-linux-x64@1.3.14': + optional: true + + '@oven/bun-windows-x64-baseline@1.3.14': + optional: true + + '@oven/bun-windows-x64@1.3.14': + optional: true + '@oxc-project/types@0.133.0': {} '@polka/url@1.0.0-next.29': {} @@ -2327,6 +2740,34 @@ snapshots: dependencies: es-errors: 1.3.0 + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + esbuild@0.27.7: optionalDependencies: '@esbuild/aix-ppc64': 0.27.7