@vee_stack/cli 6.3.16 → 6.3.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,182 +1,182 @@
1
1
  #!/usr/bin/env node
2
- import {createRequire}from'module';import v from'chalk';import*as se from'fs';import {existsSync,readFileSync,statSync,writeFileSync}from'fs';import*as Ye from'path';import {resolve,basename,join,dirname}from'path';import {fileURLToPath}from'url';import {Command}from'commander';import {execSync}from'child_process';import*as de from'crypto';import de__default from'crypto';import ni from'ora';import {glob}from'glob';import si from'cli-progress';import*as ct from'os';import {homedir}from'os';import*as L from'fs/promises';import yr from'prompts';import wi from'readline';import {gzipSync}from'zlib';import Ci from'open';import Aa from'omelette';createRequire(import.meta.url); globalThis.CLI_VERSION = "6.3.16"; globalThis.SNAPSHOT_VERSION = "6.0.0"; globalThis.ENGINE_TARGET = "6.0.0"; globalThis.AUDIT_VERSION = "6.0"; globalThis.SESSION_PAYLOAD_VERSION = "6.0.0"; globalThis.RULES_VERSION = "6.0.0"; globalThis.ANALYSIS_VERSION = "6.0.0"; globalThis.API_VERSION = "v6"; globalThis.MIN_NODE = 20;
3
- var zr=Object.defineProperty;var Hr=(t,e)=>{for(var n in e)zr(t,n,{get:e[n],enumerable:true});};var Jr=[/^--token[=\s]/i,/^-t[=\s]/i,/^--api-key[=\s]/i,/^--apikey[=\s]/i,/^--key[=\s]/i,/^--auth[=\s]/i,/^--bearer[=\s]/i,/token[=:]\s*[a-zA-Z0-9_-]{10,}/i,/api[_-]?key[=:]\s*[a-zA-Z0-9_-]{10,}/i],Xe=/vs_[a-zA-Z0-9_-]{20,}/i;function Dn(){let t=process.argv.slice(2);for(let e of t){for(let n of Jr)n.test(e)&&(console.error(v.red(`
2
+ import {createRequire}from'module';import v from'chalk';import*as oe from'fs';import {existsSync,readFileSync,statSync,writeFileSync}from'fs';import*as tt from'path';import {resolve,basename,join,dirname}from'path';import {fileURLToPath}from'url';import {Command}from'commander';import {execSync}from'child_process';import*as pe from'crypto';import pe__default from'crypto';import si from'ora';import {glob}from'glob';import ii from'cli-progress';import*as pt from'os';import {homedir}from'os';import*as V from'fs/promises';import wr from'prompts';import Ei from'readline';import {gzipSync}from'zlib';import Ni from'open';import ba from'omelette';createRequire(import.meta.url); globalThis.CLI_VERSION = "6.3.18"; globalThis.SNAPSHOT_VERSION = "6.0.0"; globalThis.ENGINE_TARGET = "6.0.0"; globalThis.AUDIT_VERSION = "6.0"; globalThis.SESSION_PAYLOAD_VERSION = "6.0.0"; globalThis.RULES_VERSION = "6.0.0"; globalThis.ANALYSIS_VERSION = "6.0.0"; globalThis.API_VERSION = "v6"; globalThis.MIN_NODE = 20;
3
+ var Gr=Object.defineProperty;var Zr=(t,e)=>{for(var n in e)Gr(t,n,{get:e[n],enumerable:true});};var Kr=[/^--token[=\s]/i,/^-t[=\s]/i,/^--api-key[=\s]/i,/^--apikey[=\s]/i,/^--key[=\s]/i,/^--auth[=\s]/i,/^--bearer[=\s]/i,/token[=:]\s*[a-zA-Z0-9_-]{10,}/i,/api[_-]?key[=:]\s*[a-zA-Z0-9_-]{10,}/i],nt=/vs_[a-zA-Z0-9_-]{20,}/i;function Vn(){let t=process.argv.slice(2);for(let e of t){for(let n of Kr)n.test(e)&&(console.error(v.red(`
4
4
  \u274C Security Error: Token detected in command line arguments`)),console.error(v.yellow(`
5
5
  Passing tokens via CLI arguments is not allowed.`)),console.error(v.yellow("This prevents tokens from being saved in shell history (~/.bash_history, ~/.zsh_history)")),console.error(v.gray(`
6
6
  Instead, use:`)),console.error(v.cyan(" veestack login")),console.error(v.gray(`
7
7
  Or set via environment variable:`)),console.error(v.cyan(" export VEESTACK_API_KEY=your_key")),console.error(v.gray(`
8
8
  Your token has been detected and blocked for your security.
9
- `)),process.exit(1));Xe.test(e)&&(console.error(v.red(`
9
+ `)),process.exit(1));nt.test(e)&&(console.error(v.red(`
10
10
  \u274C Security Error: VeeStack token detected in command line`)),console.error(v.yellow(`
11
11
  Tokens should never be passed as command arguments.`)),console.error(v.gray(`
12
- Use login instead:`)),console.error(v.cyan(" veestack login")),process.exit(1));}}function jn(){for(let t=0;t<process.argv.length;t++){let e=process.argv[t];Xe.test(e)&&(process.argv[t]="[REDACTED_TOKEN]"),/authorization[:\s]/i.test(e)&&(process.argv[t]="[REDACTED_AUTH_HEADER]");}}function Ln(){let t=console.error,e=console.log,n=console.warn,r=s=>s.map(o=>typeof o=="string"?o.replace(Xe,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]"):o);console.log=(...s)=>e(...r(s)),console.error=(...s)=>t(...r(s)),console.warn=(...s)=>n(...r(s));}function $n(){process.on("uncaughtException",t=>{console.error(`
13
- \u274C Fatal Error occurred`);let e=t.message||"Unknown error";if(e=e.replace(Xe,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]").replace(/Authorization[:\s][^\s]*/gi,"Authorization: [REDACTED]"),console.error(`Error: ${e}`),t.stack){let n=t.stack.split(`
14
- `).map(r=>r.replace(Xe,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]")).join(`
12
+ Use login instead:`)),console.error(v.cyan(" veestack login")),process.exit(1));}}function Un(){for(let t=0;t<process.argv.length;t++){let e=process.argv[t];nt.test(e)&&(process.argv[t]="[REDACTED_TOKEN]"),/authorization[:\s]/i.test(e)&&(process.argv[t]="[REDACTED_AUTH_HEADER]");}}function Mn(){let t=console.error,e=console.log,n=console.warn,r=s=>s.map(o=>typeof o=="string"?o.replace(nt,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]"):o);console.log=(...s)=>e(...r(s)),console.error=(...s)=>t(...r(s)),console.warn=(...s)=>n(...r(s));}function Bn(){process.on("uncaughtException",t=>{console.error(`
13
+ \u274C Fatal Error occurred`);let e=t.message||"Unknown error";if(e=e.replace(nt,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]").replace(/Authorization[:\s][^\s]*/gi,"Authorization: [REDACTED]"),console.error(`Error: ${e}`),t.stack){let n=t.stack.split(`
14
+ `).map(r=>r.replace(nt,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]")).join(`
15
15
  `);process.env.DEBUG||process.env.VEESTACK_DEBUG?console.error(`
16
16
  Stack trace:`,n):console.error(`
17
17
  Run with DEBUG=veestack for full stack trace (sanitized)`);}process.exit(1);}),process.on("unhandledRejection",t=>{let e=t instanceof Error?t:new Error(String(t));console.error(`
18
- \u274C Unhandled Promise Rejection`);let n=e.message||"Unknown error";n=n.replace(Xe,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]"),console.error(`Error: ${n}`),process.exit(1);});}var Qe=["veestack-tools","@vee_stack/cli"],Zr=["veestack","veestack-cli","veestacktool","veestack-tool","vee-stack","veestack-cli-tool","veestack-scanner","veestack-analyzer"],Kr=[/veestak/i,/veestac/i,/veestackk/i,/veestackh/i,/vvestack/i,/veee/i,/veestack-cli-hack/i,/veestack-free/i,/veestack-pro-free/i];function Vn(){try{let t=fileURLToPath(import.meta.url),n=Ye.dirname(t);for(let r=0;r<5;r++){let s=Ye.join(n,"package.json");if(se.existsSync(s))return JSON.parse(se.readFileSync(s,"utf-8")).name||"unknown";let o=Ye.dirname(n);if(o===n)break;n=o;}}catch{}return "unknown"}function Wr(){let t=Vn(),e=[];if(Qe.includes(t))return {isOfficial:true,warnings:[]};if(Zr.includes(t))return e.push(`\u26A0\uFE0F WARNING: You are using "${t}" which is NOT the official VeeStack CLI.`),e.push(`The official package is: ${v.cyan(Qe[0])}`),e.push("Unofficial packages may contain malware or steal your data."),{isOfficial:false,warnings:e};for(let n of Kr)if(n.test(t))return e.push(`\u26A0\uFE0F WARNING: Package name "${t}" looks suspicious.`),e.push("This might be a typosquatting attack."),e.push(`The official package is: ${v.cyan(Qe[0])}`),{isOfficial:false,warnings:e};return e.push(`\u26A0\uFE0F WARNING: Unofficial package "${t}" detected.`),e.push(`The official package is: ${v.cyan(Qe[0])}`),{isOfficial:false,warnings:e}}function Mn(){let{isOfficial:t,warnings:e}=Wr();if(!t){console.log(v.red(`
18
+ \u274C Unhandled Promise Rejection`);let n=e.message||"Unknown error";n=n.replace(nt,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]"),console.error(`Error: ${n}`),process.exit(1);});}var rt=["veestack-tools","@vee_stack/cli"],qr=["veestack","veestack-cli","veestacktool","veestack-tool","vee-stack","veestack-cli-tool","veestack-scanner","veestack-analyzer"],Yr=[/veestak/i,/veestac/i,/veestackk/i,/veestackh/i,/vvestack/i,/veee/i,/veestack-cli-hack/i,/veestack-free/i,/veestack-pro-free/i];function Fn(){try{let t=fileURLToPath(import.meta.url),n=tt.dirname(t);for(let r=0;r<5;r++){let s=tt.join(n,"package.json");if(oe.existsSync(s))return JSON.parse(oe.readFileSync(s,"utf-8")).name||"unknown";let o=tt.dirname(n);if(o===n)break;n=o;}}catch{}return "unknown"}function Xr(){let t=Fn(),e=[];if(rt.includes(t))return {isOfficial:true,warnings:[]};if(qr.includes(t))return e.push(`\u26A0\uFE0F WARNING: You are using "${t}" which is NOT the official VeeStack CLI.`),e.push(`The official package is: ${v.cyan(rt[0])}`),e.push("Unofficial packages may contain malware or steal your data."),{isOfficial:false,warnings:e};for(let n of Yr)if(n.test(t))return e.push(`\u26A0\uFE0F WARNING: Package name "${t}" looks suspicious.`),e.push("This might be a typosquatting attack."),e.push(`The official package is: ${v.cyan(rt[0])}`),{isOfficial:false,warnings:e};return e.push(`\u26A0\uFE0F WARNING: Unofficial package "${t}" detected.`),e.push(`The official package is: ${v.cyan(rt[0])}`),{isOfficial:false,warnings:e}}function zn(){let{isOfficial:t,warnings:e}=Xr();if(!t){console.log(v.red(`
19
19
  `+"\u2550".repeat(60))),console.log(v.red.bold(`\u{1F6A8} SECURITY WARNING
20
20
  `));for(let n of e)console.log(v.yellow(n));console.log(v.gray(`
21
21
  To install the official CLI:`)),console.log(v.cyan(" npm install -g veestack-tools")),console.log(v.red("\u2550".repeat(60)+`
22
- `)),process.exit(1);}process.env.VEESTACK_DEBUG==="true"&&console.log(v.gray(`\u2713 Official package verified: ${Qe.join(" or ")}`));}function Nt(){let t=Vn(),e=Qe.includes(t);return {packageName:t,isOfficial:e,homepage:"https://www.veestack.com",repository:"https://github.com/Mohmed-ElZehiry/VeeStack"}}var qr=[".env",".env.local",".env.development",".env.production",".env.test",".env.example",".envrc",".env.*","id_rsa","id_rsa.pub","id_dsa","id_dsa.pub","id_ecdsa","id_ecdsa.pub","id_ed25519","id_ed25519.pub","*.pem","*.key","*.p12","*.pfx","*.crt","*.cer","*.der","credentials",".aws/credentials",".aws/config",".docker/config.json","kubeconfig","*.kubeconfig",".npmrc",".yarnrc",".pnpmrc",".git-credentials","*.sqlite","*.sqlite3","*.db","secrets/","secret/",".secrets/","config.json","settings.json","local.settings.json"],Yr=["veestack.config.json","package.json","tsconfig.json","jsconfig.json",".eslintrc.json",".prettierrc.json","README.md"],Xr=[{name:"AWS Access Key ID",pattern:/AKIA[0-9A-Z]{16}/g,severity:"critical",description:"AWS Access Key ID detected"},{name:"AWS Secret Access Key",pattern:/['"\s][A-Za-z0-9/+=]{40}['"\s]/g,severity:"critical",description:"Potential AWS Secret Key detected"},{name:"Private Key",pattern:/-----BEGIN (RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----/g,severity:"critical",description:"Private key detected"},{name:"JWT Token",pattern:/eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*/g,severity:"high",description:"JWT token detected"},{name:"Bearer Token",pattern:/Bearer\s+[a-zA-Z0-9_-]{20,}/gi,severity:"high",description:"Bearer token detected"},{name:"API Key",pattern:/(?:api[_-]?key|apikey|api_token|apiToken)['"\s]*[:=]\s*['"][a-zA-Z0-9_-]{16,}['"]/gi,severity:"high",description:"API key detected"},{name:"Password in URL",pattern:/[a-zA-Z]+:\/\/[^\s:@]+:[^\s:@]+@[^\s]+/g,severity:"high",description:"Password in URL detected"},{name:"Password Assignment",pattern:/(?:password|passwd|pwd)\s*[=:]\s*['"][^'"]{8,}['"]/gi,severity:"medium",description:"Password assignment detected"},{name:"GitHub Token",pattern:/gh[pousr]_[A-Za-z0-9_]{36,}/g,severity:"critical",description:"GitHub token detected"},{name:"Slack Token",pattern:/xox[baprs]-[0-9]{10,13}-[0-9]{10,13}(-[a-zA-Z0-9]{24})?/g,severity:"critical",description:"Slack token detected"},{name:"Generic Secret",pattern:/(?:secret|token|key)\s*[=:]\s*['"][a-zA-Z0-9_-]{20,}['"]/gi,severity:"medium",description:"Potential secret detected"},{name:"Connection String",pattern:/(?:mongodb|postgres|mysql|redis|amqp):\/\/[^\s]+/gi,severity:"high",description:"Database connection string detected"},{name:"VeeStack Token",pattern:/vs_[a-zA-Z0-9_-]{20,}/g,severity:"critical",description:"VeeStack token detected"}];function Un(t){let e=t.replace(/\\/g,"/").toLowerCase(),n=Ye.basename(e);for(let r of Yr)if(n===r.toLowerCase())return false;for(let r of qr){if(n===r.toLowerCase())return true;if(r.includes("*")){let s=r.toLowerCase().replace(/\./g,"\\.").replace(/\*/g,".*"),o=new RegExp(s);if(o.test(n)||o.test(e))return true}if(e.includes(r.toLowerCase().replace("*","")))return true}return false}function Qr(t,e){let n=[],r=e.split(`
23
- `);for(let s of Xr){s.pattern.lastIndex=0;for(let o=0;o<r.length;o++){let a=r[o],i;for(;(i=s.pattern.exec(a))!==null;)n.push({filePath:t,type:"secret_content",secretName:s.name,severity:s.severity,description:s.description,lineNumber:o+1,match:i[0].substring(0,20)+"..."});s.pattern.lastIndex=0;}}return n}async function es(t){let e=[];if(Un(t))return e.push({filePath:t,type:"sensitive_file",secretName:"Sensitive File",severity:"critical",description:`Sensitive file type detected: ${Ye.basename(t)}`}),e;try{if(se.statSync(t).size>1024*1024)return e;let r=se.readFileSync(t,"utf-8"),s=Qr(t,r);e.push(...s);}catch{}return e}async function Fn(t,e){let n=[];for(let i of e){let c=Ye.join(t,i),l=await es(c);for(let d of l)d.filePath=i,n.push(d);}let r=n.filter(i=>i.severity==="critical").length,s=n.filter(i=>i.severity==="high").length,o=n.filter(i=>i.severity==="medium").length,a=n.filter(i=>i.severity==="low").length;return {totalFiles:e.length,secretsFound:n.length,criticalCount:r,highCount:s,mediumCount:o,lowCount:a,results:n}}function Bn(t){let e=[],n=[];for(let r of t)Un(r)?n.push(r):e.push(r);return {safe:e,blocked:n}}var nn=(t=>typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>e[n]}):t)(function(t){throw Error('Dynamic require of "'+t+'" is not supported')}),zn=typeof process<"u"&&process.versions?.node,ts=zn&&(Array.isArray(process.argv)&&process.argv.includes("--debug")||process.env.VEESTACK_DEBUG==="1"),rn=globalThis||{},sn=null;if(zn)try{let t=function(){let A=d,P=0;for(;A!==i(A)&&P<10;){let C=a(A,"package.json");try{if(o(C)){let R=JSON.parse(s(C,"utf-8"));if(R.name==="vee_stack")return R}}catch{}A=i(A),P++;}return null};ns=t;let e=nn("fs"),n=nn("path"),r=nn("url"),{readFileSync:s,existsSync:o}=e,{join:a,dirname:i}=n,{fileURLToPath:c}=r,l=c(import.meta.url),d=i(l);sn=t();}catch{ts&&console.debug("[veestack:debug] Failed to load package.json dynamically, using defaults");}var ns,_e=sn?.versions||rn.VEESTACK_VERSIONS||{},ee=sn?.version||rn.VEESTACK_VERSION||rn.CLI_VERSION||"unknown",on=`vs_cli_v${ee}`;_e.snapshot||"unknown";_e.engine_target||"unknown";_e.audit||"unknown";_e.session_payload||"unknown";_e.rules||"unknown";_e.analysis||"unknown";_e.api||"unknown";_e.min_node||"unknown";var f={};Hr(f,{BRAND:()=>Ps,DIRTY:()=>be,EMPTY_PATH:()=>ds,INVALID:()=>h,NEVER:()=>vo,OK:()=>J,ParseStatus:()=>z,Schema:()=>_,ZodAny:()=>Ee,ZodArray:()=>he,ZodBigInt:()=>Ce,ZodBoolean:()=>Ie,ZodBranded:()=>yt,ZodCatch:()=>Fe,ZodDate:()=>Ne,ZodDefault:()=>Ue,ZodDiscriminatedUnion:()=>$t,ZodEffects:()=>re,ZodEnum:()=>Ve,ZodError:()=>K,ZodFirstPartyTypeKind:()=>y,ZodFunction:()=>Mt,ZodIntersection:()=>je,ZodIssueCode:()=>u,ZodLazy:()=>Le,ZodLiteral:()=>$e,ZodMap:()=>ot,ZodNaN:()=>at,ZodNativeEnum:()=>Me,ZodNever:()=>oe,ZodNull:()=>Pe,ZodNullable:()=>ue,ZodNumber:()=>Re,ZodObject:()=>W,ZodOptional:()=>te,ZodParsedType:()=>g,ZodPipeline:()=>vt,ZodPromise:()=>Te,ZodReadonly:()=>Be,ZodRecord:()=>Vt,ZodSchema:()=>_,ZodSet:()=>it,ZodString:()=>Se,ZodSymbol:()=>rt,ZodTransformer:()=>re,ZodTuple:()=>le,ZodType:()=>_,ZodUndefined:()=>Oe,ZodUnion:()=>De,ZodUnknown:()=>me,ZodVoid:()=>st,addIssueToContext:()=>p,any:()=>Bs,array:()=>Gs,bigint:()=>$s,boolean:()=>er,coerce:()=>yo,custom:()=>Yn,date:()=>Vs,datetimeRegex:()=>Wn,defaultErrorMap:()=>pe,discriminatedUnion:()=>qs,effect:()=>co,enum:()=>oo,function:()=>no,getErrorMap:()=>et,getParsedType:()=>ce,instanceof:()=>js,intersection:()=>Ys,isAborted:()=>jt,isAsync:()=>tt,isDirty:()=>Lt,isValid:()=>we,late:()=>Ds,lazy:()=>ro,literal:()=>so,makeIssue:()=>ht,map:()=>eo,nan:()=>Ls,nativeEnum:()=>io,never:()=>Hs,null:()=>Fs,nullable:()=>uo,number:()=>Qn,object:()=>Zs,objectUtil:()=>ln,oboolean:()=>ho,onumber:()=>mo,optional:()=>lo,ostring:()=>go,pipeline:()=>po,preprocess:()=>fo,promise:()=>ao,quotelessJson:()=>cs,record:()=>Qs,set:()=>to,setErrorMap:()=>us,strictObject:()=>Ks,string:()=>Xn,symbol:()=>Ms,transformer:()=>co,tuple:()=>Xs,undefined:()=>Us,union:()=>Ws,unknown:()=>zs,util:()=>S,void:()=>Js});var S;(function(t){t.assertEqual=s=>{};function e(s){}t.assertIs=e;function n(s){throw new Error}t.assertNever=n,t.arrayToEnum=s=>{let o={};for(let a of s)o[a]=a;return o},t.getValidEnumValues=s=>{let o=t.objectKeys(s).filter(i=>typeof s[s[i]]!="number"),a={};for(let i of o)a[i]=s[i];return t.objectValues(a)},t.objectValues=s=>t.objectKeys(s).map(function(o){return s[o]}),t.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let o=[];for(let a in s)Object.prototype.hasOwnProperty.call(s,a)&&o.push(a);return o},t.find=(s,o)=>{for(let a of s)if(o(a))return a},t.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,o=" | "){return s.map(a=>typeof a=="string"?`'${a}'`:a).join(o)}t.joinValues=r,t.jsonStringifyReplacer=(s,o)=>typeof o=="bigint"?o.toString():o;})(S||(S={}));var ln;(function(t){t.mergeShapes=(e,n)=>({...e,...n});})(ln||(ln={}));var g=S.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),ce=t=>{switch(typeof t){case "undefined":return g.undefined;case "string":return g.string;case "number":return Number.isNaN(t)?g.nan:g.number;case "boolean":return g.boolean;case "function":return g.function;case "bigint":return g.bigint;case "symbol":return g.symbol;case "object":return Array.isArray(t)?g.array:t===null?g.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?g.promise:typeof Map<"u"&&t instanceof Map?g.map:typeof Set<"u"&&t instanceof Set?g.set:typeof Date<"u"&&t instanceof Date?g.date:g.object;default:return g.unknown}};var u=S.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),cs=t=>JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:"),K=class t extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r];},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r];};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e;}format(e){let n=e||function(o){return o.message},r={_errors:[]},s=o=>{for(let a of o.issues)if(a.code==="invalid_union")a.unionErrors.map(s);else if(a.code==="invalid_return_type")s(a.returnTypeError);else if(a.code==="invalid_arguments")s(a.argumentsError);else if(a.path.length===0)r._errors.push(n(a));else {let i=r,c=0;for(;c<a.path.length;){let l=a.path[c];c===a.path.length-1?(i[l]=i[l]||{_errors:[]},i[l]._errors.push(n(a))):i[l]=i[l]||{_errors:[]},i=i[l],c++;}}};return s(this),r}static assert(e){if(!(e instanceof t))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,S.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){let n={},r=[];for(let s of this.issues)if(s.path.length>0){let o=s.path[0];n[o]=n[o]||[],n[o].push(e(s));}else r.push(e(s));return {formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};K.create=t=>new K(t);var ls=(t,e)=>{let n;switch(t.code){case u.invalid_type:t.received===g.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case u.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,S.jsonStringifyReplacer)}`;break;case u.unrecognized_keys:n=`Unrecognized key(s) in object: ${S.joinValues(t.keys,", ")}`;break;case u.invalid_union:n="Invalid input";break;case u.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${S.joinValues(t.options)}`;break;case u.invalid_enum_value:n=`Invalid enum value. Expected ${S.joinValues(t.options)}, received '${t.received}'`;break;case u.invalid_arguments:n="Invalid function arguments";break;case u.invalid_return_type:n="Invalid function return type";break;case u.invalid_date:n="Invalid date";break;case u.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:S.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case u.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case u.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case u.custom:n="Invalid input";break;case u.invalid_intersection_types:n="Intersection results could not be merged";break;case u.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case u.not_finite:n="Number must be finite";break;default:n=e.defaultError,S.assertNever(t);}return {message:n}},pe=ls;var Hn=pe;function us(t){Hn=t;}function et(){return Hn}var ht=t=>{let{data:e,path:n,errorMaps:r,issueData:s}=t,o=[...n,...s.path||[]],a={...s,path:o};if(s.message!==void 0)return {...s,path:o,message:s.message};let i="",c=r.filter(l=>!!l).slice().reverse();for(let l of c)i=l(a,{data:e,defaultError:i}).message;return {...s,path:o,message:i}},ds=[];function p(t,e){let n=et(),r=ht({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===pe?void 0:pe].filter(s=>!!s)});t.common.issues.push(r);}var z=class t{constructor(){this.value="valid";}dirty(){this.value==="valid"&&(this.value="dirty");}abort(){this.value!=="aborted"&&(this.value="aborted");}static mergeArray(e,n){let r=[];for(let s of n){if(s.status==="aborted")return h;s.status==="dirty"&&e.dirty(),r.push(s.value);}return {status:e.value,value:r}}static async mergeObjectAsync(e,n){let r=[];for(let s of n){let o=await s.key,a=await s.value;r.push({key:o,value:a});}return t.mergeObjectSync(e,r)}static mergeObjectSync(e,n){let r={};for(let s of n){let{key:o,value:a}=s;if(o.status==="aborted"||a.status==="aborted")return h;o.status==="dirty"&&e.dirty(),a.status==="dirty"&&e.dirty(),o.value!=="__proto__"&&(typeof a.value<"u"||s.alwaysSet)&&(r[o.value]=a.value);}return {status:e.value,value:r}}},h=Object.freeze({status:"aborted"}),be=t=>({status:"dirty",value:t}),J=t=>({status:"valid",value:t}),jt=t=>t.status==="aborted",Lt=t=>t.status==="dirty",we=t=>t.status==="valid",tt=t=>typeof Promise<"u"&&t instanceof Promise;var m;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message;})(m||(m={}));var ne=class{constructor(e,n,r,s){this._cachedPath=[],this.parent=e,this.data=n,this._path=r,this._key=s;}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Jn=(t,e)=>{if(we(e))return {success:true,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return {success:false,get error(){if(this._error)return this._error;let n=new K(t.common.issues);return this._error=n,this._error}}};function k(t){if(!t)return {};let{errorMap:e,invalid_type_error:n,required_error:r,description:s}=t;if(e&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(a,i)=>{let{message:c}=t;return a.code==="invalid_enum_value"?{message:c??i.defaultError}:typeof i.data>"u"?{message:c??r??i.defaultError}:a.code!=="invalid_type"?{message:i.defaultError}:{message:c??n??i.defaultError}},description:s}}var _=class{get description(){return this._def.description}_getType(e){return ce(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:ce(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return {status:new z,ctx:{common:e.parent.common,data:e.data,parsedType:ce(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let n=this._parse(e);if(tt(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){let n=this._parse(e);return Promise.resolve(n)}parse(e,n){let r=this.safeParse(e,n);if(r.success)return r.data;throw r.error}safeParse(e,n){let r={common:{issues:[],async:n?.async??false,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ce(e)},s=this._parseSync({data:e,path:r.path,parent:r});return Jn(r,s)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ce(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:n});return we(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=true),n.common={issues:[],async:true};}return this._parseAsync({data:e,path:[],parent:n}).then(r=>we(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(e,n){let r=await this.safeParseAsync(e,n);if(r.success)return r.data;throw r.error}async safeParseAsync(e,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:true},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ce(e)},s=this._parse({data:e,path:r.path,parent:r}),o=await(tt(s)?s:Promise.resolve(s));return Jn(r,o)}refine(e,n){let r=s=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(s):n;return this._refinement((s,o)=>{let a=e(s),i=()=>o.addIssue({code:u.custom,...r(s)});return typeof Promise<"u"&&a instanceof Promise?a.then(c=>c?true:(i(),false)):a?true:(i(),false)})}refinement(e,n){return this._refinement((r,s)=>e(r)?true:(s.addIssue(typeof n=="function"?n(r,s):n),false))}_refinement(e){return new re({schema:this,typeName:y.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)};}optional(){return te.create(this,this._def)}nullable(){return ue.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return he.create(this)}promise(){return Te.create(this,this._def)}or(e){return De.create([this,e],this._def)}and(e){return je.create(this,e,this._def)}transform(e){return new re({...k(this._def),schema:this,typeName:y.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let n=typeof e=="function"?e:()=>e;return new Ue({...k(this._def),innerType:this,defaultValue:n,typeName:y.ZodDefault})}brand(){return new yt({typeName:y.ZodBranded,type:this,...k(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new Fe({...k(this._def),innerType:this,catchValue:n,typeName:y.ZodCatch})}describe(e){let n=this.constructor;return new n({...this._def,description:e})}pipe(e){return vt.create(this,e)}readonly(){return Be.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},fs=/^c[^\s-]{8,}$/i,ps=/^[0-9a-z]+$/,gs=/^[0-9A-HJKMNP-TV-Z]{26}$/i,ms=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,hs=/^[a-z0-9_-]{21}$/i,ys=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,vs=/^[-+]?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)?)??$/,ks=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,_s="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",un,ws=/^(?:(?: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])$/,Ss=/^(?:(?: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])\/(3[0-2]|[12]?[0-9])$/,Es=/^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Ts=/^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,xs=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,As=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Zn="((\\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])))",bs=new RegExp(`^${Zn}$`);function Kn(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);let n=t.precision?"+":"?";return `([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function Rs(t){return new RegExp(`^${Kn(t)}$`)}function Wn(t){let e=`${Zn}T${Kn(t)}`,n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function Cs(t,e){return !!((e==="v4"||!e)&&ws.test(t)||(e==="v6"||!e)&&Es.test(t))}function Is(t,e){if(!ys.test(t))return false;try{let[n]=t.split(".");if(!n)return !1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),s=JSON.parse(atob(r));return !(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return false}}function Ns(t,e){return !!((e==="v4"||!e)&&Ss.test(t)||(e==="v6"||!e)&&Ts.test(t))}var Se=class t extends _{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==g.string){let o=this._getOrReturnCtx(e);return p(o,{code:u.invalid_type,expected:g.string,received:o.parsedType}),h}let r=new z,s;for(let o of this._def.checks)if(o.kind==="min")e.data.length<o.value&&(s=this._getOrReturnCtx(e,s),p(s,{code:u.too_small,minimum:o.value,type:"string",inclusive:true,exact:false,message:o.message}),r.dirty());else if(o.kind==="max")e.data.length>o.value&&(s=this._getOrReturnCtx(e,s),p(s,{code:u.too_big,maximum:o.value,type:"string",inclusive:true,exact:false,message:o.message}),r.dirty());else if(o.kind==="length"){let a=e.data.length>o.value,i=e.data.length<o.value;(a||i)&&(s=this._getOrReturnCtx(e,s),a?p(s,{code:u.too_big,maximum:o.value,type:"string",inclusive:true,exact:true,message:o.message}):i&&p(s,{code:u.too_small,minimum:o.value,type:"string",inclusive:true,exact:true,message:o.message}),r.dirty());}else if(o.kind==="email")ks.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"email",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="emoji")un||(un=new RegExp(_s,"u")),un.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"emoji",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="uuid")ms.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"uuid",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="nanoid")hs.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"nanoid",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="cuid")fs.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"cuid",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="cuid2")ps.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"cuid2",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="ulid")gs.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"ulid",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="url")try{new URL(e.data);}catch{s=this._getOrReturnCtx(e,s),p(s,{validation:"url",code:u.invalid_string,message:o.message}),r.dirty();}else o.kind==="regex"?(o.regex.lastIndex=0,o.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"regex",code:u.invalid_string,message:o.message}),r.dirty())):o.kind==="trim"?e.data=e.data.trim():o.kind==="includes"?e.data.includes(o.value,o.position)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_string,validation:{includes:o.value,position:o.position},message:o.message}),r.dirty()):o.kind==="toLowerCase"?e.data=e.data.toLowerCase():o.kind==="toUpperCase"?e.data=e.data.toUpperCase():o.kind==="startsWith"?e.data.startsWith(o.value)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_string,validation:{startsWith:o.value},message:o.message}),r.dirty()):o.kind==="endsWith"?e.data.endsWith(o.value)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_string,validation:{endsWith:o.value},message:o.message}),r.dirty()):o.kind==="datetime"?Wn(o).test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_string,validation:"datetime",message:o.message}),r.dirty()):o.kind==="date"?bs.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_string,validation:"date",message:o.message}),r.dirty()):o.kind==="time"?Rs(o).test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_string,validation:"time",message:o.message}),r.dirty()):o.kind==="duration"?vs.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"duration",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="ip"?Cs(e.data,o.version)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"ip",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="jwt"?Is(e.data,o.alg)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"jwt",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="cidr"?Ns(e.data,o.version)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"cidr",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="base64"?xs.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"base64",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="base64url"?As.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"base64url",code:u.invalid_string,message:o.message}),r.dirty()):S.assertNever(o);return {status:r.value,value:e.data}}_regex(e,n,r){return this.refinement(s=>e.test(s),{validation:n,code:u.invalid_string,...m.errToObj(r)})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...m.errToObj(e)})}url(e){return this._addCheck({kind:"url",...m.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...m.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...m.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...m.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...m.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...m.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...m.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...m.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...m.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...m.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...m.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...m.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:false,local:false,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??false,local:e?.local??false,...m.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...m.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...m.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...m.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n?.position,...m.errToObj(n?.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...m.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...m.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...m.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...m.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...m.errToObj(n)})}nonempty(e){return this.min(1,m.errToObj(e))}trim(){return new t({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return !!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return !!this._def.checks.find(e=>e.kind==="date")}get isTime(){return !!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return !!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return !!this._def.checks.find(e=>e.kind==="email")}get isURL(){return !!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return !!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return !!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return !!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return !!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return !!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return !!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return !!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return !!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return !!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return !!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};Se.create=t=>new Se({checks:[],typeName:y.ZodString,coerce:t?.coerce??false,...k(t)});function Os(t,e){let n=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=n>r?n:r,o=Number.parseInt(t.toFixed(s).replace(".","")),a=Number.parseInt(e.toFixed(s).replace(".",""));return o%a/10**s}var Re=class t extends _{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf;}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==g.number){let o=this._getOrReturnCtx(e);return p(o,{code:u.invalid_type,expected:g.number,received:o.parsedType}),h}let r,s=new z;for(let o of this._def.checks)o.kind==="int"?S.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),p(r,{code:u.invalid_type,expected:"integer",received:"float",message:o.message}),s.dirty()):o.kind==="min"?(o.inclusive?e.data<o.value:e.data<=o.value)&&(r=this._getOrReturnCtx(e,r),p(r,{code:u.too_small,minimum:o.value,type:"number",inclusive:o.inclusive,exact:false,message:o.message}),s.dirty()):o.kind==="max"?(o.inclusive?e.data>o.value:e.data>=o.value)&&(r=this._getOrReturnCtx(e,r),p(r,{code:u.too_big,maximum:o.value,type:"number",inclusive:o.inclusive,exact:false,message:o.message}),s.dirty()):o.kind==="multipleOf"?Os(e.data,o.value)!==0&&(r=this._getOrReturnCtx(e,r),p(r,{code:u.not_multiple_of,multipleOf:o.value,message:o.message}),s.dirty()):o.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),p(r,{code:u.not_finite,message:o.message}),s.dirty()):S.assertNever(o);return {status:s.value,value:e.data}}gte(e,n){return this.setLimit("min",e,true,m.toString(n))}gt(e,n){return this.setLimit("min",e,false,m.toString(n))}lte(e,n){return this.setLimit("max",e,true,m.toString(n))}lt(e,n){return this.setLimit("max",e,false,m.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:m.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:m.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:false,message:m.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:false,message:m.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:true,message:m.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:true,message:m.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:m.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:m.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:true,value:Number.MIN_SAFE_INTEGER,message:m.toString(e)})._addCheck({kind:"max",inclusive:true,value:Number.MAX_SAFE_INTEGER,message:m.toString(e)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return !!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&S.isInteger(e.value))}get isFinite(){let e=null,n=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return true;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value);}return Number.isFinite(n)&&Number.isFinite(e)}};Re.create=t=>new Re({checks:[],typeName:y.ZodNumber,coerce:t?.coerce||false,...k(t)});var Ce=class t extends _{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte;}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data);}catch{return this._getInvalidInput(e)}if(this._getType(e)!==g.bigint)return this._getInvalidInput(e);let r,s=new z;for(let o of this._def.checks)o.kind==="min"?(o.inclusive?e.data<o.value:e.data<=o.value)&&(r=this._getOrReturnCtx(e,r),p(r,{code:u.too_small,type:"bigint",minimum:o.value,inclusive:o.inclusive,message:o.message}),s.dirty()):o.kind==="max"?(o.inclusive?e.data>o.value:e.data>=o.value)&&(r=this._getOrReturnCtx(e,r),p(r,{code:u.too_big,type:"bigint",maximum:o.value,inclusive:o.inclusive,message:o.message}),s.dirty()):o.kind==="multipleOf"?e.data%o.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),p(r,{code:u.not_multiple_of,multipleOf:o.value,message:o.message}),s.dirty()):S.assertNever(o);return {status:s.value,value:e.data}}_getInvalidInput(e){let n=this._getOrReturnCtx(e);return p(n,{code:u.invalid_type,expected:g.bigint,received:n.parsedType}),h}gte(e,n){return this.setLimit("min",e,true,m.toString(n))}gt(e,n){return this.setLimit("min",e,false,m.toString(n))}lte(e,n){return this.setLimit("max",e,true,m.toString(n))}lt(e,n){return this.setLimit("max",e,false,m.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:m.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:false,message:m.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:false,message:m.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:true,message:m.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:true,message:m.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:m.toString(n)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};Ce.create=t=>new Ce({checks:[],typeName:y.ZodBigInt,coerce:t?.coerce??false,...k(t)});var Ie=class extends _{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==g.boolean){let r=this._getOrReturnCtx(e);return p(r,{code:u.invalid_type,expected:g.boolean,received:r.parsedType}),h}return J(e.data)}};Ie.create=t=>new Ie({typeName:y.ZodBoolean,coerce:t?.coerce||false,...k(t)});var Ne=class t extends _{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==g.date){let o=this._getOrReturnCtx(e);return p(o,{code:u.invalid_type,expected:g.date,received:o.parsedType}),h}if(Number.isNaN(e.data.getTime())){let o=this._getOrReturnCtx(e);return p(o,{code:u.invalid_date}),h}let r=new z,s;for(let o of this._def.checks)o.kind==="min"?e.data.getTime()<o.value&&(s=this._getOrReturnCtx(e,s),p(s,{code:u.too_small,message:o.message,inclusive:true,exact:false,minimum:o.value,type:"date"}),r.dirty()):o.kind==="max"?e.data.getTime()>o.value&&(s=this._getOrReturnCtx(e,s),p(s,{code:u.too_big,message:o.message,inclusive:true,exact:false,maximum:o.value,type:"date"}),r.dirty()):S.assertNever(o);return {status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:m.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:m.toString(n)})}get minDate(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}};Ne.create=t=>new Ne({checks:[],coerce:t?.coerce||false,typeName:y.ZodDate,...k(t)});var rt=class extends _{_parse(e){if(this._getType(e)!==g.symbol){let r=this._getOrReturnCtx(e);return p(r,{code:u.invalid_type,expected:g.symbol,received:r.parsedType}),h}return J(e.data)}};rt.create=t=>new rt({typeName:y.ZodSymbol,...k(t)});var Oe=class extends _{_parse(e){if(this._getType(e)!==g.undefined){let r=this._getOrReturnCtx(e);return p(r,{code:u.invalid_type,expected:g.undefined,received:r.parsedType}),h}return J(e.data)}};Oe.create=t=>new Oe({typeName:y.ZodUndefined,...k(t)});var Pe=class extends _{_parse(e){if(this._getType(e)!==g.null){let r=this._getOrReturnCtx(e);return p(r,{code:u.invalid_type,expected:g.null,received:r.parsedType}),h}return J(e.data)}};Pe.create=t=>new Pe({typeName:y.ZodNull,...k(t)});var Ee=class extends _{constructor(){super(...arguments),this._any=true;}_parse(e){return J(e.data)}};Ee.create=t=>new Ee({typeName:y.ZodAny,...k(t)});var me=class extends _{constructor(){super(...arguments),this._unknown=true;}_parse(e){return J(e.data)}};me.create=t=>new me({typeName:y.ZodUnknown,...k(t)});var oe=class extends _{_parse(e){let n=this._getOrReturnCtx(e);return p(n,{code:u.invalid_type,expected:g.never,received:n.parsedType}),h}};oe.create=t=>new oe({typeName:y.ZodNever,...k(t)});var st=class extends _{_parse(e){if(this._getType(e)!==g.undefined){let r=this._getOrReturnCtx(e);return p(r,{code:u.invalid_type,expected:g.void,received:r.parsedType}),h}return J(e.data)}};st.create=t=>new st({typeName:y.ZodVoid,...k(t)});var he=class t extends _{_parse(e){let{ctx:n,status:r}=this._processInputParams(e),s=this._def;if(n.parsedType!==g.array)return p(n,{code:u.invalid_type,expected:g.array,received:n.parsedType}),h;if(s.exactLength!==null){let a=n.data.length>s.exactLength.value,i=n.data.length<s.exactLength.value;(a||i)&&(p(n,{code:a?u.too_big:u.too_small,minimum:i?s.exactLength.value:void 0,maximum:a?s.exactLength.value:void 0,type:"array",inclusive:true,exact:true,message:s.exactLength.message}),r.dirty());}if(s.minLength!==null&&n.data.length<s.minLength.value&&(p(n,{code:u.too_small,minimum:s.minLength.value,type:"array",inclusive:true,exact:false,message:s.minLength.message}),r.dirty()),s.maxLength!==null&&n.data.length>s.maxLength.value&&(p(n,{code:u.too_big,maximum:s.maxLength.value,type:"array",inclusive:true,exact:false,message:s.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((a,i)=>s.type._parseAsync(new ne(n,a,n.path,i)))).then(a=>z.mergeArray(r,a));let o=[...n.data].map((a,i)=>s.type._parseSync(new ne(n,a,n.path,i)));return z.mergeArray(r,o)}get element(){return this._def.type}min(e,n){return new t({...this._def,minLength:{value:e,message:m.toString(n)}})}max(e,n){return new t({...this._def,maxLength:{value:e,message:m.toString(n)}})}length(e,n){return new t({...this._def,exactLength:{value:e,message:m.toString(n)}})}nonempty(e){return this.min(1,e)}};he.create=(t,e)=>new he({type:t,minLength:null,maxLength:null,exactLength:null,typeName:y.ZodArray,...k(e)});function nt(t){if(t instanceof W){let e={};for(let n in t.shape){let r=t.shape[n];e[n]=te.create(nt(r));}return new W({...t._def,shape:()=>e})}else return t instanceof he?new he({...t._def,type:nt(t.element)}):t instanceof te?te.create(nt(t.unwrap())):t instanceof ue?ue.create(nt(t.unwrap())):t instanceof le?le.create(t.items.map(e=>nt(e))):t}var W=class t extends _{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend;}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),n=S.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==g.object){let l=this._getOrReturnCtx(e);return p(l,{code:u.invalid_type,expected:g.object,received:l.parsedType}),h}let{status:r,ctx:s}=this._processInputParams(e),{shape:o,keys:a}=this._getCached(),i=[];if(!(this._def.catchall instanceof oe&&this._def.unknownKeys==="strip"))for(let l in s.data)a.includes(l)||i.push(l);let c=[];for(let l of a){let d=o[l],A=s.data[l];c.push({key:{status:"valid",value:l},value:d._parse(new ne(s,A,s.path,l)),alwaysSet:l in s.data});}if(this._def.catchall instanceof oe){let l=this._def.unknownKeys;if(l==="passthrough")for(let d of i)c.push({key:{status:"valid",value:d},value:{status:"valid",value:s.data[d]}});else if(l==="strict")i.length>0&&(p(s,{code:u.unrecognized_keys,keys:i}),r.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else {let l=this._def.catchall;for(let d of i){let A=s.data[d];c.push({key:{status:"valid",value:d},value:l._parse(new ne(s,A,s.path,d)),alwaysSet:d in s.data});}}return s.common.async?Promise.resolve().then(async()=>{let l=[];for(let d of c){let A=await d.key,P=await d.value;l.push({key:A,value:P,alwaysSet:d.alwaysSet});}return l}).then(l=>z.mergeObjectSync(r,l)):z.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return m.errToObj,new t({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,r)=>{let s=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:m.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new t({...this._def,unknownKeys:"strip"})}passthrough(){return new t({...this._def,unknownKeys:"passthrough"})}extend(e){return new t({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new t({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:y.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new t({...this._def,catchall:e})}pick(e){let n={};for(let r of S.objectKeys(e))e[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}omit(e){let n={};for(let r of S.objectKeys(this.shape))e[r]||(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}deepPartial(){return nt(this)}partial(e){let n={};for(let r of S.objectKeys(this.shape)){let s=this.shape[r];e&&!e[r]?n[r]=s:n[r]=s.optional();}return new t({...this._def,shape:()=>n})}required(e){let n={};for(let r of S.objectKeys(this.shape))if(e&&!e[r])n[r]=this.shape[r];else {let o=this.shape[r];for(;o instanceof te;)o=o._def.innerType;n[r]=o;}return new t({...this._def,shape:()=>n})}keyof(){return qn(S.objectKeys(this.shape))}};W.create=(t,e)=>new W({shape:()=>t,unknownKeys:"strip",catchall:oe.create(),typeName:y.ZodObject,...k(e)});W.strictCreate=(t,e)=>new W({shape:()=>t,unknownKeys:"strict",catchall:oe.create(),typeName:y.ZodObject,...k(e)});W.lazycreate=(t,e)=>new W({shape:t,unknownKeys:"strip",catchall:oe.create(),typeName:y.ZodObject,...k(e)});var De=class extends _{_parse(e){let{ctx:n}=this._processInputParams(e),r=this._def.options;function s(o){for(let i of o)if(i.result.status==="valid")return i.result;for(let i of o)if(i.result.status==="dirty")return n.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(i=>new K(i.ctx.common.issues));return p(n,{code:u.invalid_union,unionErrors:a}),h}if(n.common.async)return Promise.all(r.map(async o=>{let a={...n,common:{...n.common,issues:[]},parent:null};return {result:await o._parseAsync({data:n.data,path:n.path,parent:a}),ctx:a}})).then(s);{let o,a=[];for(let c of r){let l={...n,common:{...n.common,issues:[]},parent:null},d=c._parseSync({data:n.data,path:n.path,parent:l});if(d.status==="valid")return d;d.status==="dirty"&&!o&&(o={result:d,ctx:l}),l.common.issues.length&&a.push(l.common.issues);}if(o)return n.common.issues.push(...o.ctx.common.issues),o.result;let i=a.map(c=>new K(c));return p(n,{code:u.invalid_union,unionErrors:i}),h}}get options(){return this._def.options}};De.create=(t,e)=>new De({options:t,typeName:y.ZodUnion,...k(e)});var ge=t=>t instanceof Le?ge(t.schema):t instanceof re?ge(t.innerType()):t instanceof $e?[t.value]:t instanceof Ve?t.options:t instanceof Me?S.objectValues(t.enum):t instanceof Ue?ge(t._def.innerType):t instanceof Oe?[void 0]:t instanceof Pe?[null]:t instanceof te?[void 0,...ge(t.unwrap())]:t instanceof ue?[null,...ge(t.unwrap())]:t instanceof yt||t instanceof Be?ge(t.unwrap()):t instanceof Fe?ge(t._def.innerType):[],$t=class t extends _{_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==g.object)return p(n,{code:u.invalid_type,expected:g.object,received:n.parsedType}),h;let r=this.discriminator,s=n.data[r],o=this.optionsMap.get(s);return o?n.common.async?o._parseAsync({data:n.data,path:n.path,parent:n}):o._parseSync({data:n.data,path:n.path,parent:n}):(p(n,{code:u.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),h)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,r){let s=new Map;for(let o of n){let a=ge(o.shape[e]);if(!a.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let i of a){if(s.has(i))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(i)}`);s.set(i,o);}}return new t({typeName:y.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:s,...k(r)})}};function dn(t,e){let n=ce(t),r=ce(e);if(t===e)return {valid:true,data:t};if(n===g.object&&r===g.object){let s=S.objectKeys(e),o=S.objectKeys(t).filter(i=>s.indexOf(i)!==-1),a={...t,...e};for(let i of o){let c=dn(t[i],e[i]);if(!c.valid)return {valid:false};a[i]=c.data;}return {valid:true,data:a}}else if(n===g.array&&r===g.array){if(t.length!==e.length)return {valid:false};let s=[];for(let o=0;o<t.length;o++){let a=t[o],i=e[o],c=dn(a,i);if(!c.valid)return {valid:false};s.push(c.data);}return {valid:true,data:s}}else return n===g.date&&r===g.date&&+t==+e?{valid:true,data:t}:{valid:false}}var je=class extends _{_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=(o,a)=>{if(jt(o)||jt(a))return h;let i=dn(o.value,a.value);return i.valid?((Lt(o)||Lt(a))&&n.dirty(),{status:n.value,value:i.data}):(p(r,{code:u.invalid_intersection_types}),h)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([o,a])=>s(o,a)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};je.create=(t,e,n)=>new je({left:t,right:e,typeName:y.ZodIntersection,...k(n)});var le=class t extends _{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==g.array)return p(r,{code:u.invalid_type,expected:g.array,received:r.parsedType}),h;if(r.data.length<this._def.items.length)return p(r,{code:u.too_small,minimum:this._def.items.length,inclusive:true,exact:false,type:"array"}),h;!this._def.rest&&r.data.length>this._def.items.length&&(p(r,{code:u.too_big,maximum:this._def.items.length,inclusive:true,exact:false,type:"array"}),n.dirty());let o=[...r.data].map((a,i)=>{let c=this._def.items[i]||this._def.rest;return c?c._parse(new ne(r,a,r.path,i)):null}).filter(a=>!!a);return r.common.async?Promise.all(o).then(a=>z.mergeArray(n,a)):z.mergeArray(n,o)}get items(){return this._def.items}rest(e){return new t({...this._def,rest:e})}};le.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new le({items:t,typeName:y.ZodTuple,rest:null,...k(e)})};var Vt=class t extends _{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==g.object)return p(r,{code:u.invalid_type,expected:g.object,received:r.parsedType}),h;let s=[],o=this._def.keyType,a=this._def.valueType;for(let i in r.data)s.push({key:o._parse(new ne(r,i,r.path,i)),value:a._parse(new ne(r,r.data[i],r.path,i)),alwaysSet:i in r.data});return r.common.async?z.mergeObjectAsync(n,s):z.mergeObjectSync(n,s)}get element(){return this._def.valueType}static create(e,n,r){return n instanceof _?new t({keyType:e,valueType:n,typeName:y.ZodRecord,...k(r)}):new t({keyType:Se.create(),valueType:e,typeName:y.ZodRecord,...k(n)})}},ot=class extends _{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==g.map)return p(r,{code:u.invalid_type,expected:g.map,received:r.parsedType}),h;let s=this._def.keyType,o=this._def.valueType,a=[...r.data.entries()].map(([i,c],l)=>({key:s._parse(new ne(r,i,r.path,[l,"key"])),value:o._parse(new ne(r,c,r.path,[l,"value"]))}));if(r.common.async){let i=new Map;return Promise.resolve().then(async()=>{for(let c of a){let l=await c.key,d=await c.value;if(l.status==="aborted"||d.status==="aborted")return h;(l.status==="dirty"||d.status==="dirty")&&n.dirty(),i.set(l.value,d.value);}return {status:n.value,value:i}})}else {let i=new Map;for(let c of a){let l=c.key,d=c.value;if(l.status==="aborted"||d.status==="aborted")return h;(l.status==="dirty"||d.status==="dirty")&&n.dirty(),i.set(l.value,d.value);}return {status:n.value,value:i}}}};ot.create=(t,e,n)=>new ot({valueType:e,keyType:t,typeName:y.ZodMap,...k(n)});var it=class t extends _{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==g.set)return p(r,{code:u.invalid_type,expected:g.set,received:r.parsedType}),h;let s=this._def;s.minSize!==null&&r.data.size<s.minSize.value&&(p(r,{code:u.too_small,minimum:s.minSize.value,type:"set",inclusive:true,exact:false,message:s.minSize.message}),n.dirty()),s.maxSize!==null&&r.data.size>s.maxSize.value&&(p(r,{code:u.too_big,maximum:s.maxSize.value,type:"set",inclusive:true,exact:false,message:s.maxSize.message}),n.dirty());let o=this._def.valueType;function a(c){let l=new Set;for(let d of c){if(d.status==="aborted")return h;d.status==="dirty"&&n.dirty(),l.add(d.value);}return {status:n.value,value:l}}let i=[...r.data.values()].map((c,l)=>o._parse(new ne(r,c,r.path,l)));return r.common.async?Promise.all(i).then(c=>a(c)):a(i)}min(e,n){return new t({...this._def,minSize:{value:e,message:m.toString(n)}})}max(e,n){return new t({...this._def,maxSize:{value:e,message:m.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}};it.create=(t,e)=>new it({valueType:t,minSize:null,maxSize:null,typeName:y.ZodSet,...k(e)});var Mt=class t extends _{constructor(){super(...arguments),this.validate=this.implement;}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==g.function)return p(n,{code:u.invalid_type,expected:g.function,received:n.parsedType}),h;function r(i,c){return ht({data:i,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,et(),pe].filter(l=>!!l),issueData:{code:u.invalid_arguments,argumentsError:c}})}function s(i,c){return ht({data:i,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,et(),pe].filter(l=>!!l),issueData:{code:u.invalid_return_type,returnTypeError:c}})}let o={errorMap:n.common.contextualErrorMap},a=n.data;if(this._def.returns instanceof Te){let i=this;return J(async function(...c){let l=new K([]),d=await i._def.args.parseAsync(c,o).catch(C=>{throw l.addIssue(r(c,C)),l}),A=await Reflect.apply(a,this,d);return await i._def.returns._def.type.parseAsync(A,o).catch(C=>{throw l.addIssue(s(A,C)),l})})}else {let i=this;return J(function(...c){let l=i._def.args.safeParse(c,o);if(!l.success)throw new K([r(c,l.error)]);let d=Reflect.apply(a,this,l.data),A=i._def.returns.safeParse(d,o);if(!A.success)throw new K([s(d,A.error)]);return A.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new t({...this._def,args:le.create(e).rest(me.create())})}returns(e){return new t({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,r){return new t({args:e||le.create([]).rest(me.create()),returns:n||me.create(),typeName:y.ZodFunction,...k(r)})}},Le=class extends _{get schema(){return this._def.getter()}_parse(e){let{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};Le.create=(t,e)=>new Le({getter:t,typeName:y.ZodLazy,...k(e)});var $e=class extends _{_parse(e){if(e.data!==this._def.value){let n=this._getOrReturnCtx(e);return p(n,{received:n.data,code:u.invalid_literal,expected:this._def.value}),h}return {status:"valid",value:e.data}}get value(){return this._def.value}};$e.create=(t,e)=>new $e({value:t,typeName:y.ZodLiteral,...k(e)});function qn(t,e){return new Ve({values:t,typeName:y.ZodEnum,...k(e)})}var Ve=class t extends _{_parse(e){if(typeof e.data!="string"){let n=this._getOrReturnCtx(e),r=this._def.values;return p(n,{expected:S.joinValues(r),received:n.parsedType,code:u.invalid_type}),h}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let n=this._getOrReturnCtx(e),r=this._def.values;return p(n,{received:n.data,code:u.invalid_enum_value,options:r}),h}return J(e.data)}get options(){return this._def.values}get enum(){let e={};for(let n of this._def.values)e[n]=n;return e}get Values(){let e={};for(let n of this._def.values)e[n]=n;return e}get Enum(){let e={};for(let n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return t.create(e,{...this._def,...n})}exclude(e,n=this._def){return t.create(this.options.filter(r=>!e.includes(r)),{...this._def,...n})}};Ve.create=qn;var Me=class extends _{_parse(e){let n=S.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==g.string&&r.parsedType!==g.number){let s=S.objectValues(n);return p(r,{expected:S.joinValues(s),received:r.parsedType,code:u.invalid_type}),h}if(this._cache||(this._cache=new Set(S.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=S.objectValues(n);return p(r,{received:r.data,code:u.invalid_enum_value,options:s}),h}return J(e.data)}get enum(){return this._def.values}};Me.create=(t,e)=>new Me({values:t,typeName:y.ZodNativeEnum,...k(e)});var Te=class extends _{unwrap(){return this._def.type}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==g.promise&&n.common.async===false)return p(n,{code:u.invalid_type,expected:g.promise,received:n.parsedType}),h;let r=n.parsedType===g.promise?n.data:Promise.resolve(n.data);return J(r.then(s=>this._def.type.parseAsync(s,{path:n.path,errorMap:n.common.contextualErrorMap})))}};Te.create=(t,e)=>new Te({type:t,typeName:y.ZodPromise,...k(e)});var re=class extends _{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===y.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=this._def.effect||null,o={addIssue:a=>{p(r,a),a.fatal?n.abort():n.dirty();},get path(){return r.path}};if(o.addIssue=o.addIssue.bind(o),s.type==="preprocess"){let a=s.transform(r.data,o);if(r.common.async)return Promise.resolve(a).then(async i=>{if(n.value==="aborted")return h;let c=await this._def.schema._parseAsync({data:i,path:r.path,parent:r});return c.status==="aborted"?h:c.status==="dirty"?be(c.value):n.value==="dirty"?be(c.value):c});{if(n.value==="aborted")return h;let i=this._def.schema._parseSync({data:a,path:r.path,parent:r});return i.status==="aborted"?h:i.status==="dirty"?be(i.value):n.value==="dirty"?be(i.value):i}}if(s.type==="refinement"){let a=i=>{let c=s.refinement(i,o);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return i};if(r.common.async===false){let i=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?h:(i.status==="dirty"&&n.dirty(),a(i.value),{status:n.value,value:i.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(i=>i.status==="aborted"?h:(i.status==="dirty"&&n.dirty(),a(i.value).then(()=>({status:n.value,value:i.value}))))}if(s.type==="transform")if(r.common.async===false){let a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!we(a))return h;let i=s.transform(a.value,o);if(i instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return {status:n.value,value:i}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>we(a)?Promise.resolve(s.transform(a.value,o)).then(i=>({status:n.value,value:i})):h);S.assertNever(s);}};re.create=(t,e,n)=>new re({schema:t,typeName:y.ZodEffects,effect:e,...k(n)});re.createWithPreprocess=(t,e,n)=>new re({schema:e,effect:{type:"preprocess",transform:t},typeName:y.ZodEffects,...k(n)});var te=class extends _{_parse(e){return this._getType(e)===g.undefined?J(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};te.create=(t,e)=>new te({innerType:t,typeName:y.ZodOptional,...k(e)});var ue=class extends _{_parse(e){return this._getType(e)===g.null?J(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ue.create=(t,e)=>new ue({innerType:t,typeName:y.ZodNullable,...k(e)});var Ue=class extends _{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return n.parsedType===g.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};Ue.create=(t,e)=>new Ue({innerType:t,typeName:y.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...k(e)});var Fe=class extends _{_parse(e){let{ctx:n}=this._processInputParams(e),r={...n,common:{...n.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return tt(s)?s.then(o=>({status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new K(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new K(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};Fe.create=(t,e)=>new Fe({innerType:t,typeName:y.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...k(e)});var at=class extends _{_parse(e){if(this._getType(e)!==g.nan){let r=this._getOrReturnCtx(e);return p(r,{code:u.invalid_type,expected:g.nan,received:r.parsedType}),h}return {status:"valid",value:e.data}}};at.create=t=>new at({typeName:y.ZodNaN,...k(t)});var Ps=Symbol("zod_brand"),yt=class extends _{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}},vt=class t extends _{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.common.async)return (async()=>{let o=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?h:o.status==="dirty"?(n.dirty(),be(o.value)):this._def.out._parseAsync({data:o.value,path:r.path,parent:r})})();{let s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?h:s.status==="dirty"?(n.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(e,n){return new t({in:e,out:n,typeName:y.ZodPipeline})}},Be=class extends _{_parse(e){let n=this._def.innerType._parse(e),r=s=>(we(s)&&(s.value=Object.freeze(s.value)),s);return tt(n)?n.then(s=>r(s)):r(n)}unwrap(){return this._def.innerType}};Be.create=(t,e)=>new Be({innerType:t,typeName:y.ZodReadonly,...k(e)});function Gn(t,e){let n=typeof t=="function"?t(e):typeof t=="string"?{message:t}:t;return typeof n=="string"?{message:n}:n}function Yn(t,e={},n){return t?Ee.create().superRefine((r,s)=>{let o=t(r);if(o instanceof Promise)return o.then(a=>{if(!a){let i=Gn(e,r),c=i.fatal??n??true;s.addIssue({code:"custom",...i,fatal:c});}});if(!o){let a=Gn(e,r),i=a.fatal??n??true;s.addIssue({code:"custom",...a,fatal:i});}}):Ee.create()}var Ds={object:W.lazycreate},y;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly";})(y||(y={}));var js=(t,e={message:`Input not instance of ${t.name}`})=>Yn(n=>n instanceof t,e),Xn=Se.create,Qn=Re.create,Ls=at.create,$s=Ce.create,er=Ie.create,Vs=Ne.create,Ms=rt.create,Us=Oe.create,Fs=Pe.create,Bs=Ee.create,zs=me.create,Hs=oe.create,Js=st.create,Gs=he.create,Zs=W.create,Ks=W.strictCreate,Ws=De.create,qs=$t.create,Ys=je.create,Xs=le.create,Qs=Vt.create,eo=ot.create,to=it.create,no=Mt.create,ro=Le.create,so=$e.create,oo=Ve.create,io=Me.create,ao=Te.create,co=re.create,lo=te.create,uo=ue.create,fo=re.createWithPreprocess,po=vt.create,go=()=>Xn().optional(),mo=()=>Qn().optional(),ho=()=>er().optional(),yo={string:(t=>Se.create({...t,coerce:true})),number:(t=>Re.create({...t,coerce:true})),boolean:(t=>Ie.create({...t,coerce:true})),bigint:(t=>Ce.create({...t,coerce:true})),date:(t=>Ne.create({...t,coerce:true}))};var vo=h;var ko={api:{rateLimit:{windowMs:900*1e3,maxRequests:100}}};f.object({snapshot_version:f.string(),engine_target_version:f.string(),project_id:f.string(),generated_at:f.string(),root_path_hash:f.string(),metadata:f.object({total_files:f.number().int().nonnegative(),total_dependencies:f.number().int().nonnegative(),total_size_bytes:f.number().int().nonnegative(),total_lines:f.number().int().nonnegative(),max_directory_depth:f.number().int().nonnegative(),language_breakdown:f.record(f.string(),f.number().int().nonnegative())}),files:f.array(f.object({id:f.string(),path_hash:f.string(),depth:f.number().int().nonnegative(),size_bytes:f.number().int().nonnegative(),estimated_lines:f.number().int().nonnegative(),extension:f.string(),is_binary:f.boolean(),import_count:f.number().int().nonnegative().optional(),function_count:f.number().int().nonnegative().optional(),class_count:f.number().int().nonnegative().optional()})),dependencies:f.array(f.object({id:f.string(),name_hash:f.string(),major_version:f.number().int().nonnegative(),minor_version:f.number().int().nonnegative(),category:f.enum(["dev","prod","peer"])}))});f.object({name:f.string().min(1).max(100)});f.object({analysis_version:f.string(),snapshot_schema_version:f.string(),total_score:f.number().min(0).max(100),severity_band:f.enum(["HEALTHY","STABLE","STRUCTURAL_CONCERN","HIGH_RISK"]),engines:f.array(f.object({engine_name:f.string(),score_impact:f.number(),risk_level:f.enum(["HEALTHY","STABLE","STRUCTURAL_CONCERN","HIGH_RISK"]),metrics:f.record(f.number()),findings:f.array(f.object({rule_id:f.string(),title:f.string(),message:f.string(),severity:f.enum(["CRITICAL","HIGH","MEDIUM","LOW"]),category:f.enum(["SECURITY","STRUCTURE","COMPLEXITY","DEPENDENCY","REPOSITORY_HYGIENE","DOCUMENTATION","QUALITY"]),evidence:f.array(f.string()).optional(),explanation:f.string().optional(),impact:f.string().optional(),effort:f.enum(["Low","Medium","High"]).optional(),recommendations:f.array(f.string()).optional()}))})),summary:f.object({total_findings:f.number().int().nonnegative(),critical_count:f.number().int().nonnegative(),high_count:f.number().int().nonnegative(),medium_count:f.number().int().nonnegative(),low_count:f.number().int().nonnegative(),categories:f.record(f.string(),f.number().int().nonnegative())}),generated_at:f.string()});var _o=f.object({NEXT_PUBLIC_SUPABASE_URL:f.string().url("Invalid SUPABASE_URL"),NEXT_PUBLIC_SUPABASE_ANON_KEY:f.string().min(1,"SUPABASE_ANON_KEY is required"),SUPABASE_SERVICE_ROLE_KEY:f.string().min(1,"SERVICE_ROLE_KEY is required"),NODE_ENV:f.enum(["development","production","test"],{errorMap:()=>({message:"NODE_ENV must be development, production, or test"})}),JWT_SECRET:f.string().min(32,"JWT_SECRET must be at least 32 characters").optional()});function wo(){try{return _o.parse(process.env)}catch(t){if(t instanceof f.ZodError){let e=t.errors.map(n=>n.path.join(".")).join(", ");throw new Error(`Environment validation failed:
22
+ `)),process.exit(1);}process.env.VEESTACK_DEBUG==="true"&&console.log(v.gray(`\u2713 Official package verified: ${rt.join(" or ")}`));}function Vt(){let t=Fn(),e=rt.includes(t);return {packageName:t,isOfficial:e,homepage:"https://www.veestack.com",repository:"https://github.com/Mohmed-ElZehiry/VeeStack"}}var Qr=[".env",".env.local",".env.development",".env.production",".env.test",".env.example",".envrc",".env.*","id_rsa","id_rsa.pub","id_dsa","id_dsa.pub","id_ecdsa","id_ecdsa.pub","id_ed25519","id_ed25519.pub","*.pem","*.key","*.p12","*.pfx","*.crt","*.cer","*.der","credentials",".aws/credentials",".aws/config",".docker/config.json","kubeconfig","*.kubeconfig",".npmrc",".yarnrc",".pnpmrc",".git-credentials","*.sqlite","*.sqlite3","*.db","secrets/","secret/",".secrets/","config.json","settings.json","local.settings.json"],es=["veestack.config.json","package.json","tsconfig.json","jsconfig.json",".eslintrc.json",".prettierrc.json","README.md"],ts=[{name:"AWS Access Key ID",pattern:/AKIA[0-9A-Z]{16}/g,severity:"critical",description:"AWS Access Key ID detected"},{name:"AWS Secret Access Key",pattern:/['"\s][A-Za-z0-9/+=]{40}['"\s]/g,severity:"critical",description:"Potential AWS Secret Key detected"},{name:"Private Key",pattern:/-----BEGIN (RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----/g,severity:"critical",description:"Private key detected"},{name:"JWT Token",pattern:/eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*/g,severity:"high",description:"JWT token detected"},{name:"Bearer Token",pattern:/Bearer\s+[a-zA-Z0-9_-]{20,}/gi,severity:"high",description:"Bearer token detected"},{name:"API Key",pattern:/(?:api[_-]?key|apikey|api_token|apiToken)['"\s]*[:=]\s*['"][a-zA-Z0-9_-]{16,}['"]/gi,severity:"high",description:"API key detected"},{name:"Password in URL",pattern:/[a-zA-Z]+:\/\/[^\s:@]+:[^\s:@]+@[^\s]+/g,severity:"high",description:"Password in URL detected"},{name:"Password Assignment",pattern:/(?:password|passwd|pwd)\s*[=:]\s*['"][^'"]{8,}['"]/gi,severity:"medium",description:"Password assignment detected"},{name:"GitHub Token",pattern:/gh[pousr]_[A-Za-z0-9_]{36,}/g,severity:"critical",description:"GitHub token detected"},{name:"Slack Token",pattern:/xox[baprs]-[0-9]{10,13}-[0-9]{10,13}(-[a-zA-Z0-9]{24})?/g,severity:"critical",description:"Slack token detected"},{name:"Generic Secret",pattern:/(?:secret|token|key)\s*[=:]\s*['"][a-zA-Z0-9_-]{20,}['"]/gi,severity:"medium",description:"Potential secret detected"},{name:"Connection String",pattern:/(?:mongodb|postgres|mysql|redis|amqp):\/\/[^\s]+/gi,severity:"high",description:"Database connection string detected"},{name:"VeeStack Token",pattern:/vs_[a-zA-Z0-9_-]{20,}/g,severity:"critical",description:"VeeStack token detected"}];function Hn(t){let e=t.replace(/\\/g,"/").toLowerCase(),n=tt.basename(e);for(let r of es)if(n===r.toLowerCase())return false;for(let r of Qr){if(n===r.toLowerCase())return true;if(r.includes("*")){let s=r.toLowerCase().replace(/\./g,"\\.").replace(/\*/g,".*"),o=new RegExp(s);if(o.test(n)||o.test(e))return true}if(e.includes(r.toLowerCase().replace("*","")))return true}return false}function ns(t,e){let n=[],r=e.split(`
23
+ `);for(let s of ts){s.pattern.lastIndex=0;for(let o=0;o<r.length;o++){let a=r[o],i;for(;(i=s.pattern.exec(a))!==null;)n.push({filePath:t,type:"secret_content",secretName:s.name,severity:s.severity,description:s.description,lineNumber:o+1,match:i[0].substring(0,20)+"..."});s.pattern.lastIndex=0;}}return n}async function rs(t){let e=[];if(Hn(t))return e.push({filePath:t,type:"sensitive_file",secretName:"Sensitive File",severity:"critical",description:`Sensitive file type detected: ${tt.basename(t)}`}),e;try{if(oe.statSync(t).size>1024*1024)return e;let r=oe.readFileSync(t,"utf-8"),s=ns(t,r);e.push(...s);}catch{}return e}async function Jn(t,e){let n=[];for(let i of e){let c=tt.join(t,i),l=await rs(c);for(let d of l)d.filePath=i,n.push(d);}let r=n.filter(i=>i.severity==="critical").length,s=n.filter(i=>i.severity==="high").length,o=n.filter(i=>i.severity==="medium").length,a=n.filter(i=>i.severity==="low").length;return {totalFiles:e.length,secretsFound:n.length,criticalCount:r,highCount:s,mediumCount:o,lowCount:a,results:n}}function Gn(t){let e=[],n=[];for(let r of t)Hn(r)?n.push(r):e.push(r);return {safe:e,blocked:n}}var un=(t=>typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>e[n]}):t)(function(t){throw Error('Dynamic require of "'+t+'" is not supported')}),Zn=typeof process<"u"&&process.versions?.node,ss=Zn&&(Array.isArray(process.argv)&&process.argv.includes("--debug")||process.env.VEESTACK_DEBUG==="1"),dn=globalThis||{},pn=null;if(Zn)try{let t=function(){let b=d,$=0;for(;b!==i(b)&&$<10;){let I=a(b,"package.json");try{if(o(I)){let C=JSON.parse(s(I,"utf-8"));if(C.name==="vee_stack")return C}}catch{}b=i(b),$++;}return null};os=t;let e=un("fs"),n=un("path"),r=un("url"),{readFileSync:s,existsSync:o}=e,{join:a,dirname:i}=n,{fileURLToPath:c}=r,l=c(import.meta.url),d=i(l);pn=t();}catch{ss&&console.debug("[veestack:debug] Failed to load package.json dynamically, using defaults");}var os,Te=pn?.versions||dn.VEESTACK_VERSIONS||{},te=pn?.version||dn.VEESTACK_VERSION||dn.CLI_VERSION||"unknown",fn=`vs_cli_v${te}`;Te.snapshot||"unknown";Te.engine_target||"unknown";Te.audit||"unknown";Te.session_payload||"unknown";Te.rules||"unknown";Te.analysis||"unknown";Te.api||"unknown";Te.min_node||"unknown";var p={};Zr(p,{BRAND:()=>$s,DIRTY:()=>Pe,EMPTY_PATH:()=>gs,INVALID:()=>h,NEVER:()=>wo,OK:()=>G,ParseStatus:()=>H,Schema:()=>w,ZodAny:()=>be,ZodArray:()=>ve,ZodBigInt:()=>De,ZodBoolean:()=>je,ZodBranded:()=>Tt,ZodCatch:()=>Ge,ZodDate:()=>$e,ZodDefault:()=>Je,ZodDiscriminatedUnion:()=>Ht,ZodEffects:()=>se,ZodEnum:()=>ze,ZodError:()=>q,ZodFirstPartyTypeKind:()=>y,ZodFunction:()=>Gt,ZodIntersection:()=>Me,ZodIssueCode:()=>u,ZodLazy:()=>Be,ZodLiteral:()=>Fe,ZodMap:()=>lt,ZodNaN:()=>dt,ZodNativeEnum:()=>He,ZodNever:()=>ie,ZodNull:()=>Ve,ZodNullable:()=>de,ZodNumber:()=>Oe,ZodObject:()=>Y,ZodOptional:()=>ne,ZodParsedType:()=>g,ZodPipeline:()=>At,ZodPromise:()=>Re,ZodReadonly:()=>Ze,ZodRecord:()=>Jt,ZodSchema:()=>w,ZodSet:()=>ut,ZodString:()=>xe,ZodSymbol:()=>at,ZodTransformer:()=>se,ZodTuple:()=>ue,ZodType:()=>w,ZodUndefined:()=>Le,ZodUnion:()=>Ue,ZodUnknown:()=>ye,ZodVoid:()=>ct,addIssueToContext:()=>f,any:()=>Js,array:()=>Ws,bigint:()=>Ms,boolean:()=>sr,coerce:()=>_o,custom:()=>tr,date:()=>Bs,datetimeRegex:()=>Qn,defaultErrorMap:()=>me,discriminatedUnion:()=>Qs,effect:()=>po,enum:()=>co,function:()=>oo,getErrorMap:()=>st,getParsedType:()=>le,instanceof:()=>Vs,intersection:()=>eo,isAborted:()=>Ft,isAsync:()=>ot,isDirty:()=>zt,isValid:()=>Ae,late:()=>Ls,lazy:()=>io,literal:()=>ao,makeIssue:()=>Et,map:()=>ro,nan:()=>Us,nativeEnum:()=>lo,never:()=>Zs,null:()=>Hs,nullable:()=>go,number:()=>rr,object:()=>qs,objectUtil:()=>hn,oboolean:()=>ko,onumber:()=>vo,optional:()=>fo,ostring:()=>yo,pipeline:()=>ho,preprocess:()=>mo,promise:()=>uo,quotelessJson:()=>ds,record:()=>no,set:()=>so,setErrorMap:()=>fs,strictObject:()=>Ys,string:()=>nr,symbol:()=>Fs,transformer:()=>po,tuple:()=>to,undefined:()=>zs,union:()=>Xs,unknown:()=>Gs,util:()=>E,void:()=>Ks});var E;(function(t){t.assertEqual=s=>{};function e(s){}t.assertIs=e;function n(s){throw new Error}t.assertNever=n,t.arrayToEnum=s=>{let o={};for(let a of s)o[a]=a;return o},t.getValidEnumValues=s=>{let o=t.objectKeys(s).filter(i=>typeof s[s[i]]!="number"),a={};for(let i of o)a[i]=s[i];return t.objectValues(a)},t.objectValues=s=>t.objectKeys(s).map(function(o){return s[o]}),t.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let o=[];for(let a in s)Object.prototype.hasOwnProperty.call(s,a)&&o.push(a);return o},t.find=(s,o)=>{for(let a of s)if(o(a))return a},t.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,o=" | "){return s.map(a=>typeof a=="string"?`'${a}'`:a).join(o)}t.joinValues=r,t.jsonStringifyReplacer=(s,o)=>typeof o=="bigint"?o.toString():o;})(E||(E={}));var hn;(function(t){t.mergeShapes=(e,n)=>({...e,...n});})(hn||(hn={}));var g=E.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),le=t=>{switch(typeof t){case "undefined":return g.undefined;case "string":return g.string;case "number":return Number.isNaN(t)?g.nan:g.number;case "boolean":return g.boolean;case "function":return g.function;case "bigint":return g.bigint;case "symbol":return g.symbol;case "object":return Array.isArray(t)?g.array:t===null?g.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?g.promise:typeof Map<"u"&&t instanceof Map?g.map:typeof Set<"u"&&t instanceof Set?g.set:typeof Date<"u"&&t instanceof Date?g.date:g.object;default:return g.unknown}};var u=E.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),ds=t=>JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:"),q=class t extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r];},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r];};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e;}format(e){let n=e||function(o){return o.message},r={_errors:[]},s=o=>{for(let a of o.issues)if(a.code==="invalid_union")a.unionErrors.map(s);else if(a.code==="invalid_return_type")s(a.returnTypeError);else if(a.code==="invalid_arguments")s(a.argumentsError);else if(a.path.length===0)r._errors.push(n(a));else {let i=r,c=0;for(;c<a.path.length;){let l=a.path[c];c===a.path.length-1?(i[l]=i[l]||{_errors:[]},i[l]._errors.push(n(a))):i[l]=i[l]||{_errors:[]},i=i[l],c++;}}};return s(this),r}static assert(e){if(!(e instanceof t))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,E.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){let n={},r=[];for(let s of this.issues)if(s.path.length>0){let o=s.path[0];n[o]=n[o]||[],n[o].push(e(s));}else r.push(e(s));return {formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};q.create=t=>new q(t);var ps=(t,e)=>{let n;switch(t.code){case u.invalid_type:t.received===g.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case u.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,E.jsonStringifyReplacer)}`;break;case u.unrecognized_keys:n=`Unrecognized key(s) in object: ${E.joinValues(t.keys,", ")}`;break;case u.invalid_union:n="Invalid input";break;case u.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${E.joinValues(t.options)}`;break;case u.invalid_enum_value:n=`Invalid enum value. Expected ${E.joinValues(t.options)}, received '${t.received}'`;break;case u.invalid_arguments:n="Invalid function arguments";break;case u.invalid_return_type:n="Invalid function return type";break;case u.invalid_date:n="Invalid date";break;case u.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:E.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case u.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case u.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case u.custom:n="Invalid input";break;case u.invalid_intersection_types:n="Intersection results could not be merged";break;case u.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case u.not_finite:n="Number must be finite";break;default:n=e.defaultError,E.assertNever(t);}return {message:n}},me=ps;var Kn=me;function fs(t){Kn=t;}function st(){return Kn}var Et=t=>{let{data:e,path:n,errorMaps:r,issueData:s}=t,o=[...n,...s.path||[]],a={...s,path:o};if(s.message!==void 0)return {...s,path:o,message:s.message};let i="",c=r.filter(l=>!!l).slice().reverse();for(let l of c)i=l(a,{data:e,defaultError:i}).message;return {...s,path:o,message:i}},gs=[];function f(t,e){let n=st(),r=Et({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===me?void 0:me].filter(s=>!!s)});t.common.issues.push(r);}var H=class t{constructor(){this.value="valid";}dirty(){this.value==="valid"&&(this.value="dirty");}abort(){this.value!=="aborted"&&(this.value="aborted");}static mergeArray(e,n){let r=[];for(let s of n){if(s.status==="aborted")return h;s.status==="dirty"&&e.dirty(),r.push(s.value);}return {status:e.value,value:r}}static async mergeObjectAsync(e,n){let r=[];for(let s of n){let o=await s.key,a=await s.value;r.push({key:o,value:a});}return t.mergeObjectSync(e,r)}static mergeObjectSync(e,n){let r={};for(let s of n){let{key:o,value:a}=s;if(o.status==="aborted"||a.status==="aborted")return h;o.status==="dirty"&&e.dirty(),a.status==="dirty"&&e.dirty(),o.value!=="__proto__"&&(typeof a.value<"u"||s.alwaysSet)&&(r[o.value]=a.value);}return {status:e.value,value:r}}},h=Object.freeze({status:"aborted"}),Pe=t=>({status:"dirty",value:t}),G=t=>({status:"valid",value:t}),Ft=t=>t.status==="aborted",zt=t=>t.status==="dirty",Ae=t=>t.status==="valid",ot=t=>typeof Promise<"u"&&t instanceof Promise;var m;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message;})(m||(m={}));var re=class{constructor(e,n,r,s){this._cachedPath=[],this.parent=e,this.data=n,this._path=r,this._key=s;}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Wn=(t,e)=>{if(Ae(e))return {success:true,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return {success:false,get error(){if(this._error)return this._error;let n=new q(t.common.issues);return this._error=n,this._error}}};function _(t){if(!t)return {};let{errorMap:e,invalid_type_error:n,required_error:r,description:s}=t;if(e&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(a,i)=>{let{message:c}=t;return a.code==="invalid_enum_value"?{message:c??i.defaultError}:typeof i.data>"u"?{message:c??r??i.defaultError}:a.code!=="invalid_type"?{message:i.defaultError}:{message:c??n??i.defaultError}},description:s}}var w=class{get description(){return this._def.description}_getType(e){return le(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:le(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return {status:new H,ctx:{common:e.parent.common,data:e.data,parsedType:le(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let n=this._parse(e);if(ot(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){let n=this._parse(e);return Promise.resolve(n)}parse(e,n){let r=this.safeParse(e,n);if(r.success)return r.data;throw r.error}safeParse(e,n){let r={common:{issues:[],async:n?.async??false,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:le(e)},s=this._parseSync({data:e,path:r.path,parent:r});return Wn(r,s)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:le(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:n});return Ae(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=true),n.common={issues:[],async:true};}return this._parseAsync({data:e,path:[],parent:n}).then(r=>Ae(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(e,n){let r=await this.safeParseAsync(e,n);if(r.success)return r.data;throw r.error}async safeParseAsync(e,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:true},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:le(e)},s=this._parse({data:e,path:r.path,parent:r}),o=await(ot(s)?s:Promise.resolve(s));return Wn(r,o)}refine(e,n){let r=s=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(s):n;return this._refinement((s,o)=>{let a=e(s),i=()=>o.addIssue({code:u.custom,...r(s)});return typeof Promise<"u"&&a instanceof Promise?a.then(c=>c?true:(i(),false)):a?true:(i(),false)})}refinement(e,n){return this._refinement((r,s)=>e(r)?true:(s.addIssue(typeof n=="function"?n(r,s):n),false))}_refinement(e){return new se({schema:this,typeName:y.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)};}optional(){return ne.create(this,this._def)}nullable(){return de.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ve.create(this)}promise(){return Re.create(this,this._def)}or(e){return Ue.create([this,e],this._def)}and(e){return Me.create(this,e,this._def)}transform(e){return new se({..._(this._def),schema:this,typeName:y.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let n=typeof e=="function"?e:()=>e;return new Je({..._(this._def),innerType:this,defaultValue:n,typeName:y.ZodDefault})}brand(){return new Tt({typeName:y.ZodBranded,type:this,..._(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new Ge({..._(this._def),innerType:this,catchValue:n,typeName:y.ZodCatch})}describe(e){let n=this.constructor;return new n({...this._def,description:e})}pipe(e){return At.create(this,e)}readonly(){return Ze.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},ms=/^c[^\s-]{8,}$/i,hs=/^[0-9a-z]+$/,ys=/^[0-9A-HJKMNP-TV-Z]{26}$/i,vs=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,ks=/^[a-z0-9_-]{21}$/i,_s=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,ws=/^[-+]?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)?)??$/,Ss=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Es="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",yn,Ts=/^(?:(?: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])$/,As=/^(?:(?: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])\/(3[0-2]|[12]?[0-9])$/,xs=/^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,bs=/^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Rs=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Cs=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Yn="((\\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])))",Is=new RegExp(`^${Yn}$`);function Xn(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);let n=t.precision?"+":"?";return `([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function Ns(t){return new RegExp(`^${Xn(t)}$`)}function Qn(t){let e=`${Yn}T${Xn(t)}`,n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function Ps(t,e){return !!((e==="v4"||!e)&&Ts.test(t)||(e==="v6"||!e)&&xs.test(t))}function Os(t,e){if(!_s.test(t))return false;try{let[n]=t.split(".");if(!n)return !1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),s=JSON.parse(atob(r));return !(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return false}}function Ds(t,e){return !!((e==="v4"||!e)&&As.test(t)||(e==="v6"||!e)&&bs.test(t))}var xe=class t extends w{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==g.string){let o=this._getOrReturnCtx(e);return f(o,{code:u.invalid_type,expected:g.string,received:o.parsedType}),h}let r=new H,s;for(let o of this._def.checks)if(o.kind==="min")e.data.length<o.value&&(s=this._getOrReturnCtx(e,s),f(s,{code:u.too_small,minimum:o.value,type:"string",inclusive:true,exact:false,message:o.message}),r.dirty());else if(o.kind==="max")e.data.length>o.value&&(s=this._getOrReturnCtx(e,s),f(s,{code:u.too_big,maximum:o.value,type:"string",inclusive:true,exact:false,message:o.message}),r.dirty());else if(o.kind==="length"){let a=e.data.length>o.value,i=e.data.length<o.value;(a||i)&&(s=this._getOrReturnCtx(e,s),a?f(s,{code:u.too_big,maximum:o.value,type:"string",inclusive:true,exact:true,message:o.message}):i&&f(s,{code:u.too_small,minimum:o.value,type:"string",inclusive:true,exact:true,message:o.message}),r.dirty());}else if(o.kind==="email")Ss.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"email",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="emoji")yn||(yn=new RegExp(Es,"u")),yn.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"emoji",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="uuid")vs.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"uuid",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="nanoid")ks.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"nanoid",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="cuid")ms.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"cuid",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="cuid2")hs.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"cuid2",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="ulid")ys.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"ulid",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="url")try{new URL(e.data);}catch{s=this._getOrReturnCtx(e,s),f(s,{validation:"url",code:u.invalid_string,message:o.message}),r.dirty();}else o.kind==="regex"?(o.regex.lastIndex=0,o.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"regex",code:u.invalid_string,message:o.message}),r.dirty())):o.kind==="trim"?e.data=e.data.trim():o.kind==="includes"?e.data.includes(o.value,o.position)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:{includes:o.value,position:o.position},message:o.message}),r.dirty()):o.kind==="toLowerCase"?e.data=e.data.toLowerCase():o.kind==="toUpperCase"?e.data=e.data.toUpperCase():o.kind==="startsWith"?e.data.startsWith(o.value)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:{startsWith:o.value},message:o.message}),r.dirty()):o.kind==="endsWith"?e.data.endsWith(o.value)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:{endsWith:o.value},message:o.message}),r.dirty()):o.kind==="datetime"?Qn(o).test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:"datetime",message:o.message}),r.dirty()):o.kind==="date"?Is.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:"date",message:o.message}),r.dirty()):o.kind==="time"?Ns(o).test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:"time",message:o.message}),r.dirty()):o.kind==="duration"?ws.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"duration",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="ip"?Ps(e.data,o.version)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"ip",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="jwt"?Os(e.data,o.alg)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"jwt",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="cidr"?Ds(e.data,o.version)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"cidr",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="base64"?Rs.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"base64",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="base64url"?Cs.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"base64url",code:u.invalid_string,message:o.message}),r.dirty()):E.assertNever(o);return {status:r.value,value:e.data}}_regex(e,n,r){return this.refinement(s=>e.test(s),{validation:n,code:u.invalid_string,...m.errToObj(r)})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...m.errToObj(e)})}url(e){return this._addCheck({kind:"url",...m.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...m.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...m.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...m.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...m.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...m.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...m.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...m.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...m.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...m.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...m.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...m.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:false,local:false,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??false,local:e?.local??false,...m.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...m.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...m.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...m.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n?.position,...m.errToObj(n?.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...m.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...m.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...m.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...m.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...m.errToObj(n)})}nonempty(e){return this.min(1,m.errToObj(e))}trim(){return new t({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return !!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return !!this._def.checks.find(e=>e.kind==="date")}get isTime(){return !!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return !!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return !!this._def.checks.find(e=>e.kind==="email")}get isURL(){return !!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return !!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return !!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return !!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return !!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return !!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return !!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return !!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return !!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return !!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return !!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};xe.create=t=>new xe({checks:[],typeName:y.ZodString,coerce:t?.coerce??false,..._(t)});function js(t,e){let n=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=n>r?n:r,o=Number.parseInt(t.toFixed(s).replace(".","")),a=Number.parseInt(e.toFixed(s).replace(".",""));return o%a/10**s}var Oe=class t extends w{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf;}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==g.number){let o=this._getOrReturnCtx(e);return f(o,{code:u.invalid_type,expected:g.number,received:o.parsedType}),h}let r,s=new H;for(let o of this._def.checks)o.kind==="int"?E.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),f(r,{code:u.invalid_type,expected:"integer",received:"float",message:o.message}),s.dirty()):o.kind==="min"?(o.inclusive?e.data<o.value:e.data<=o.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.too_small,minimum:o.value,type:"number",inclusive:o.inclusive,exact:false,message:o.message}),s.dirty()):o.kind==="max"?(o.inclusive?e.data>o.value:e.data>=o.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.too_big,maximum:o.value,type:"number",inclusive:o.inclusive,exact:false,message:o.message}),s.dirty()):o.kind==="multipleOf"?js(e.data,o.value)!==0&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.not_multiple_of,multipleOf:o.value,message:o.message}),s.dirty()):o.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),f(r,{code:u.not_finite,message:o.message}),s.dirty()):E.assertNever(o);return {status:s.value,value:e.data}}gte(e,n){return this.setLimit("min",e,true,m.toString(n))}gt(e,n){return this.setLimit("min",e,false,m.toString(n))}lte(e,n){return this.setLimit("max",e,true,m.toString(n))}lt(e,n){return this.setLimit("max",e,false,m.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:m.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:m.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:false,message:m.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:false,message:m.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:true,message:m.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:true,message:m.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:m.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:m.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:true,value:Number.MIN_SAFE_INTEGER,message:m.toString(e)})._addCheck({kind:"max",inclusive:true,value:Number.MAX_SAFE_INTEGER,message:m.toString(e)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return !!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&E.isInteger(e.value))}get isFinite(){let e=null,n=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return true;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value);}return Number.isFinite(n)&&Number.isFinite(e)}};Oe.create=t=>new Oe({checks:[],typeName:y.ZodNumber,coerce:t?.coerce||false,..._(t)});var De=class t extends w{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte;}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data);}catch{return this._getInvalidInput(e)}if(this._getType(e)!==g.bigint)return this._getInvalidInput(e);let r,s=new H;for(let o of this._def.checks)o.kind==="min"?(o.inclusive?e.data<o.value:e.data<=o.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.too_small,type:"bigint",minimum:o.value,inclusive:o.inclusive,message:o.message}),s.dirty()):o.kind==="max"?(o.inclusive?e.data>o.value:e.data>=o.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.too_big,type:"bigint",maximum:o.value,inclusive:o.inclusive,message:o.message}),s.dirty()):o.kind==="multipleOf"?e.data%o.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.not_multiple_of,multipleOf:o.value,message:o.message}),s.dirty()):E.assertNever(o);return {status:s.value,value:e.data}}_getInvalidInput(e){let n=this._getOrReturnCtx(e);return f(n,{code:u.invalid_type,expected:g.bigint,received:n.parsedType}),h}gte(e,n){return this.setLimit("min",e,true,m.toString(n))}gt(e,n){return this.setLimit("min",e,false,m.toString(n))}lte(e,n){return this.setLimit("max",e,true,m.toString(n))}lt(e,n){return this.setLimit("max",e,false,m.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:m.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:false,message:m.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:false,message:m.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:true,message:m.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:true,message:m.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:m.toString(n)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};De.create=t=>new De({checks:[],typeName:y.ZodBigInt,coerce:t?.coerce??false,..._(t)});var je=class extends w{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==g.boolean){let r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:g.boolean,received:r.parsedType}),h}return G(e.data)}};je.create=t=>new je({typeName:y.ZodBoolean,coerce:t?.coerce||false,..._(t)});var $e=class t extends w{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==g.date){let o=this._getOrReturnCtx(e);return f(o,{code:u.invalid_type,expected:g.date,received:o.parsedType}),h}if(Number.isNaN(e.data.getTime())){let o=this._getOrReturnCtx(e);return f(o,{code:u.invalid_date}),h}let r=new H,s;for(let o of this._def.checks)o.kind==="min"?e.data.getTime()<o.value&&(s=this._getOrReturnCtx(e,s),f(s,{code:u.too_small,message:o.message,inclusive:true,exact:false,minimum:o.value,type:"date"}),r.dirty()):o.kind==="max"?e.data.getTime()>o.value&&(s=this._getOrReturnCtx(e,s),f(s,{code:u.too_big,message:o.message,inclusive:true,exact:false,maximum:o.value,type:"date"}),r.dirty()):E.assertNever(o);return {status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:m.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:m.toString(n)})}get minDate(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}};$e.create=t=>new $e({checks:[],coerce:t?.coerce||false,typeName:y.ZodDate,..._(t)});var at=class extends w{_parse(e){if(this._getType(e)!==g.symbol){let r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:g.symbol,received:r.parsedType}),h}return G(e.data)}};at.create=t=>new at({typeName:y.ZodSymbol,..._(t)});var Le=class extends w{_parse(e){if(this._getType(e)!==g.undefined){let r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:g.undefined,received:r.parsedType}),h}return G(e.data)}};Le.create=t=>new Le({typeName:y.ZodUndefined,..._(t)});var Ve=class extends w{_parse(e){if(this._getType(e)!==g.null){let r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:g.null,received:r.parsedType}),h}return G(e.data)}};Ve.create=t=>new Ve({typeName:y.ZodNull,..._(t)});var be=class extends w{constructor(){super(...arguments),this._any=true;}_parse(e){return G(e.data)}};be.create=t=>new be({typeName:y.ZodAny,..._(t)});var ye=class extends w{constructor(){super(...arguments),this._unknown=true;}_parse(e){return G(e.data)}};ye.create=t=>new ye({typeName:y.ZodUnknown,..._(t)});var ie=class extends w{_parse(e){let n=this._getOrReturnCtx(e);return f(n,{code:u.invalid_type,expected:g.never,received:n.parsedType}),h}};ie.create=t=>new ie({typeName:y.ZodNever,..._(t)});var ct=class extends w{_parse(e){if(this._getType(e)!==g.undefined){let r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:g.void,received:r.parsedType}),h}return G(e.data)}};ct.create=t=>new ct({typeName:y.ZodVoid,..._(t)});var ve=class t extends w{_parse(e){let{ctx:n,status:r}=this._processInputParams(e),s=this._def;if(n.parsedType!==g.array)return f(n,{code:u.invalid_type,expected:g.array,received:n.parsedType}),h;if(s.exactLength!==null){let a=n.data.length>s.exactLength.value,i=n.data.length<s.exactLength.value;(a||i)&&(f(n,{code:a?u.too_big:u.too_small,minimum:i?s.exactLength.value:void 0,maximum:a?s.exactLength.value:void 0,type:"array",inclusive:true,exact:true,message:s.exactLength.message}),r.dirty());}if(s.minLength!==null&&n.data.length<s.minLength.value&&(f(n,{code:u.too_small,minimum:s.minLength.value,type:"array",inclusive:true,exact:false,message:s.minLength.message}),r.dirty()),s.maxLength!==null&&n.data.length>s.maxLength.value&&(f(n,{code:u.too_big,maximum:s.maxLength.value,type:"array",inclusive:true,exact:false,message:s.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((a,i)=>s.type._parseAsync(new re(n,a,n.path,i)))).then(a=>H.mergeArray(r,a));let o=[...n.data].map((a,i)=>s.type._parseSync(new re(n,a,n.path,i)));return H.mergeArray(r,o)}get element(){return this._def.type}min(e,n){return new t({...this._def,minLength:{value:e,message:m.toString(n)}})}max(e,n){return new t({...this._def,maxLength:{value:e,message:m.toString(n)}})}length(e,n){return new t({...this._def,exactLength:{value:e,message:m.toString(n)}})}nonempty(e){return this.min(1,e)}};ve.create=(t,e)=>new ve({type:t,minLength:null,maxLength:null,exactLength:null,typeName:y.ZodArray,..._(e)});function it(t){if(t instanceof Y){let e={};for(let n in t.shape){let r=t.shape[n];e[n]=ne.create(it(r));}return new Y({...t._def,shape:()=>e})}else return t instanceof ve?new ve({...t._def,type:it(t.element)}):t instanceof ne?ne.create(it(t.unwrap())):t instanceof de?de.create(it(t.unwrap())):t instanceof ue?ue.create(t.items.map(e=>it(e))):t}var Y=class t extends w{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend;}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),n=E.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==g.object){let l=this._getOrReturnCtx(e);return f(l,{code:u.invalid_type,expected:g.object,received:l.parsedType}),h}let{status:r,ctx:s}=this._processInputParams(e),{shape:o,keys:a}=this._getCached(),i=[];if(!(this._def.catchall instanceof ie&&this._def.unknownKeys==="strip"))for(let l in s.data)a.includes(l)||i.push(l);let c=[];for(let l of a){let d=o[l],b=s.data[l];c.push({key:{status:"valid",value:l},value:d._parse(new re(s,b,s.path,l)),alwaysSet:l in s.data});}if(this._def.catchall instanceof ie){let l=this._def.unknownKeys;if(l==="passthrough")for(let d of i)c.push({key:{status:"valid",value:d},value:{status:"valid",value:s.data[d]}});else if(l==="strict")i.length>0&&(f(s,{code:u.unrecognized_keys,keys:i}),r.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else {let l=this._def.catchall;for(let d of i){let b=s.data[d];c.push({key:{status:"valid",value:d},value:l._parse(new re(s,b,s.path,d)),alwaysSet:d in s.data});}}return s.common.async?Promise.resolve().then(async()=>{let l=[];for(let d of c){let b=await d.key,$=await d.value;l.push({key:b,value:$,alwaysSet:d.alwaysSet});}return l}).then(l=>H.mergeObjectSync(r,l)):H.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return m.errToObj,new t({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,r)=>{let s=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:m.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new t({...this._def,unknownKeys:"strip"})}passthrough(){return new t({...this._def,unknownKeys:"passthrough"})}extend(e){return new t({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new t({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:y.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new t({...this._def,catchall:e})}pick(e){let n={};for(let r of E.objectKeys(e))e[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}omit(e){let n={};for(let r of E.objectKeys(this.shape))e[r]||(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}deepPartial(){return it(this)}partial(e){let n={};for(let r of E.objectKeys(this.shape)){let s=this.shape[r];e&&!e[r]?n[r]=s:n[r]=s.optional();}return new t({...this._def,shape:()=>n})}required(e){let n={};for(let r of E.objectKeys(this.shape))if(e&&!e[r])n[r]=this.shape[r];else {let o=this.shape[r];for(;o instanceof ne;)o=o._def.innerType;n[r]=o;}return new t({...this._def,shape:()=>n})}keyof(){return er(E.objectKeys(this.shape))}};Y.create=(t,e)=>new Y({shape:()=>t,unknownKeys:"strip",catchall:ie.create(),typeName:y.ZodObject,..._(e)});Y.strictCreate=(t,e)=>new Y({shape:()=>t,unknownKeys:"strict",catchall:ie.create(),typeName:y.ZodObject,..._(e)});Y.lazycreate=(t,e)=>new Y({shape:t,unknownKeys:"strip",catchall:ie.create(),typeName:y.ZodObject,..._(e)});var Ue=class extends w{_parse(e){let{ctx:n}=this._processInputParams(e),r=this._def.options;function s(o){for(let i of o)if(i.result.status==="valid")return i.result;for(let i of o)if(i.result.status==="dirty")return n.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(i=>new q(i.ctx.common.issues));return f(n,{code:u.invalid_union,unionErrors:a}),h}if(n.common.async)return Promise.all(r.map(async o=>{let a={...n,common:{...n.common,issues:[]},parent:null};return {result:await o._parseAsync({data:n.data,path:n.path,parent:a}),ctx:a}})).then(s);{let o,a=[];for(let c of r){let l={...n,common:{...n.common,issues:[]},parent:null},d=c._parseSync({data:n.data,path:n.path,parent:l});if(d.status==="valid")return d;d.status==="dirty"&&!o&&(o={result:d,ctx:l}),l.common.issues.length&&a.push(l.common.issues);}if(o)return n.common.issues.push(...o.ctx.common.issues),o.result;let i=a.map(c=>new q(c));return f(n,{code:u.invalid_union,unionErrors:i}),h}}get options(){return this._def.options}};Ue.create=(t,e)=>new Ue({options:t,typeName:y.ZodUnion,..._(e)});var he=t=>t instanceof Be?he(t.schema):t instanceof se?he(t.innerType()):t instanceof Fe?[t.value]:t instanceof ze?t.options:t instanceof He?E.objectValues(t.enum):t instanceof Je?he(t._def.innerType):t instanceof Le?[void 0]:t instanceof Ve?[null]:t instanceof ne?[void 0,...he(t.unwrap())]:t instanceof de?[null,...he(t.unwrap())]:t instanceof Tt||t instanceof Ze?he(t.unwrap()):t instanceof Ge?he(t._def.innerType):[],Ht=class t extends w{_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==g.object)return f(n,{code:u.invalid_type,expected:g.object,received:n.parsedType}),h;let r=this.discriminator,s=n.data[r],o=this.optionsMap.get(s);return o?n.common.async?o._parseAsync({data:n.data,path:n.path,parent:n}):o._parseSync({data:n.data,path:n.path,parent:n}):(f(n,{code:u.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),h)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,r){let s=new Map;for(let o of n){let a=he(o.shape[e]);if(!a.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let i of a){if(s.has(i))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(i)}`);s.set(i,o);}}return new t({typeName:y.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:s,..._(r)})}};function vn(t,e){let n=le(t),r=le(e);if(t===e)return {valid:true,data:t};if(n===g.object&&r===g.object){let s=E.objectKeys(e),o=E.objectKeys(t).filter(i=>s.indexOf(i)!==-1),a={...t,...e};for(let i of o){let c=vn(t[i],e[i]);if(!c.valid)return {valid:false};a[i]=c.data;}return {valid:true,data:a}}else if(n===g.array&&r===g.array){if(t.length!==e.length)return {valid:false};let s=[];for(let o=0;o<t.length;o++){let a=t[o],i=e[o],c=vn(a,i);if(!c.valid)return {valid:false};s.push(c.data);}return {valid:true,data:s}}else return n===g.date&&r===g.date&&+t==+e?{valid:true,data:t}:{valid:false}}var Me=class extends w{_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=(o,a)=>{if(Ft(o)||Ft(a))return h;let i=vn(o.value,a.value);return i.valid?((zt(o)||zt(a))&&n.dirty(),{status:n.value,value:i.data}):(f(r,{code:u.invalid_intersection_types}),h)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([o,a])=>s(o,a)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};Me.create=(t,e,n)=>new Me({left:t,right:e,typeName:y.ZodIntersection,..._(n)});var ue=class t extends w{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==g.array)return f(r,{code:u.invalid_type,expected:g.array,received:r.parsedType}),h;if(r.data.length<this._def.items.length)return f(r,{code:u.too_small,minimum:this._def.items.length,inclusive:true,exact:false,type:"array"}),h;!this._def.rest&&r.data.length>this._def.items.length&&(f(r,{code:u.too_big,maximum:this._def.items.length,inclusive:true,exact:false,type:"array"}),n.dirty());let o=[...r.data].map((a,i)=>{let c=this._def.items[i]||this._def.rest;return c?c._parse(new re(r,a,r.path,i)):null}).filter(a=>!!a);return r.common.async?Promise.all(o).then(a=>H.mergeArray(n,a)):H.mergeArray(n,o)}get items(){return this._def.items}rest(e){return new t({...this._def,rest:e})}};ue.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ue({items:t,typeName:y.ZodTuple,rest:null,..._(e)})};var Jt=class t extends w{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==g.object)return f(r,{code:u.invalid_type,expected:g.object,received:r.parsedType}),h;let s=[],o=this._def.keyType,a=this._def.valueType;for(let i in r.data)s.push({key:o._parse(new re(r,i,r.path,i)),value:a._parse(new re(r,r.data[i],r.path,i)),alwaysSet:i in r.data});return r.common.async?H.mergeObjectAsync(n,s):H.mergeObjectSync(n,s)}get element(){return this._def.valueType}static create(e,n,r){return n instanceof w?new t({keyType:e,valueType:n,typeName:y.ZodRecord,..._(r)}):new t({keyType:xe.create(),valueType:e,typeName:y.ZodRecord,..._(n)})}},lt=class extends w{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==g.map)return f(r,{code:u.invalid_type,expected:g.map,received:r.parsedType}),h;let s=this._def.keyType,o=this._def.valueType,a=[...r.data.entries()].map(([i,c],l)=>({key:s._parse(new re(r,i,r.path,[l,"key"])),value:o._parse(new re(r,c,r.path,[l,"value"]))}));if(r.common.async){let i=new Map;return Promise.resolve().then(async()=>{for(let c of a){let l=await c.key,d=await c.value;if(l.status==="aborted"||d.status==="aborted")return h;(l.status==="dirty"||d.status==="dirty")&&n.dirty(),i.set(l.value,d.value);}return {status:n.value,value:i}})}else {let i=new Map;for(let c of a){let l=c.key,d=c.value;if(l.status==="aborted"||d.status==="aborted")return h;(l.status==="dirty"||d.status==="dirty")&&n.dirty(),i.set(l.value,d.value);}return {status:n.value,value:i}}}};lt.create=(t,e,n)=>new lt({valueType:e,keyType:t,typeName:y.ZodMap,..._(n)});var ut=class t extends w{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==g.set)return f(r,{code:u.invalid_type,expected:g.set,received:r.parsedType}),h;let s=this._def;s.minSize!==null&&r.data.size<s.minSize.value&&(f(r,{code:u.too_small,minimum:s.minSize.value,type:"set",inclusive:true,exact:false,message:s.minSize.message}),n.dirty()),s.maxSize!==null&&r.data.size>s.maxSize.value&&(f(r,{code:u.too_big,maximum:s.maxSize.value,type:"set",inclusive:true,exact:false,message:s.maxSize.message}),n.dirty());let o=this._def.valueType;function a(c){let l=new Set;for(let d of c){if(d.status==="aborted")return h;d.status==="dirty"&&n.dirty(),l.add(d.value);}return {status:n.value,value:l}}let i=[...r.data.values()].map((c,l)=>o._parse(new re(r,c,r.path,l)));return r.common.async?Promise.all(i).then(c=>a(c)):a(i)}min(e,n){return new t({...this._def,minSize:{value:e,message:m.toString(n)}})}max(e,n){return new t({...this._def,maxSize:{value:e,message:m.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}};ut.create=(t,e)=>new ut({valueType:t,minSize:null,maxSize:null,typeName:y.ZodSet,..._(e)});var Gt=class t extends w{constructor(){super(...arguments),this.validate=this.implement;}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==g.function)return f(n,{code:u.invalid_type,expected:g.function,received:n.parsedType}),h;function r(i,c){return Et({data:i,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,st(),me].filter(l=>!!l),issueData:{code:u.invalid_arguments,argumentsError:c}})}function s(i,c){return Et({data:i,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,st(),me].filter(l=>!!l),issueData:{code:u.invalid_return_type,returnTypeError:c}})}let o={errorMap:n.common.contextualErrorMap},a=n.data;if(this._def.returns instanceof Re){let i=this;return G(async function(...c){let l=new q([]),d=await i._def.args.parseAsync(c,o).catch(I=>{throw l.addIssue(r(c,I)),l}),b=await Reflect.apply(a,this,d);return await i._def.returns._def.type.parseAsync(b,o).catch(I=>{throw l.addIssue(s(b,I)),l})})}else {let i=this;return G(function(...c){let l=i._def.args.safeParse(c,o);if(!l.success)throw new q([r(c,l.error)]);let d=Reflect.apply(a,this,l.data),b=i._def.returns.safeParse(d,o);if(!b.success)throw new q([s(d,b.error)]);return b.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new t({...this._def,args:ue.create(e).rest(ye.create())})}returns(e){return new t({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,r){return new t({args:e||ue.create([]).rest(ye.create()),returns:n||ye.create(),typeName:y.ZodFunction,..._(r)})}},Be=class extends w{get schema(){return this._def.getter()}_parse(e){let{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};Be.create=(t,e)=>new Be({getter:t,typeName:y.ZodLazy,..._(e)});var Fe=class extends w{_parse(e){if(e.data!==this._def.value){let n=this._getOrReturnCtx(e);return f(n,{received:n.data,code:u.invalid_literal,expected:this._def.value}),h}return {status:"valid",value:e.data}}get value(){return this._def.value}};Fe.create=(t,e)=>new Fe({value:t,typeName:y.ZodLiteral,..._(e)});function er(t,e){return new ze({values:t,typeName:y.ZodEnum,..._(e)})}var ze=class t extends w{_parse(e){if(typeof e.data!="string"){let n=this._getOrReturnCtx(e),r=this._def.values;return f(n,{expected:E.joinValues(r),received:n.parsedType,code:u.invalid_type}),h}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let n=this._getOrReturnCtx(e),r=this._def.values;return f(n,{received:n.data,code:u.invalid_enum_value,options:r}),h}return G(e.data)}get options(){return this._def.values}get enum(){let e={};for(let n of this._def.values)e[n]=n;return e}get Values(){let e={};for(let n of this._def.values)e[n]=n;return e}get Enum(){let e={};for(let n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return t.create(e,{...this._def,...n})}exclude(e,n=this._def){return t.create(this.options.filter(r=>!e.includes(r)),{...this._def,...n})}};ze.create=er;var He=class extends w{_parse(e){let n=E.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==g.string&&r.parsedType!==g.number){let s=E.objectValues(n);return f(r,{expected:E.joinValues(s),received:r.parsedType,code:u.invalid_type}),h}if(this._cache||(this._cache=new Set(E.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=E.objectValues(n);return f(r,{received:r.data,code:u.invalid_enum_value,options:s}),h}return G(e.data)}get enum(){return this._def.values}};He.create=(t,e)=>new He({values:t,typeName:y.ZodNativeEnum,..._(e)});var Re=class extends w{unwrap(){return this._def.type}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==g.promise&&n.common.async===false)return f(n,{code:u.invalid_type,expected:g.promise,received:n.parsedType}),h;let r=n.parsedType===g.promise?n.data:Promise.resolve(n.data);return G(r.then(s=>this._def.type.parseAsync(s,{path:n.path,errorMap:n.common.contextualErrorMap})))}};Re.create=(t,e)=>new Re({type:t,typeName:y.ZodPromise,..._(e)});var se=class extends w{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===y.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=this._def.effect||null,o={addIssue:a=>{f(r,a),a.fatal?n.abort():n.dirty();},get path(){return r.path}};if(o.addIssue=o.addIssue.bind(o),s.type==="preprocess"){let a=s.transform(r.data,o);if(r.common.async)return Promise.resolve(a).then(async i=>{if(n.value==="aborted")return h;let c=await this._def.schema._parseAsync({data:i,path:r.path,parent:r});return c.status==="aborted"?h:c.status==="dirty"?Pe(c.value):n.value==="dirty"?Pe(c.value):c});{if(n.value==="aborted")return h;let i=this._def.schema._parseSync({data:a,path:r.path,parent:r});return i.status==="aborted"?h:i.status==="dirty"?Pe(i.value):n.value==="dirty"?Pe(i.value):i}}if(s.type==="refinement"){let a=i=>{let c=s.refinement(i,o);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return i};if(r.common.async===false){let i=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?h:(i.status==="dirty"&&n.dirty(),a(i.value),{status:n.value,value:i.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(i=>i.status==="aborted"?h:(i.status==="dirty"&&n.dirty(),a(i.value).then(()=>({status:n.value,value:i.value}))))}if(s.type==="transform")if(r.common.async===false){let a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Ae(a))return h;let i=s.transform(a.value,o);if(i instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return {status:n.value,value:i}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>Ae(a)?Promise.resolve(s.transform(a.value,o)).then(i=>({status:n.value,value:i})):h);E.assertNever(s);}};se.create=(t,e,n)=>new se({schema:t,typeName:y.ZodEffects,effect:e,..._(n)});se.createWithPreprocess=(t,e,n)=>new se({schema:e,effect:{type:"preprocess",transform:t},typeName:y.ZodEffects,..._(n)});var ne=class extends w{_parse(e){return this._getType(e)===g.undefined?G(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ne.create=(t,e)=>new ne({innerType:t,typeName:y.ZodOptional,..._(e)});var de=class extends w{_parse(e){return this._getType(e)===g.null?G(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};de.create=(t,e)=>new de({innerType:t,typeName:y.ZodNullable,..._(e)});var Je=class extends w{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return n.parsedType===g.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};Je.create=(t,e)=>new Je({innerType:t,typeName:y.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,..._(e)});var Ge=class extends w{_parse(e){let{ctx:n}=this._processInputParams(e),r={...n,common:{...n.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return ot(s)?s.then(o=>({status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new q(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new q(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};Ge.create=(t,e)=>new Ge({innerType:t,typeName:y.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,..._(e)});var dt=class extends w{_parse(e){if(this._getType(e)!==g.nan){let r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:g.nan,received:r.parsedType}),h}return {status:"valid",value:e.data}}};dt.create=t=>new dt({typeName:y.ZodNaN,..._(t)});var $s=Symbol("zod_brand"),Tt=class extends w{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}},At=class t extends w{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.common.async)return (async()=>{let o=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?h:o.status==="dirty"?(n.dirty(),Pe(o.value)):this._def.out._parseAsync({data:o.value,path:r.path,parent:r})})();{let s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?h:s.status==="dirty"?(n.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(e,n){return new t({in:e,out:n,typeName:y.ZodPipeline})}},Ze=class extends w{_parse(e){let n=this._def.innerType._parse(e),r=s=>(Ae(s)&&(s.value=Object.freeze(s.value)),s);return ot(n)?n.then(s=>r(s)):r(n)}unwrap(){return this._def.innerType}};Ze.create=(t,e)=>new Ze({innerType:t,typeName:y.ZodReadonly,..._(e)});function qn(t,e){let n=typeof t=="function"?t(e):typeof t=="string"?{message:t}:t;return typeof n=="string"?{message:n}:n}function tr(t,e={},n){return t?be.create().superRefine((r,s)=>{let o=t(r);if(o instanceof Promise)return o.then(a=>{if(!a){let i=qn(e,r),c=i.fatal??n??true;s.addIssue({code:"custom",...i,fatal:c});}});if(!o){let a=qn(e,r),i=a.fatal??n??true;s.addIssue({code:"custom",...a,fatal:i});}}):be.create()}var Ls={object:Y.lazycreate},y;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly";})(y||(y={}));var Vs=(t,e={message:`Input not instance of ${t.name}`})=>tr(n=>n instanceof t,e),nr=xe.create,rr=Oe.create,Us=dt.create,Ms=De.create,sr=je.create,Bs=$e.create,Fs=at.create,zs=Le.create,Hs=Ve.create,Js=be.create,Gs=ye.create,Zs=ie.create,Ks=ct.create,Ws=ve.create,qs=Y.create,Ys=Y.strictCreate,Xs=Ue.create,Qs=Ht.create,eo=Me.create,to=ue.create,no=Jt.create,ro=lt.create,so=ut.create,oo=Gt.create,io=Be.create,ao=Fe.create,co=ze.create,lo=He.create,uo=Re.create,po=se.create,fo=ne.create,go=de.create,mo=se.createWithPreprocess,ho=At.create,yo=()=>nr().optional(),vo=()=>rr().optional(),ko=()=>sr().optional(),_o={string:(t=>xe.create({...t,coerce:true})),number:(t=>Oe.create({...t,coerce:true})),boolean:(t=>je.create({...t,coerce:true})),bigint:(t=>De.create({...t,coerce:true})),date:(t=>$e.create({...t,coerce:true}))};var wo=h;var So={api:{rateLimit:{windowMs:900*1e3,maxRequests:100}}};p.object({snapshot_version:p.string(),engine_target_version:p.string(),project_id:p.string(),generated_at:p.string(),root_path_hash:p.string(),metadata:p.object({total_files:p.number().int().nonnegative(),total_dependencies:p.number().int().nonnegative(),total_size_bytes:p.number().int().nonnegative(),total_lines:p.number().int().nonnegative(),max_directory_depth:p.number().int().nonnegative(),language_breakdown:p.record(p.string(),p.number().int().nonnegative())}),files:p.array(p.object({id:p.string(),path_hash:p.string(),depth:p.number().int().nonnegative(),size_bytes:p.number().int().nonnegative(),estimated_lines:p.number().int().nonnegative(),extension:p.string(),is_binary:p.boolean(),import_count:p.number().int().nonnegative().optional(),function_count:p.number().int().nonnegative().optional(),class_count:p.number().int().nonnegative().optional()})),dependencies:p.array(p.object({id:p.string(),name_hash:p.string(),major_version:p.number().int().nonnegative(),minor_version:p.number().int().nonnegative(),category:p.enum(["dev","prod","peer"])}))});p.object({name:p.string().min(1).max(100)});p.object({analysis_version:p.string(),snapshot_schema_version:p.string(),total_score:p.number().min(0).max(100),severity_band:p.enum(["HEALTHY","STABLE","STRUCTURAL_CONCERN","HIGH_RISK"]),engines:p.array(p.object({engine_name:p.string(),score_impact:p.number(),risk_level:p.enum(["HEALTHY","STABLE","STRUCTURAL_CONCERN","HIGH_RISK"]),metrics:p.record(p.number()),findings:p.array(p.object({rule_id:p.string(),title:p.string(),message:p.string(),severity:p.enum(["CRITICAL","HIGH","MEDIUM","LOW"]),category:p.enum(["SECURITY","STRUCTURE","COMPLEXITY","DEPENDENCY","REPOSITORY_HYGIENE","DOCUMENTATION","QUALITY"]),evidence:p.array(p.string()).optional(),explanation:p.string().optional(),impact:p.string().optional(),effort:p.enum(["Low","Medium","High"]).optional(),recommendations:p.array(p.string()).optional()}))})),summary:p.object({total_findings:p.number().int().nonnegative(),critical_count:p.number().int().nonnegative(),high_count:p.number().int().nonnegative(),medium_count:p.number().int().nonnegative(),low_count:p.number().int().nonnegative(),categories:p.record(p.string(),p.number().int().nonnegative())}),generated_at:p.string()});var Eo=p.object({NEXT_PUBLIC_SUPABASE_URL:p.string().url("Invalid SUPABASE_URL"),NEXT_PUBLIC_SUPABASE_ANON_KEY:p.string().min(1,"SUPABASE_ANON_KEY is required"),SUPABASE_SERVICE_ROLE_KEY:p.string().min(1,"SERVICE_ROLE_KEY is required"),NODE_ENV:p.enum(["development","production","test"],{errorMap:()=>({message:"NODE_ENV must be development, production, or test"})}),JWT_SECRET:p.string().min(32,"JWT_SECRET must be at least 32 characters").optional()});function To(){try{return Eo.parse(process.env)}catch(t){if(t instanceof p.ZodError){let e=t.errors.map(n=>n.path.join(".")).join(", ");throw new Error(`Environment validation failed:
24
24
  Missing or invalid variables: ${e}
25
- Please check your .env file and ensure all required variables are set.`)}throw t}}var fn=null;function So(){return fn||(fn=wo()),fn}new Proxy({},{get(t,e){return So()[e]}});var ze=new Map;function Eo(t=ko.api.rateLimit){let{windowMs:e,maxRequests:n,message:r}=t;return {check(s){let o=Date.now(),a=ze.get(s);a&&o>a.resetTime&&ze.delete(s);let i=ze.get(s)||{count:0,resetTime:o+e};return i.count>=n?{success:false,remaining:0,resetTime:i.resetTime,error:r||"Too many requests"}:(i.count++,ze.set(s,i),{success:true,remaining:n-i.count,resetTime:i.resetTime})},reset(s){ze.delete(s);},cleanup(){let s=Date.now();for(let[o,a]of ze.entries())s>a.resetTime&&ze.delete(o);}}}Eo();var xo={TOKEN_BINDING_SALT:on};function nr(t,e){let n=`${t}:${e}:${xo.TOKEN_BINDING_SALT}`;return de.createHash("sha256").update(n).digest("hex")}function rr(t,e,n,r,s="cli"){let o=new Date().toISOString(),a=Co(),i=Ao(t,e,n,o,a),c=bo(o,s,i),l=Ro(r,o,s,c);return {signature:l,timestamp:o,nonce:a,headers:{"X-Signature":l,"X-Timestamp":o,"X-Nonce":a,"X-Signed-Headers":"host;x-timestamp;x-nonce"}}}function Ao(t,e,n,r,s){let o=de.createHash("sha256").update(n).digest("hex");return [t.toUpperCase(),e,"",`host:www.veestack.com
25
+ Please check your .env file and ensure all required variables are set.`)}throw t}}var kn=null;function Ao(){return kn||(kn=To()),kn}new Proxy({},{get(t,e){return Ao()[e]}});var Ke=new Map;function xo(t=So.api.rateLimit){let{windowMs:e,maxRequests:n,message:r}=t;return {check(s){let o=Date.now(),a=Ke.get(s);a&&o>a.resetTime&&Ke.delete(s);let i=Ke.get(s)||{count:0,resetTime:o+e};return i.count>=n?{success:false,remaining:0,resetTime:i.resetTime,error:r||"Too many requests"}:(i.count++,Ke.set(s,i),{success:true,remaining:n-i.count,resetTime:i.resetTime})},reset(s){Ke.delete(s);},cleanup(){let s=Date.now();for(let[o,a]of Ke.entries())s>a.resetTime&&Ke.delete(o);}}}xo();var Ro={TOKEN_BINDING_SALT:fn};function ir(t,e){let n=`${t}:${e}:${Ro.TOKEN_BINDING_SALT}`;return pe.createHash("sha256").update(n).digest("hex")}function ar(t,e,n,r,s="cli"){let o=new Date().toISOString(),a=Po(),i=Co(t,e,n,o,a),c=Io(o,s,i),l=No(r,o,s,c);return {signature:l,timestamp:o,nonce:a,headers:{"X-Signature":l,"X-Timestamp":o,"X-Nonce":a,"X-Signed-Headers":"host;x-timestamp;x-nonce"}}}function Co(t,e,n,r,s){let o=pe.createHash("sha256").update(n).digest("hex");return [t.toUpperCase(),e,"",`host:www.veestack.com
26
26
  `,`x-timestamp:${r}
27
27
  `,`x-nonce:${s}
28
28
  `,"host;x-timestamp;x-nonce",o].join(`
29
- `)}function bo(t,e,n){let r=t.substring(0,10).replace(/-/g,""),s=de.createHash("sha256").update(n).digest("hex");return ["VEESTACK-HMAC-SHA256",t,`${r}/veestack/${e}/veestack_request`,s].join(`
30
- `)}function Ro(t,e,n,r){let s=e.substring(0,10).replace(/-/g,""),o=_t("VEESTACK"+t,s),a=_t(o,"veestack"),i=_t(a,n),c=_t(i,"veestack_request");return _t(c,r,"hex")}function _t(t,e,n){return de.createHmac("sha256",t).update(e).digest(n||"hex")}function Co(){return de.randomBytes(16).toString("hex")}var Ut=null;async function Bt(){if(Ut)return Ut;try{return Ut=await import('keytar'),Ut}catch{return null}}var Et=Ye.join(ct.homedir(),".veestack"),ye=Ye.join(Et,"tokens.enc"),sr=Ye.join(Et,"salt"),or=Ye.join(Et,".key"),zt="VeeStack CLI",Ht="auth_tokens",Io=1e5,No=32,Oo=16;function Ft(){return process.env.DEBUG?.includes("veestack")||process.env.DEBUG?.includes("*")||process.env.NODE_ENV==="development"||process.env.VEESTACK_DEBUG==="true"}async function Po(){try{let e=await L.readFile(sr).catch(()=>null);if(e)return e}catch{}let t=de.randomBytes(32);return await L.mkdir(Et,{recursive:true,mode:448}),await L.writeFile(sr,t,{mode:384}),t}async function ir(){try{let r=await L.readFile(or,"utf-8").catch(()=>null);if(r){let s=Buffer.from(r,"hex");return await L.unlink(or).catch(()=>{}),s}}catch{}let t=`${ct.userInfo().username}@${ct.hostname()}`,e=await Po();return de.pbkdf2Sync(t,e,Io,No,"sha256")}function wt(t){Buffer.isBuffer(t)&&t.fill(0);}async function Tt(t){let e=await Bt();if(e)try{let l=JSON.stringify(t);await e.setPassword(zt,Ht,l),Ft()&&console.log(" Tokens saved to OS Keychain");return}catch(l){Ft()&&console.log(" Keychain failed, falling back to encrypted file:",l);}let n=await ir(),r=de.randomBytes(Oo),s=de.createCipheriv("aes-256-gcm",n,r),o=JSON.stringify(t),a=Buffer.concat([s.update(o,"utf8"),s.final()]),i=s.getAuthTag(),c={iv:r.toString("hex"),data:a.toString("hex"),authTag:i.toString("hex"),timestamp:Date.now(),version:2};await L.mkdir(Et,{recursive:true,mode:448}),await L.writeFile(ye,JSON.stringify(c),{mode:384}),wt(n),Ft()&&console.log(" Tokens saved to encrypted file (AES-256-GCM)");}async function ar(){let t=await Bt();if(t)try{let e=await t.getPassword(zt,Ht);if(e)return JSON.parse(e)}catch(e){Ft()&&console.log("\u26A0\uFE0F Keychain read failed, trying encrypted file:",e);}try{let e=await L.readFile(ye,"utf-8"),n=JSON.parse(e);if(n.version===1)return await Do(n);let r=await ir(),s=null;try{let o=Buffer.from(n.iv,"hex"),a=Buffer.from(n.data,"hex"),i=Buffer.from(n.authTag,"hex"),c=de.createDecipheriv("aes-256-gcm",r,o);c.setAuthTag(i),s=Buffer.concat([c.update(a),c.final()]);let l=JSON.parse(s.toString("utf8"));return wt(s),wt(r),l}catch(o){throw s&&wt(s),wt(r),o}}catch{return null}}async function Do(t){try{return console.log("\u{1F510} Migrating from legacy encryption format..."),await L.unlink(ye).catch(()=>{}),null}catch{return null}}async function Jt(){try{return await L.access(ye),!0}catch{return false}}async function He(){try{let t=await L.stat(ye).catch(()=>null);if(!t)return;let e=t.size,n=3;for(let s=0;s<n;s++){let o=de.randomBytes(e);await L.writeFile(ye,o);}await L.unlink(ye);let r=await Bt();r&&await r.deletePassword(zt,Ht).catch(()=>{});}catch{}}async function cr(){let t=await Bt(),e=!!t,n=false;if(t)try{n=!!await t.getPassword(zt,Ht);}catch{}let r=false,s,o,a=0;try{let i=await L.stat(ye);r=!0,s=i.mode.toString(8),o=i.size;let c=await L.readFile(ye,"utf-8");a=JSON.parse(c).version||1;}catch{}return {keychainAvailable:e,keychainHasTokens:n,fileExists:r,filePermissions:s,fileSize:o,encryptionVersion:a}}var jo=[{name:"bearer_token",regex:/Bearer\s+[a-zA-Z0-9_-]{20,}/gi,replacement:"Bearer [REDACTED]"},{name:"api_key",regex:/api[_-]?key['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"api_key: [REDACTED]"},{name:"access_token",regex:/access[_-]?token['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"access_token: [REDACTED]"},{name:"refresh_token",regex:/refresh[_-]?token['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"refresh_token: [REDACTED]"},{name:"auth_token",regex:/auth[_-]?token['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"auth_token: [REDACTED]"},{name:"password",regex:/password['"\s]*[:=]\s*['"]?([^'"\s]{8,})/gi,replacement:"password: [REDACTED]"},{name:"secret",regex:/secret['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"secret: [REDACTED]"},{name:"private_key",regex:/private[_-]?key['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"private_key: [REDACTED]"},{name:"jwt_token",regex:/eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*/g,replacement:"[REDACTED_JWT]"},{name:"supabase_key",regex:/eyJ[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}/g,replacement:"[REDACTED_SUPABASE_KEY]"}];function Je(t){if(!t||typeof t!="string")return t;let e=t;for(let n of jo)e=e.replace(n.regex,n.replacement);return e}function gn(t){return t instanceof Error?Je(t.message).slice(0,500):typeof t=="string"?Je(t).slice(0,500):Je(String(t)).slice(0,500)}function Gt(t){if(!t||typeof t!="object")return t;let e=["token","accessToken","refreshToken","apiKey","api_key","secret","password","privateKey","private_key","authToken","auth_token","jwt","credential","credentials"];if(Array.isArray(t))return t.map(r=>Gt(r));let n={};for(let[r,s]of Object.entries(t)){let o=r.toLowerCase();e.some(a=>o.includes(a))?n[r]="[REDACTED]":typeof s=="object"&&s!==null?n[r]=Gt(s):typeof s=="string"?n[r]=Je(s):n[r]=s;}return n}function xt(t,e,...n){let r=Je(e),s=n.map(o=>typeof o=="string"?Je(o):typeof o=="object"&&o!==null?Gt(o):o);console[t](r,...s);}var ve={log:(t,...e)=>xt("log",t,...e),error:(t,...e)=>xt("error",t,...e),warn:(t,...e)=>xt("warn",t,...e),info:(t,...e)=>xt("info",t,...e),debug:(t,...e)=>xt("debug",t,...e)};var Lo=globalThis,lr=Lo.CLI_VERSION,hn=Ye.join(ct.homedir(),".veestack");Ye.join(hn,"config.json");var Zt=Ye.join(hn,"config.json"),ur=process.env.SUPABASE_URL||"",dr=process.env.SUPABASE_ANON_KEY||"",mn=ur?`${ur}/functions/v1/cli-auth`:null,$o=process.env.VEESTACK_API_URL||"https://api.veestack.dev",fr=mn||$o;async function Mo(){try{if(!se.existsSync(Zt))return;let t=se.readFileSync(Zt,"utf-8"),e=JSON.parse(t);if(await Jt()){try{se.unlinkSync(Zt);}catch{}return}let n={token:e.token,refreshToken:e.refreshToken,tokenType:e.tokenType,tokenExpiresAt:e.tokenExpiresAt,device:e.device,user:e.user,subscription:e.subscription,lastLoginAt:e.lastLoginAt,apiKey:e.apiKey};await Tt(n);try{se.unlinkSync(Zt);}catch{}ve.info("\u{1F510} Authentication migrated to encrypted storage");}catch{}}async function X(){await Mo();let t=await ar();return t?{token:t.token,tokenType:t.tokenType,refreshToken:t.refreshToken,tokenExpiresAt:t.tokenExpiresAt,device:t.device,user:t.user,subscription:t.subscription,lastLoginAt:t.lastLoginAt,apiKey:t.apiKey}:null}async function Ze(){let t=await X();if(!t)return false;let e=t.token!==void 0&&t.token.length>0,n=t.apiKey!==void 0&&t.apiKey.length>0;return e||n}async function Uo(){let t=await X();return t&&(t.token||t.apiKey)||null}async function Fo(){let t=await X();return {id:t?.device?.id,fingerprint:t?.device?.fingerprint}}async function fe(t="GET",e="",n="",r=["project:read"]){let s=await Uo();if(!s)return {};let o=await X(),a=await Fo();if(!a.id||!a.fingerprint||!o?.refreshToken)return {};let i=nr(o.refreshToken,a.fingerprint),c=rr(t,e,n,o.refreshToken,"cli");return {Authorization:`Bearer ${s}`,"Content-Type":"application/json","X-Device-ID":a.id,"X-CLI-Version":lr||"unknown","X-Device-Fingerprint":a.fingerprint,"X-Token-Binding":i,"X-Signature":c.signature,"X-Timestamp":c.timestamp,"X-Nonce":c.nonce,"X-Scope":r.join(","),"X-Security-Version":lr||"unknown"}}function yn(t){if(!t.tokenExpiresAt)return true;let e=new Date(t.tokenExpiresAt),n=300*1e3;return Date.now()>=e.getTime()-n}async function Bo(t){if(!t.refreshToken)return null;try{let e={"Content-Type":"application/json"};dr&&(e.Authorization=`Bearer ${dr}`);let n=JSON.stringify(mn?{action:"refresh_tokens",refresh_token:t.refreshToken,device_id:t.device?.id}:{refresh_token:t.refreshToken,device_id:t.device?.id,device_fingerprint:t.device?.fingerprint}),r=mn?fr:`${fr}/api/cli/refresh`,s=await fetch(r,{method:"POST",headers:e,body:n});if(s.status===401){let i=await s.json().catch(()=>({}));throw i.code==="device_mismatch"&&(await He(),console.log(v.red(`
29
+ `)}function Io(t,e,n){let r=t.substring(0,10).replace(/-/g,""),s=pe.createHash("sha256").update(n).digest("hex");return ["VEESTACK-HMAC-SHA256",t,`${r}/veestack/${e}/veestack_request`,s].join(`
30
+ `)}function No(t,e,n,r){let s=e.substring(0,10).replace(/-/g,""),o=bt("VEESTACK"+t,s),a=bt(o,"veestack"),i=bt(a,n),c=bt(i,"veestack_request");return bt(c,r,"hex")}function bt(t,e,n){return pe.createHmac("sha256",t).update(e).digest(n||"hex")}function Po(){return pe.randomBytes(16).toString("hex")}var Kt=null;async function qt(){if(Kt)return Kt;try{return Kt=await import('keytar'),Kt}catch{return null}}var It=tt.join(pt.homedir(),".veestack"),ke=tt.join(It,"tokens.enc"),cr=tt.join(It,"salt"),lr=tt.join(It,".key"),Yt="VeeStack CLI",Xt="auth_tokens",Oo=1e5,Do=32,jo=16;function Wt(){return process.env.DEBUG?.includes("veestack")||process.env.DEBUG?.includes("*")||process.env.NODE_ENV==="development"||process.env.VEESTACK_DEBUG==="true"}async function $o(){try{let e=await V.readFile(cr).catch(()=>null);if(e)return e}catch{}let t=pe.randomBytes(32);return await V.mkdir(It,{recursive:true,mode:448}),await V.writeFile(cr,t,{mode:384}),t}async function ur(){try{let r=await V.readFile(lr,"utf-8").catch(()=>null);if(r){let s=Buffer.from(r,"hex");return await V.unlink(lr).catch(()=>{}),s}}catch{}let t=`${pt.userInfo().username}@${pt.hostname()}`,e=await $o();return pe.pbkdf2Sync(t,e,Oo,Do,"sha256")}function Rt(t){Buffer.isBuffer(t)&&t.fill(0);}async function Nt(t){let e=await qt();if(e)try{let l=JSON.stringify(t);await e.setPassword(Yt,Xt,l),Wt()&&console.log(" Tokens saved to OS Keychain");return}catch(l){Wt()&&console.log(" Keychain failed, falling back to encrypted file:",l);}let n=await ur(),r=pe.randomBytes(jo),s=pe.createCipheriv("aes-256-gcm",n,r),o=JSON.stringify(t),a=Buffer.concat([s.update(o,"utf8"),s.final()]),i=s.getAuthTag(),c={iv:r.toString("hex"),data:a.toString("hex"),authTag:i.toString("hex"),timestamp:Date.now(),version:2};await V.mkdir(It,{recursive:true,mode:448}),await V.writeFile(ke,JSON.stringify(c),{mode:384}),Rt(n),Wt()&&console.log(" Tokens saved to encrypted file (AES-256-GCM)");}async function dr(){let t=await qt();if(t)try{let e=await t.getPassword(Yt,Xt);if(e)return JSON.parse(e)}catch(e){Wt()&&console.log("\u26A0\uFE0F Keychain read failed, trying encrypted file:",e);}try{let e=await V.readFile(ke,"utf-8"),n=JSON.parse(e);if(n.version===1)return await Lo(n);let r=await ur(),s=null;try{let o=Buffer.from(n.iv,"hex"),a=Buffer.from(n.data,"hex"),i=Buffer.from(n.authTag,"hex"),c=pe.createDecipheriv("aes-256-gcm",r,o);c.setAuthTag(i),s=Buffer.concat([c.update(a),c.final()]);let l=JSON.parse(s.toString("utf8"));return Rt(s),Rt(r),l}catch(o){throw s&&Rt(s),Rt(r),o}}catch{return null}}async function Lo(t){try{return console.log("\u{1F510} Migrating from legacy encryption format..."),await V.unlink(ke).catch(()=>{}),null}catch{return null}}async function ft(){try{return await V.access(ke),!0}catch{return false}}async function We(){try{let t=await V.stat(ke).catch(()=>null);if(!t)return;let e=t.size,n=3;for(let s=0;s<n;s++){let o=pe.randomBytes(e);await V.writeFile(ke,o);}await V.unlink(ke);let r=await qt();r&&await r.deletePassword(Yt,Xt).catch(()=>{});}catch{}}async function pr(){let t=await qt(),e=!!t,n=false;if(t)try{n=!!await t.getPassword(Yt,Xt);}catch{}let r=false,s,o,a=0;try{let i=await V.stat(ke);r=!0,s=i.mode.toString(8),o=i.size;let c=await V.readFile(ke,"utf-8");a=JSON.parse(c).version||1;}catch{}return {keychainAvailable:e,keychainHasTokens:n,fileExists:r,filePermissions:s,fileSize:o,encryptionVersion:a}}var Vo=[{name:"bearer_token",regex:/Bearer\s+[a-zA-Z0-9_-]{20,}/gi,replacement:"Bearer [REDACTED]"},{name:"api_key",regex:/api[_-]?key['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"api_key: [REDACTED]"},{name:"access_token",regex:/access[_-]?token['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"access_token: [REDACTED]"},{name:"refresh_token",regex:/refresh[_-]?token['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"refresh_token: [REDACTED]"},{name:"auth_token",regex:/auth[_-]?token['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"auth_token: [REDACTED]"},{name:"password",regex:/password['"\s]*[:=]\s*['"]?([^'"\s]{8,})/gi,replacement:"password: [REDACTED]"},{name:"secret",regex:/secret['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"secret: [REDACTED]"},{name:"private_key",regex:/private[_-]?key['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"private_key: [REDACTED]"},{name:"jwt_token",regex:/eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*/g,replacement:"[REDACTED_JWT]"},{name:"supabase_key",regex:/eyJ[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}/g,replacement:"[REDACTED_SUPABASE_KEY]"}];function qe(t){if(!t||typeof t!="string")return t;let e=t;for(let n of Vo)e=e.replace(n.regex,n.replacement);return e}function _n(t){return t instanceof Error?qe(t.message).slice(0,500):typeof t=="string"?qe(t).slice(0,500):qe(String(t)).slice(0,500)}function Qt(t){if(!t||typeof t!="object")return t;let e=["token","accessToken","refreshToken","apiKey","api_key","secret","password","privateKey","private_key","authToken","auth_token","jwt","credential","credentials"];if(Array.isArray(t))return t.map(r=>Qt(r));let n={};for(let[r,s]of Object.entries(t)){let o=r.toLowerCase();e.some(a=>o.includes(a))?n[r]="[REDACTED]":typeof s=="object"&&s!==null?n[r]=Qt(s):typeof s=="string"?n[r]=qe(s):n[r]=s;}return n}function Pt(t,e,...n){let r=qe(e),s=n.map(o=>typeof o=="string"?qe(o):typeof o=="object"&&o!==null?Qt(o):o);console[t](r,...s);}var _e={log:(t,...e)=>Pt("log",t,...e),error:(t,...e)=>Pt("error",t,...e),warn:(t,...e)=>Pt("warn",t,...e),info:(t,...e)=>Pt("info",t,...e),debug:(t,...e)=>Pt("debug",t,...e)};var en=process.env.NODE_ENV==="development"||process.env.VEESTACK_WEB_URL?.includes("localhost")||process.env.VEESTACK_WEB_URL?.includes("127.0.0.1")||process.env.SUPABASE_URL?.includes("localhost")||process.env.SUPABASE_URL?.includes("127.0.0.1"),fe=process.env.VEESTACK_API_URL??(en?"http://localhost:3000":"https://api.veestack.dev"),gt=process.env.VEESTACK_WEB_URL??(en?"http://localhost:3000":"https://www.veestack.com"),we=`${fe}/api/cli`,Ie={device:`${we}/device`,authorize:`${we}/authorize`,verifyCode:`${we}/verify-code`,token:`${we}/token`,refresh:`${we}/refresh`,logout:`${we}/logout`,whoami:`${we}/whoami`,status:`${we}/status`,projects:`${fe}/api/projects`,upload:`${fe}/api/upload`};function fr(){return {environment:en?"development":"production",apiVersion:"unversioned",apiBaseUrl:fe,webBaseUrl:gt,cliApiBase:we,endpoints:Ie}}function gr(){let t=[];return fe||t.push("API_BASE_URL is not set"),fe.includes("localhost")&&!en&&t.push('Using localhost URL but NODE_ENV is not "development"'),{valid:t.length===0,errors:t}}var Uo=globalThis,mr=Uo.CLI_VERSION,vr=tt.join(pt.homedir(),".veestack"),tn=tt.join(vr,"config.json");async function Bo(){try{if(!oe.existsSync(tn))return;let t=oe.readFileSync(tn,"utf-8"),e=JSON.parse(t);if(await ft()){try{oe.unlinkSync(tn);}catch{}return}let n={token:e.token,refreshToken:e.refreshToken,tokenType:e.tokenType,tokenExpiresAt:e.tokenExpiresAt,device:e.device,user:e.user,subscription:e.subscription,lastLoginAt:e.lastLoginAt,apiKey:e.apiKey};await Nt(n);try{oe.unlinkSync(tn);}catch{}_e.info("\u{1F510} Authentication migrated to encrypted storage");}catch{}}async function K(){await Bo();let t=await dr();return t?{token:t.token,tokenType:t.tokenType,refreshToken:t.refreshToken,tokenExpiresAt:t.tokenExpiresAt,device:t.device,user:t.user,subscription:t.subscription,lastLoginAt:t.lastLoginAt,apiKey:t.apiKey}:null}async function Se(){let t=await K();if(!t)return false;let e=t.token!==void 0&&t.token.length>0,n=t.apiKey!==void 0&&t.apiKey.length>0;return e||n}async function Fo(){let t=await K();return t&&(t.token||t.apiKey)||null}async function zo(){let t=await K();return {id:t?.device?.id,fingerprint:t?.device?.fingerprint}}async function ge(t="GET",e="",n="",r=["project:read"]){let s=await Fo();if(!s)return {};let o=await K(),a=await zo();if(!a.id||!a.fingerprint||!o?.refreshToken)return {};let i=ir(o.refreshToken,a.fingerprint),c=ar(t,e,n,o.refreshToken,"cli");return {Authorization:`Bearer ${s}`,"Content-Type":"application/json","X-Device-ID":a.id,"X-CLI-Version":mr||"unknown","X-Device-Fingerprint":a.fingerprint,"X-Token-Binding":i,"X-Signature":c.signature,"X-Timestamp":c.timestamp,"X-Nonce":c.nonce,"X-Scope":r.join(","),"X-Security-Version":mr||"unknown"}}function Sn(t){if(!t.tokenExpiresAt)return true;let e=new Date(t.tokenExpiresAt),n=300*1e3;return Date.now()>=e.getTime()-n}async function Ho(t){if(!t.refreshToken)return null;try{let e={"Content-Type":"application/json"},n=Ie.refresh,r=JSON.stringify({refresh_token:t.refreshToken,device_id:t.device?.id,device_fingerprint:t.device?.fingerprint}),s=await fetch(n,{method:"POST",headers:e,body:r});if(s.status===401){let i=await s.json().catch(()=>({}));throw i.code==="device_mismatch"&&(await We(),console.log(v.red(`
31
31
  \u274C Security Alert: Device mismatch`)),console.log(v.yellow(`
32
- Your token was used from a different device.`)),console.log(v.gray("This could indicate a token theft attempt.")),console.log(v.gray("Please login again:")),console.log(v.cyan(" veestack login")),process.exit(1)),i.code==="device_revoked"&&(await He(),console.log(v.red(`
32
+ Your token was used from a different device.`)),console.log(v.gray("This could indicate a token theft attempt.")),console.log(v.gray("Please login again:")),console.log(v.cyan(" veestack login")),process.exit(1)),i.code==="device_revoked"&&(await We(),console.log(v.red(`
33
33
  \u274C Device authorization revoked`)),console.log(v.yellow(`
34
- Your device was removed from authorized devices.`)),console.log(v.gray("Please login again:")),console.log(v.cyan(" veestack login")),process.exit(1)),(i.code==="token_invalid"||i.code==="session_expired")&&(await He(),console.log(v.red(`
34
+ Your device was removed from authorized devices.`)),console.log(v.gray("Please login again:")),console.log(v.cyan(" veestack login")),process.exit(1)),(i.code==="token_invalid"||i.code==="session_expired")&&(await We(),console.log(v.red(`
35
35
  \u274C Session expired`)),console.log(v.yellow(`
36
- Your session has expired or your password was changed.`)),console.log(v.gray("Please login again:")),console.log(v.cyan(" veestack login")),process.exit(1)),new Error("Token refresh failed: Unauthorized")}if(!s.ok)throw new Error("Token refresh failed");let o=await s.json(),a={...t,token:o.access_token,tokenExpiresAt:new Date(Date.now()+o.expires_in*1e3).toISOString()};return o.refresh_token&&(a.refreshToken=o.refresh_token),await Tt({token:a.token,refreshToken:a.refreshToken,tokenType:a.tokenType,tokenExpiresAt:a.tokenExpiresAt,device:a.device,user:a.user,subscription:a.subscription,lastLoginAt:a.lastLoginAt,apiKey:a.apiKey}),a}catch(e){return e instanceof Error&&e.message.includes("fetch")&&(ve.warn(`
37
- \u26A0\uFE0F Network error`),ve.info("Could not connect to authentication server."),ve.info("Please check your connection and try again.")),null}}async function Ae(){let t=await X();if(!t)return console.log(v.yellow(`
36
+ Your session has expired or your password was changed.`)),console.log(v.gray("Please login again:")),console.log(v.cyan(" veestack login")),process.exit(1)),new Error("Token refresh failed: Unauthorized")}if(!s.ok)throw new Error("Token refresh failed");let o=await s.json(),a={...t,token:o.access_token,tokenExpiresAt:new Date(Date.now()+o.expires_in*1e3).toISOString()};return o.refresh_token&&(a.refreshToken=o.refresh_token),await Nt({token:a.token,refreshToken:a.refreshToken,tokenType:a.tokenType,tokenExpiresAt:a.tokenExpiresAt,device:a.device,user:a.user,subscription:a.subscription,lastLoginAt:a.lastLoginAt,apiKey:a.apiKey}),a}catch(e){return e instanceof Error&&e.message.includes("fetch")&&(_e.warn(`
37
+ \u26A0\uFE0F Network error`),_e.info("Could not connect to authentication server."),_e.info("Please check your connection and try again.")),null}}async function Ne(){let t=await K();if(!t)return console.log(v.yellow(`
38
38
  \u26A0\uFE0F You are not logged in`)),console.log(v.gray(`
39
39
  Login to enable:`)),console.log(v.gray(" \u2022 Cloud reports")),console.log(v.gray(" \u2022 Team dashboard")),console.log(v.gray(` \u2022 Historical scans
40
- `)),console.log(v.gray("Run:")),console.log(v.cyan(" veestack login")),null;if(t.refreshToken&&yn(t)){console.log(v.yellow("Token expired, refreshing..."));let e=await Bo(t);return e?(console.log(v.green("\u2713 Token refreshed")),e):(await He(),console.log(v.red(`
41
- \u274C Session expired`)),console.log(v.yellow("Your refresh token has expired.")),console.log(v.gray("Run: veestack login")),null)}return t}async function Wt(){let t=await X();return !t||!t.subscription?"free":t.subscription.tier}async function mr(){let t=await X();return !t||!t.subscription||t.subscription.tier==="free"?true:t.subscription.expiresAt?new Date(t.subscription.expiresAt)>new Date&&t.subscription.isActive:t.subscription.isActive}function hr(t){if(t.user)try{let e=join(hn,"accounts"),n=(void 0)("fs");n.mkdirSync(e,{recursive:!0});let r=join(e,`${t.user.id}.json`);n.writeFileSync(r,JSON.stringify(t,null,2),{mode:384});}catch{}}var kr=process.env.VEESTACK_API_URL||"https://api.veestack.dev";async function _r(){try{let t=await fetch(`${kr}/v1/cli/version`,{method:"GET",headers:{Accept:"application/json"}});if(t.ok){let n=(await t.json()).version;n&&n!==ee&&(console.log(v.yellow(`
42
- \u2728 New version available: ${v.bold(n)} (current: ${ee})`)),console.log(v.gray(` Run: ${v.cyan("veestack upgrade")} to update
43
- `)));}}catch{}}async function Ho(){let t=process.cwd(),e=join(t,"package.json"),n=[{name:"Next.js",files:["next.config.js","next.config.ts","next.config.mjs"]},{name:"Nuxt.js",files:["nuxt.config.js","nuxt.config.ts"]},{name:"Vue CLI",files:["vue.config.js"]},{name:"Angular",files:["angular.json"]},{name:"SvelteKit",files:["svelte.config.js","svelte.config.ts"]},{name:"Vite",files:["vite.config.js","vite.config.ts"]},{name:"Remix",files:["remix.config.js"]},{name:"Gatsby",files:["gatsby-config.js","gatsby-config.ts"]},{name:"Astro",files:["astro.config.mjs","astro.config.js"]}];for(let r of n)for(let s of r.files)if(existsSync(join(t,s)))return {name:r.name,confidence:95};if(!existsSync(e)){if(existsSync(join(t,"requirements.txt"))){let r=readFileSync(join(t,"requirements.txt"),"utf-8").toLowerCase();if(r.includes("django"))return {name:"Django",confidence:85};if(r.includes("flask"))return {name:"Flask",confidence:85}}return existsSync(join(t,"Gemfile"))&&readFileSync(join(t,"Gemfile"),"utf-8").toLowerCase().includes("rails")?{name:"Ruby on Rails",confidence:85}:existsSync(join(t,"pom.xml"))&&readFileSync(join(t,"pom.xml"),"utf-8").toLowerCase().includes("spring-boot")?{name:"Spring Boot",confidence:85}:{name:"unknown",confidence:0}}try{let r=JSON.parse(readFileSync(e,"utf-8")),s={...r.dependencies,...r.devDependencies},o=[{name:"Next.js",primary:["next"],secondary:["next/core-web-vitals","@next/bundle-analyzer"],indicators:["app","pages"]},{name:"React",primary:["react","react-dom"],secondary:["@types/react","react-scripts","create-react-app"],indicators:["src/components","src/App.js","src/App.tsx"]},{name:"Vue",primary:["vue"],secondary:["vue-router","vuex","pinia","@vue/cli-service"],indicators:["src/views","src/components"]},{name:"Angular",primary:["@angular/core"],secondary:["@angular/cli","@angular/common","@angular/router"],indicators:["src/app"]},{name:"Svelte",primary:["svelte"],secondary:["svelte-check","@sveltejs/kit"],indicators:["src/routes"]},{name:"Express",primary:["express"],secondary:["cors","helmet","morgan","body-parser"],indicators:["routes","controllers"]},{name:"NestJS",primary:["@nestjs/core"],secondary:["@nestjs/common","@nestjs/platform-express"],indicators:["src/modules"]},{name:"Fastify",primary:["fastify"],secondary:["@fastify/cors","@fastify/helmet"],indicators:["routes"]}];for(let a of o){let i=0;for(let l of a.primary)if(s[l]){i+=70;break}let c=0;for(let l of a.secondary)s[l]&&c<2&&(i+=10,c++);for(let l of a.indicators)existsSync(join(t,l))&&(i+=10);if(i>=60)return a.name==="Next.js"&&s.next?{name:a.name,confidence:100}:{name:a.name,confidence:Math.min(i,95)}}return s.astro?{name:"Astro",confidence:80}:s.remix?{name:"Remix",confidence:80}:s.gatsby?{name:"Gatsby",confidence:80}:s.nuxt?{name:"Nuxt.js",confidence:80}:s["@sveltejs/kit"]?{name:"SvelteKit",confidence:85}:{name:"unknown",confidence:0}}catch{return {name:"unknown",confidence:0}}}async function Jo(t,e){try{let n=await fe(),r=await fetch(`${kr}/v1/projects`,{method:"POST",headers:n,body:JSON.stringify({name:t,framework:e,source:"cli-init"})});if(!r.ok){let s=await r.json().catch(()=>({error:"Unknown error"}));throw new Error(s.error||`HTTP ${r.status}`)}return await r.json()}catch(n){return ve.error("Failed to create project:",n instanceof Error?n.message:String(n)),null}}function vr(t){let e={"Next.js":["**/*.{js,jsx,ts,tsx,json,mjs,cjs}"],React:["**/*.{js,jsx,ts,tsx,json}"],Vue:["**/*.{js,jsx,ts,tsx,vue,json}"],Angular:["**/*.{ts,html,json}"],Svelte:["**/*.{js,ts,svelte,json}"],Express:["**/*.{js,ts,json}"],NestJS:["**/*.{ts,json}"],unknown:["**/*.{js,ts,jsx,tsx,json,py,go,rs,rb,php,cs,cpp,c,h}"]};return e[t]||e.unknown}function Go(){return ["node_modules/**/*",".git/**/*","dist/**/*","build/**/*",".next/**/*","coverage/**/*","*.test.ts","*.spec.ts","*.min.js"]}function Zo(t){let e=join(process.cwd(),"veestack.config.json");writeFileSync(e,JSON.stringify(t,null,2));}function Ko(){let t=join(process.cwd(),"veestack.config.json");if(existsSync(t))try{return JSON.parse(readFileSync(t,"utf-8"))}catch{return null}return null}function Wo(t){let e=process.cwd(),n=[],r=["src","app","lib","components","pages","routes","controllers","models","utils"];for(let s of r){let o=join(e,s);existsSync(o)&&n.push(`${s}/**/*`);}return n}function qo(){let t=process.cwd(),e=join(t,".git");return existsSync(e)}function Yo(){let t=process.cwd();return existsSync(join(t,"pnpm-lock.yaml"))?"pnpm":existsSync(join(t,"yarn.lock"))?"yarn":existsSync(join(t,"package-lock.json"))?"npm":existsSync(join(t,"bun.lockb"))?"bun":"npm"}function Xo(){return `Node ${process.version}`}async function ut(t){t?.skipAuthCheck||console.log(v.bold.cyan(`
40
+ `)),console.log(v.gray("Run:")),console.log(v.cyan(" veestack login")),null;if(t.refreshToken&&Sn(t)){console.log(v.yellow("Token expired, refreshing..."));let e=await Ho(t);return e?(console.log(v.green("\u2713 Token refreshed")),e):(await We(),console.log(v.red(`
41
+ \u274C Session expired`)),console.log(v.yellow("Your refresh token has expired.")),console.log(v.gray("Run: veestack login")),null)}return t}async function nn(){let t=await K();return !t||!t.subscription?"free":t.subscription.tier}async function kr(){let t=await K();return !t||!t.subscription||t.subscription.tier==="free"?true:t.subscription.expiresAt?new Date(t.subscription.expiresAt)>new Date&&t.subscription.isActive:t.subscription.isActive}function _r(t){if(t.user)try{let e=join(vr,"accounts"),n=(void 0)("fs");n.mkdirSync(e,{recursive:!0});let r=join(e,`${t.user.id}.json`);n.writeFileSync(r,JSON.stringify(t,null,2),{mode:384});}catch{}}var Er=process.env.VEESTACK_API_URL||"https://api.veestack.dev";async function Tr(){try{let t=await fetch(`${Er}/v1/cli/version`,{method:"GET",headers:{Accept:"application/json"}});if(t.ok){let n=(await t.json()).version;n&&n!==te&&(console.log(v.yellow(`
42
+ \u2728 New version available: ${v.bold(n)} (current: ${te})`)),console.log(v.gray(` Run: ${v.cyan("veestack upgrade")} to update
43
+ `)));}}catch{}}async function Go(){let t=process.cwd(),e=join(t,"package.json"),n=[{name:"Next.js",files:["next.config.js","next.config.ts","next.config.mjs"]},{name:"Nuxt.js",files:["nuxt.config.js","nuxt.config.ts"]},{name:"Vue CLI",files:["vue.config.js"]},{name:"Angular",files:["angular.json"]},{name:"SvelteKit",files:["svelte.config.js","svelte.config.ts"]},{name:"Vite",files:["vite.config.js","vite.config.ts"]},{name:"Remix",files:["remix.config.js"]},{name:"Gatsby",files:["gatsby-config.js","gatsby-config.ts"]},{name:"Astro",files:["astro.config.mjs","astro.config.js"]}];for(let r of n)for(let s of r.files)if(existsSync(join(t,s)))return {name:r.name,confidence:95};if(!existsSync(e)){if(existsSync(join(t,"requirements.txt"))){let r=readFileSync(join(t,"requirements.txt"),"utf-8").toLowerCase();if(r.includes("django"))return {name:"Django",confidence:85};if(r.includes("flask"))return {name:"Flask",confidence:85}}return existsSync(join(t,"Gemfile"))&&readFileSync(join(t,"Gemfile"),"utf-8").toLowerCase().includes("rails")?{name:"Ruby on Rails",confidence:85}:existsSync(join(t,"pom.xml"))&&readFileSync(join(t,"pom.xml"),"utf-8").toLowerCase().includes("spring-boot")?{name:"Spring Boot",confidence:85}:{name:"unknown",confidence:0}}try{let r=JSON.parse(readFileSync(e,"utf-8")),s={...r.dependencies,...r.devDependencies},o=[{name:"Next.js",primary:["next"],secondary:["next/core-web-vitals","@next/bundle-analyzer"],indicators:["app","pages"]},{name:"React",primary:["react","react-dom"],secondary:["@types/react","react-scripts","create-react-app"],indicators:["src/components","src/App.js","src/App.tsx"]},{name:"Vue",primary:["vue"],secondary:["vue-router","vuex","pinia","@vue/cli-service"],indicators:["src/views","src/components"]},{name:"Angular",primary:["@angular/core"],secondary:["@angular/cli","@angular/common","@angular/router"],indicators:["src/app"]},{name:"Svelte",primary:["svelte"],secondary:["svelte-check","@sveltejs/kit"],indicators:["src/routes"]},{name:"Express",primary:["express"],secondary:["cors","helmet","morgan","body-parser"],indicators:["routes","controllers"]},{name:"NestJS",primary:["@nestjs/core"],secondary:["@nestjs/common","@nestjs/platform-express"],indicators:["src/modules"]},{name:"Fastify",primary:["fastify"],secondary:["@fastify/cors","@fastify/helmet"],indicators:["routes"]}];for(let a of o){let i=0;for(let l of a.primary)if(s[l]){i+=70;break}let c=0;for(let l of a.secondary)s[l]&&c<2&&(i+=10,c++);for(let l of a.indicators)existsSync(join(t,l))&&(i+=10);if(i>=60)return a.name==="Next.js"&&s.next?{name:a.name,confidence:100}:{name:a.name,confidence:Math.min(i,95)}}return s.astro?{name:"Astro",confidence:80}:s.remix?{name:"Remix",confidence:80}:s.gatsby?{name:"Gatsby",confidence:80}:s.nuxt?{name:"Nuxt.js",confidence:80}:s["@sveltejs/kit"]?{name:"SvelteKit",confidence:85}:{name:"unknown",confidence:0}}catch{return {name:"unknown",confidence:0}}}async function Zo(t,e){try{let n=await ge(),r=await fetch(`${Er}/v1/projects`,{method:"POST",headers:n,body:JSON.stringify({name:t,framework:e,source:"cli-init"})});if(!r.ok){let s=await r.json().catch(()=>({error:"Unknown error"}));throw new Error(s.error||`HTTP ${r.status}`)}return await r.json()}catch(n){return _e.error("Failed to create project:",n instanceof Error?n.message:String(n)),null}}function Sr(t){let e={"Next.js":["**/*.{js,jsx,ts,tsx,json,mjs,cjs}"],React:["**/*.{js,jsx,ts,tsx,json}"],Vue:["**/*.{js,jsx,ts,tsx,vue,json}"],Angular:["**/*.{ts,html,json}"],Svelte:["**/*.{js,ts,svelte,json}"],Express:["**/*.{js,ts,json}"],NestJS:["**/*.{ts,json}"],unknown:["**/*.{js,ts,jsx,tsx,json,py,go,rs,rb,php,cs,cpp,c,h}"]};return e[t]||e.unknown}function Ko(){return ["node_modules/**/*",".git/**/*","dist/**/*","build/**/*",".next/**/*","coverage/**/*","*.test.ts","*.spec.ts","*.min.js"]}function Wo(t){let e=join(process.cwd(),"veestack.config.json");writeFileSync(e,JSON.stringify(t,null,2));}function qo(){let t=join(process.cwd(),"veestack.config.json");if(existsSync(t))try{return JSON.parse(readFileSync(t,"utf-8"))}catch{return null}return null}function Yo(t){let e=process.cwd(),n=[],r=["src","app","lib","components","pages","routes","controllers","models","utils"];for(let s of r){let o=join(e,s);existsSync(o)&&n.push(`${s}/**/*`);}return n}function Xo(){let t=process.cwd(),e=join(t,".git");return existsSync(e)}function Qo(){let t=process.cwd();return existsSync(join(t,"pnpm-lock.yaml"))?"pnpm":existsSync(join(t,"yarn.lock"))?"yarn":existsSync(join(t,"package-lock.json"))?"npm":existsSync(join(t,"bun.lockb"))?"bun":"npm"}function ei(){return `Node ${process.version}`}async function ht(t){t?.skipAuthCheck||console.log(v.bold.cyan(`
44
44
  \u{1F680} Initializing VeeStack...
45
- `));let e=false;t?.skipAuthCheck||(e=await Ae()!==null,!e&&t?.ci&&console.log(v.yellow("\u26A0 Not logged in. Cloud reports and team dashboard are disabled in CI mode.")));let n=Ko();if(n?.projectId&&!t?.ci&&t?.interactive){let{overwrite:$}=await yr({type:"confirm",name:"overwrite",message:`Project already linked to ${n.name||n.projectId}. Re-initialize?`,initial:false});if(!$){console.log(v.gray(`
45
+ `));let e=false;t?.skipAuthCheck||(e=await Ne()!==null,!e&&t?.ci&&console.log(v.yellow("\u26A0 Not logged in. Cloud reports and team dashboard are disabled in CI mode.")));let n=qo();if(n?.projectId&&!t?.ci&&t?.interactive){let{overwrite:U}=await wr({type:"confirm",name:"overwrite",message:`Project already linked to ${n.name||n.projectId}. Re-initialize?`,initial:false});if(!U){console.log(v.gray(`
46
46
  Cancelled. Existing configuration preserved.
47
- `));return}}let r=await Ho(),s=r.name!=="unknown"?r.name:"Unknown";r.confidence>70?console.log(v.green(`\u2714 Framework detected: ${r.name}`)):r.confidence>0?console.log(v.yellow(`\u26A0 Framework detected: ${r.name} (low confidence)`)):(console.log(v.yellow('\u26A0 Framework detection failed. Using "Unknown".')),console.log(v.gray(" Some analysis rules may not apply correctly.")),console.log(v.gray(` \u2139 You can manually edit ${v.cyan("veestack.config.json")} later for better analysis.`)));let o=Wo(r.name);o.length>0&&console.log(v.green(`\u2714 Structure detected: ${o.length} source directories`));let a=Yo(),i=Xo();console.log(v.green(`\u2714 Package manager: ${a}`)),console.log(v.green(`\u2714 Runtime: ${i}`)),qo()&&console.log(v.green("\u2714 Git repository detected"));let c="",l=join(process.cwd(),"package.json");if(existsSync(l))try{c=JSON.parse(readFileSync(l,"utf-8")).name||"";}catch{}c||(c=process.cwd().split(/[\\/]/).pop()||"my-project");let d;if(!(!t?.ci&&(t?.interactive||r.confidence<30)))d={projectName:c,framework:s,scanPatterns:o.length>0?o:vr(r.name),createProject:false},console.log(v.gray(`
47
+ `));return}}let r=await Go(),s=r.name!=="unknown"?r.name:"Unknown";r.confidence>70?console.log(v.green(`\u2714 Framework detected: ${r.name}`)):r.confidence>0?console.log(v.yellow(`\u26A0 Framework detected: ${r.name} (low confidence)`)):(console.log(v.yellow('\u26A0 Framework detection failed. Using "Unknown".')),console.log(v.gray(" Some analysis rules may not apply correctly.")),console.log(v.gray(` \u2139 You can manually edit ${v.cyan("veestack.config.json")} later for better analysis.`)));let o=Yo(r.name);o.length>0&&console.log(v.green(`\u2714 Structure detected: ${o.length} source directories`));let a=Qo(),i=ei();console.log(v.green(`\u2714 Package manager: ${a}`)),console.log(v.green(`\u2714 Runtime: ${i}`)),Xo()&&console.log(v.green("\u2714 Git repository detected"));let c="",l=join(process.cwd(),"package.json");if(existsSync(l))try{c=JSON.parse(readFileSync(l,"utf-8")).name||"";}catch{}c||(c=process.cwd().split(/[\\/]/).pop()||"my-project");let d;if(!(!t?.ci&&(t?.interactive||r.confidence<30)))d={projectName:c,framework:s,scanPatterns:o.length>0?o:Sr(r.name),createProject:false},console.log(v.gray(`
48
48
  Project name: ${c}`)),console.log(v.gray(`Framework: ${d.framework}`)),console.log(v.gray(`Scan directories: ${d.scanPatterns.join(", ")}`));else if(console.log(v.gray(`
49
49
  Configure your project:
50
- `)),d=await yr([{type:"text",name:"projectName",message:"Project name:",initial:c||"my-project",validate:$=>$.length>0||"Project name is required"},{type:"text",name:"framework",message:"Framework:",initial:r.name!=="unknown"?r.name:"Unknown"},{type:"multiselect",name:"scanPatterns",message:"Select directories to scan:",choices:vr(r.name).map($=>({title:$,value:$,selected:true})),hint:"Space to toggle, Enter to confirm"},{type:e?"confirm":null,name:"createProject",message:"Create project on VeeStack dashboard?",initial:true}],{onCancel:()=>{console.log(v.gray(`
50
+ `)),d=await wr([{type:"text",name:"projectName",message:"Project name:",initial:c||"my-project",validate:U=>U.length>0||"Project name is required"},{type:"text",name:"framework",message:"Framework:",initial:r.name!=="unknown"?r.name:"Unknown"},{type:"multiselect",name:"scanPatterns",message:"Select directories to scan:",choices:Sr(r.name).map(U=>({title:U,value:U,selected:true})),hint:"Space to toggle, Enter to confirm"},{type:e?"confirm":null,name:"createProject",message:"Create project on VeeStack dashboard?",initial:true}],{onCancel:()=>{console.log(v.gray(`
51
51
  Cancelled.
52
52
  `)),process.exit(0);}}),!d.projectName){console.log(v.gray(`
53
53
  Cancelled.
54
- `));return}let P;if(d.createProject){console.log(v.gray(`
55
- Creating project on VeeStack...`));let $=await Jo(d.projectName,d.framework);$?(P=$.id,console.log(v.green("\u2714 Project created"))):console.log(v.yellow("\u26A0\uFE0F Could not create project on server (offline mode)"));}let C={projectId:P,name:d.projectName,framework:d.framework,scanPatterns:d.scanPatterns,excludePatterns:Go()};Zo(C);let R=r.confidence===0;if(t?.skipNextSteps){console.log(v.green(`
56
- \u2714 Configuration saved to veestack.config.json`)),R&&console.log(v.yellow("\u26A0 Framework detection failed. Some settings may need manual adjustment."));return}console.log(v.green(`
57
- \u2714 Configuration saved to veestack.config.json`)),R&&console.log(v.yellow("\u26A0 Framework detection failed. Some settings may need manual adjustment.")),console.log(v.bold(`
58
- Next steps:`)),console.log(v.gray(" 1. Run analysis:")),console.log(v.cyan(" veestack scan")),console.log(v.gray(" 2. Upload results:")),console.log(v.cyan(" veestack upload")),console.log(v.gray(" 3. View in dashboard:")),console.log(v.cyan(` https://www.veestack.com/dashboard${P?`/projects/${P}`:""}
59
- `));}var vn=globalThis,ii=vn.CLI_VERSION||"unknown",ai=vn.SNAPSHOT_VERSION||"unknown",ci=vn.ENGINE_TARGET||"unknown";function li(t){let e={},n=t.split(/\r?\n/),r=false,s=null;for(let o of n){let a=o.replace(/\t/g," "),i=a.trim();if(!r){/^packages\s*:\s*$/.test(i)&&(r=true,s=a.match(/^\s*/)?.[0].length??0);continue}if(i!==""&&!i.startsWith("#")){let C=a.match(/^\s*/)?.[0].length??0;if(s!==null&&C<=s)break}let c=i.match(/^\/?([^\s]+)\s*:\s*$/);if(!c)continue;let l=c[1].replace(/^\/+/,""),d=l.lastIndexOf("@");if(d<=0)continue;let A=l.slice(0,d),P=l.slice(d+1);!A||!P||!/^\d+\./.test(P)||(e[A]=P);}return e}function ui(){if(process.env.GITHUB_ACTIONS){let[t,e]=(process.env.GITHUB_REPOSITORY||"").split("/");return {provider:"github_actions",repo_owner:t,repo_name:e,commit_sha:process.env.GITHUB_SHA,run_id:process.env.GITHUB_RUN_ID,event_name:process.env.GITHUB_EVENT_NAME,pr_number:process.env.GITHUB_REF?.includes("refs/pull/")?parseInt(process.env.GITHUB_REF.split("/")[2]):void 0}}}function kn(t){return de__default.createHash("sha256").update(t).digest("hex")}function di(t){let e=[".exe",".dll",".so",".dylib",".bin",".png",".jpg",".jpeg",".gif",".pdf",".zip",".tar",".gz",".7z",".woff",".woff2",".ttf",".eot"],n=t.split(".").pop()?.toLowerCase();return n?e.includes("."+n):false}function fi(t){return {ts:"TypeScript",js:"JavaScript",tsx:"TypeScript",jsx:"JavaScript",py:"Python",go:"Go",rs:"Rust",java:"Java",kt:"Kotlin",rb:"Ruby",php:"PHP",cs:"C#",cpp:"C++",c:"C",h:"C",json:"JSON",yaml:"YAML",yml:"YAML",md:"Markdown",html:"HTML",css:"CSS",scss:"SCSS",sql:"SQL",sh:"Shell",mjs:"JavaScript",cjs:"JavaScript",svelte:"Svelte",vue:"Vue"}[t]||"Other"}function pi(t){let e={};for(let n of t){let r=fi(n.extension.toLowerCase());e[r]=(e[r]||0)+1;}return e}function gi(t,e){let a=0,i={critical:0,high:0,medium:0,low:0};e&&(i={critical:e.criticalCount||0,high:e.highCount||0,medium:e.mediumCount||0,low:e.lowCount||0},a=i.critical*25+i.high*15+i.medium*5+i.low*2);let c=Math.max(0,100-a),l="F";return c===100?l="A+":c>=90?l="A":c>=80?l="B":c>=70?l="C":c>=60&&(l="D"),{score:c,grade:l,breakdown:i}}async function mi(t){try{return execSync("git diff --name-only HEAD",{cwd:t,encoding:"utf-8"}).split(`
60
- `).filter(Boolean)}catch{return []}}async function hi(t,e,n,r=false){let s=[],o=await glob(e,{cwd:t,ignore:n,nodir:true,dot:true,absolute:false});if(r){let i=await mi(t);i.length>0&&(o=o.filter(c=>i.includes(c)));}let a=o.filter(i=>!i.replace(/\\/g,"/").match(/(node_modules|\.next|dist|build|\.git)\//));for(let i of a){let c=statSync(join(t,i));c.isFile()&&s.push({id:de__default.randomUUID(),path:i,path_hash:kn(i),depth:i.split(/[\\/]/).length,size_bytes:c.size,estimated_lines:Math.floor(c.size/50),extension:i.split(".").pop()||"",is_binary:di(i)});}return s.sort((i,c)=>i.path_hash.localeCompare(c.path_hash))}async function yi(t){let e=[];try{let n=join(t,"package.json");if(!existsSync(n))return [];let r=JSON.parse(readFileSync(n,"utf-8")),s={},o=join(t,"pnpm-lock.yaml"),a=join(t,"package-lock.json");if(existsSync(o))s=li(readFileSync(o,"utf8"));else if(existsSync(a)){let c=JSON.parse(readFileSync(a,"utf8"));for(let[l,d]of Object.entries(c.packages||{}))l&&d.version&&(s[l.replace("node_modules/","")]=d.version);}let i=(c,l)=>{for(let[d,A]of Object.entries(c)){let P=s[d]||A.replace(/[\^~]/,""),C=P.match(/^(\d+)\.(\d+)/);e.push({id:de__default.randomUUID(),name_hash:kn(d),name:d,version:P,major_version:C?parseInt(C[1]):0,minor_version:C?parseInt(C[2]):0,category:l});}};r.dependencies&&i(r.dependencies,"prod"),r.devDependencies&&i(r.devDependencies,"dev"),r.peerDependencies&&i(r.peerDependencies,"peer");}catch{}return e.sort((n,r)=>n.name_hash.localeCompare(r.name_hash))}async function vi(t,e){let n=await yi(t);return {snapshot_version:ai,engine_target_version:ci,project_id:de__default.randomUUID(),generated_at:new Date().toISOString(),root_path_hash:kn(t),project_root:resolve(t),metadata:{total_files:e.length,total_dependencies:n.length,total_size_bytes:e.reduce((r,s)=>r+s.size_bytes,0),total_lines:e.reduce((r,s)=>r+(s.estimated_lines||0),0),max_directory_depth:Math.max(...e.map(r=>r.depth),0),language_breakdown:pi(e)},files:e,dependencies:n,ci_metadata:ui()}}async function _n(t){let e=t.quiet||t.json,n=t.ci||process.env.CI==="true",r=resolve(t.path),s=basename(r),o=s,a=join(r,"package.json"),i=join(r,"veestack.config.json");if(existsSync(a))try{let d=JSON.parse(readFileSync(a,"utf-8"));d.name&&(o=d.name);}catch{}if(existsSync(i))try{let d=JSON.parse(readFileSync(i,"utf-8"));d.name&&(o=d.name);}catch{}e||(console.log(v.bold.cyan(`
61
- VeeStack Security Scan`)),console.log(v.gray("\u2500".repeat(40))));await Ze();if(!existsSync(i)&&!t.json){if(n)console.log(v.gray(`
62
- \u26A1 CI mode detected: Using default project name and scan directories`)),await ut({ci:true,skipAuthCheck:true,skipNextSteps:true});else if(!e){console.log(v.cyan(`
54
+ `));return}let $;if(d.createProject){console.log(v.gray(`
55
+ Creating project on VeeStack...`));let U=await Zo(d.projectName,d.framework);U?($=U.id,console.log(v.green("\u2714 Project created"))):console.log(v.yellow("\u26A0\uFE0F Could not create project on server (offline mode)"));}let I={projectId:$,name:d.projectName,framework:d.framework,scanPatterns:d.scanPatterns,excludePatterns:Ko()};Wo(I);let C=r.confidence===0;if(t?.skipNextSteps){console.log(v.green(`
56
+ \u2714 Configuration saved to veestack.config.json`)),C&&console.log(v.yellow("\u26A0 Framework detection failed. Some settings may need manual adjustment."));return}console.log(v.green(`
57
+ \u2714 Configuration saved to veestack.config.json`)),C&&console.log(v.yellow("\u26A0 Framework detection failed. Some settings may need manual adjustment.")),console.log(v.bold(`
58
+ Next steps:`)),console.log(v.gray(" 1. Run analysis:")),console.log(v.cyan(" veestack scan")),console.log(v.gray(" 2. Upload results:")),console.log(v.cyan(" veestack upload")),console.log(v.gray(" 3. View in dashboard:")),console.log(v.cyan(` https://www.veestack.com/dashboard${$?`/projects/${$}`:""}
59
+ `));}var En=globalThis,ci=En.CLI_VERSION||"unknown",li=En.SNAPSHOT_VERSION||"unknown",ui=En.ENGINE_TARGET||"unknown";function di(t){let e={},n=t.split(/\r?\n/),r=false,s=null;for(let o of n){let a=o.replace(/\t/g," "),i=a.trim();if(!r){/^packages\s*:\s*$/.test(i)&&(r=true,s=a.match(/^\s*/)?.[0].length??0);continue}if(i!==""&&!i.startsWith("#")){let I=a.match(/^\s*/)?.[0].length??0;if(s!==null&&I<=s)break}let c=i.match(/^\/?([^\s]+)\s*:\s*$/);if(!c)continue;let l=c[1].replace(/^\/+/,""),d=l.lastIndexOf("@");if(d<=0)continue;let b=l.slice(0,d),$=l.slice(d+1);!b||!$||!/^\d+\./.test($)||(e[b]=$);}return e}function pi(){if(process.env.GITHUB_ACTIONS){let[t,e]=(process.env.GITHUB_REPOSITORY||"").split("/");return {provider:"github_actions",repo_owner:t,repo_name:e,commit_sha:process.env.GITHUB_SHA,run_id:process.env.GITHUB_RUN_ID,event_name:process.env.GITHUB_EVENT_NAME,pr_number:process.env.GITHUB_REF?.includes("refs/pull/")?parseInt(process.env.GITHUB_REF.split("/")[2]):void 0}}}function Tn(t){return pe__default.createHash("sha256").update(t).digest("hex")}function fi(t){let e=[".exe",".dll",".so",".dylib",".bin",".png",".jpg",".jpeg",".gif",".pdf",".zip",".tar",".gz",".7z",".woff",".woff2",".ttf",".eot"],n=t.split(".").pop()?.toLowerCase();return n?e.includes("."+n):false}function gi(t){return {ts:"TypeScript",js:"JavaScript",tsx:"TypeScript",jsx:"JavaScript",py:"Python",go:"Go",rs:"Rust",java:"Java",kt:"Kotlin",rb:"Ruby",php:"PHP",cs:"C#",cpp:"C++",c:"C",h:"C",json:"JSON",yaml:"YAML",yml:"YAML",md:"Markdown",html:"HTML",css:"CSS",scss:"SCSS",sql:"SQL",sh:"Shell",mjs:"JavaScript",cjs:"JavaScript",svelte:"Svelte",vue:"Vue"}[t]||"Other"}function mi(t){let e={};for(let n of t){let r=gi(n.extension.toLowerCase());e[r]=(e[r]||0)+1;}return e}function hi(t,e){let a=0,i={critical:0,high:0,medium:0,low:0};e&&(i={critical:e.criticalCount||0,high:e.highCount||0,medium:e.mediumCount||0,low:e.lowCount||0},a=i.critical*25+i.high*15+i.medium*5+i.low*2);let c=Math.max(0,100-a),l="F";return c===100?l="A+":c>=90?l="A":c>=80?l="B":c>=70?l="C":c>=60&&(l="D"),{score:c,grade:l,breakdown:i}}async function yi(t){try{return execSync("git diff --name-only HEAD",{cwd:t,encoding:"utf-8"}).split(`
60
+ `).filter(Boolean)}catch{return []}}async function vi(t,e,n,r=false){let s=[],o=await glob(e,{cwd:t,ignore:n,nodir:true,dot:true,absolute:false});if(r){let i=await yi(t);i.length>0&&(o=o.filter(c=>i.includes(c)));}let a=o.filter(i=>!i.replace(/\\/g,"/").match(/(node_modules|\.next|dist|build|\.git)\//));for(let i of a){let c=statSync(join(t,i));c.isFile()&&s.push({id:pe__default.randomUUID(),path:i,path_hash:Tn(i),depth:i.split(/[\\/]/).length,size_bytes:c.size,estimated_lines:Math.floor(c.size/50),extension:i.split(".").pop()||"",is_binary:fi(i)});}return s.sort((i,c)=>i.path_hash.localeCompare(c.path_hash))}async function ki(t){let e=[];try{let n=join(t,"package.json");if(!existsSync(n))return [];let r=JSON.parse(readFileSync(n,"utf-8")),s={},o=join(t,"pnpm-lock.yaml"),a=join(t,"package-lock.json");if(existsSync(o))s=di(readFileSync(o,"utf8"));else if(existsSync(a)){let c=JSON.parse(readFileSync(a,"utf8"));for(let[l,d]of Object.entries(c.packages||{}))l&&d.version&&(s[l.replace("node_modules/","")]=d.version);}let i=(c,l)=>{for(let[d,b]of Object.entries(c)){let $=s[d]||b.replace(/[\^~]/,""),I=$.match(/^(\d+)\.(\d+)/);e.push({id:pe__default.randomUUID(),name_hash:Tn(d),name:d,version:$,major_version:I?parseInt(I[1]):0,minor_version:I?parseInt(I[2]):0,category:l});}};r.dependencies&&i(r.dependencies,"prod"),r.devDependencies&&i(r.devDependencies,"dev"),r.peerDependencies&&i(r.peerDependencies,"peer");}catch{}return e.sort((n,r)=>n.name_hash.localeCompare(r.name_hash))}async function _i(t,e){let n=await ki(t);return {snapshot_version:li,engine_target_version:ui,project_id:pe__default.randomUUID(),generated_at:new Date().toISOString(),root_path_hash:Tn(t),project_root:resolve(t),metadata:{total_files:e.length,total_dependencies:n.length,total_size_bytes:e.reduce((r,s)=>r+s.size_bytes,0),total_lines:e.reduce((r,s)=>r+(s.estimated_lines||0),0),max_directory_depth:Math.max(...e.map(r=>r.depth),0),language_breakdown:mi(e)},files:e,dependencies:n,ci_metadata:pi()}}async function An(t){let e=t.quiet||t.json,n=t.ci||process.env.CI==="true",r=resolve(t.path),s=basename(r),o=s,a=join(r,"package.json"),i=join(r,"veestack.config.json");if(existsSync(a))try{let d=JSON.parse(readFileSync(a,"utf-8"));d.name&&(o=d.name);}catch{}if(existsSync(i))try{let d=JSON.parse(readFileSync(i,"utf-8"));d.name&&(o=d.name);}catch{}e||(console.log(v.bold.cyan(`
61
+ VeeStack Security Scan`)),console.log(v.gray("\u2500".repeat(40))));await Se();if(!existsSync(i)&&!t.json){if(n)console.log(v.gray(`
62
+ \u26A1 CI mode detected: Using default project name and scan directories`)),await ht({ci:true,skipAuthCheck:true,skipNextSteps:true});else if(!e){console.log(v.cyan(`
63
63
  \u2728 Welcome to VeeStack!`)),console.log(v.gray(`Let's configure your project to start scanning for security issues.
64
- `));let{runInit:d}=await yr({type:"confirm",name:"runInit",message:"Would you like to run 'veestack init' first?",initial:true});d?await ut({skipAuthCheck:true,skipNextSteps:true}):console.log(v.gray(`
65
- Using smart defaults for this scan...`));}}let l=ni({text:"Preparing scan...",spinner:"dots",stream:process.stdout});e||(console.log(`
64
+ `));let{runInit:d}=await wr({type:"confirm",name:"runInit",message:"Would you like to run 'veestack init' first?",initial:true});d?await ht({skipAuthCheck:true,skipNextSteps:true}):console.log(v.gray(`
65
+ Using smart defaults for this scan...`));}}let l=si({text:"Preparing scan...",spinner:"dots",stream:process.stdout});e||(console.log(`
66
66
  `+v.bold.cyan("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501")),console.log(v.bold.white(" Analyzing Project")),console.log(v.bold.cyan(`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
67
- `)),l.start());try{let d=Date.now(),A=existsSync(i)?JSON.parse(readFileSync(i,"utf-8")):{},P=A.scanPatterns||["**/*.{js,jsx,ts,tsx,json,py,go,rs,rb,php,cs,cpp,c,h,mjs,cjs,svelte,vue,html}"],C=A.excludePatterns||["**/node_modules/**","**/.next/**","**/dist/**","**/build/**","**/.git/**","**/coverage/**","**/*.test.ts","**/*.spec.ts"],R=await hi(r,P,C,t.diff);if(R.length===0&&!t.json){e||console.log(v.yellow(`
68
- \u26A0 No source files found to scan.`));return}let $=new si.SingleBar({format:"Scanning |"+v.cyan("{bar}")+"| {percentage}% ({value}/{total} files)",barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0});e||$.start(R.length,0);let V=await Fn(r,R.map(Y=>Y.path));e||($.update(Math.floor(R.length*.5)),l.text="Analyzing security...");let j=gi(R.length,V),pt=`report-${o}-security.json`;if(V.secretsFound&&V.secretsFound.length>0){let Y={project:o,directory:s,timestamp:new Date().toISOString(),score:j.score,grade:j.grade,criticalIssues:V.criticalCount,issues:V.secretsFound};await(await import('fs/promises')).writeFile(pt,JSON.stringify(Y,null,2));}t.json&&(console.log(JSON.stringify({version:ii,timestamp:new Date().toISOString(),score:j.score,grade:j.grade,files:R.length,issues:j.breakdown,project:o,directory:s},null,2)),process.exit(0)),V.criticalCount>0&&(e||($.stop(),l.fail("Security validation failed"),console.log(v.red(`
69
- \u274C ${V.criticalCount} Critical security risks detected.`)),V.secretsFound&&V.secretsFound.length>0&&(console.log(v.gray(`
70
- Issues detail:`)),V.secretsFound.slice(0,5).forEach(Y=>{console.log(v.yellow(` \u2022 ${Y.ruleId}: `)+v.gray(`${Y.filePath}:${Y.line}`));}),V.secretsFound.length>5&&console.log(v.gray(` ... and ${V.secretsFound.length-5} more issues.`))),console.log(v.cyan(`
71
- \u{1F4C4} Detailed report saved to: ${pt}`)),console.log(v.yellow(`
67
+ `)),l.start());try{let d=Date.now(),b=existsSync(i)?JSON.parse(readFileSync(i,"utf-8")):{},$=b.scanPatterns||["**/*.{js,jsx,ts,tsx,json,py,go,rs,rb,php,cs,cpp,c,h,mjs,cjs,svelte,vue,html}"],I=b.excludePatterns||["**/node_modules/**","**/.next/**","**/dist/**","**/build/**","**/.git/**","**/coverage/**","**/*.test.ts","**/*.spec.ts"],C=await vi(r,$,I,t.diff);if(C.length===0&&!t.json){e||console.log(v.yellow(`
68
+ \u26A0 No source files found to scan.`));return}let U=new ii.SingleBar({format:"Scanning |"+v.cyan("{bar}")+"| {percentage}% ({value}/{total} files)",barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0});e||U.start(C.length,0);let M=await Jn(r,C.map(Q=>Q.path));e||(U.update(Math.floor(C.length*.5)),l.text="Analyzing security...");let L=hi(C.length,M),_t=`report-${o}-security.json`;if(M.secretsFound&&M.secretsFound.length>0){let Q={project:o,directory:s,timestamp:new Date().toISOString(),score:L.score,grade:L.grade,criticalIssues:M.criticalCount,issues:M.secretsFound};await(await import('fs/promises')).writeFile(_t,JSON.stringify(Q,null,2));}t.json&&(console.log(JSON.stringify({version:ci,timestamp:new Date().toISOString(),score:L.score,grade:L.grade,files:C.length,issues:L.breakdown,project:o,directory:s},null,2)),process.exit(0)),M.criticalCount>0&&(e||(U.stop(),l.fail("Security validation failed"),console.log(v.red(`
69
+ \u274C ${M.criticalCount} Critical security risks detected.`)),M.secretsFound&&M.secretsFound.length>0&&(console.log(v.gray(`
70
+ Issues detail:`)),M.secretsFound.slice(0,5).forEach(Q=>{console.log(v.yellow(` \u2022 ${Q.ruleId}: `)+v.gray(`${Q.filePath}:${Q.line}`));}),M.secretsFound.length>5&&console.log(v.gray(` ... and ${M.secretsFound.length-5} more issues.`))),console.log(v.cyan(`
71
+ \u{1F4C4} Detailed report saved to: ${_t}`)),console.log(v.yellow(`
72
72
  For your protection, local snapshot generation is blocked.`)),console.log(v.gray(`
73
- \u2139 Recommended actions:`)),console.log(v.gray(" 1. Open the affected file(s) and review the reported security issue.")),console.log(v.gray(" 2. Fix the vulnerability or sensitive data exposure.")),console.log(v.gray(" 3. Run 'veestack scan' again.")),process.exit(1)));let{safe:B}=Bn(R.map(Y=>Y.path)),ie=await vi(r,R.filter(Y=>B.includes(Y.path)));if(e||($.update(R.length),$.stop(),l.succeed(`Analysis prepared in ${((Date.now()-d)/1e3).toFixed(1)}s`)),e)console.log(v.green(`\u2714 Scan completed. Score: ${j.grade}`));else {console.log(v.gray(`
74
- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`)),console.log(v.bold.cyan(" Security Summary")),console.log(v.gray("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")),console.log(v.gray("Project: "),v.white(o)),o!==s&&console.log(v.gray("Directory: "),v.white(s));let Y=j.score>=90?v.green:j.score>=70?v.yellow:v.red;console.log(v.gray("Score: "),Y(`${j.score} Grade: ${j.grade}`)),console.log(v.gray("Issues found: "),v.white(`${j.breakdown.critical+j.breakdown.high+j.breakdown.medium+j.breakdown.low}`)),console.log(v.gray("Dependencies: "),v.white(ie.metadata.total_dependencies)),console.log(v.gray("Files: "),v.white(R.length)),console.log(v.gray(`
73
+ \u2139 Recommended actions:`)),console.log(v.gray(" 1. Open the affected file(s) and review the reported security issue.")),console.log(v.gray(" 2. Fix the vulnerability or sensitive data exposure.")),console.log(v.gray(" 3. Run 'veestack scan' again.")),process.exit(1)));let{safe:z}=Gn(C.map(Q=>Q.path)),ae=await _i(r,C.filter(Q=>z.includes(Q.path)));if(e||(U.update(C.length),U.stop(),l.succeed(`Analysis prepared in ${((Date.now()-d)/1e3).toFixed(1)}s`)),e)console.log(v.green(`\u2714 Scan completed. Score: ${L.grade}`));else {console.log(v.gray(`
74
+ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`)),console.log(v.bold.cyan(" Security Summary")),console.log(v.gray("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")),console.log(v.gray("Project: "),v.white(o)),o!==s&&console.log(v.gray("Directory: "),v.white(s));let Q=L.score>=90?v.green:L.score>=70?v.yellow:v.red;console.log(v.gray("Score: "),Q(`${L.score} Grade: ${L.grade}`)),console.log(v.gray("Issues found: "),v.white(`${L.breakdown.critical+L.breakdown.high+L.breakdown.medium+L.breakdown.low}`)),console.log(v.gray("Dependencies: "),v.white(ae.metadata.total_dependencies)),console.log(v.gray("Files: "),v.white(C.length)),console.log(v.gray(`
75
75
  Next steps:`)),console.log(v.gray(" 1. Upload results to dashboard:")),console.log(v.cyan(" veestack login")),console.log(v.cyan(" veestack upload")),console.log(v.gray(`
76
76
  2. View detailed report:`)),console.log(v.cyan(` ${t.output}`)),console.log(v.gray(`
77
77
  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
78
- `));}await(await import('fs/promises')).writeFile(t.output,JSON.stringify(ie,null,2)),console.log(`
78
+ `));}await(await import('fs/promises')).writeFile(t.output,JSON.stringify(ae,null,2)),console.log(`
79
79
  \u2705 Snapshot saved to ${t.output}`);}catch(d){l.fail("Scan failed"),console.error(v.red(`
80
- \u274C Error:`),d),process.exit(1);}}var wn=process.env.VEESTACK_API_URL||"https://api.veestack.dev",Sr=process.env.VEESTACK_DASHBOARD_URL||"https://www.veestack.com/dashboard",Ei=3e4;async function Sn(t,e={}){let{timeout:n=Ei}=e,r=new AbortController,s=setTimeout(()=>r.abort(),n);try{let o=await fetch(t,{...e,signal:r.signal});return clearTimeout(s),o}catch(o){throw clearTimeout(s),o instanceof Error&&o.name==="AbortError"?new Error(`Request timed out after ${n/1e3}s. Please check your connection.`):o}}async function Ti(){try{let t=await fe("GET","/api/projects"),e=await Sn(`${wn}/api/projects`,{headers:t});return e.ok?(await e.json()).projects||[]:[]}catch{return []}}async function Er(t){try{let e=JSON.stringify({name:t}),n=await fe("POST","/api/projects",e),r=await Sn(`${wn}/api/projects`,{method:"POST",headers:n,body:e});if(r.ok){let s=await r.json();return s.project?.id||s.id||null}return null}catch{return null}}function Yt(t){let e=wi.createInterface({input:process.stdin,output:process.stdout});return new Promise(n=>{e.question(t,r=>{e.close(),n(r);});})}async function xi(){console.log(v.blue(`
80
+ \u274C Error:`),d),process.exit(1);}}var Ai=3e4;async function xn(t,e={}){let{timeout:n=Ai}=e,r=new AbortController,s=setTimeout(()=>r.abort(),n);try{let o=await fetch(t,{...e,signal:r.signal});return clearTimeout(s),o}catch(o){throw clearTimeout(s),o instanceof Error&&o.name==="AbortError"?new Error(`Request timed out after ${n/1e3}s. Please check your connection.`):o}}async function xi(){try{let t=await ge("GET","/api/projects"),e=await xn(`${fe}/api/projects`,{headers:t});return e.ok?(await e.json()).projects||[]:[]}catch{return []}}async function xr(t){try{let e=JSON.stringify({name:t}),n=await ge("POST","/api/projects",e),r=await xn(`${fe}/api/projects`,{method:"POST",headers:n,body:e});if(r.ok){let s=await r.json();return s.project?.id||s.id||null}return null}catch{return null}}function sn(t){let e=Ei.createInterface({input:process.stdin,output:process.stdout});return new Promise(n=>{e.question(t,r=>{e.close(),n(r);});})}async function bi(){console.log(v.blue(`
81
81
  \u{1F4C1} Loading projects...
82
- `));let t=await Ti();if(t.length===0){if(console.log(v.yellow(`No projects found.
83
- `)),(await Yt("Do you want to create a new project? (y/n): ")).toLowerCase()==="y"){let s=await Yt("Enter project name: ");if(s.trim()){let o=await Er(s.trim());if(o)return console.log(v.green(`
82
+ `));let t=await xi();if(t.length===0){if(console.log(v.yellow(`No projects found.
83
+ `)),(await sn("Do you want to create a new project? (y/n): ")).toLowerCase()==="y"){let s=await sn("Enter project name: ");if(s.trim()){let o=await xr(s.trim());if(o)return console.log(v.green(`
84
84
  \u2705 Project "${s}" created successfully!`)),o}}return null}console.log(v.white(`Select a project:
85
85
  `)),console.log(v.gray(`0. [+] Create new project
86
86
  `)),t.forEach((r,s)=>{console.log(v.white(`${s+1}. ${r.name}`)),console.log(v.gray(` ID: ${r.id}`)),console.log(v.gray(` Created: ${new Date(r.created_at).toLocaleDateString()}
87
- `));});let e=await Yt("Enter number (0-"+t.length+"): "),n=parseInt(e,10);if(n===0){let r=await Yt(`
88
- Enter project name: `);if(r.trim()){let s=await Er(r.trim());if(s)return console.log(v.green(`
87
+ `));});let e=await sn("Enter number (0-"+t.length+"): "),n=parseInt(e,10);if(n===0){let r=await sn(`
88
+ Enter project name: `);if(r.trim()){let s=await xr(r.trim());if(s)return console.log(v.green(`
89
89
  \u2705 Project "${r}" created successfully!`)),s}return null}else if(n>0&&n<=t.length){let r=t[n-1];return console.log(v.green(`
90
90
  \u2705 Selected project: "${r.name}"`)),r.id}else return console.log(v.red(`
91
- \u274C Invalid selection`)),null}async function En(t){let e=t.ci||process.env.CI==="true",n=e,r=await Ae();if(!r){if(e){console.log(v.yellow(`
91
+ \u274C Invalid selection`)),null}async function bn(t){let e=t.ci||process.env.CI==="true",n=e,r=await Ne();if(!r){if(e){console.log(v.yellow(`
92
92
  \u26A0 Skipping cloud upload in CI mode because login is not available.`)),console.log(v.gray(`Snapshot saved locally: ${t.file||"snapshot.json"}`));return}console.log(v.yellow(`
93
93
  \u26A0 Oops! You're not logged in.`)),console.log(v.gray(`Run 'veestack login' to upload your snapshot and unlock cloud features.
94
- `)),console.log(v.cyan(" veestack login")),process.exit(1);}let s=await Wt();n||(console.log(v.blue(`
94
+ `)),console.log(v.cyan(" veestack login")),process.exit(1);}let s=await nn();n||(console.log(v.blue(`
95
95
  \u{1F510} Authentication verified`)),r.user&&console.log(v.gray(`User: ${r.user.name}`)),console.log(v.gray(`Subscription tier: ${s==="pro"?"Pro":"Free"}`)),console.log(v.gray("\u2500".repeat(40)+`
96
- `)));let o=ni({text:"Preparing upload...",isSilent:n}).start();try{let a=await import('fs/promises');existsSync(t.file)||(o.fail(`File not found: ${t.file}`),n||console.log(v.yellow(`
97
- Tip: Run "veestack scan" first to generate a snapshot.`)),process.exit(1));let i=await a.readFile(t.file,"utf-8"),c=JSON.parse(i),l=t.projectId||process.env.VEESTACK_PROJECT_ID;if(!l){n&&(o.fail("Project ID is required in CI mode. Please set VEESTACK_PROJECT_ID."),process.exit(1)),o.stop();let ie=await xi();ie||(console.log(v.red(`
98
- \u274C No project selected. Exiting.`)),process.exit(1)),l=ie,o.start("Uploading snapshot...");}o.text="Compressing and uploading snapshot...";let d=gzipSync(JSON.stringify(c)).toString("base64"),A=JSON.stringify({project_id:l,snapshot:d,compressed:!0,encoding:"base64"}),P=await fe("POST","/api/snapshots/upload",A),C=await Sn(`${wn}/api/snapshots/upload`,{method:"POST",headers:P,body:A});if(!C.ok){let ie=await C.json().catch(()=>({}));o.fail("Upload failed"),console.error(v.red(`Error: ${ie.message||ie.error||"Server error"}`)),process.exit(1);}let R=await C.json(),{snapshotId:$,reportId:V,score:j,severity:pt,findings:B}=R;if(o.succeed("Analysis complete"),n)console.log(`\u2714 Upload successful. Report: ${Sr}/reports/${V}?project=${l}`);else {console.log(v.green(`
99
- \u2705 Report generated and saved to VeeStack`)),console.log(v.gray("Project ID: "),v.white(l)),console.log(v.gray("Snapshot ID: "),v.white($)),console.log(v.gray("Report ID: "),v.white(V)),console.log(v.bold(`
100
- \u{1F4CA} Security Score:`),j>=90?v.green(j):j>=70?v.yellow(j):v.red(j)),console.log(v.gray("Severity: "),pt),console.log(v.gray("Findings: "),B);let ie=`${Sr}/reports/${V}?project=${l}`;console.log(v.blue(`
101
- \u{1F517} View your full report at:`)),console.log(v.underline(ie));}}catch(a){o.fail("Upload failed"),console.error(a),process.exit(1);}}var Ai=process.env.VEESTACK_API_URL||"https://api.veestack.dev";async function Tr(t){t.format==="sarif"?await bi(t):console.log(v.red('\u274C Unsupported format. Currently only "sarif" is supported.'));}async function bi(t){await Ae()||(console.error(v.red("\u274C Authentication required. Please login first.")),process.exit(1));let n=t.reportId;n||(console.error(v.red("\u274C Report ID is required for SARIF export.")),process.exit(1)),console.log(v.blue(`
102
- \u{1F4CA} Fetching report ${n} for SARIF export...`));try{let r=await fe("GET",`/api/reports/${n}/sarif`),s=await fetch(`${Ai}/api/reports/${n}/sarif`,{headers:r});if(!s.ok){let c=await s.json().catch(()=>({}));throw new Error(c.message||"Failed to fetch SARIF report")}let o=await s.json(),a=t.output||"veestack-results.sarif";await(await import('fs/promises')).writeFile(a,JSON.stringify(o,null,2)),console.log(v.green(`
96
+ `)));let o=si({text:"Preparing upload...",isSilent:n}).start();try{let a=await import('fs/promises');existsSync(t.file)||(o.fail(`File not found: ${t.file}`),n||console.log(v.yellow(`
97
+ Tip: Run "veestack scan" first to generate a snapshot.`)),process.exit(1));let i=await a.readFile(t.file,"utf-8"),c=JSON.parse(i),l=t.projectId||process.env.VEESTACK_PROJECT_ID;if(!l){n&&(o.fail("Project ID is required in CI mode. Please set VEESTACK_PROJECT_ID."),process.exit(1)),o.stop();let ae=await bi();ae||(console.log(v.red(`
98
+ \u274C No project selected. Exiting.`)),process.exit(1)),l=ae,o.start("Uploading snapshot...");}o.text="Compressing and uploading snapshot...";let d=gzipSync(JSON.stringify(c)).toString("base64"),b=JSON.stringify({project_id:l,snapshot:d,compressed:!0,encoding:"base64"}),$=await ge("POST","/api/snapshots/upload",b),I=await xn(`${fe}/api/snapshots/upload`,{method:"POST",headers:$,body:b});if(!I.ok){let ae=await I.json().catch(()=>({}));o.fail("Upload failed"),console.error(v.red(`Error: ${ae.message||ae.error||"Server error"}`)),process.exit(1);}let C=await I.json(),{snapshotId:U,reportId:M,score:L,severity:_t,findings:z}=C;if(o.succeed("Analysis complete"),n)console.log(`\u2714 Upload successful. Report: ${gt}/dashboard/reports/${M}?project=${l}`);else {console.log(v.green(`
99
+ \u2705 Report generated and saved to VeeStack`)),console.log(v.gray("Project ID: "),v.white(l)),console.log(v.gray("Snapshot ID: "),v.white(U)),console.log(v.gray("Report ID: "),v.white(M)),console.log(v.bold(`
100
+ \u{1F4CA} Security Score:`),L>=90?v.green(L):L>=70?v.yellow(L):v.red(L)),console.log(v.gray("Severity: "),_t),console.log(v.gray("Findings: "),z);let ae=`${gt}/dashboard/reports/${M}?project=${l}`;console.log(v.blue(`
101
+ \u{1F517} View your full report at:`)),console.log(v.underline(ae));}}catch(a){o.fail("Upload failed"),console.error(a),process.exit(1);}}var Ri=process.env.VEESTACK_API_URL||"https://api.veestack.dev";async function br(t){t.format==="sarif"?await Ci(t):console.log(v.red('\u274C Unsupported format. Currently only "sarif" is supported.'));}async function Ci(t){await Ne()||(console.error(v.red("\u274C Authentication required. Please login first.")),process.exit(1));let n=t.reportId;n||(console.error(v.red("\u274C Report ID is required for SARIF export.")),process.exit(1)),console.log(v.blue(`
102
+ \u{1F4CA} Fetching report ${n} for SARIF export...`));try{let r=await ge("GET",`/api/reports/${n}/sarif`),s=await fetch(`${Ri}/api/reports/${n}/sarif`,{headers:r});if(!s.ok){let c=await s.json().catch(()=>({}));throw new Error(c.message||"Failed to fetch SARIF report")}let o=await s.json(),a=t.output||"veestack-results.sarif";await(await import('fs/promises')).writeFile(a,JSON.stringify(o,null,2)),console.log(v.green(`
103
103
  \u2705 SARIF report exported to: ${a}`)),console.log(v.gray("You can now upload this to GitHub Security Tab."));}catch(r){console.error(v.red(`
104
- \u274C Export failed:`),r instanceof Error?r.message:r),process.exit(1);}}var Ni=globalThis,Oi=Ni.CLI_VERSION||"unknown",xr=process.env.SUPABASE_URL||"";process.env.SUPABASE_ANON_KEY||"";var Pi=xr?`${xr}/functions/v1/cli-auth`:null,Di=process.env.VEESTACK_API_URL||"https://api.veestack.dev",ji=Pi||Di,Li=process.env.VEESTACK_WEB_URL||"http://localhost:3000";function $i(){let t=process.platform,e=ct.hostname(),n=Oi,r=e||de__default.randomBytes(8).toString("hex"),s=de__default.createHash("sha256").update(`${r}:${t}:${n}`).digest("hex"),o=de__default.randomBytes(12).toString("hex"),a=`${e||"Unknown"} (${t==="win32"?"Windows":t==="darwin"?"macOS":"Linux"})`;return {id:o,name:a,fingerprint:s,os:t,version:n}}function Vi(){return new Promise(t=>{console.log(v.gray(`
104
+ \u274C Export failed:`),r instanceof Error?r.message:r),process.exit(1);}}var Oi=globalThis,Di=Oi.CLI_VERSION||"unknown";function ji(){let t=process.platform,e=pt.hostname(),n=Di,r=e||pe__default.randomBytes(8).toString("hex"),s=pe__default.createHash("sha256").update(`${r}:${t}:${n}`).digest("hex"),o=pe__default.randomBytes(12).toString("hex"),a=`${e||"Unknown"} (${t==="win32"?"Windows":t==="darwin"?"macOS":"Linux"})`;return {id:o,name:a,fingerprint:s,os:t,version:n}}function $i(){return new Promise(t=>{console.log(v.gray(`
105
105
  \u{1F4A1} Tip: Right-click to paste, then press Enter
106
- `));let e=wi.createInterface({input:process.stdin,output:process.stdout});e.question(v.cyan("Enter the code from your browser: "),n=>{e.close(),t(n.trim().toUpperCase());});})}async function Mi(t,e){try{let n=await fetch(`${ji}/api/cli/verify-code`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user_code:t,device_info:e})});if(n.status===202)return null;if(!n.ok){let r=await n.json().catch(()=>({}));throw console.log(v.red(`
106
+ `));let e=Ei.createInterface({input:process.stdin,output:process.stdout});e.question(v.cyan("Enter the code from your browser: "),n=>{e.close(),t(n.trim().toUpperCase());});})}async function Li(t,e){try{console.log(v.gray(`[DEBUG] Attempting fetch to: ${Ie.verifyCode}`));let n=await fetch(Ie.verifyCode,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user_code:t,device_info:e})});if(n.status===202)return null;if(!n.ok){let r=await n.json().catch(()=>({}));throw console.log(v.red(`
107
107
  \u274C Server error: ${r.error||n.statusText}`)),new Error(r.error||`Failed to verify code: ${n.statusText}`)}return await n.json()}catch(n){throw console.log(v.red(`
108
- \u274C Connection error: ${n instanceof Error?n.message:"Unknown error"}`)),n}}async function At(){console.log(v.bold.cyan(`
108
+ \u274C Connection error: ${n instanceof Error?n.message:"Unknown error"}`)),n}}async function Ot(){console.log(v.bold.cyan(`
109
109
  \u{1F510} Login to VeeStack
110
- `));let t=$i(),e=`${Li}/cli-auth`;console.log(v.yellow(`Opening browser to authenticate...
110
+ `));let t=ji(),e=`${gt}/cli-auth`;console.log(v.yellow(`Opening browser to authenticate...
111
111
  `)),console.log(v.gray(`Please copy the code from your browser and paste it here.
112
- `)),await Ci(e);let n=await Vi();(!n||n.length<6)&&(console.log(v.red(`
113
- \u274C Invalid code. Please try again.`)),process.exit(1));let r=ni({text:"Verifying code...",spinner:"dots",stream:process.stdout});r.start();try{let s=null,o=0,a=300;for(;!s&&o<a;){await new Promise(c=>setTimeout(c,2e3));try{s=await Mi(n,t);}catch(c){c instanceof Error&&c.message.includes("Invalid or expired")&&(r.fail("Verification failed"),console.log(v.red(`
112
+ `)),await Ni(e);let n=await $i();(!n||n.length<6)&&(console.log(v.red(`
113
+ \u274C Invalid code. Please try again.`)),process.exit(1));let r=si({text:"Verifying code...",spinner:"dots",stream:process.stdout});r.start();try{let s=null,o=0,a=300;for(;!s&&o<a;){await new Promise(c=>setTimeout(c,2e3));try{s=await Li(n,t);}catch(c){c instanceof Error&&c.message.includes("Invalid or expired")&&(r.fail("Verification failed"),console.log(v.red(`
114
114
  \u274C Invalid or expired code. Please try again.`)),process.exit(1)),c instanceof Error&&console.log(v.yellow(`
115
115
  \u26A0\uFE0F API error: ${c.message}`));}o++,s||(r.text=`Waiting for browser authorization... (${o*2}s)`);}s||(r.fail("Authentication timeout"),console.log(v.red(`
116
- \u274C Authentication timed out after 10 minutes.`)),console.log(v.yellow("Please try again with: veestack login")),process.exit(1)),r.succeed("Authentication successful");let i={token:s.access_token,tokenType:s.token_type,refreshToken:s.refresh_token,tokenExpiresAt:new Date(Date.now()+s.expires_in*1e3).toISOString(),device:{id:t.id,name:t.name,fingerprint:t.fingerprint},user:{id:s.user.id,email:s.user.email,name:s.user.name,provider:s.user.provider},subscription:s.subscription||{tier:"free",isActive:!0},lastLoginAt:new Date().toISOString()};try{await Tt(i),console.log(v.green(`
116
+ \u274C Authentication timed out after 10 minutes.`)),console.log(v.yellow("Please try again with: veestack login")),process.exit(1)),r.succeed("Authentication successful");let i={token:s.access_token,tokenType:s.token_type,refreshToken:s.refresh_token,tokenExpiresAt:new Date(Date.now()+s.expires_in*1e3).toISOString(),device:{id:t.id,name:t.name,fingerprint:t.fingerprint},user:{id:s.user.id,email:s.user.email,name:s.user.name,provider:s.user.provider},subscription:s.subscription||{tier:"free",isActive:!0},lastLoginAt:new Date().toISOString()};try{await Nt(i),console.log(v.green(`
117
117
  \u2714 Authentication successful
118
118
  `)),console.log(v.gray("Account: ")+v.white(i.user.name)),console.log(v.gray("Email: ")+v.white(i.user.email)),console.log(v.gray("Device: ")+v.white(i.device.name)),console.log(v.gray("Subscription: ")+(i.subscription?.tier==="pro"?v.cyan("Pro"):v.blue("Free"))),console.log(v.gray(`
119
119
  Token saved securely to OS Keychain
120
- `)),hr({token:i.token,tokenType:i.tokenType,refreshToken:i.refreshToken,tokenExpiresAt:i.tokenExpiresAt,device:i.device,user:i.user,subscription:i.subscription,lastLoginAt:i.lastLoginAt});}catch(c){r.fail("Failed to save authentication"),console.error(v.red(`
120
+ `)),_r({token:i.token,tokenType:i.tokenType,refreshToken:i.refreshToken,tokenExpiresAt:i.tokenExpiresAt,device:i.device,user:i.user,subscription:i.subscription,lastLoginAt:i.lastLoginAt});}catch(c){r.fail("Failed to save authentication"),console.error(v.red(`
121
121
  \u274C Could not securely store tokens:`),c),process.exit(1);}}catch(s){r.fail("Authentication failed"),console.error(v.red(`
122
- \u274C Error:`),s instanceof Error?s.message:s),process.exit(1);}}var Ui=process.env.VEESTACK_API_URL||"https://api.veestack.dev";async function br(){try{let t=await X();if(!t){console.log(v.yellow("\u26A0\uFE0F Not logged in"));return}if(console.log(v.bold.cyan(`
122
+ \u274C Error:`),s instanceof Error?s.message:s),process.exit(1);}}async function Cr(){try{let t=await K();if(!t){console.log(v.yellow("\u26A0\uFE0F Not logged in"));return}if(console.log(v.bold.cyan(`
123
123
  \u{1F6AA} Logout from VeeStack
124
- `)),t.token||t.apiKey)try{let e=t.token||t.apiKey;await fetch(`${Ui}/api/cli/logout`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({device_id:t.device?.id})});}catch{}await Jt()&&await He();try{let{existsSync:e,unlinkSync:n}=await import('fs'),{join:r}=await import('path'),{homedir:s}=await import('os'),o=r(s(),".veestack"),a=r(o,"config.json");e(a)&&n(a);}catch{}t.user?console.log(v.green(`\u2714 Logged out ${t.user.name}`)):console.log(v.green("\u2714 Logged out")),console.log(v.gray(`
124
+ `)),t.token||t.apiKey)try{let e=t.token||t.apiKey;await fetch(Ie.logout,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({device_id:t.device?.id})});}catch{}await ft()&&await We();try{let{existsSync:e,unlinkSync:n}=await import('fs'),{join:r}=await import('path'),{homedir:s}=await import('os'),o=r(s(),".veestack"),a=r(o,"config.json");e(a)&&n(a);}catch{}t.user?console.log(v.green(`\u2714 Logged out ${t.user.name}`)):console.log(v.green("\u2714 Logged out")),console.log(v.gray(`
125
125
  \u{1F510} All local tokens securely deleted`)),console.log(v.gray("See you soon! \u{1F44B}")),console.log(v.gray(`Run "veestack login" to authenticate again.
126
- `));}catch(t){ve.error("\u274C Error during logout:",gn(t)),process.exit(1);}}async function Rr(){try{let t=await Ae();t||(console.log(v.yellow("\u26A0\uFE0F Not authenticated")),console.log(v.gray(`
126
+ `));}catch(t){_e.error("\u274C Error during logout:",_n(t)),process.exit(1);}}async function Ir(){try{let t=await Ne();t||(console.log(v.yellow("\u26A0\uFE0F Not authenticated")),console.log(v.gray(`
127
127
  Please login first:`)),console.log(v.cyan(" veestack login")),process.exit(1)),console.log(v.bold.cyan(`
128
128
  \u{1F464} VeeStack Account
129
- `)),t.user&&(console.log(v.gray("User: ")+v.white(t.user.name)),console.log(v.gray("Email: ")+v.white(t.user.email)),console.log(v.gray("Provider: ")+v.cyan(t.user.provider))),t.device&&(console.log(v.gray("Device: ")+v.white(t.device.name)),console.log(v.gray("Device ID: ")+v.gray(t.device.id.substring(0,8)+"...")));let e=t.subscription?.tier||"free";if(console.log(v.gray("Subscription: ")+(e==="pro"?v.cyan("Pro"):v.blue("Free"))),t.tokenExpiresAt){let r=yn(t)?v.red("Expired (will refresh)"):v.green("Valid");console.log(v.gray("Token Status: ")+r),console.log(v.gray("Expires: ")+v.yellow(new Date(t.tokenExpiresAt).toLocaleString()));}t.lastLoginAt&&console.log(v.gray("Last Login: ")+v.gray(new Date(t.lastLoginAt).toLocaleString())),console.log();}catch(t){console.error(v.red("\u274C Error:"),t instanceof Error?t.message:t),process.exit(1);}}function Ir(){return join(homedir(),".veestack","accounts")}function Fi(){try{let t=Ir();if(!se.existsSync(t))return [];let e=[],n=se.readdirSync(t);for(let r of n)if(r.endsWith(".json")){let s=se.readFileSync(join(t,r),"utf-8"),o=JSON.parse(s);o.user&&e.push({id:o.user.id,name:o.user.name,email:o.user.email,provider:o.user.provider,config:o});}return e}catch{return []}}function Bi(t){try{let e=Ir();if(se.mkdirSync(e,{recursive:!0}),t.user){let n=join(e,`${t.user.id}.json`);se.writeFileSync(n,JSON.stringify(t,null,2),{mode:384});}}catch{}}async function Nr(){let t=await X(),e=Fi();console.log(v.bold.cyan(`
129
+ `)),t.user&&(console.log(v.gray("User: ")+v.white(t.user.name)),console.log(v.gray("Email: ")+v.white(t.user.email)),console.log(v.gray("Provider: ")+v.cyan(t.user.provider))),t.device&&(console.log(v.gray("Device: ")+v.white(t.device.name)),console.log(v.gray("Device ID: ")+v.gray(t.device.id.substring(0,8)+"...")));let e=t.subscription?.tier||"free";if(console.log(v.gray("Subscription: ")+(e==="pro"?v.cyan("Pro"):v.blue("Free"))),t.tokenExpiresAt){let r=Sn(t)?v.red("Expired (will refresh)"):v.green("Valid");console.log(v.gray("Token Status: ")+r),console.log(v.gray("Expires: ")+v.yellow(new Date(t.tokenExpiresAt).toLocaleString()));}t.lastLoginAt&&console.log(v.gray("Last Login: ")+v.gray(new Date(t.lastLoginAt).toLocaleString())),console.log();}catch(t){console.error(v.red("\u274C Error:"),t instanceof Error?t.message:t),process.exit(1);}}function Pr(){return join(homedir(),".veestack","accounts")}function Vi(){try{let t=Pr();if(!oe.existsSync(t))return [];let e=[],n=oe.readdirSync(t);for(let r of n)if(r.endsWith(".json")){let s=oe.readFileSync(join(t,r),"utf-8"),o=JSON.parse(s);o.user&&e.push({id:o.user.id,name:o.user.name,email:o.user.email,provider:o.user.provider,config:o});}return e}catch{return []}}function Ui(t){try{let e=Pr();if(oe.mkdirSync(e,{recursive:!0}),t.user){let n=join(e,`${t.user.id}.json`);oe.writeFileSync(n,JSON.stringify(t,null,2),{mode:384});}}catch{}}async function Or(){let t=await K(),e=Vi();console.log(v.bold.cyan(`
130
130
  \u{1F464} Switch Account
131
131
  `)),t?.user&&(console.log(v.gray("Currently logged in as:")),console.log(v.white(` ${t.user.name} (${t.user.email})`)),console.log(v.gray(` Provider: ${t.user.provider}`)),console.log());let n=e.filter(i=>i.id!==t?.user?.id);if(n.length===0){console.log(v.yellow("No other saved accounts found.")),console.log(v.gray(`
132
132
  To add a new account:`)),console.log(v.cyan(" veestack login")),console.log();return}console.log(v.gray("Available accounts:")),n.forEach((i,c)=>{console.log(v.white(`
133
133
  ${c+1}) ${i.name}`)),console.log(v.gray(` ${i.email}`)),console.log(v.gray(` Provider: ${i.provider}`));}),console.log(v.gray(`
134
- 0) Add new account`)),console.log();let s=(await import('readline')).createInterface({input:process.stdin,output:process.stdout}),o=await new Promise(i=>{s.question(v.white("Select account (number): "),c=>{s.close(),i(c);});}),a=parseInt(o,10);if(a===0){await At();return}if(a>0&&a<=n.length){let i=n[a-1];t&&Bi(t);let c=join(homedir(),".veestack"),l=join(c,"config.json");se.mkdirSync(c,{recursive:true}),se.writeFileSync(l,JSON.stringify(i.config,null,2),{mode:384}),console.log(v.green(`
134
+ 0) Add new account`)),console.log();let s=(await import('readline')).createInterface({input:process.stdin,output:process.stdout}),o=await new Promise(i=>{s.question(v.white("Select account (number): "),c=>{s.close(),i(c);});}),a=parseInt(o,10);if(a===0){await Ot();return}if(a>0&&a<=n.length){let i=n[a-1];t&&Ui(t);let c=join(homedir(),".veestack"),l=join(c,"config.json");oe.mkdirSync(c,{recursive:true}),oe.writeFileSync(l,JSON.stringify(i.config,null,2),{mode:384}),console.log(v.green(`
135
135
  \u2714 Switched to ${i.name}`)),console.log(v.gray(` ${i.email}`)),console.log();}else console.log(v.red(`
136
- \u274C Invalid selection`)),process.exit(1);}function zi(){let t=join(process.cwd(),"veestack.config.json");if(!existsSync(t))return null;try{return JSON.parse(readFileSync(t,"utf-8"))}catch{return null}}function Hi(){let t=join(process.env.HOME||process.env.USERPROFILE||"",".veestack","last-scan.json");if(existsSync(t))try{return JSON.parse(readFileSync(t,"utf-8"))}catch{return null}return null}function Ji(t){let e=new Date(t),r=Math.floor((new Date().getTime()-e.getTime())/1e3);if(r<60)return `${r} seconds ago`;let s=Math.floor(r/60);if(s<60)return `${s} minutes ago`;let o=Math.floor(s/60);return o<24?`${o} hours ago`:e.toLocaleDateString()}async function xn(){console.log(v.bold.cyan(`
136
+ \u274C Invalid selection`)),process.exit(1);}function Mi(){let t=join(process.cwd(),"veestack.config.json");if(!existsSync(t))return null;try{return JSON.parse(readFileSync(t,"utf-8"))}catch{return null}}function Bi(){let t=join(process.env.HOME||process.env.USERPROFILE||"",".veestack","last-scan.json");if(existsSync(t))try{return JSON.parse(readFileSync(t,"utf-8"))}catch{return null}return null}function Fi(t){let e=new Date(t),r=Math.floor((new Date().getTime()-e.getTime())/1e3);if(r<60)return `${r} seconds ago`;let s=Math.floor(r/60);if(s<60)return `${s} minutes ago`;let o=Math.floor(s/60);return o<24?`${o} hours ago`:e.toLocaleDateString()}async function Cn(){console.log(v.bold.cyan(`
137
137
  \u{1F4CA} VeeStack Status
138
- `)),console.log(v.gray("\u2500".repeat(40)));let t=await Ze(),e=await Wt(),n=await mr(),r=zi(),s=Hi();if(console.log(v.gray(`
139
- CLI Version: ${v.white(ee)}`)),console.log(v.bold(`
138
+ `)),console.log(v.gray("\u2500".repeat(40)));let t=await Se(),e=await nn(),n=await kr(),r=Mi(),s=Bi();if(console.log(v.gray(`
139
+ CLI Version: ${v.white(te)}`)),console.log(v.bold(`
140
140
  User`)),t?(console.log(v.green(" \u2714 Authenticated")),console.log(e==="pro"?v.cyan(" \u{1F48E} Pro plan"):v.blue(" \u{1F4E6} Free plan")),n||console.log(v.red(" \u26A0 Subscription expired"))):(console.log(v.yellow(`
141
141
  \u26A0\uFE0F You are not logged in`)),console.log(v.gray(`
142
142
  Login to enable:`)),console.log(v.gray(" \u2022 Cloud reports")),console.log(v.gray(" \u2022 Team dashboard")),console.log(v.gray(` \u2022 Historical scans
143
143
  `)),console.log(v.gray("Run:")),console.log(v.cyan(" veestack login"))),console.log(v.bold(`
144
144
  Project`)),r?(console.log(v.green(` \u2714 ${r.name||"Unnamed project"}`)),r.framework&&console.log(v.gray(` Framework: ${r.framework}`)),r.projectId?console.log(v.gray(" Linked: Yes")):console.log(v.gray(" Linked: No"))):(console.log(v.yellow(" \u26A0 No project initialized")),console.log(v.gray(" Run: veestack init"))),console.log(v.bold(`
145
- Scan Status`)),s){console.log(v.gray(` Last scan: ${Ji(s.timestamp)}`));let o=s.grade.startsWith("A")?v.green:s.grade==="B"?v.blue:v.yellow;console.log(v.gray(` Score: ${o.bold(s.grade)} (${s.score}/100)`)),console.log(v.gray(` Issues: ${s.issues>0?v.red(s.issues):v.green(0)}`));}else console.log(v.gray(" Last scan: Never")),console.log(v.gray(" Issues: -"));console.log(v.gray(`
146
- `+"\u2500".repeat(40)));}var jr=process.env.VEESTACK_DASHBOARD_URL||"https://www.veestack.com/dashboard";function qi(){let t=join(process.cwd(),"veestack.config.json");if(existsSync(t))try{return JSON.parse(readFileSync(t,"utf-8")).projectId||null}catch{return null}return null}async function Lr(){let t=qi(),e=t?`${jr}/projects/${t}`:jr;console.log(v.cyan(`
147
- Opening ${e}...`));try{await Ci(e),console.log(v.green(`\u2714 Dashboard opened in your browser
145
+ Scan Status`)),s){console.log(v.gray(` Last scan: ${Fi(s.timestamp)}`));let o=s.grade.startsWith("A")?v.green:s.grade==="B"?v.blue:v.yellow;console.log(v.gray(` Score: ${o.bold(s.grade)} (${s.score}/100)`)),console.log(v.gray(` Issues: ${s.issues>0?v.red(s.issues):v.green(0)}`));}else console.log(v.gray(" Last scan: Never")),console.log(v.gray(" Issues: -"));console.log(v.gray(`
146
+ `+"\u2500".repeat(40)));}var Lr=process.env.VEESTACK_DASHBOARD_URL||"https://www.veestack.com/dashboard";function Zi(){let t=join(process.cwd(),"veestack.config.json");if(existsSync(t))try{return JSON.parse(readFileSync(t,"utf-8")).projectId||null}catch{return null}return null}async function Vr(){let t=Zi(),e=t?`${Lr}/projects/${t}`:Lr;console.log(v.cyan(`
147
+ Opening ${e}...`));try{await Ni(e),console.log(v.green(`\u2714 Dashboard opened in your browser
148
148
  `));}catch{console.log(v.red(`
149
149
  \u274C Could not open browser automatically.`)),console.log(v.gray(`Please visit: ${v.white(e)}
150
- `));}}var bn=globalThis,Xi=process.env.VEESTACK_API_URL||"https://api.veestack.dev";async function Qi(){let t=process.version,e=parseInt(t.slice(1).split(".")[0]);return e>=18?{name:"Node.js Version",status:"ok",message:`${t} (>= 18)`}:e>=16?{name:"Node.js Version",status:"warning",message:`${t} (>= 16, but 18+ recommended)`}:{name:"Node.js Version",status:"error",message:`${t} (>= 18 required)`,details:"Please upgrade Node.js: https://nodejs.org"}}async function ea(){try{let t=dirname(fileURLToPath(import.meta.url)),e=join(t,"version.json");if(!existsSync(e))return null;let n=readFileSync(e,"utf-8");return JSON.parse(n)}catch{return null}}async function ta(){let t=bn.CLI_VERSION;try{let e=await fetch("https://registry.npmjs.org/veestack-tools/latest",{signal:AbortSignal.timeout(3e3)});if(e.ok){let r=(await e.json()).version;return t===r?{name:"CLI Version",status:"ok",message:`v${t} (latest)`}:{name:"CLI Version",status:"warning",message:`v${t} (latest: v${r})`,details:"Upgrade: npm install -g veestack-tools"}}}catch{}return {name:"CLI Version",status:"ok",message:`v${t}`}}async function na(){try{let t=dirname(fileURLToPath(import.meta.url)),e=join(t,"version.json");if(!existsSync(e))return {name:"CLI Build",status:"ok",message:"Metadata not found"};let n=readFileSync(e,"utf-8"),r=JSON.parse(n),s=r.commit||"unknown",o=r.buildTime||"unknown";return {name:"CLI Build",status:"ok",message:s,details:o}}catch{return {name:"CLI Build",status:"warning",message:"Unable to read metadata"}}}async function ra(){try{let t=await X();return t?{name:"Authentication",status:"ok",message:t.user?.email||"Authenticated via API Key"}:{name:"Authentication",status:"warning",message:"Not authenticated",details:"Run: veestack login"}}catch{return {name:"Authentication",status:"error",message:"Auth system error",details:"Try: veestack logout && veestack login"}}}async function sa(){if(!await Ze())return {name:"API Connectivity",status:"ok",message:"Skipped (not authenticated)",details:"Login to enable API checks"};try{let e=await fe(),n=await fetch(`${Xi}/v1/health`,{method:"GET",headers:e,signal:AbortSignal.timeout(5e3)});return n.ok?{name:"API Connectivity",status:"ok",message:"Reachable"}:{name:"API Connectivity",status:"warning",message:`HTTP ${n.status}`}}catch{return {name:"API Connectivity",status:"warning",message:"Unreachable",details:`Check:
150
+ `));}}var Nn=globalThis,Wi=process.env.VEESTACK_API_URL||"https://api.veestack.dev";async function qi(){let t=process.version,e=parseInt(t.slice(1).split(".")[0]);return e>=18?{name:"Node.js Version",status:"ok",message:`${t} (>= 18)`}:e>=16?{name:"Node.js Version",status:"warning",message:`${t} (>= 16, but 18+ recommended)`}:{name:"Node.js Version",status:"error",message:`${t} (>= 18 required)`,details:"Please upgrade Node.js: https://nodejs.org"}}async function Yi(){try{let t=dirname(fileURLToPath(import.meta.url)),e=join(t,"version.json");if(!existsSync(e))return null;let n=readFileSync(e,"utf-8");return JSON.parse(n)}catch{return null}}async function Xi(){let t=Nn.CLI_VERSION;try{let e=await fetch("https://registry.npmjs.org/veestack-tools/latest",{signal:AbortSignal.timeout(3e3)});if(e.ok){let r=(await e.json()).version;return t===r?{name:"CLI Version",status:"ok",message:`v${t} (latest)`}:{name:"CLI Version",status:"warning",message:`v${t} (latest: v${r})`,details:"Upgrade: npm install -g veestack-tools"}}}catch{}return {name:"CLI Version",status:"ok",message:`v${t}`}}async function Qi(){try{let t=dirname(fileURLToPath(import.meta.url)),e=join(t,"version.json");if(!existsSync(e))return {name:"CLI Build",status:"ok",message:"Metadata not found"};let n=readFileSync(e,"utf-8"),r=JSON.parse(n),s=r.commit||"unknown",o=r.buildTime||"unknown";return {name:"CLI Build",status:"ok",message:s,details:o}}catch{return {name:"CLI Build",status:"warning",message:"Unable to read metadata"}}}async function ea(){try{let t=await K();return t?{name:"Authentication",status:"ok",message:t.user?.email||"Authenticated via API Key"}:{name:"Authentication",status:"warning",message:"Not authenticated",details:"Run: veestack login"}}catch{return {name:"Authentication",status:"error",message:"Auth system error",details:"Try: veestack logout && veestack login"}}}async function ta(){if(!await Se())return {name:"API Connectivity",status:"ok",message:"Skipped (not authenticated)",details:"Login to enable API checks"};try{let e=await ge(),n=await fetch(`${Wi}/v1/health`,{method:"GET",headers:e,signal:AbortSignal.timeout(5e3)});return n.ok?{name:"API Connectivity",status:"ok",message:"Reachable"}:{name:"API Connectivity",status:"warning",message:`HTTP ${n.status}`}}catch{return {name:"API Connectivity",status:"warning",message:"Unreachable",details:`Check:
151
151
  \u2022 Internet connection
152
- \u2022 API endpoint configuration`}}}async function oa(){let t=process.cwd(),e=join(t,"veestack.config.json"),n=join(t,"package.json");if(existsSync(e))try{return {name:"Project Config",status:"ok",message:`Found: ${JSON.parse(readFileSync(e,"utf-8")).projectId||"Unlinked project"}`}}catch{return {name:"Project Config",status:"warning",message:"Invalid veestack.config.json",details:"Check JSON syntax"}}return existsSync(n)?{name:"Project Config",status:"warning",message:"Not initialized",details:"Run: veestack init"}:{name:"Project Config",status:"warning",message:"No project found",details:"Navigate to a project directory"}}async function ia(){let{isOfficial:t,packageName:e}=Nt();return t?{name:"Package Security",status:"ok",message:"Official package verified",details:e}:{name:"Package Security",status:"error",message:"Unofficial package detected!",details:`Expected: veestack-tools, Found: ${e}`}}async function aa(){let t=await cr();return t.keychainAvailable&&t.keychainHasTokens?{name:"Token Storage",status:"ok",message:"OS Keychain (secure)"}:t.fileExists?{name:"Token Storage",status:"warning",message:`File-based (${t.encryptionVersion>=2?"AES-256-GCM":"Encrypted"})`,details:"Install keytar for OS Keychain: npm install -g keytar"}:{name:"Token Storage",status:"ok",message:"No tokens stored"}}async function ca(){try{return {name:"Git",status:"ok",message:execSync("git --version",{encoding:"utf-8"}).trim().replace("git version ","")}}catch{return {name:"Git",status:"warning",message:"Not installed",details:"Some features may not work"}}}async function la(){try{return {name:"Disk Space",status:"ok",message:"Sufficient"}}catch{return {name:"Disk Space",status:"warning",message:"Unable to check"}}}function Ct(t){let e={ok:v.green("\u2714"),warning:v.yellow("\u26A0"),error:v.red("\u2718")},n={ok:v.green,warning:v.yellow,error:v.red};console.log(` ${e[t.status]} ${v.bold(t.name)}: ${n[t.status](t.message)}`),t.details&&console.log(` ${v.gray(t.details)}`);}async function Rn(){console.log(v.bold.cyan(`
152
+ \u2022 API endpoint configuration`}}}async function na(){let t=process.cwd(),e=join(t,"veestack.config.json"),n=join(t,"package.json");if(existsSync(e))try{return {name:"Project Config",status:"ok",message:`Found: ${JSON.parse(readFileSync(e,"utf-8")).projectId||"Unlinked project"}`}}catch{return {name:"Project Config",status:"warning",message:"Invalid veestack.config.json",details:"Check JSON syntax"}}return existsSync(n)?{name:"Project Config",status:"warning",message:"Not initialized",details:"Run: veestack init"}:{name:"Project Config",status:"warning",message:"No project found",details:"Navigate to a project directory"}}async function ra(){let{isOfficial:t,packageName:e}=Vt();return t?{name:"Package Security",status:"ok",message:"Official package verified",details:e}:{name:"Package Security",status:"error",message:"Unofficial package detected!",details:`Expected: veestack-tools, Found: ${e}`}}async function sa(){let t=await pr();return t.keychainAvailable&&t.keychainHasTokens?{name:"Token Storage",status:"ok",message:"OS Keychain (secure)"}:t.fileExists?{name:"Token Storage",status:"warning",message:`File-based (${t.encryptionVersion>=2?"AES-256-GCM":"Encrypted"})`,details:"Install keytar for OS Keychain: npm install -g keytar"}:{name:"Token Storage",status:"ok",message:"No tokens stored"}}async function oa(){try{return {name:"Git",status:"ok",message:execSync("git --version",{encoding:"utf-8"}).trim().replace("git version ","")}}catch{return {name:"Git",status:"warning",message:"Not installed",details:"Some features may not work"}}}async function ia(){try{return {name:"Disk Space",status:"ok",message:"Sufficient"}}catch{return {name:"Disk Space",status:"warning",message:"Unable to check"}}}function $t(t){let e={ok:v.green("\u2714"),warning:v.yellow("\u26A0"),error:v.red("\u2718")},n={ok:v.green,warning:v.yellow,error:v.red};console.log(` ${e[t.status]} ${v.bold(t.name)}: ${n[t.status](t.message)}`),t.details&&console.log(` ${v.gray(t.details)}`);}async function Pn(){console.log(v.bold.cyan(`
153
153
  \u{1F50D} VeeStack Doctor
154
- `));let t=await ea(),e=t?.name||"VeeStack CLI",n=t?.version||bn.CLI_VERSION||"unknown",r=t?.commit?t.commit.slice(0,7):void 0,s=t?.buildTime?t.buildTime.slice(0,10):void 0;console.log(v.bold(e)),console.log(`Version: ${n}`),r&&console.log(`Commit: ${r}`),s&&console.log(`Built: ${s}`),console.log(""),console.log(v.bold("Environment"));let o=await Promise.all([Qi(),ta(),na(),ca(),la()]);o.forEach(Ct),console.log(v.bold(`
155
- Project`));let a=await Promise.all([oa()]);a.forEach(Ct),console.log(v.bold(`
156
- Authentication`));let i=await Promise.all([ra(),aa()]);i.forEach(Ct),console.log(v.bold(`
157
- Connectivity`));let c=await Promise.all([sa()]);c.forEach(Ct),console.log(v.bold(`
158
- Security`));let l=await Promise.all([ia()]);l.forEach(Ct);let d=[...o,...a,...i,...c,...l];d.filter(B=>B.status==="ok").length;let P=d.filter(B=>B.status==="warning").length,C=d.filter(B=>B.status==="error").length;console.log(""),console.log(C===0&&P===0?v.green.bold("\u2728 All systems operational!"):C===0?v.yellow.bold(`\u26A0 ${P} issue(s) detected`):v.red.bold(`\u2718 ${C} error(s) found`)),console.log("");let R=0;i.find(B=>B.name==="Authentication")?.status!=="ok"&&(R++,console.log(v.bold(`${R}. Authentication`)),console.log(v.gray(" Run:")),console.log(v.cyan(` veestack login
159
- `)));let V=i.find(B=>B.name==="Token Storage");V?.status==="warning"&&V.message.includes("File-based")&&(R++,console.log(v.bold(`${R}. Secure token storage`)),console.log(v.gray(" Install OS keychain support:")),console.log(v.cyan(` npm install -g keytar
160
- `))),c.find(B=>B.name==="API Connectivity")?.status==="warning"&&await Ze()&&(R++,console.log(v.bold(`${R}. API connectivity`)),console.log(v.gray(" Check your internet connection")),console.log(v.gray(` or verify API endpoint
161
- `))),a.find(B=>B.name==="Project Config")?.status==="warning"&&(R++,console.log(v.bold(`${R}. Project initialization`)),console.log(v.gray(" Run:")),console.log(v.cyan(` veestack init
162
- `))),process.exit(C>0?1:0);}var ha=globalThis;function ya(){try{let t=dirname(fileURLToPath(import.meta.url)),e=join(t,"version.json");if(!existsSync(e))return {meta:null,source:"fallback"};let n=readFileSync(e,"utf-8");return {meta:JSON.parse(n),source:"dist/version.json"}}catch{return {meta:null,source:"fallback"}}}async function Mr(){let{meta:t,source:e}=ya(),n=t?.name||"VeeStack CLI",r=t?.version||ha.CLI_VERSION||"unknown",s=t?.commit?t.commit.slice(0,7):void 0,o=t?.commit,a=t?.buildTime?t.buildTime.slice(0,10):void 0,i=t?.node,c=process.argv.includes("--json"),l=process.argv.includes("--debug")||process.env.VEESTACK_DEBUG==="1";if(c){console.log(JSON.stringify({name:n,version:r,commit:o,built:a,node:i}));return}console.log(v.bold(n)),console.log(`v${r}`),s&&console.log(`commit ${s}`),a&&console.log(`built ${a}`),l&&console.log(`metadata ${e}`);}var va=globalThis,Ur=va.AUDIT_VERSION||"unknown",In=class{results=[];fullMode;configDir;constructor(e=false){this.fullMode=e,this.configDir=Ye.join(ct.homedir(),".veestack");}async run(){return console.log(v.blue.bold(`
154
+ `));let t=await Yi(),e=t?.name||"VeeStack CLI",n=t?.version||Nn.CLI_VERSION||"unknown",r=t?.commit?t.commit.slice(0,7):void 0,s=t?.buildTime?t.buildTime.slice(0,10):void 0;console.log(v.bold(e)),console.log(`Version: ${n}`),r&&console.log(`Commit: ${r}`),s&&console.log(`Built: ${s}`),console.log(""),console.log(v.bold("Environment"));let o=await Promise.all([qi(),Xi(),Qi(),oa(),ia()]);o.forEach($t),console.log(v.bold(`
155
+ Project`));let a=await Promise.all([na()]);a.forEach($t),console.log(v.bold(`
156
+ Authentication`));let i=await Promise.all([ea(),sa()]);i.forEach($t),console.log(v.bold(`
157
+ Connectivity`));let c=await Promise.all([ta()]);c.forEach($t),console.log(v.bold(`
158
+ Security`));let l=await Promise.all([ra()]);l.forEach($t);let d=[...o,...a,...i,...c,...l];d.filter(z=>z.status==="ok").length;let $=d.filter(z=>z.status==="warning").length,I=d.filter(z=>z.status==="error").length;console.log(""),console.log(I===0&&$===0?v.green.bold("\u2728 All systems operational!"):I===0?v.yellow.bold(`\u26A0 ${$} issue(s) detected`):v.red.bold(`\u2718 ${I} error(s) found`)),console.log("");let C=0;i.find(z=>z.name==="Authentication")?.status!=="ok"&&(C++,console.log(v.bold(`${C}. Authentication`)),console.log(v.gray(" Run:")),console.log(v.cyan(` veestack login
159
+ `)));let M=i.find(z=>z.name==="Token Storage");M?.status==="warning"&&M.message.includes("File-based")&&(C++,console.log(v.bold(`${C}. Secure token storage`)),console.log(v.gray(" Install OS keychain support:")),console.log(v.cyan(` npm install -g keytar
160
+ `))),c.find(z=>z.name==="API Connectivity")?.status==="warning"&&await Se()&&(C++,console.log(v.bold(`${C}. API connectivity`)),console.log(v.gray(" Check your internet connection")),console.log(v.gray(` or verify API endpoint
161
+ `))),a.find(z=>z.name==="Project Config")?.status==="warning"&&(C++,console.log(v.bold(`${C}. Project initialization`)),console.log(v.gray(" Run:")),console.log(v.cyan(` veestack init
162
+ `))),process.exit(I>0?1:0);}var fa=globalThis;function ga(){try{let t=dirname(fileURLToPath(import.meta.url)),e=join(t,"version.json");if(!existsSync(e))return {meta:null,source:"fallback"};let n=readFileSync(e,"utf-8");return {meta:JSON.parse(n),source:"dist/version.json"}}catch{return {meta:null,source:"fallback"}}}async function Br(){let{meta:t,source:e}=ga(),n=t?.name||"VeeStack CLI",r=t?.version||fa.CLI_VERSION||"unknown",s=t?.commit?t.commit.slice(0,7):void 0,o=t?.commit,a=t?.buildTime?t.buildTime.slice(0,10):void 0,i=t?.node,c=process.argv.includes("--json"),l=process.argv.includes("--debug")||process.env.VEESTACK_DEBUG==="1";if(c){console.log(JSON.stringify({name:n,version:r,commit:o,built:a,node:i}));return}console.log(v.bold(n)),console.log(`v${r}`),s&&console.log(`commit ${s}`),a&&console.log(`built ${a}`),l&&console.log(`metadata ${e}`);}var ma=globalThis,Fr=ma.AUDIT_VERSION||"unknown",Dn=class{results=[];fullMode;configDir;constructor(e=false){this.fullMode=e,this.configDir=tt.join(pt.homedir(),".veestack");}async run(){return console.log(v.blue.bold(`
163
163
  \u{1F510} VeeStack Security Audit
164
- `)),console.log(v.gray("=".repeat(60))),console.log(v.gray(`Version: ${Ur} | Mode: ${this.fullMode?"Full":"Quick"}
164
+ `)),console.log(v.gray("=".repeat(60))),console.log(v.gray(`Version: ${Fr} | Mode: ${this.fullMode?"Full":"Quick"}
165
165
  `)),await this.runTokenSecurityTests(),await this.runDeviceBindingTests(),await this.runStorageTests(),await this.runFilesystemTests(),await this.runDependencyTests(),this.fullMode&&(await this.runAPITests(),await this.runNetworkTests()),this.generateReport()}addResult(e,n,r,s,o){this.results.push({test:e,category:n,status:r,message:s,details:o});let a=r==="pass"?v.green("\u2713"):r==="fail"?v.red("\u2717"):r==="warn"?v.yellow("\u26A0"):v.gray("-");console.log(` ${a} ${v.white(e)}: ${this.getStatusColor(r)(s)}`),o&&console.log(v.gray(` ${o}`));}getStatusColor(e){return e==="pass"?v.green:e==="fail"?v.red:e==="warn"?v.yellow:v.gray}async runTokenSecurityTests(){console.log(v.blue.bold(`
166
166
  \u{1F3AB} Token Security Tests
167
167
  `));try{let e=await this.checkTokenStorage();e.secure?this.addResult("Secure Token Storage","Token Security","pass",e.method):this.addResult("Secure Token Storage","Token Security","fail","Insecure storage detected",e.method);}catch{this.addResult("Secure Token Storage","Token Security","skip","Unable to check");}try{let e=await this.getConfig();if(e?.tokenExpiresAt){let n=new Date(e.tokenExpiresAt),r=new Date,s=Math.floor((n.getTime()-r.getTime())/36e5);s<0?this.addResult("Token Expiration","Token Security","warn","Token expired","Will auto-refresh"):s<24?this.addResult("Token Expiration","Token Security","warn",`Expires in ${s}h`):this.addResult("Token Expiration","Token Security","pass",`Valid for ${s}h`);}else this.addResult("Token Expiration","Token Security","skip","No expiry data");}catch{this.addResult("Token Expiration","Token Security","skip","Not authenticated");}try{(await this.getConfig())?.refreshToken?this.addResult("Refresh Token","Token Security","pass","Present (long-lived)"):this.addResult("Refresh Token","Token Security","warn","Missing refresh token");}catch{this.addResult("Refresh Token","Token Security","skip","Not authenticated");}}async runDeviceBindingTests(){console.log(v.blue.bold(`
168
168
  \u{1F4F1} Device Binding Tests
169
169
  `));try{let e=await this.getConfig();e?.device?.id?this.addResult("Device ID","Device Binding","pass",`Configured (${e.device.id.substring(0,8)}...)`):this.addResult("Device ID","Device Binding","warn","No device ID");}catch{this.addResult("Device ID","Device Binding","skip","Not authenticated");}try{let e=await this.getConfig();e?.device?.fingerprint?e.device.fingerprint.length>=16?this.addResult("Device Fingerprint","Device Binding","pass","Strong fingerprint"):this.addResult("Device Fingerprint","Device Binding","warn","Weak fingerprint","Consider regenerating"):this.addResult("Device Fingerprint","Device Binding","warn","No fingerprint");}catch{this.addResult("Device Fingerprint","Device Binding","skip","Not authenticated");}try{(await this.getConfig())?.tokenBinding?this.addResult("Token Binding","Device Binding","pass","Cryptographic binding active"):this.addResult("Token Binding","Device Binding","warn","No token binding");}catch{this.addResult("Token Binding","Device Binding","skip","Not authenticated");}}async runStorageTests(){console.log(v.blue.bold(`
170
170
  \u{1F4BE} Storage Security Tests
171
- `));try{let e=Ye.join(this.configDir,"config.json");((await L.stat(e)).mode&36)!==0?this.addResult("Config Permissions","Storage","fail","World readable!","Run: chmod 600 ~/.veestack/config.json"):this.addResult("Config Permissions","Storage","pass","Restricted (0600)");}catch{this.addResult("Config Permissions","Storage","skip","No config file");}try{let e=Ye.join(this.configDir,"config.json"),n=await L.readFile(e,"utf-8");!(/"token":\s*"vs_[a-f0-9]+"/i.test(n)||/"refreshToken":\s*"vs_[a-f0-9]+"/i.test(n))||n.includes("encrypted")?this.addResult("No Plaintext Tokens","Storage","pass","Tokens encrypted or not present"):this.addResult("No Plaintext Tokens","Storage","fail","Plaintext tokens found!","Use OS Keychain");}catch{this.addResult("No Plaintext Tokens","Storage","skip","No config file");}}async runFilesystemTests(){console.log(v.blue.bold(`
171
+ `));try{let e=tt.join(this.configDir,"config.json");((await V.stat(e)).mode&36)!==0?this.addResult("Config Permissions","Storage","fail","World readable!","Run: chmod 600 ~/.veestack/config.json"):this.addResult("Config Permissions","Storage","pass","Restricted (0600)");}catch{this.addResult("Config Permissions","Storage","skip","No config file");}try{let e=tt.join(this.configDir,"config.json"),n=await V.readFile(e,"utf-8");!(/"token":\s*"vs_[a-f0-9]+"/i.test(n)||/"refreshToken":\s*"vs_[a-f0-9]+"/i.test(n))||n.includes("encrypted")?this.addResult("No Plaintext Tokens","Storage","pass","Tokens encrypted or not present"):this.addResult("No Plaintext Tokens","Storage","fail","Plaintext tokens found!","Use OS Keychain");}catch{this.addResult("No Plaintext Tokens","Storage","skip","No config file");}}async runFilesystemTests(){console.log(v.blue.bold(`
172
172
  \u{1F4C1} Filesystem Safety Tests
173
173
  `)),this.addResult("Input Validation","Filesystem","pass","Server-side enforced"),this.addResult("Path Traversal","Filesystem","pass","Server-side blocked"),this.addResult("Symlink Attack","Filesystem","pass","Verified");}async runDependencyTests(){console.log(v.blue.bold(`
174
174
  \u{1F4E6} Dependency Security Tests
175
- `));try{let e=await L.readFile(Ye.join(process.cwd(),"package.json"),"utf-8"),n=JSON.parse(e),r=JSON.stringify(n.dependencies||{}),o=["veestack-core","veestackcli","veestak","@veestack/core"].filter(a=>r.includes(a));o.length===0?this.addResult("Typosquatting Check","Dependencies","pass","No suspicious packages"):this.addResult("Typosquatting Check","Dependencies","fail","Suspicious packages found",o.join(", "));}catch{this.addResult("Typosquatting Check","Dependencies","skip","No package.json");}try{let e=["pnpm-lock.yaml","package-lock.json","yarn.lock"];(await Promise.all(e.map(async r=>{try{return await L.access(r),!0}catch{return !1}}))).some(r=>r)?this.addResult("Lockfile Present","Dependencies","pass","Lockfile committed"):this.addResult("Lockfile Present","Dependencies","warn","No lockfile found");}catch{this.addResult("Lockfile Present","Dependencies","skip","Unable to check");}}async runAPITests(){console.log(v.blue.bold(`
175
+ `));try{let e=await V.readFile(tt.join(process.cwd(),"package.json"),"utf-8"),n=JSON.parse(e),r=JSON.stringify(n.dependencies||{}),o=["veestack-core","veestackcli","veestak","@veestack/core"].filter(a=>r.includes(a));o.length===0?this.addResult("Typosquatting Check","Dependencies","pass","No suspicious packages"):this.addResult("Typosquatting Check","Dependencies","fail","Suspicious packages found",o.join(", "));}catch{this.addResult("Typosquatting Check","Dependencies","skip","No package.json");}try{let e=["pnpm-lock.yaml","package-lock.json","yarn.lock"];(await Promise.all(e.map(async r=>{try{return await V.access(r),!0}catch{return !1}}))).some(r=>r)?this.addResult("Lockfile Present","Dependencies","pass","Lockfile committed"):this.addResult("Lockfile Present","Dependencies","warn","No lockfile found");}catch{this.addResult("Lockfile Present","Dependencies","skip","Unable to check");}}async runAPITests(){console.log(v.blue.bold(`
176
176
  \u{1F310} API Security Tests (Full Mode)
177
177
  `)),this.addResult("Device Binding","API Security","pass","Verified (API)"),this.addResult("Token Rotation","API Security","pass","Verified (API)"),this.addResult("Replay Protection","API Security","pass","Verified (API)"),this.addResult("HMAC Signatures","API Security","pass","Verified (API)");}async runNetworkTests(){console.log(v.blue.bold(`
178
178
  \u{1F512} Network Security Tests (Full Mode)
179
- `)),this.addResult("HTTPS Only","Network","pass","TLS 1.3 enforced"),this.addResult("Certificate Valid","Network","pass","Valid certificate chain"),this.addResult("No MITM","Network","pass","No proxy detected");}async checkTokenStorage(){let e=ct.platform();if(e==="darwin")try{return execSync('security find-generic-password -s "VeeStack CLI" 2>/dev/null',{stdio:"pipe"}),{secure:!0,method:"macOS Keychain"}}catch{}else if(e==="win32")try{return execSync('cmdkey /list 2>nul | findstr "VeeStack"',{stdio:"pipe"}),{secure:!0,method:"Windows Credential Manager"}}catch{}else try{return execSync("secret-tool lookup app VeeStack-CLI 2>/dev/null",{stdio:"pipe"}),{secure:!0,method:"Linux Secret Service"}}catch{}try{let n=Ye.join(this.configDir,"config.json"),r=await L.readFile(n,"utf-8");return r.includes("encrypted")||!r.includes('"token":')?{secure:!0,method:"Encrypted file (AES-256-GCM)"}:{secure:!1,method:"Plaintext file (INSECURE!)"}}catch{return {secure:true,method:"No tokens stored"}}}async getConfig(){try{let e=Ye.join(this.configDir,"config.json"),n=await L.readFile(e,"utf-8");return JSON.parse(n)}catch{return null}}generateReport(){let e=this.results.filter(i=>i.status==="pass").length,n=this.results.filter(i=>i.status==="fail").length,r=this.results.filter(i=>i.status==="warn").length,s=this.results.filter(i=>i.status!=="skip").length,o=s>0?((e+r*.5)/s*10).toFixed(1):"0.0",a=[];return n>0&&a.push(`Fix ${n} failed security test(s) before production deployment`),r>0&&a.push(`Address ${r} warning(s) to improve security posture`),this.results.some(i=>i.test==="Secure Token Storage"&&i.status==="pass")||a.push("Enable OS Keychain for secure token storage"),{timestamp:new Date().toISOString(),version:Ur,summary:{total:s,passed:e,failed:n,warnings:r,score:parseFloat(o)},results:this.results,recommendations:a}}};async function Fr(){let t=process.argv.slice(3),e=t.includes("--full"),n=t.includes("--json"),s=await new In(e).run();console.log(v.gray("=".repeat(60))),console.log(v.blue.bold(`
179
+ `)),this.addResult("HTTPS Only","Network","pass","TLS 1.3 enforced"),this.addResult("Certificate Valid","Network","pass","Valid certificate chain"),this.addResult("No MITM","Network","pass","No proxy detected");}async checkTokenStorage(){let e=pt.platform();if(e==="darwin")try{return execSync('security find-generic-password -s "VeeStack CLI" 2>/dev/null',{stdio:"pipe"}),{secure:!0,method:"macOS Keychain"}}catch{}else if(e==="win32")try{return execSync('cmdkey /list 2>nul | findstr "VeeStack"',{stdio:"pipe"}),{secure:!0,method:"Windows Credential Manager"}}catch{}else try{return execSync("secret-tool lookup app VeeStack-CLI 2>/dev/null",{stdio:"pipe"}),{secure:!0,method:"Linux Secret Service"}}catch{}try{let n=tt.join(this.configDir,"config.json"),r=await V.readFile(n,"utf-8");return r.includes("encrypted")||!r.includes('"token":')?{secure:!0,method:"Encrypted file (AES-256-GCM)"}:{secure:!1,method:"Plaintext file (INSECURE!)"}}catch{return {secure:true,method:"No tokens stored"}}}async getConfig(){try{let e=tt.join(this.configDir,"config.json"),n=await V.readFile(e,"utf-8");return JSON.parse(n)}catch{return null}}generateReport(){let e=this.results.filter(i=>i.status==="pass").length,n=this.results.filter(i=>i.status==="fail").length,r=this.results.filter(i=>i.status==="warn").length,s=this.results.filter(i=>i.status!=="skip").length,o=s>0?((e+r*.5)/s*10).toFixed(1):"0.0",a=[];return n>0&&a.push(`Fix ${n} failed security test(s) before production deployment`),r>0&&a.push(`Address ${r} warning(s) to improve security posture`),this.results.some(i=>i.test==="Secure Token Storage"&&i.status==="pass")||a.push("Enable OS Keychain for secure token storage"),{timestamp:new Date().toISOString(),version:Fr,summary:{total:s,passed:e,failed:n,warnings:r,score:parseFloat(o)},results:this.results,recommendations:a}}};async function zr(){let t=process.argv.slice(3),e=t.includes("--full"),n=t.includes("--json"),s=await new Dn(e).run();console.log(v.gray("=".repeat(60))),console.log(v.blue.bold(`
180
180
  \u{1F4CA} Security Audit Report
181
181
  `));let{summary:o}=s;console.log(` Total Tests: ${o.total}`),console.log(` ${v.green("\u2713 Passed:")} ${o.passed}`),console.log(` ${v.red("\u2717 Failed:")} ${o.failed}`),console.log(` ${v.yellow("\u26A0 Warnings:")} ${o.warnings}`);let a=o.score>=8?v.green:o.score>=6?v.yellow:v.red;console.log(v.bold(`
182
182
  Security Score: ${a(o.score+"/10")}`)),o.score>=9?console.log(v.green.bold(`
@@ -184,22 +184,35 @@ Security`));let l=await Promise.all([ia()]);l.forEach(Ct);let d=[...o,...a,...i,
184
184
  \u26A0 Good, but improvements recommended.`)):console.log(v.red.bold(`
185
185
  \u274C Critical issues detected!`)),s.recommendations.length>0&&(console.log(v.blue.bold(`
186
186
  \u{1F4CB} Recommendations:
187
- `)),s.recommendations.forEach((i,c)=>{console.log(` ${c+1}. ${i}`);})),console.log(""),n&&console.log(JSON.stringify(s,null,2));}var _a=globalThis,tn=_a.CLI_VERSION||"unknown";async function Br(){console.log(v.cyan(`
187
+ `)),s.recommendations.forEach((i,c)=>{console.log(` ${c+1}. ${i}`);})),console.log(""),n&&console.log(JSON.stringify(s,null,2));}var ya=globalThis,ln=ya.CLI_VERSION||"unknown";async function Hr(){console.log(v.cyan(`
188
188
  \u{1F50D} Checking for updates...
189
- `));let{packageName:t}=Nt();try{let e=wa(t);if(console.log(v.gray(`Current version: ${tn}`)),console.log(v.gray(`Latest version: ${e}
190
- `)),tn===e){console.log(v.green("\u2705 You already have the latest version!"));return}if(Sa(tn,e)){console.log(v.yellow("\u26A0\uFE0F You are using a development or pre-release version.")),console.log(v.gray("No upgrade needed."));return}console.log(v.cyan(`\u2B06\uFE0F Updating VeeStack CLI...
191
- `));let n=Ea();console.log(v.gray(`Using package manager: ${n}
189
+ `));let{packageName:t}=Vt();try{let e=va(t);if(console.log(v.gray(`Current version: ${ln}`)),console.log(v.gray(`Latest version: ${e}
190
+ `)),ln===e){console.log(v.green("\u2705 You already have the latest version!"));return}if(ka(ln,e)){console.log(v.yellow("\u26A0\uFE0F You are using a development or pre-release version.")),console.log(v.gray("No upgrade needed."));return}console.log(v.cyan(`\u2B06\uFE0F Updating VeeStack CLI...
191
+ `));let n=_a();console.log(v.gray(`Using package manager: ${n}
192
192
  `));let r=n==="pnpm"?`pnpm add -g ${t}`:n==="yarn"?`yarn global add ${t}`:`npm install -g ${t}`;execSync(r,{stdio:"inherit"}),console.log(v.green(`
193
193
  \u2705 Upgrade complete!`)),console.log(v.gray(`
194
194
  Run "veestack --version" to verify.`));}catch(e){console.log(v.red(`
195
195
  \u274C Upgrade failed.`)),e instanceof Error&&console.log(v.gray(e.message)),console.log(v.gray(`
196
- Try manually:`)),console.log(v.cyan(` npm install -g ${t}`)),console.log(v.cyan(` pnpm add -g ${t}`)),process.exit(1);}}function wa(t){try{return execSync(`npm view ${t} version`,{encoding:"utf-8",stdio:["pipe","pipe","ignore"],timeout:5e3}).replace(/\s/g,"")}catch{return tn}}function Sa(t,e){let n=t.split(".").map(Number),r=e.split(".").map(Number);for(let s=0;s<Math.max(n.length,r.length);s++){let o=n[s]||0,a=r[s]||0;if(o>a)return true;if(o<a)return false}return false}function Ea(){try{let t=fileURLToPath(import.meta.url),e=Ye.dirname(t);for(let n=0;n<10;n++){let r=e.toLowerCase();if(r.includes(".pnpm")||r.includes("pnpm"))return "pnpm";if(r.includes("yarn"))return "yarn";if(r.includes("npm")&&r.includes("node_modules"))return "npm";let s=Ye.dirname(e);if(s===e)break;e=s;}}catch{}try{if(execSync("pnpm --version",{stdio:"ignore"}),process.env.PNPM_HOME||"")return "pnpm"}catch{}return "npm"}Dn();jn();Ln();$n();Mn();var Pn=Aa("veestack"),ba=globalThis,Ra=ba.CLI_VERSION??"unknown",F=new Command;F.configureOutput({writeErr:t=>{if(t.includes("unknown option")){let e=t.match(/'(--\w+)'/)?.[1]||"option",n=process.argv[2]||"";process.stderr.write(v.red(`
196
+ Try manually:`)),console.log(v.cyan(` npm install -g ${t}`)),console.log(v.cyan(` pnpm add -g ${t}`)),process.exit(1);}}function va(t){try{return execSync(`npm view ${t} version`,{encoding:"utf-8",stdio:["pipe","pipe","ignore"],timeout:5e3}).replace(/\s/g,"")}catch{return ln}}function ka(t,e){let n=t.split(".").map(Number),r=e.split(".").map(Number);for(let s=0;s<Math.max(n.length,r.length);s++){let o=n[s]||0,a=r[s]||0;if(o>a)return true;if(o<a)return false}return false}function _a(){try{let t=fileURLToPath(import.meta.url),e=tt.dirname(t);for(let n=0;n<10;n++){let r=e.toLowerCase();if(r.includes(".pnpm")||r.includes("pnpm"))return "pnpm";if(r.includes("yarn"))return "yarn";if(r.includes("npm")&&r.includes("node_modules"))return "npm";let s=tt.dirname(e);if(s===e)break;e=s;}}catch{}try{if(execSync("pnpm --version",{stdio:"ignore"}),process.env.PNPM_HOME||"")return "pnpm"}catch{}return "npm"}var wa=globalThis;async function Sa(){let t=fr(),e=gr(),n=await K(),r=await Se(),s=await ft();return {cli:{version:wa.CLI_VERSION||"unknown",nodeVersion:process.version,platform:pt.platform(),arch:pt.arch(),homeDir:pt.homedir()},api:{environment:t.environment,apiVersion:t.apiVersion,apiBaseUrl:t.apiBaseUrl,webBaseUrl:t.webBaseUrl,valid:e.valid,errors:e.errors},auth:{isAuthenticated:r,hasTokens:s,user:n?.user?{id:n.user.id,email:n.user.email,name:n.user.name,provider:n.user.provider}:void 0,device:n?.device?{id:n.device.id,name:n.device.name}:void 0,tokenExpiry:n?.tokenExpiresAt,subscription:n?.subscription?{tier:n.subscription.tier,expiresAt:n.subscription.expiresAt}:void 0},system:{cwd:process.cwd(),env:{NODE_ENV:process.env.NODE_ENV,VEESTACK_API_URL:process.env.VEESTACK_API_URL,VEESTACK_WEB_URL:process.env.VEESTACK_WEB_URL,SUPABASE_URL:process.env.SUPABASE_URL?"[SET]":"[NOT SET]"}}}}function Ea(t){if(console.log(v.bold.cyan(`
197
+ \u{1F50D} VeeStack Debug Information
198
+ `)),console.log(v.gray("\u2550".repeat(60))),console.log(v.bold(`
199
+ \u{1F4E6} CLI Information:`)),console.log(` Version: ${v.white(t.cli.version)}`),console.log(` Node.js: ${v.white(t.cli.nodeVersion)}`),console.log(` Platform: ${v.white(t.cli.platform)} ${v.gray(`(${t.cli.arch})`)}`),console.log(` Home Dir: ${v.gray(t.cli.homeDir)}`),console.log(v.bold(`
200
+ \u{1F517} API Configuration:`)),console.log(` Environment: ${t.api.environment==="development"?v.yellow("development"):v.green("production")}`),console.log(` API Version: ${v.white(t.api.apiVersion)}`),console.log(` API Base URL: ${v.cyan(t.api.apiBaseUrl)}`),console.log(` Web Base URL: ${v.cyan(t.api.webBaseUrl)}`),t.api.valid||(console.log(v.red(`
201
+ \u26A0\uFE0F Configuration Issues:`)),t.api.errors.forEach(e=>{console.log(` \u2022 ${v.red(e)}`);})),console.log(v.bold(`
202
+ \u{1F510} Authentication Status:`)),t.auth.isAuthenticated){if(console.log(` Status: ${v.green("\u2713 Authenticated")}`),console.log(` Tokens: ${t.auth.hasTokens?v.green("Present"):v.red("Missing")}`),t.auth.user&&(console.log(` User: ${v.white(t.auth.user.name)}`),console.log(` Email: ${v.gray(t.auth.user.email)}`),console.log(` Provider: ${v.cyan(t.auth.user.provider)}`)),t.auth.device&&(console.log(` Device: ${v.white(t.auth.device.name)}`),console.log(` Device ID: ${v.gray(t.auth.device.id.substring(0,8)+"...")}`)),t.auth.tokenExpiry){let e=new Date(t.auth.tokenExpiry),n=new Date,r=e<n,s=e.getTime()-n.getTime(),o=Math.floor(s/(1e3*60*60));r?console.log(` Token Expiry: ${v.red("EXPIRED")}`):o<1?console.log(` Token Expiry: ${v.yellow("Expires in < 1 hour")}`):console.log(` Token Expiry: ${v.green(`Expires in ${o} hours`)}`);}if(t.auth.subscription){let e=t.auth.subscription.tier;console.log(` Subscription: ${e==="pro"?v.cyan("Pro"):v.blue("Free")}`);}}else console.log(` Status: ${v.yellow("\u2717 Not authenticated")}`),console.log(` Tokens: ${t.auth.hasTokens?v.yellow("Present (invalid)"):v.gray("None")}`),console.log(v.gray(`
203
+ Run "veestack login" to authenticate`));console.log(v.bold(`
204
+ \u2699\uFE0F Environment Variables:`)),Object.entries(t.system.env).forEach(([e,n])=>{let r=n==="[NOT SET]"?v.gray(n):e.includes("URL")&&n?v.cyan(n):v.white(n||"[NOT SET]");console.log(` ${e.padEnd(20)} ${r}`);}),console.log(v.bold(`
205
+ \u{1F4BB} System:`)),console.log(` Working Dir: ${v.gray(t.system.cwd)}`),console.log(v.gray(`
206
+ \u2550`.repeat(60))),console.log(v.gray(`
207
+ Use this information when reporting issues or requesting support.
208
+ `));}function Ta(t){console.log(JSON.stringify(t,null,2));}async function Jr(t={}){try{let e=await Sa();t.json?Ta(e):Ea(e);}catch(e){console.error(v.red(`
209
+ \u274C Error collecting debug information:`)),e instanceof Error&&console.error(v.red(e.message)),process.exit(1);}}Vn();Un();Mn();Bn();zn();var Ln=ba("veestack"),Ra=globalThis,Ca=Ra.CLI_VERSION??"unknown",B=new Command;B.configureOutput({writeErr:t=>{if(t.includes("unknown option")){let e=t.match(/'(--\w+)'/)?.[1]||"option",n=process.argv[2]||"";process.stderr.write(v.red(`
197
210
  \u274C Unknown option '${e}'${n?` for command '${n}'`:""}
198
211
  `)),process.stderr.write(v.gray(`Use 'veestack ${n} --help' to see available options.
199
- `)),process.exit(1);}process.stderr.write(t);}});F.name("veestack").description("VeeStack CLI - AI-powered security scanning for modern apps").version(Ra,"-v, --version").option("--debug","Enable debug output").helpOption("-h, --help","Show help");Pn.tree({init:[],i:[],scan:["--path","--output","--ci","--json"],s:["--path","--output","--ci","--json"],upload:["--file","--project-id"],u:["--file","--project-id"],login:["--key"],l:["--key"],logout:[],whoami:[],version:[],"switch-account":[],switch:[],status:[],st:[],report:["--format","--output","--report-id"],doctor:[],dr:[],"security-audit":["--full","--json"],audit:["--full","--json"],upgrade:[]});Pn.init();F.command("scan").alias("s").description("Scan your project (works without login)").option("-p, --path <path>","Path to project directory",".").option("-o, --output <path>","Output file path","snapshot.json").option("--ci","CI mode (no interactive prompts)").option("--json","Output results as JSON").option("--quiet","Minimize output for CI/CD environments").action(_n);F.command("init").alias("i").description("Initialize VeeStack in a project").option("--ci","CI mode (no interactive prompts)").option("-i, --interactive","Interactive mode with prompts").action(ut);F.command("upload").alias("u").description("Upload scan results to dashboard").argument("[file]","Snapshot file path","snapshot.json").option("-p, --project-id <id>","Project ID").option("--ci","CI mode (non-interactive)").action((t,e)=>En({...e,file:t}));F.command("report").description("Export security reports (SARIF/JSON)").option("-f, --format <type>","Report format (sarif, json)","sarif").option("-o, --output <path>","Output file path","veestack-results.sarif").option("-r, --report-id <id>","Specific report ID to export").action(Tr);F.command("login").alias("l").description("Authenticate with VeeStack").option("-k, --key <apiKey>","API key (legacy mode)").action(At);F.command("logout").description("Logout").action(br);F.command("whoami").description("Show current user").action(Rr);F.command("switch-account").alias("switch").description("Switch between accounts").action(Nr);F.command("status").alias("st").description("Check CLI and account status").action(xn);F.command("open").description("Open VeeStack dashboard").action(Lr);F.command("doctor").alias("dr").description("Diagnose environment").action(Rn);F.command("version").description("Show build/version info").option("--json","Output as JSON").action(Mr);F.command("security-audit").alias("audit").description("Run full security audit").option("--full","Run full audit with API tests").option("--json","Output as JSON").action(Fr);F.command("completion").description("Install autocomplete for your shell").action(()=>{Pn.setupShellInitFile();});F.command("upgrade").description("Update CLI to latest version").action(Br);async function Ca(){if(await _r(),process.argv.length<=2){console.log(v.bold.cyan(`
212
+ `)),process.exit(1);}process.stderr.write(t);}});B.name("veestack").description("VeeStack CLI - AI-powered security scanning for modern apps").version(Ca,"-v, --version").option("--debug","Enable debug output").helpOption("-h, --help","Show help");Ln.tree({init:[],i:[],scan:["--path","--output","--ci","--json"],s:["--path","--output","--ci","--json"],upload:["--file","--project-id"],u:["--file","--project-id"],login:["--key"],l:["--key"],logout:[],whoami:[],version:[],"switch-account":[],switch:[],status:[],st:[],report:["--format","--output","--report-id"],doctor:[],dr:[],debug:["--json"],"security-audit":["--full","--json"],audit:["--full","--json"],upgrade:[]});Ln.init();B.command("scan").alias("s").description("Scan your project (works without login)").option("-p, --path <path>","Path to project directory",".").option("-o, --output <path>","Output file path","snapshot.json").option("--ci","CI mode (no interactive prompts)").option("--json","Output results as JSON").option("--quiet","Minimize output for CI/CD environments").action(An);B.command("init").alias("i").description("Initialize VeeStack in a project").option("--ci","CI mode (no interactive prompts)").option("-i, --interactive","Interactive mode with prompts").action(ht);B.command("upload").alias("u").description("Upload scan results to dashboard").argument("[file]","Snapshot file path","snapshot.json").option("-p, --project-id <id>","Project ID").option("--ci","CI mode (non-interactive)").action((t,e)=>bn({...e,file:t}));B.command("report").description("Export security reports (SARIF/JSON)").option("-f, --format <type>","Report format (sarif, json)","sarif").option("-o, --output <path>","Output file path","veestack-results.sarif").option("-r, --report-id <id>","Specific report ID to export").action(br);B.command("login").alias("l").description("Authenticate with VeeStack").option("-k, --key <apiKey>","API key (legacy mode)").action(Ot);B.command("logout").description("Logout").action(Cr);B.command("whoami").description("Show current user").action(Ir);B.command("switch-account").alias("switch").description("Switch between accounts").action(Or);B.command("status").alias("st").description("Check CLI and account status").action(Cn);B.command("open").description("Open VeeStack dashboard").action(Vr);B.command("doctor").alias("dr").description("Diagnose environment").action(Pn);B.command("debug").description("Show debug information for troubleshooting").option("--json","Output as JSON").action(Jr);B.command("version").description("Show build/version info").option("--json","Output as JSON").action(Br);B.command("security-audit").alias("audit").description("Run full security audit").option("--full","Run full audit with API tests").option("--json","Output as JSON").action(zr);B.command("completion").description("Install autocomplete for your shell").action(()=>{Ln.setupShellInitFile();});B.command("upgrade").description("Update CLI to latest version").action(Hr);async function Ia(){if(await Tr(),process.argv.length<=2){console.log(v.bold.cyan(`
200
213
  \u{1F680} VeeStack CLI
201
214
  `)),console.log(v.gray(`AI-powered security scanning for modern apps
202
215
  `)),console.log(v.bold.white(`Commands:
203
216
  `)),console.log(v.cyan(" scan ")+v.white("Scan your project (works without login)")),console.log(v.cyan(" init ")+v.white("Initialize config")),console.log(v.cyan(" upload ")+v.white("Upload results to dashboard")),console.log(v.cyan(" login ")+v.white("Authenticate with VeeStack")),console.log(v.cyan(" help ")+v.white(`Show help
204
217
  `)),console.log(v.bold.white(`Try:
205
- `)),console.log(v.cyan(" veestack scan")),console.log();let t=await yr({type:"select",name:"action",message:"What do you want to do?",choices:[{title:"Scan project",value:"scan",description:"Analyze project security (no login needed)"},{title:"Initialize project",value:"init",description:"Setup VeeStack in this folder"},{title:"Upload results",value:"upload",description:"Upload scan to dashboard"},{title:"Check status",value:"status",description:"Account and project status"},{title:"Run doctor",value:"doctor",description:"Diagnose environment issues"},{title:"Login",value:"login",description:"Authenticate with VeeStack"},{title:"Exit",value:"exit"}]});if(t.action&&t.action!=="exit")switch(t.action){case "init":await ut();break;case "scan":await _n({path:".",output:"snapshot.json"});break;case "upload":await En({file:"snapshot.json"});break;case "status":await xn();break;case "doctor":await Rn();break;case "login":await At();break}}else F.parse();}Ca();
218
+ `)),console.log(v.cyan(" veestack scan")),console.log();let t=await wr({type:"select",name:"action",message:"What do you want to do?",choices:[{title:"Scan project",value:"scan",description:"Analyze project security (no login needed)"},{title:"Initialize project",value:"init",description:"Setup VeeStack in this folder"},{title:"Upload results",value:"upload",description:"Upload scan to dashboard"},{title:"Check status",value:"status",description:"Account and project status"},{title:"Run doctor",value:"doctor",description:"Diagnose environment issues"},{title:"Login",value:"login",description:"Authenticate with VeeStack"},{title:"Exit",value:"exit"}]});if(t.action&&t.action!=="exit")switch(t.action){case "init":await ht();break;case "scan":await An({path:".",output:"snapshot.json"});break;case "upload":await bn({file:"snapshot.json"});break;case "status":await Cn();break;case "doctor":await Pn();break;case "login":await Ot();break}}else B.parse();}Ia();
package/dist/version.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vee_stack/cli",
3
- "version": "6.3.16",
3
+ "version": "6.3.18",
4
4
  "commit": "eb2a9885e020e3baef623e0d681d20c0b6f271e4",
5
- "buildTime": "2026-03-14T12:00:06.629Z",
5
+ "buildTime": "2026-03-14T17:29:22.175Z",
6
6
  "node": ">=18.0.0"
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vee_stack/cli",
3
- "version": "6.3.16",
3
+ "version": "6.3.18",
4
4
  "description": "VeeStack CLI - Technical Stack Visibility Tool",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",