@vitnode/core 1.2.0-canary.26 → 1.2.0-canary.27
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/scripts/scripts.js +2 -2
- package/dist/scripts/shared/file-utils.d.ts.map +1 -1
- package/dist/src/api/config.d.ts.map +1 -1
- package/dist/src/api/config.js +2 -1
- package/dist/src/api/lib/route.d.ts +1 -0
- package/dist/src/api/lib/route.d.ts.map +1 -1
- package/dist/src/api/lib/route.js +4 -0
- package/dist/src/api/middlewares/captcha.middleware.d.ts +3 -0
- package/dist/src/api/middlewares/captcha.middleware.d.ts.map +1 -0
- package/dist/src/api/middlewares/captcha.middleware.js +58 -0
- package/dist/src/api/middlewares/global.middleware.d.ts +3 -2
- package/dist/src/api/middlewares/global.middleware.d.ts.map +1 -1
- package/dist/src/api/middlewares/global.middleware.js +4 -3
- package/dist/src/api/models/sso.js +1 -1
- package/dist/src/api/modules/admin/admin.module.d.ts +4 -4
- package/dist/src/api/modules/admin/debug/debug.admin.module.d.ts +4 -4
- package/dist/src/api/modules/admin/debug/routes/logs.route.d.ts +4 -4
- package/dist/src/api/modules/middleware/middleware.module.d.ts +22 -0
- package/dist/src/api/modules/middleware/middleware.module.d.ts.map +1 -1
- package/dist/src/api/modules/middleware/route.d.ts +65 -0
- package/dist/src/api/modules/middleware/route.d.ts.map +1 -1
- package/dist/src/api/modules/middleware/route.js +22 -10
- package/dist/src/api/modules/users/routes/sign-in.route.d.ts +2 -2
- package/dist/src/api/modules/users/routes/sign-up.route.d.ts +1 -0
- package/dist/src/api/modules/users/routes/sign-up.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/routes/sign-up.route.js +1 -0
- package/dist/src/api/modules/users/sso/routes/callback.route.d.ts +2 -2
- package/dist/src/api/modules/users/sso/sso.module.d.ts +2 -2
- package/dist/src/api/modules/users/users.module.d.ts +5 -4
- package/dist/src/api/modules/users/users.module.d.ts.map +1 -1
- package/dist/src/components/form/auto-form.d.ts +7 -2
- package/dist/src/components/form/auto-form.d.ts.map +1 -1
- package/dist/src/components/form/auto-form.js +13 -3
- package/dist/src/hooks/use-captcha.d.ts +8 -0
- package/dist/src/hooks/use-captcha.d.ts.map +1 -0
- package/dist/src/hooks/use-captcha.js +94 -0
- package/dist/src/lib/api/get-middleware-api.d.ts +4 -0
- package/dist/src/lib/api/get-middleware-api.d.ts.map +1 -1
- package/dist/src/lib/fetcher-client.d.ts +2 -1
- package/dist/src/lib/fetcher-client.d.ts.map +1 -1
- package/dist/src/lib/fetcher-client.js +7 -2
- package/dist/src/lib/fetcher.d.ts +2 -1
- package/dist/src/lib/fetcher.d.ts.map +1 -1
- package/dist/src/lib/fetcher.js +10 -6
- package/dist/src/views/admin/layouts/sidebar/nav/item.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/sidebar/nav/item.js +0 -2
- package/dist/src/views/admin/layouts/sidebar/sidebar.js +0 -1
- package/dist/src/views/admin/views/core/debug/system-logs/system-logs-view.d.ts +1 -1
- package/dist/src/views/auth/sign-in/form/use-form.d.ts +3 -2
- package/dist/src/views/auth/sign-in/form/use-form.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/form/form.d.ts +4 -1
- package/dist/src/views/auth/sign-up/form/form.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/form/form.js +2 -1
- package/dist/src/views/auth/sign-up/form/mutation-api.d.ts +3 -1
- package/dist/src/views/auth/sign-up/form/mutation-api.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/form/mutation-api.js +2 -1
- package/dist/src/views/auth/sign-up/form/use-form.d.ts +3 -21
- package/dist/src/views/auth/sign-up/form/use-form.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/form/use-form.js +5 -2
- package/dist/src/views/auth/sign-up/sign-up-view.js +2 -1
- package/dist/src/views/layouts/root-layout.d.ts +1 -3
- package/dist/src/views/layouts/root-layout.d.ts.map +1 -1
- package/dist/src/views/layouts/root-layout.js +9 -21
- package/dist/src/views/layouts/theme/header/header.d.ts.map +1 -1
- package/dist/src/views/layouts/theme/header/header.js +0 -1
- package/dist/src/views/layouts/theme/header/user/user.d.ts.map +1 -1
- package/dist/src/views/layouts/theme/header/user/user.js +0 -2
- package/dist/src/vitnode.config.d.ts +6 -1
- package/dist/src/vitnode.config.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/locales/en.json +1 -0
package/dist/scripts/scripts.js
CHANGED
|
@@ -3,8 +3,8 @@ import 'tsx/esm';
|
|
|
3
3
|
import { createRequire } from 'module';
|
|
4
4
|
const require = createRequire(import.meta.url);
|
|
5
5
|
|
|
6
|
-
import{stat as Xt}from"fs";import{stat as Zt,readdir as es}from"fs/promises";import{EventEmitter as ts}from"events";import*as m from"path";import{stat as Pt,lstat as ke,readdir as Dt,realpath as vt}from"fs/promises";import{Readable as Nt}from"stream";import{resolve as Ce,relative as It,join as Rt,sep as St}from"path";var b={FILE_TYPE:"files",DIR_TYPE:"directories",FILE_DIR_TYPE:"files_directories",EVERYTHING_TYPE:"all"},pe={root:".",fileFilter:t=>!0,directoryFilter:t=>!0,type:b.FILE_TYPE,lstat:!1,depth:2147483648,alwaysStat:!1,highWaterMark:4096};Object.freeze(pe);var ze="READDIRP_RECURSIVE_ERROR",At=new Set(["ENOENT","EPERM","EACCES","ELOOP",ze]),Le=[b.DIR_TYPE,b.EVERYTHING_TYPE,b.FILE_DIR_TYPE,b.FILE_TYPE],Tt=new Set([b.DIR_TYPE,b.EVERYTHING_TYPE,b.FILE_DIR_TYPE]),Ft=new Set([b.EVERYTHING_TYPE,b.FILE_DIR_TYPE,b.FILE_TYPE]),kt=t=>At.has(t.code),Ct=process.platform==="win32",We=t=>!0,je=t=>{if(t===void 0)return We;if(typeof t=="function")return t;if(typeof t=="string"){let e=t.trim();return s=>s.basename===e}if(Array.isArray(t)){let e=t.map(s=>s.trim());return s=>e.some(i=>s.basename===i)}return We},_e=class extends Nt{constructor(e={}){super({objectMode:!0,autoDestroy:!0,highWaterMark:e.highWaterMark});let s={...pe,...e},{root:i,type:r}=s;this._fileFilter=je(s.fileFilter),this._directoryFilter=je(s.directoryFilter);let o=s.lstat?ke:Pt;Ct?this._stat=a=>o(a,{bigint:!0}):this._stat=o,this._maxDepth=s.depth??pe.depth,this._wantsDir=r?Tt.has(r):!1,this._wantsFile=r?Ft.has(r):!1,this._wantsEverything=r===b.EVERYTHING_TYPE,this._root=Ce(i),this._isDirent=!s.alwaysStat,this._statsProp=this._isDirent?"dirent":"stats",this._rdOptions={encoding:"utf8",withFileTypes:this._isDirent},this.parents=[this._exploreDir(i,1)],this.reading=!1,this.parent=void 0}async _read(e){if(!this.reading){this.reading=!0;try{for(;!this.destroyed&&e>0;){let s=this.parent,i=s&&s.files;if(i&&i.length>0){let{path:r,depth:o}=s,a=i.splice(0,e).map(l=>this._formatEntry(l,r)),n=await Promise.all(a);for(let l of n){if(!l)continue;if(this.destroyed)return;let d=await this._getEntryType(l);d==="directory"&&this._directoryFilter(l)?(o<=this._maxDepth&&this.parents.push(this._exploreDir(l.fullPath,o+1)),this._wantsDir&&(this.push(l),e--)):(d==="file"||this._includeAsFile(l))&&this._fileFilter(l)&&this._wantsFile&&(this.push(l),e--)}}else{let r=this.parents.pop();if(!r){this.push(null);break}if(this.parent=await r,this.destroyed)return}}}catch(s){this.destroy(s)}finally{this.reading=!1}}}async _exploreDir(e,s){let i;try{i=await Dt(e,this._rdOptions)}catch(r){this._onError(r)}return{files:i,depth:s,path:e}}async _formatEntry(e,s){let i,r=this._isDirent?e.name:e;try{let o=Ce(Rt(s,r));i={path:It(this._root,o),fullPath:o,basename:r},i[this._statsProp]=this._isDirent?e:await this._stat(o)}catch(o){this._onError(o);return}return i}_onError(e){kt(e)&&!this.destroyed?this.emit("warn",e):this.destroy(e)}async _getEntryType(e){if(!e&&this._statsProp in e)return"";let s=e[this._statsProp];if(s.isFile())return"file";if(s.isDirectory())return"directory";if(s&&s.isSymbolicLink()){let i=e.fullPath;try{let r=await vt(i),o=await ke(r);if(o.isFile())return"file";if(o.isDirectory()){let a=r.length;if(i.startsWith(r)&&i.substr(a,1)===St){let n=new Error(`Circular symlink detected: "${i}" points to "${r}"`);return n.code=ze,this._onError(n)}return"directory"}}catch(r){return this._onError(r),""}}}_includeAsFile(e){let s=e&&e[this._statsProp];return s&&this._wantsEverything&&!s.isDirectory()}};function Me(t,e={}){let s=e.entryType||e.type;if(s==="both"&&(s=b.FILE_DIR_TYPE),s&&(e.type=s),t){if(typeof t!="string")throw new TypeError("readdirp: root argument must be a string. Usage: readdirp(root, options)");if(s&&!Le.includes(s))throw new Error(`readdirp: Invalid type passed. Use one of ${Le.join(", ")}`)}else throw new Error("readdirp: root argument is required. Usage: readdirp(root, options)");return e.root=t,new _e(e)}import{watchFile as Lt,unwatchFile as Oe,watch as Wt}from"fs";import{open as jt,stat as He,lstat as zt,realpath as ge}from"fs/promises";import*as w from"path";import{type as Mt}from"os";var Ot="data",xe="end",Ye="close",Q=()=>{};var X=process.platform,Ee=X==="win32",$t=X==="darwin",Ht=X==="linux",Yt=X==="freebsd",Ue=Mt()==="OS400",x={ALL:"all",READY:"ready",ADD:"add",CHANGE:"change",ADD_DIR:"addDir",UNLINK:"unlink",UNLINK_DIR:"unlinkDir",RAW:"raw",ERROR:"error"},v=x,Ut="watch",Kt={lstat:zt,stat:He},F="listeners",V="errHandlers",L="rawEmitters",Gt=[F,V,L],Vt=new Set(["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]),qt=t=>Vt.has(w.extname(t).slice(1).toLowerCase()),ye=(t,e)=>{t instanceof Set?t.forEach(e):e(t)},z=(t,e,s)=>{let i=t[e];i instanceof Set||(t[e]=i=new Set([i])),i.add(s)},Bt=t=>e=>{let s=t[e];s instanceof Set?s.clear():delete t[e]},M=(t,e,s)=>{let i=t[e];i instanceof Set?i.delete(s):i===s&&delete t[e]},Ke=t=>t instanceof Set?t.size===0:!t,q=new Map;function $e(t,e,s,i,r){let o=(a,n)=>{s(t),r(a,n,{watchedPath:t}),n&&t!==n&&B(w.resolve(t,n),F,w.join(t,n))};try{return Wt(t,{persistent:e.persistent},o)}catch(a){i(a);return}}var B=(t,e,s,i,r)=>{let o=q.get(t);o&&ye(o[e],a=>{a(s,i,r)})},Jt=(t,e,s,i)=>{let{listener:r,errHandler:o,rawEmitter:a}=i,n=q.get(e),l;if(!s.persistent)return l=$e(t,s,r,o,a),l?l.close.bind(l):void 0;if(n)z(n,F,r),z(n,V,o),z(n,L,a);else{if(l=$e(t,s,B.bind(null,e,F),o,B.bind(null,e,L)),!l)return;l.on(v.ERROR,async d=>{let c=B.bind(null,e,V);if(n&&(n.watcherUnusable=!0),Ee&&d.code==="EPERM")try{await(await jt(t,"r")).close(),c(d)}catch{}else c(d)}),n={listeners:r,errHandlers:o,rawEmitters:a,watcher:l},q.set(e,n)}return()=>{M(n,F,r),M(n,V,o),M(n,L,a),Ke(n.listeners)&&(n.watcher.close(),q.delete(e),Gt.forEach(Bt(n)),n.watcher=void 0,Object.freeze(n))}},we=new Map,Qt=(t,e,s,i)=>{let{listener:r,rawEmitter:o}=i,a=we.get(e),n=a&&a.options;return n&&(n.persistent<s.persistent||n.interval>s.interval)&&(Oe(e),a=void 0),a?(z(a,F,r),z(a,L,o)):(a={listeners:r,rawEmitters:o,options:s,watcher:Lt(e,s,(l,d)=>{ye(a.rawEmitters,f=>{f(v.CHANGE,e,{curr:l,prev:d})});let c=l.mtimeMs;(l.size!==d.size||c>d.mtimeMs||c===0)&&ye(a.listeners,f=>f(t,l))})},we.set(e,a)),()=>{M(a,F,r),M(a,L,o),Ke(a.listeners)&&(we.delete(e),Oe(e),a.options=a.watcher=void 0,Object.freeze(a))}},J=class{constructor(e){this.fsw=e,this._boundHandleError=s=>e._handleError(s)}_watchWithNodeFs(e,s){let i=this.fsw.options,r=w.dirname(e),o=w.basename(e);this.fsw._getWatchedDir(r).add(o);let n=w.resolve(e),l={persistent:i.persistent};s||(s=Q);let d;if(i.usePolling){let c=i.interval!==i.binaryInterval;l.interval=c&&qt(o)?i.binaryInterval:i.interval,d=Qt(e,n,l,{listener:s,rawEmitter:this.fsw._emitRaw})}else d=Jt(e,n,l,{listener:s,errHandler:this._boundHandleError,rawEmitter:this.fsw._emitRaw});return d}_handleFile(e,s,i){if(this.fsw.closed)return;let r=w.dirname(e),o=w.basename(e),a=this.fsw._getWatchedDir(r),n=s;if(a.has(o))return;let l=async(c,f)=>{if(this.fsw._throttle(Ut,e,5)){if(!f||f.mtimeMs===0)try{let u=await He(e);if(this.fsw.closed)return;let y=u.atimeMs,_=u.mtimeMs;if((!y||y<=_||_!==n.mtimeMs)&&this.fsw._emit(v.CHANGE,e,u),($t||Ht||Yt)&&n.ino!==u.ino){this.fsw._closeFile(c),n=u;let D=this._watchWithNodeFs(e,l);D&&this.fsw._addPathCloser(c,D)}else n=u}catch{this.fsw._remove(r,o)}else if(a.has(o)){let u=f.atimeMs,y=f.mtimeMs;(!u||u<=y||y!==n.mtimeMs)&&this.fsw._emit(v.CHANGE,e,f),n=f}}},d=this._watchWithNodeFs(e,l);if(!(i&&this.fsw.options.ignoreInitial)&&this.fsw._isntIgnored(e)){if(!this.fsw._throttle(v.ADD,e,0))return;this.fsw._emit(v.ADD,e,s)}return d}async _handleSymlink(e,s,i,r){if(this.fsw.closed)return;let o=e.fullPath,a=this.fsw._getWatchedDir(s);if(!this.fsw.options.followSymlinks){this.fsw._incrReadyCount();let n;try{n=await ge(i)}catch{return this.fsw._emitReady(),!0}return this.fsw.closed?void 0:(a.has(r)?this.fsw._symlinkPaths.get(o)!==n&&(this.fsw._symlinkPaths.set(o,n),this.fsw._emit(v.CHANGE,i,e.stats)):(a.add(r),this.fsw._symlinkPaths.set(o,n),this.fsw._emit(v.ADD,i,e.stats)),this.fsw._emitReady(),!0)}if(this.fsw._symlinkPaths.has(o))return!0;this.fsw._symlinkPaths.set(o,!0)}_handleRead(e,s,i,r,o,a,n){if(e=w.join(e,""),n=this.fsw._throttle("readdir",e,1e3),!n)return;let l=this.fsw._getWatchedDir(i.path),d=new Set,c=this.fsw._readdirp(e,{fileFilter:f=>i.filterPath(f),directoryFilter:f=>i.filterDir(f)});if(c)return c.on(Ot,async f=>{if(this.fsw.closed){c=void 0;return}let u=f.path,y=w.join(e,u);if(d.add(u),!(f.stats.isSymbolicLink()&&await this._handleSymlink(f,e,y,u))){if(this.fsw.closed){c=void 0;return}(u===r||!r&&!l.has(u))&&(this.fsw._incrReadyCount(),y=w.join(o,w.relative(o,y)),this._addToNodeFs(y,s,i,a+1))}}).on(v.ERROR,this._boundHandleError),new Promise((f,u)=>{if(!c)return u();c.once(xe,()=>{if(this.fsw.closed){c=void 0;return}let y=n?n.clear():!1;f(void 0),l.getChildren().filter(_=>_!==e&&!d.has(_)).forEach(_=>{this.fsw._remove(e,_)}),c=void 0,y&&this._handleRead(e,!1,i,r,o,a,n)})})}async _handleDir(e,s,i,r,o,a,n){let l=this.fsw._getWatchedDir(w.dirname(e)),d=l.has(w.basename(e));!(i&&this.fsw.options.ignoreInitial)&&!o&&!d&&this.fsw._emit(v.ADD_DIR,e,s),l.add(w.basename(e)),this.fsw._getWatchedDir(e);let c,f,u=this.fsw.options.depth;if((u==null||r<=u)&&!this.fsw._symlinkPaths.has(n)){if(!o&&(await this._handleRead(e,i,a,o,e,r,c),this.fsw.closed))return;f=this._watchWithNodeFs(e,(y,_)=>{_&&_.mtimeMs===0||this._handleRead(y,!1,a,o,e,r,c)})}return f}async _addToNodeFs(e,s,i,r,o){let a=this.fsw._emitReady;if(this.fsw._isIgnored(e)||this.fsw.closed)return a(),!1;let n=this.fsw._getWatchHelpers(e);i&&(n.filterPath=l=>i.filterPath(l),n.filterDir=l=>i.filterDir(l));try{let l=await Kt[n.statMethod](n.watchPath);if(this.fsw.closed)return;if(this.fsw._isIgnored(n.watchPath,l))return a(),!1;let d=this.fsw.options.followSymlinks,c;if(l.isDirectory()){let f=w.resolve(e),u=d?await ge(e):e;if(this.fsw.closed||(c=await this._handleDir(n.watchPath,l,s,r,o,n,u),this.fsw.closed))return;f!==u&&u!==void 0&&this.fsw._symlinkPaths.set(f,u)}else if(l.isSymbolicLink()){let f=d?await ge(e):e;if(this.fsw.closed)return;let u=w.dirname(n.watchPath);if(this.fsw._getWatchedDir(u).add(n.watchPath),this.fsw._emit(v.ADD,n.watchPath,l),c=await this._handleDir(u,l,s,r,e,n,f),this.fsw.closed)return;f!==void 0&&this.fsw._symlinkPaths.set(w.resolve(e),f)}else c=this._handleFile(n.watchPath,l,s);return a(),c&&this.fsw._addPathCloser(e,c),!1}catch(l){if(this.fsw._handleError(l))return a(),e}}};var be="/",ss="//",Qe=".",rs="..",is="string",os=/\\/g,Ge=/\/\//,ns=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,as=/^\.[/\\]/;function Z(t){return Array.isArray(t)?t:[t]}var Pe=t=>typeof t=="object"&&t!==null&&!(t instanceof RegExp);function ls(t){return typeof t=="function"?t:typeof t=="string"?e=>t===e:t instanceof RegExp?e=>t.test(e):typeof t=="object"&&t!==null?e=>{if(t.path===e)return!0;if(t.recursive){let s=m.relative(t.path,e);return s?!s.startsWith("..")&&!m.isAbsolute(s):!1}return!1}:()=>!1}function cs(t){if(typeof t!="string")throw new Error("string expected");t=m.normalize(t),t=t.replace(/\\/g,"/");let e=!1;t.startsWith("//")&&(e=!0);let s=/\/\//;for(;t.match(s);)t=t.replace(s,"/");return e&&(t="/"+t),t}function Ve(t,e,s){let i=cs(e);for(let r=0;r<t.length;r++){let o=t[r];if(o(i,s))return!0}return!1}function ds(t,e){if(t==null)throw new TypeError("anymatch: specify first argument");let i=Z(t).map(r=>ls(r));return e==null?(r,o)=>Ve(i,r,o):Ve(i,e)}var qe=t=>{let e=Z(t).flat();if(!e.every(s=>typeof s===is))throw new TypeError(`Non-string provided as watch path: ${e}`);return e.map(Xe)},Be=t=>{let e=t.replace(os,be),s=!1;for(e.startsWith(ss)&&(s=!0);e.match(Ge);)e=e.replace(Ge,be);return s&&(e=be+e),e},Xe=t=>Be(m.normalize(Be(t))),Je=(t="")=>e=>typeof e=="string"?Xe(m.isAbsolute(e)?e:m.join(t,e)):e,fs=(t,e)=>m.isAbsolute(t)?t:m.join(e,t),us=Object.freeze(new Set),De=class{constructor(e,s){this.path=e,this._removeWatcher=s,this.items=new Set}add(e){let{items:s}=this;s&&e!==Qe&&e!==rs&&s.add(e)}async remove(e){let{items:s}=this;if(!s||(s.delete(e),s.size>0))return;let i=this.path;try{await es(i)}catch{this._removeWatcher&&this._removeWatcher(m.dirname(i),m.basename(i))}}has(e){let{items:s}=this;if(s)return s.has(e)}getChildren(){let{items:e}=this;return e?[...e.values()]:[]}dispose(){this.items.clear(),this.path="",this._removeWatcher=Q,this.items=us,Object.freeze(this)}},hs="stat",ms="lstat",ve=class{constructor(e,s,i){this.fsw=i;let r=e;this.path=e=e.replace(as,""),this.watchPath=r,this.fullWatchPath=m.resolve(r),this.dirParts=[],this.dirParts.forEach(o=>{o.length>1&&o.pop()}),this.followSymlinks=s,this.statMethod=s?hs:ms}entryPath(e){return m.join(this.watchPath,m.relative(this.watchPath,e.fullPath))}filterPath(e){let{stats:s}=e;if(s&&s.isSymbolicLink())return this.filterDir(e);let i=this.entryPath(e);return this.fsw._isntIgnored(i,s)&&this.fsw._hasReadPermissions(s)}filterDir(e){return this.fsw._isntIgnored(this.entryPath(e),e.stats)}},ee=class extends ts{constructor(e={}){super(),this.closed=!1,this._closers=new Map,this._ignoredPaths=new Set,this._throttled=new Map,this._streams=new Set,this._symlinkPaths=new Map,this._watched=new Map,this._pendingWrites=new Map,this._pendingUnlinks=new Map,this._readyCount=0,this._readyEmitted=!1;let s=e.awaitWriteFinish,i={stabilityThreshold:2e3,pollInterval:100},r={persistent:!0,ignoreInitial:!1,ignorePermissionErrors:!1,interval:100,binaryInterval:300,followSymlinks:!0,usePolling:!1,atomic:!0,...e,ignored:e.ignored?Z(e.ignored):Z([]),awaitWriteFinish:s===!0?i:typeof s=="object"?{...i,...s}:!1};Ue&&(r.usePolling=!0),r.atomic===void 0&&(r.atomic=!r.usePolling);let o=process.env.CHOKIDAR_USEPOLLING;if(o!==void 0){let l=o.toLowerCase();l==="false"||l==="0"?r.usePolling=!1:l==="true"||l==="1"?r.usePolling=!0:r.usePolling=!!l}let a=process.env.CHOKIDAR_INTERVAL;a&&(r.interval=Number.parseInt(a,10));let n=0;this._emitReady=()=>{n++,n>=this._readyCount&&(this._emitReady=Q,this._readyEmitted=!0,process.nextTick(()=>this.emit(x.READY)))},this._emitRaw=(...l)=>this.emit(x.RAW,...l),this._boundRemove=this._remove.bind(this),this.options=r,this._nodeFsHandler=new J(this),Object.freeze(r)}_addIgnoredPath(e){if(Pe(e)){for(let s of this._ignoredPaths)if(Pe(s)&&s.path===e.path&&s.recursive===e.recursive)return}this._ignoredPaths.add(e)}_removeIgnoredPath(e){if(this._ignoredPaths.delete(e),typeof e=="string")for(let s of this._ignoredPaths)Pe(s)&&s.path===e&&this._ignoredPaths.delete(s)}add(e,s,i){let{cwd:r}=this.options;this.closed=!1,this._closePromise=void 0;let o=qe(e);return r&&(o=o.map(a=>fs(a,r))),o.forEach(a=>{this._removeIgnoredPath(a)}),this._userIgnored=void 0,this._readyCount||(this._readyCount=0),this._readyCount+=o.length,Promise.all(o.map(async a=>{let n=await this._nodeFsHandler._addToNodeFs(a,!i,void 0,0,s);return n&&this._emitReady(),n})).then(a=>{this.closed||a.forEach(n=>{n&&this.add(m.dirname(n),m.basename(s||n))})}),this}unwatch(e){if(this.closed)return this;let s=qe(e),{cwd:i}=this.options;return s.forEach(r=>{!m.isAbsolute(r)&&!this._closers.has(r)&&(i&&(r=m.join(i,r)),r=m.resolve(r)),this._closePath(r),this._addIgnoredPath(r),this._watched.has(r)&&this._addIgnoredPath({path:r,recursive:!0}),this._userIgnored=void 0}),this}close(){if(this._closePromise)return this._closePromise;this.closed=!0,this.removeAllListeners();let e=[];return this._closers.forEach(s=>s.forEach(i=>{let r=i();r instanceof Promise&&e.push(r)})),this._streams.forEach(s=>s.destroy()),this._userIgnored=void 0,this._readyCount=0,this._readyEmitted=!1,this._watched.forEach(s=>s.dispose()),this._closers.clear(),this._watched.clear(),this._streams.clear(),this._symlinkPaths.clear(),this._throttled.clear(),this._closePromise=e.length?Promise.all(e).then(()=>{}):Promise.resolve(),this._closePromise}getWatched(){let e={};return this._watched.forEach((s,i)=>{let o=(this.options.cwd?m.relative(this.options.cwd,i):i)||Qe;e[o]=s.getChildren().sort()}),e}emitWithAll(e,s){this.emit(e,...s),e!==x.ERROR&&this.emit(x.ALL,e,...s)}async _emit(e,s,i){if(this.closed)return;let r=this.options;Ee&&(s=m.normalize(s)),r.cwd&&(s=m.relative(r.cwd,s));let o=[s];i!=null&&o.push(i);let a=r.awaitWriteFinish,n;if(a&&(n=this._pendingWrites.get(s)))return n.lastChange=new Date,this;if(r.atomic){if(e===x.UNLINK)return this._pendingUnlinks.set(s,[e,...o]),setTimeout(()=>{this._pendingUnlinks.forEach((l,d)=>{this.emit(...l),this.emit(x.ALL,...l),this._pendingUnlinks.delete(d)})},typeof r.atomic=="number"?r.atomic:100),this;e===x.ADD&&this._pendingUnlinks.has(s)&&(e=x.CHANGE,this._pendingUnlinks.delete(s))}if(a&&(e===x.ADD||e===x.CHANGE)&&this._readyEmitted){let l=(d,c)=>{d?(e=x.ERROR,o[0]=d,this.emitWithAll(e,o)):c&&(o.length>1?o[1]=c:o.push(c),this.emitWithAll(e,o))};return this._awaitWriteFinish(s,a.stabilityThreshold,e,l),this}if(e===x.CHANGE&&!this._throttle(x.CHANGE,s,50))return this;if(r.alwaysStat&&i===void 0&&(e===x.ADD||e===x.ADD_DIR||e===x.CHANGE)){let l=r.cwd?m.join(r.cwd,s):s,d;try{d=await Zt(l)}catch{}if(!d||this.closed)return;o.push(d)}return this.emitWithAll(e,o),this}_handleError(e){let s=e&&e.code;return e&&s!=="ENOENT"&&s!=="ENOTDIR"&&(!this.options.ignorePermissionErrors||s!=="EPERM"&&s!=="EACCES")&&this.emit(x.ERROR,e),e||this.closed}_throttle(e,s,i){this._throttled.has(e)||this._throttled.set(e,new Map);let r=this._throttled.get(e);if(!r)throw new Error("invalid throttle");let o=r.get(s);if(o)return o.count++,!1;let a,n=()=>{let d=r.get(s),c=d?d.count:0;return r.delete(s),clearTimeout(a),d&&clearTimeout(d.timeoutObject),c};a=setTimeout(n,i);let l={timeoutObject:a,clear:n,count:0};return r.set(s,l),l}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(e,s,i,r){let o=this.options.awaitWriteFinish;if(typeof o!="object")return;let a=o.pollInterval,n,l=e;this.options.cwd&&!m.isAbsolute(e)&&(l=m.join(this.options.cwd,e));let d=new Date,c=this._pendingWrites;function f(u){Xt(l,(y,_)=>{if(y||!c.has(e)){y&&y.code!=="ENOENT"&&r(y);return}let D=Number(new Date);u&&_.size!==u.size&&(c.get(e).lastChange=D);let j=c.get(e);D-j.lastChange>=s?(c.delete(e),r(void 0,_)):n=setTimeout(f,a,_)})}c.has(e)||(c.set(e,{lastChange:d,cancelWait:()=>(c.delete(e),clearTimeout(n),i)}),n=setTimeout(f,a))}_isIgnored(e,s){if(this.options.atomic&&ns.test(e))return!0;if(!this._userIgnored){let{cwd:i}=this.options,o=(this.options.ignored||[]).map(Je(i)),n=[...[...this._ignoredPaths].map(Je(i)),...o];this._userIgnored=ds(n,void 0)}return this._userIgnored(e,s)}_isntIgnored(e,s){return!this._isIgnored(e,s)}_getWatchHelpers(e){return new ve(e,this.options.followSymlinks,this)}_getWatchedDir(e){let s=m.resolve(e);return this._watched.has(s)||this._watched.set(s,new De(s,this._boundRemove)),this._watched.get(s)}_hasReadPermissions(e){return this.options.ignorePermissionErrors?!0:!!(Number(e.mode)&256)}_remove(e,s,i){let r=m.join(e,s),o=m.resolve(r);if(i=i??(this._watched.has(r)||this._watched.has(o)),!this._throttle("remove",r,100))return;!i&&this._watched.size===1&&this.add(e,s,!0),this._getWatchedDir(r).getChildren().forEach(u=>this._remove(r,u));let l=this._getWatchedDir(e),d=l.has(s);l.remove(s),this._symlinkPaths.has(o)&&this._symlinkPaths.delete(o);let c=r;if(this.options.cwd&&(c=m.relative(this.options.cwd,r)),this.options.awaitWriteFinish&&this._pendingWrites.has(c)&&this._pendingWrites.get(c).cancelWait()===x.ADD)return;this._watched.delete(r),this._watched.delete(o);let f=i?x.UNLINK_DIR:x.UNLINK;d&&!this._isIgnored(r)&&this._emit(f,r),this._closePath(r)}_closePath(e){this._closeFile(e);let s=m.dirname(e);this._getWatchedDir(s).remove(m.basename(e))}_closeFile(e){let s=this._closers.get(e);s&&(s.forEach(i=>i()),this._closers.delete(e))}_addPathCloser(e,s){if(!s)return;let i=this._closers.get(e);i||(i=[],this._closers.set(e,i)),i.push(s)}_readdirp(e,s){if(this.closed)return;let i={type:x.ALL,alwaysStat:!0,lstat:!0,...s,depth:0},r=Me(e,i);return this._streams.add(r),r.once(Ye,()=>{r=void 0}),r.once(xe,()=>{r&&(this._streams.delete(r),r=void 0)}),r}};function ps(t,e={}){let s=new ee(e);return s.add(t),s}var Ze={watch:ps,FSWatcher:ee};import{existsSync as k,mkdirSync as Is,readFileSync as Rs,unlinkSync as Ss}from"fs";import{basename as rt,join as P,relative as it}from"path";import{copyFileSync as _s,existsSync as N,mkdirSync as gs,readdirSync as tt,readFileSync as ws,writeFileSync as ys}from"fs";import{basename as et,dirname as te,extname as xs,join as S,normalize as Es,relative as W,sep as bs}from"path";var Ps=/import\s+(?:(?:{[^}]*})|(?:[^{}\s,]*))?\s*(?:,\s*(?:{[^}]*}))?\s*from\s+['"]([./]+[^'"]*)['"]/g,Ds=/import\s+(?:(?:{[^}]*})|(?:[^{}\s,]*))?\s*(?:,\s*(?:{[^}]*}))?\s*from\s+['"](@\/[^'"]*)['"]/g,vs=/import\s*\(\s*['"](@\/[^'"]*)['"]\s*\)/g,Ne=/\.(js|jsx|ts|tsx)$/,Ie=/^page\.(tsx|ts|jsx|js)$/i,O=(t,e)=>{let i=W(e,t).split(bs);i.pop();let r=i.filter(o=>!o.startsWith("("));return Es(r.join("/"))},se=t=>{let e=new Map,s=i=>{if(N(i))for(let r of tt(i,{withFileTypes:!0})){let o=S(i,r.name);if(r.isDirectory()){s(o);continue}if(Ie.test(r.name)){let a=O(o,t);e.set(a,o)}}};return s(t),e},Ns=(t,e)=>{let s=t.replace(Ps,(i,r)=>{if(r.startsWith(".")){let a=r.replace(Ne,"").replace(/^(?:\.\.\/)+/,"");return i.replace(r,`${e}/${a}`)}return i});return s=s.replace(Ds,(i,r)=>{let o=r.replace(/^@\//,"").replace(Ne,"");return i.replace(r,`${e}/${o}`)}),s=s.replace(vs,(i,r)=>{let o=r.replace(/^@\//,"").replace(Ne,"");return i.replace(r,`${e}/${o}`)}),s};function re(t){let e=t;for(;e!==te(e);){if(N(S(e,"turbo.json"))||N(S(e,".git")))return e;e=te(e)}let s=S(t,"package.json");if(N(s))return te(s);throw new Error("\u274C Could not locate project root")}function ie(t){let e=S(t,"src","app","[locale]");if(N(e))return e;let s=S(t,"apps","web","src","app","[locale]");return N(s),s}var $=t=>{let e=[];if(!N(t))return e;let s=tt(t,{withFileTypes:!0});for(let i of s){let r=S(t,i.name);i.isDirectory()?e.push(...$(r)):e.push(r)}return e},H=t=>N(t)?$(t).length===0:!0,Re=(t,e,s,i,r,o,a=!0)=>{let n=et(t);if(Ie.test(n)){let l=O(e,r),d=i.get(l);if(d&&d!==e){a&&console.log(`\x1B[31mSkipped duplicate page:\x1B[0m ${W(o,e)} (collides with ${W(o,d)})`);return}}try{let l=te(e);N(l)||gs(l,{recursive:!0});let d=xs(t);if(s&&[".js",".jsx",".ts",".tsx"].includes(d)){let c=ws(t,"utf-8"),f=Ns(c,s);ys(e,f)}else _s(t,e);if(a){let c=t.indexOf(S("src","app")),f=c!==-1?t.substring(c):t.startsWith(o)?W(o,t):t,u=e.startsWith(o)?W(o,e):e;console.log(`\x1B[32mCopied:\x1B[0m ${f} \u2192 ${u}`)}if(Ie.test(et(e))){let c=O(e,r);i.set(c,e)}}catch(l){console.error(`\x1B[31mError copying file:\x1B[0m ${t}`,l)}},st=(t,e,s,i,r,o,a=!0)=>{if(!N(t)||H(t))return;let n=$(t);for(let l of n){let d=W(t,l),c=S(e,d);Re(l,c,s,i,r,o,a)}};var ot=({initMessage:t})=>{let e=process.cwd(),s=re(e),i=ie(s),r=se(i),o=rt(e);try{let h=P(e,"package.json");k(h)&&(o=JSON.parse(Rs(h,"utf-8")).name??"")}catch(h){console.error("\x1B[31mError reading package.json:\x1B[0m",h);return}let a=o.replace(/\//g,"-").replace(/@/g,""),n=P(s,"apps","web","src","app","[locale]","(main)",P("(plugins)",`(${a})`)),l=P(s,"apps","web","src","app","[locale]","admin","(auth)",P("(plugins)",`(${a})`)),d=P(s,"apps","web","src","locales",o),c=[{sourceDir:P(e,"src","app_admin"),destinationDir:l},{sourceDir:P(e,"src","app"),destinationDir:n},{sourceDir:P(e,"src","locales"),destinationDir:d}];for(let{sourceDir:h,destinationDir:g}of c)k(h)&&!H(h)&&!k(g)&&Is(g,{recursive:!0});let f=(h,g)=>{Re(h,g,o,r,i,s)},u=h=>{try{if(k(h)&&(Ss(h),console.log(`\x1B[33mRemoved:\x1B[0m ${h}`),/^page\.(tsx|ts|jsx|js)$/i.test(rt(h)))){let g=O(h,i);r.get(g)===h&&r.delete(g)}}catch(g){console.error(`\x1B[31mError removing file:\x1B[0m ${h}`,g)}},y=(h,g)=>{if(!k(g)||g.includes(P("src","locales")))return;let me=$(g);for(let T of me){let G=it(g,T),bt=P(h,G);k(bt)||u(T)}};for(let{sourceDir:h,destinationDir:g}of c)y(h,g);console.log(`${t} \x1B[34mWatching for changes in plugins...\x1B[0m`);let _=c.map(h=>h.sourceDir).filter(h=>k(h)),D=Ze.watch(_,{ignoreInitial:!1,persistent:!0}),j=h=>{let g=c.filter(({sourceDir:T})=>h.startsWith(T));if(g.length===0)throw new Error(`No matching source directory for: ${h}`);let he=g.reduce((T,G)=>G.sourceDir.length>T.sourceDir.length?G:T),me=it(he.sourceDir,h);return P(he.destinationDir,me)};D.on("add",h=>{let g=j(h);f(h,g)}).on("change",h=>{let g=j(h);f(h,g)}).on("unlink",h=>{let g=j(h);u(g)}).on("error",h=>{console.error("\x1B[31mWatcher error:\x1B[0m",h)})};import*as wt from"dotenv";import{count as gt}from"drizzle-orm";import{drizzle as zs}from"drizzle-orm/postgres-js";import{join as Ms}from"path";import{relations as dt}from"drizzle-orm";import{index as fe,pgTable as ft}from"drizzle-orm/pg-core";import{pgTable as As}from"drizzle-orm/pg-core";var E=As("core_roles",t=>({id:t.serial().primaryKey(),createdAt:t.timestamp().notNull().defaultNow(),updatedAt:t.timestamp().notNull().$onUpdate(()=>new Date),protected:t.boolean().notNull().default(!1),default:t.boolean().notNull().default(!1),root:t.boolean().notNull().default(!1),guest:t.boolean().notNull().default(!1),color:t.varchar({length:19})})).enableRLS();import{relations as at}from"drizzle-orm";import{index as lt,pgTable as ct}from"drizzle-orm/pg-core";import{relations as ce}from"drizzle-orm";import{index as ne,pgTable as de}from"drizzle-orm/pg-core";import{relations as Ts}from"drizzle-orm";import{index as Se,pgTable as nt}from"drizzle-orm/pg-core";var I=nt("core_languages",t=>({id:t.serial().primaryKey(),code:t.varchar({length:32}).notNull().unique(),name:t.varchar({length:255}).notNull(),timezone:t.varchar({length:255}).notNull().default("UTC"),protected:t.boolean().notNull().default(!1),default:t.boolean().notNull().default(!1),enabled:t.boolean().notNull().default(!0),createdAt:t.timestamp().notNull().defaultNow(),updatedAt:t.timestamp().notNull().$onUpdate(()=>new Date),time24:t.boolean().notNull().default(!1)}),t=>[Se("core_languages_code_idx").on(t.code),Se("core_languages_name_idx").on(t.name)]).enableRLS(),oe=nt("core_languages_words",t=>({id:t.serial().primaryKey(),languageCode:t.varchar().notNull().references(()=>I.code,{onDelete:"cascade"}),pluginCode:t.varchar({length:50}).notNull(),itemId:t.integer().notNull(),value:t.text().notNull(),tableName:t.varchar({length:255}).notNull(),variable:t.varchar({length:255}).notNull()}),t=>[Se("core_languages_words_lang_code_idx").on(t.languageCode)]).enableRLS(),pr=Ts(oe,({one:t})=>({language:t(I,{fields:[oe.languageCode],references:[I.code]})}));var p=de("core_users",t=>({id:t.serial().primaryKey(),nameCode:t.varchar({length:255}).notNull().unique(),name:t.varchar({length:255}).notNull().unique(),email:t.varchar({length:255}).notNull().unique(),password:t.varchar(),createdAt:t.timestamp().notNull().defaultNow(),newsletter:t.boolean().notNull().default(!1),avatarColor:t.varchar({length:6}).notNull(),emailVerified:t.boolean().notNull().default(!1),roleId:t.integer().references(()=>E.id).notNull(),birthday:t.timestamp(),ipAddress:t.varchar({length:40}).notNull(),language:t.varchar({length:32}).notNull().default("en").references(()=>I.code,{onDelete:"set default"})}),t=>[ne("core_users_name_code_idx").on(t.nameCode),ne("core_users_name_idx").on(t.name),ne("core_users_email_idx").on(t.email)]).enableRLS(),Er=ce(p,({one:t,many:e})=>({group:t(E,{fields:[p.roleId],references:[E.id]}),language:t(I,{fields:[p.language],references:[I.code]}),confirm_email:t(ae,{fields:[p.id],references:[ae.userId]}),sso:e(Ae),forgot_password:t(le,{fields:[p.id],references:[le.userId]})})),Ae=de("core_users_sso",t=>({userId:t.integer().references(()=>p.id,{onDelete:"cascade"}).notNull(),providerId:t.varchar({length:255}).notNull(),providerAccountId:t.varchar({length:255}).notNull(),createdAt:t.timestamp().notNull().defaultNow(),updatedAt:t.timestamp().notNull().$onUpdate(()=>new Date)}),t=>[ne("core_users_sso_user_id_idx").on(t.userId)]).enableRLS(),br=ce(Ae,({one:t})=>({user:t(p,{fields:[Ae.userId],references:[p.id]})})),ae=de("core_users_confirm_emails",t=>({id:t.serial().primaryKey(),userId:t.integer().references(()=>p.id,{onDelete:"cascade"}).notNull(),token:t.varchar({length:100}).notNull().unique(),createdAt:t.timestamp().notNull().defaultNow(),expires:t.timestamp().notNull()})).enableRLS(),Pr=ce(ae,({one:t})=>({user:t(p,{fields:[ae.userId],references:[p.id]})})),le=de("core_users_forgot_password",t=>({id:t.serial().primaryKey(),userId:t.integer().references(()=>p.id,{onDelete:"cascade"}).notNull().unique(),token:t.varchar({length:100}).notNull().unique(),ip_address:t.varchar({length:40}).notNull(),createdAt:t.timestamp().notNull().defaultNow(),expiresAt:t.timestamp().notNull()})).enableRLS(),Dr=ce(le,({one:t})=>({user:t(p,{fields:[le.userId],references:[p.id]})}));var Y=ct("core_sessions",t=>({id:t.serial().primaryKey(),token:t.varchar({length:255}).notNull().unique(),userId:t.integer().notNull().references(()=>p.id,{onDelete:"cascade"}),createdAt:t.timestamp().notNull().defaultNow(),expiresAt:t.timestamp().notNull(),deviceId:t.integer().references(()=>A.id,{onDelete:"cascade"}).notNull()}),t=>[lt("core_sessions_user_id_idx").on(t.userId)]).enableRLS(),Sr=at(Y,({one:t})=>({user:t(p,{fields:[Y.userId],references:[p.id]}),device:t(A,{fields:[Y.deviceId],references:[A.id]})})),A=ct("core_sessions_known_devices",t=>({id:t.serial().primaryKey(),publicId:t.varchar({length:32}).notNull().unique(),ipAddress:t.varchar({length:40}).notNull(),userAgent:t.text().notNull(),lastSeen:t.timestamp().notNull().defaultNow()}),t=>[lt("core_sessions_known_devices_ip_address_idx").on(t.ipAddress)]).enableRLS(),Ar=at(A,({one:t})=>({session:t(Y,{fields:[A.id],references:[Y.deviceId]})}));var U=ft("core_admin_permissions",t=>({id:t.serial().primaryKey(),roleId:t.integer().references(()=>E.id,{onDelete:"cascade"}),userId:t.integer().references(()=>p.id,{onDelete:"cascade"}),createdAt:t.timestamp().notNull().defaultNow(),updatedAt:t.timestamp().notNull().$onUpdate(()=>new Date),protected:t.boolean().notNull().default(!1)}),t=>[fe("core_admin_permissions_role_id_idx").on(t.roleId),fe("core_admin_permissions_user_id_idx").on(t.userId)]).enableRLS(),jr=dt(U,({one:t})=>({group:t(E,{fields:[U.roleId],references:[E.id]}),user:t(p,{fields:[U.userId],references:[p.id]})})),Te=ft("core_admin_sessions",t=>({id:t.serial().primaryKey(),token:t.varchar({length:255}).notNull().unique(),userId:t.integer().notNull().references(()=>p.id,{onDelete:"cascade"}),createdAt:t.timestamp().notNull().defaultNow(),lastSeen:t.timestamp().notNull().defaultNow(),expiresAt:t.timestamp().notNull(),deviceId:t.integer().references(()=>A.id,{onDelete:"cascade"}).notNull()}),t=>[fe("core_admin_sessions_token_idx").on(t.token),fe("core_admin_sessions_user_id_idx").on(t.userId)]).enableRLS(),zr=dt(Te,({one:t})=>({user:t(p,{fields:[Te.userId],references:[p.id]}),device:t(A,{fields:[Te.deviceId],references:[A.id]})}));import{relations as Fs}from"drizzle-orm";import{index as ut,pgTable as ks}from"drizzle-orm/pg-core";var K=ks("core_moderators_permissions",t=>({id:t.serial().primaryKey(),roleId:t.integer().references(()=>E.id,{onDelete:"cascade"}),userId:t.integer().references(()=>p.id,{onDelete:"cascade"}),createdAt:t.timestamp().notNull().defaultNow(),updatedAt:t.timestamp().notNull().$onUpdate(()=>new Date),protected:t.boolean().notNull().default(!1)}),t=>[ut("core_moderators_permissions_role_id_idx").on(t.roleId),ut("core_moderators_permissions_user_id_idx").on(t.userId)]).enableRLS(),Ur=Fs(K,({one:t})=>({group:t(E,{fields:[K.roleId],references:[E.id]}),user:t(p,{fields:[K.userId],references:[p.id]})}));import{existsSync as mt}from"fs";import{readFile as Ws}from"fs/promises";import{join as R,relative as pt}from"path";import{join as Cs}from"path";import{pathToFileURL as Ls}from"url";var ht=async()=>{let t=Cs(process.cwd(),"src","vitnode.config.ts");try{return(await import(Ls(t).href)).vitNodeConfig}catch(e){console.error("Failed to load config:",e),process.exit(1)}};var _t=async()=>{let e=[...(await ht()).plugins.map(a=>a.pluginId),"@vitnode/core"],s=re(process.cwd()),i=ie(s),r=se(i),o=process.cwd();await Promise.all(e.map(async a=>{let n=R(process.cwd(),"node_modules",a),l="";try{let _=R(n,"package.json");mt(_)&&(l=JSON.parse(await Ws(_,"utf-8")).name??"")}catch(_){console.error(`\x1B[31mError reading package.json for ${a}:\x1B[0m`,_);return}let d=a.replace(/\//g,"-").replace(/@/g,""),c=R(o,"src","app","[locale]","(main)",R("(plugins)",`(${d})`)),f=R(o,"src","app","[locale]","admin","(auth)",R("(plugins)",`(${d})`)),u=R(o,"src","locales",a),y=[{sourceDir:R(n,"src","app_admin"),destinationDir:f},{sourceDir:R(n,"src","app"),destinationDir:c},{sourceDir:R(n,"src","locales"),destinationDir:u}];for(let{sourceDir:_,destinationDir:D}of y)mt(_)&&!H(_)&&(console.log(`\x1B[36mCopying ${a}:\x1B[0m ${pt(s,_)} \u2192 ${pt(s,D)}`),st(_,D,l,r,i,s,!1))}))};import{spawn as js}from"child_process";var ue=async(t,e=[])=>new Promise((s,i)=>{let r=js(t,e,{stdio:"inherit",shell:!0});r.on("error",o=>{i(o)}),r.on("close",o=>{o!==0?i(new Error(`Command failed with exit code ${o}`)):s(!0)})});wt.config({path:Ms(process.cwd(),"..","..",".env")});var C=zs({connection:process.env.POSTGRES_URL??"postgresql://root:root@localhost:5432/vitnode",casing:"camelCase"}),Os=async()=>{try{await ue("npm",["run","drizzle-kit","up"]),await ue("npm",["run","drizzle-kit","generate"])}catch(t){console.error("\x1B[31m%s\x1B[0m",t),process.exit(1)}},$s=async()=>{try{await ue("npm",["run","drizzle-kit","migrate"])}catch(t){console.error("\x1B[31m%s\x1B[0m",t),process.exit(1)}},Hs=async()=>{let[t]=await C.select({count:gt()}).from(E).limit(1),[e]=await C.select({count:gt()}).from(I);if(e.count===0&&await C.insert(I).values([{code:"en",name:"English (USA)",default:!0,protected:!0,timezone:"America/New_York"}]),t.count===0){let s=await C.insert(E).values([{protected:!0,guest:!0},{protected:!0,default:!0},{protected:!0,color:"hsl(122, 80%, 45%)"},{protected:!0,root:!0,color:"hsl(0, 100%, 50%)"}]).returning({id:E.id});await C.insert(oe).values([{languageCode:"en",pluginCode:"core",itemId:s[0].id,value:"Guest",tableName:"core_roles",variable:"name"},{languageCode:"en",pluginCode:"core",itemId:s[1].id,value:"Member",tableName:"core_roles",variable:"name"},{languageCode:"en",pluginCode:"core",itemId:s[2].id,value:"Moderator",tableName:"core_roles",variable:"name"},{languageCode:"en",pluginCode:"core",itemId:s[3].id,value:"Administrator",tableName:"core_roles",variable:"name"}]),await Promise.all([await C.insert(K).values({roleId:s[2].id,protected:!0}),await C.insert(U).values({roleId:s[3].id,protected:!0})])}},yt=async({initMessage:t})=>{console.log(`${t} [1/4] Prepare plugins files...`),await _t(),console.log(`${t} [2/4] Generate migrations...`),await Os(),console.log(`${t} [3/4] Run migrations...`),await $s(),console.log(`
|
|
7
|
-
${t} [4/4] Insert initial data...`),await Hs(),console.log(`${t} \x1B[32mDatabase prepared successfully.\x1B[0m`),process.exit(0)};var
|
|
6
|
+
import{stat as Xt}from"fs";import{stat as Zt,readdir as es}from"fs/promises";import{EventEmitter as ts}from"events";import*as m from"path";import{stat as Pt,lstat as Ce,readdir as Dt,realpath as vt}from"fs/promises";import{Readable as Nt}from"stream";import{resolve as Le,relative as It,join as Rt,sep as St}from"path";var b={FILE_TYPE:"files",DIR_TYPE:"directories",FILE_DIR_TYPE:"files_directories",EVERYTHING_TYPE:"all"},pe={root:".",fileFilter:t=>!0,directoryFilter:t=>!0,type:b.FILE_TYPE,lstat:!1,depth:2147483648,alwaysStat:!1,highWaterMark:4096};Object.freeze(pe);var Me="READDIRP_RECURSIVE_ERROR",At=new Set(["ENOENT","EPERM","EACCES","ELOOP",Me]),We=[b.DIR_TYPE,b.EVERYTHING_TYPE,b.FILE_DIR_TYPE,b.FILE_TYPE],Tt=new Set([b.DIR_TYPE,b.EVERYTHING_TYPE,b.FILE_DIR_TYPE]),Ft=new Set([b.EVERYTHING_TYPE,b.FILE_DIR_TYPE,b.FILE_TYPE]),kt=t=>At.has(t.code),Ct=process.platform==="win32",je=t=>!0,ze=t=>{if(t===void 0)return je;if(typeof t=="function")return t;if(typeof t=="string"){let e=t.trim();return s=>s.basename===e}if(Array.isArray(t)){let e=t.map(s=>s.trim());return s=>e.some(i=>s.basename===i)}return je},_e=class extends Nt{constructor(e={}){super({objectMode:!0,autoDestroy:!0,highWaterMark:e.highWaterMark});let s={...pe,...e},{root:i,type:r}=s;this._fileFilter=ze(s.fileFilter),this._directoryFilter=ze(s.directoryFilter);let o=s.lstat?Ce:Pt;Ct?this._stat=a=>o(a,{bigint:!0}):this._stat=o,this._maxDepth=s.depth??pe.depth,this._wantsDir=r?Tt.has(r):!1,this._wantsFile=r?Ft.has(r):!1,this._wantsEverything=r===b.EVERYTHING_TYPE,this._root=Le(i),this._isDirent=!s.alwaysStat,this._statsProp=this._isDirent?"dirent":"stats",this._rdOptions={encoding:"utf8",withFileTypes:this._isDirent},this.parents=[this._exploreDir(i,1)],this.reading=!1,this.parent=void 0}async _read(e){if(!this.reading){this.reading=!0;try{for(;!this.destroyed&&e>0;){let s=this.parent,i=s&&s.files;if(i&&i.length>0){let{path:r,depth:o}=s,a=i.splice(0,e).map(c=>this._formatEntry(c,r)),n=await Promise.all(a);for(let c of n){if(!c)continue;if(this.destroyed)return;let d=await this._getEntryType(c);d==="directory"&&this._directoryFilter(c)?(o<=this._maxDepth&&this.parents.push(this._exploreDir(c.fullPath,o+1)),this._wantsDir&&(this.push(c),e--)):(d==="file"||this._includeAsFile(c))&&this._fileFilter(c)&&this._wantsFile&&(this.push(c),e--)}}else{let r=this.parents.pop();if(!r){this.push(null);break}if(this.parent=await r,this.destroyed)return}}}catch(s){this.destroy(s)}finally{this.reading=!1}}}async _exploreDir(e,s){let i;try{i=await Dt(e,this._rdOptions)}catch(r){this._onError(r)}return{files:i,depth:s,path:e}}async _formatEntry(e,s){let i,r=this._isDirent?e.name:e;try{let o=Le(Rt(s,r));i={path:It(this._root,o),fullPath:o,basename:r},i[this._statsProp]=this._isDirent?e:await this._stat(o)}catch(o){this._onError(o);return}return i}_onError(e){kt(e)&&!this.destroyed?this.emit("warn",e):this.destroy(e)}async _getEntryType(e){if(!e&&this._statsProp in e)return"";let s=e[this._statsProp];if(s.isFile())return"file";if(s.isDirectory())return"directory";if(s&&s.isSymbolicLink()){let i=e.fullPath;try{let r=await vt(i),o=await Ce(r);if(o.isFile())return"file";if(o.isDirectory()){let a=r.length;if(i.startsWith(r)&&i.substr(a,1)===St){let n=new Error(`Circular symlink detected: "${i}" points to "${r}"`);return n.code=Me,this._onError(n)}return"directory"}}catch(r){return this._onError(r),""}}}_includeAsFile(e){let s=e&&e[this._statsProp];return s&&this._wantsEverything&&!s.isDirectory()}};function Oe(t,e={}){let s=e.entryType||e.type;if(s==="both"&&(s=b.FILE_DIR_TYPE),s&&(e.type=s),t){if(typeof t!="string")throw new TypeError("readdirp: root argument must be a string. Usage: readdirp(root, options)");if(s&&!We.includes(s))throw new Error(`readdirp: Invalid type passed. Use one of ${We.join(", ")}`)}else throw new Error("readdirp: root argument is required. Usage: readdirp(root, options)");return e.root=t,new _e(e)}import{watchFile as Lt,unwatchFile as $e,watch as Wt}from"fs";import{open as jt,stat as Ye,lstat as zt,realpath as ge}from"fs/promises";import*as y from"path";import{type as Mt}from"os";var Ot="data",xe="end",Ue="close",X=()=>{};var Z=process.platform,Ee=Z==="win32",$t=Z==="darwin",Ht=Z==="linux",Yt=Z==="freebsd",Ke=Mt()==="OS400",x={ALL:"all",READY:"ready",ADD:"add",CHANGE:"change",ADD_DIR:"addDir",UNLINK:"unlink",UNLINK_DIR:"unlinkDir",RAW:"raw",ERROR:"error"},v=x,Ut="watch",Kt={lstat:zt,stat:Ye},F="listeners",q="errHandlers",L="rawEmitters",Gt=[F,q,L],Vt=new Set(["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]),qt=t=>Vt.has(y.extname(t).slice(1).toLowerCase()),ye=(t,e)=>{t instanceof Set?t.forEach(e):e(t)},z=(t,e,s)=>{let i=t[e];i instanceof Set||(t[e]=i=new Set([i])),i.add(s)},Bt=t=>e=>{let s=t[e];s instanceof Set?s.clear():delete t[e]},M=(t,e,s)=>{let i=t[e];i instanceof Set?i.delete(s):i===s&&delete t[e]},Ge=t=>t instanceof Set?t.size===0:!t,B=new Map;function He(t,e,s,i,r){let o=(a,n)=>{s(t),r(a,n,{watchedPath:t}),n&&t!==n&&J(y.resolve(t,n),F,y.join(t,n))};try{return Wt(t,{persistent:e.persistent},o)}catch(a){i(a);return}}var J=(t,e,s,i,r)=>{let o=B.get(t);o&&ye(o[e],a=>{a(s,i,r)})},Jt=(t,e,s,i)=>{let{listener:r,errHandler:o,rawEmitter:a}=i,n=B.get(e),c;if(!s.persistent)return c=He(t,s,r,o,a),c?c.close.bind(c):void 0;if(n)z(n,F,r),z(n,q,o),z(n,L,a);else{if(c=He(t,s,J.bind(null,e,F),o,J.bind(null,e,L)),!c)return;c.on(v.ERROR,async d=>{let l=J.bind(null,e,q);if(n&&(n.watcherUnusable=!0),Ee&&d.code==="EPERM")try{await(await jt(t,"r")).close(),l(d)}catch{}else l(d)}),n={listeners:r,errHandlers:o,rawEmitters:a,watcher:c},B.set(e,n)}return()=>{M(n,F,r),M(n,q,o),M(n,L,a),Ge(n.listeners)&&(n.watcher.close(),B.delete(e),Gt.forEach(Bt(n)),n.watcher=void 0,Object.freeze(n))}},we=new Map,Qt=(t,e,s,i)=>{let{listener:r,rawEmitter:o}=i,a=we.get(e),n=a&&a.options;return n&&(n.persistent<s.persistent||n.interval>s.interval)&&($e(e),a=void 0),a?(z(a,F,r),z(a,L,o)):(a={listeners:r,rawEmitters:o,options:s,watcher:Lt(e,s,(c,d)=>{ye(a.rawEmitters,f=>{f(v.CHANGE,e,{curr:c,prev:d})});let l=c.mtimeMs;(c.size!==d.size||l>d.mtimeMs||l===0)&&ye(a.listeners,f=>f(t,c))})},we.set(e,a)),()=>{M(a,F,r),M(a,L,o),Ge(a.listeners)&&(we.delete(e),$e(e),a.options=a.watcher=void 0,Object.freeze(a))}},Q=class{constructor(e){this.fsw=e,this._boundHandleError=s=>e._handleError(s)}_watchWithNodeFs(e,s){let i=this.fsw.options,r=y.dirname(e),o=y.basename(e);this.fsw._getWatchedDir(r).add(o);let n=y.resolve(e),c={persistent:i.persistent};s||(s=X);let d;if(i.usePolling){let l=i.interval!==i.binaryInterval;c.interval=l&&qt(o)?i.binaryInterval:i.interval,d=Qt(e,n,c,{listener:s,rawEmitter:this.fsw._emitRaw})}else d=Jt(e,n,c,{listener:s,errHandler:this._boundHandleError,rawEmitter:this.fsw._emitRaw});return d}_handleFile(e,s,i){if(this.fsw.closed)return;let r=y.dirname(e),o=y.basename(e),a=this.fsw._getWatchedDir(r),n=s;if(a.has(o))return;let c=async(l,f)=>{if(this.fsw._throttle(Ut,e,5)){if(!f||f.mtimeMs===0)try{let u=await Ye(e);if(this.fsw.closed)return;let w=u.atimeMs,_=u.mtimeMs;if((!w||w<=_||_!==n.mtimeMs)&&this.fsw._emit(v.CHANGE,e,u),($t||Ht||Yt)&&n.ino!==u.ino){this.fsw._closeFile(l),n=u;let D=this._watchWithNodeFs(e,c);D&&this.fsw._addPathCloser(l,D)}else n=u}catch{this.fsw._remove(r,o)}else if(a.has(o)){let u=f.atimeMs,w=f.mtimeMs;(!u||u<=w||w!==n.mtimeMs)&&this.fsw._emit(v.CHANGE,e,f),n=f}}},d=this._watchWithNodeFs(e,c);if(!(i&&this.fsw.options.ignoreInitial)&&this.fsw._isntIgnored(e)){if(!this.fsw._throttle(v.ADD,e,0))return;this.fsw._emit(v.ADD,e,s)}return d}async _handleSymlink(e,s,i,r){if(this.fsw.closed)return;let o=e.fullPath,a=this.fsw._getWatchedDir(s);if(!this.fsw.options.followSymlinks){this.fsw._incrReadyCount();let n;try{n=await ge(i)}catch{return this.fsw._emitReady(),!0}return this.fsw.closed?void 0:(a.has(r)?this.fsw._symlinkPaths.get(o)!==n&&(this.fsw._symlinkPaths.set(o,n),this.fsw._emit(v.CHANGE,i,e.stats)):(a.add(r),this.fsw._symlinkPaths.set(o,n),this.fsw._emit(v.ADD,i,e.stats)),this.fsw._emitReady(),!0)}if(this.fsw._symlinkPaths.has(o))return!0;this.fsw._symlinkPaths.set(o,!0)}_handleRead(e,s,i,r,o,a,n){if(e=y.join(e,""),n=this.fsw._throttle("readdir",e,1e3),!n)return;let c=this.fsw._getWatchedDir(i.path),d=new Set,l=this.fsw._readdirp(e,{fileFilter:f=>i.filterPath(f),directoryFilter:f=>i.filterDir(f)});if(l)return l.on(Ot,async f=>{if(this.fsw.closed){l=void 0;return}let u=f.path,w=y.join(e,u);if(d.add(u),!(f.stats.isSymbolicLink()&&await this._handleSymlink(f,e,w,u))){if(this.fsw.closed){l=void 0;return}(u===r||!r&&!c.has(u))&&(this.fsw._incrReadyCount(),w=y.join(o,y.relative(o,w)),this._addToNodeFs(w,s,i,a+1))}}).on(v.ERROR,this._boundHandleError),new Promise((f,u)=>{if(!l)return u();l.once(xe,()=>{if(this.fsw.closed){l=void 0;return}let w=n?n.clear():!1;f(void 0),c.getChildren().filter(_=>_!==e&&!d.has(_)).forEach(_=>{this.fsw._remove(e,_)}),l=void 0,w&&this._handleRead(e,!1,i,r,o,a,n)})})}async _handleDir(e,s,i,r,o,a,n){let c=this.fsw._getWatchedDir(y.dirname(e)),d=c.has(y.basename(e));!(i&&this.fsw.options.ignoreInitial)&&!o&&!d&&this.fsw._emit(v.ADD_DIR,e,s),c.add(y.basename(e)),this.fsw._getWatchedDir(e);let l,f,u=this.fsw.options.depth;if((u==null||r<=u)&&!this.fsw._symlinkPaths.has(n)){if(!o&&(await this._handleRead(e,i,a,o,e,r,l),this.fsw.closed))return;f=this._watchWithNodeFs(e,(w,_)=>{_&&_.mtimeMs===0||this._handleRead(w,!1,a,o,e,r,l)})}return f}async _addToNodeFs(e,s,i,r,o){let a=this.fsw._emitReady;if(this.fsw._isIgnored(e)||this.fsw.closed)return a(),!1;let n=this.fsw._getWatchHelpers(e);i&&(n.filterPath=c=>i.filterPath(c),n.filterDir=c=>i.filterDir(c));try{let c=await Kt[n.statMethod](n.watchPath);if(this.fsw.closed)return;if(this.fsw._isIgnored(n.watchPath,c))return a(),!1;let d=this.fsw.options.followSymlinks,l;if(c.isDirectory()){let f=y.resolve(e),u=d?await ge(e):e;if(this.fsw.closed||(l=await this._handleDir(n.watchPath,c,s,r,o,n,u),this.fsw.closed))return;f!==u&&u!==void 0&&this.fsw._symlinkPaths.set(f,u)}else if(c.isSymbolicLink()){let f=d?await ge(e):e;if(this.fsw.closed)return;let u=y.dirname(n.watchPath);if(this.fsw._getWatchedDir(u).add(n.watchPath),this.fsw._emit(v.ADD,n.watchPath,c),l=await this._handleDir(u,c,s,r,e,n,f),this.fsw.closed)return;f!==void 0&&this.fsw._symlinkPaths.set(y.resolve(e),f)}else l=this._handleFile(n.watchPath,c,s);return a(),l&&this.fsw._addPathCloser(e,l),!1}catch(c){if(this.fsw._handleError(c))return a(),e}}};var be="/",ss="//",Xe=".",rs="..",is="string",os=/\\/g,Ve=/\/\//,ns=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,as=/^\.[/\\]/;function ee(t){return Array.isArray(t)?t:[t]}var Pe=t=>typeof t=="object"&&t!==null&&!(t instanceof RegExp);function cs(t){return typeof t=="function"?t:typeof t=="string"?e=>t===e:t instanceof RegExp?e=>t.test(e):typeof t=="object"&&t!==null?e=>{if(t.path===e)return!0;if(t.recursive){let s=m.relative(t.path,e);return s?!s.startsWith("..")&&!m.isAbsolute(s):!1}return!1}:()=>!1}function ls(t){if(typeof t!="string")throw new Error("string expected");t=m.normalize(t),t=t.replace(/\\/g,"/");let e=!1;t.startsWith("//")&&(e=!0);let s=/\/\//;for(;t.match(s);)t=t.replace(s,"/");return e&&(t="/"+t),t}function qe(t,e,s){let i=ls(e);for(let r=0;r<t.length;r++){let o=t[r];if(o(i,s))return!0}return!1}function ds(t,e){if(t==null)throw new TypeError("anymatch: specify first argument");let i=ee(t).map(r=>cs(r));return e==null?(r,o)=>qe(i,r,o):qe(i,e)}var Be=t=>{let e=ee(t).flat();if(!e.every(s=>typeof s===is))throw new TypeError(`Non-string provided as watch path: ${e}`);return e.map(Ze)},Je=t=>{let e=t.replace(os,be),s=!1;for(e.startsWith(ss)&&(s=!0);e.match(Ve);)e=e.replace(Ve,be);return s&&(e=be+e),e},Ze=t=>Je(m.normalize(Je(t))),Qe=(t="")=>e=>typeof e=="string"?Ze(m.isAbsolute(e)?e:m.join(t,e)):e,fs=(t,e)=>m.isAbsolute(t)?t:m.join(e,t),us=Object.freeze(new Set),De=class{constructor(e,s){this.path=e,this._removeWatcher=s,this.items=new Set}add(e){let{items:s}=this;s&&e!==Xe&&e!==rs&&s.add(e)}async remove(e){let{items:s}=this;if(!s||(s.delete(e),s.size>0))return;let i=this.path;try{await es(i)}catch{this._removeWatcher&&this._removeWatcher(m.dirname(i),m.basename(i))}}has(e){let{items:s}=this;if(s)return s.has(e)}getChildren(){let{items:e}=this;return e?[...e.values()]:[]}dispose(){this.items.clear(),this.path="",this._removeWatcher=X,this.items=us,Object.freeze(this)}},hs="stat",ms="lstat",ve=class{constructor(e,s,i){this.fsw=i;let r=e;this.path=e=e.replace(as,""),this.watchPath=r,this.fullWatchPath=m.resolve(r),this.dirParts=[],this.dirParts.forEach(o=>{o.length>1&&o.pop()}),this.followSymlinks=s,this.statMethod=s?hs:ms}entryPath(e){return m.join(this.watchPath,m.relative(this.watchPath,e.fullPath))}filterPath(e){let{stats:s}=e;if(s&&s.isSymbolicLink())return this.filterDir(e);let i=this.entryPath(e);return this.fsw._isntIgnored(i,s)&&this.fsw._hasReadPermissions(s)}filterDir(e){return this.fsw._isntIgnored(this.entryPath(e),e.stats)}},te=class extends ts{constructor(e={}){super(),this.closed=!1,this._closers=new Map,this._ignoredPaths=new Set,this._throttled=new Map,this._streams=new Set,this._symlinkPaths=new Map,this._watched=new Map,this._pendingWrites=new Map,this._pendingUnlinks=new Map,this._readyCount=0,this._readyEmitted=!1;let s=e.awaitWriteFinish,i={stabilityThreshold:2e3,pollInterval:100},r={persistent:!0,ignoreInitial:!1,ignorePermissionErrors:!1,interval:100,binaryInterval:300,followSymlinks:!0,usePolling:!1,atomic:!0,...e,ignored:e.ignored?ee(e.ignored):ee([]),awaitWriteFinish:s===!0?i:typeof s=="object"?{...i,...s}:!1};Ke&&(r.usePolling=!0),r.atomic===void 0&&(r.atomic=!r.usePolling);let o=process.env.CHOKIDAR_USEPOLLING;if(o!==void 0){let c=o.toLowerCase();c==="false"||c==="0"?r.usePolling=!1:c==="true"||c==="1"?r.usePolling=!0:r.usePolling=!!c}let a=process.env.CHOKIDAR_INTERVAL;a&&(r.interval=Number.parseInt(a,10));let n=0;this._emitReady=()=>{n++,n>=this._readyCount&&(this._emitReady=X,this._readyEmitted=!0,process.nextTick(()=>this.emit(x.READY)))},this._emitRaw=(...c)=>this.emit(x.RAW,...c),this._boundRemove=this._remove.bind(this),this.options=r,this._nodeFsHandler=new Q(this),Object.freeze(r)}_addIgnoredPath(e){if(Pe(e)){for(let s of this._ignoredPaths)if(Pe(s)&&s.path===e.path&&s.recursive===e.recursive)return}this._ignoredPaths.add(e)}_removeIgnoredPath(e){if(this._ignoredPaths.delete(e),typeof e=="string")for(let s of this._ignoredPaths)Pe(s)&&s.path===e&&this._ignoredPaths.delete(s)}add(e,s,i){let{cwd:r}=this.options;this.closed=!1,this._closePromise=void 0;let o=Be(e);return r&&(o=o.map(a=>fs(a,r))),o.forEach(a=>{this._removeIgnoredPath(a)}),this._userIgnored=void 0,this._readyCount||(this._readyCount=0),this._readyCount+=o.length,Promise.all(o.map(async a=>{let n=await this._nodeFsHandler._addToNodeFs(a,!i,void 0,0,s);return n&&this._emitReady(),n})).then(a=>{this.closed||a.forEach(n=>{n&&this.add(m.dirname(n),m.basename(s||n))})}),this}unwatch(e){if(this.closed)return this;let s=Be(e),{cwd:i}=this.options;return s.forEach(r=>{!m.isAbsolute(r)&&!this._closers.has(r)&&(i&&(r=m.join(i,r)),r=m.resolve(r)),this._closePath(r),this._addIgnoredPath(r),this._watched.has(r)&&this._addIgnoredPath({path:r,recursive:!0}),this._userIgnored=void 0}),this}close(){if(this._closePromise)return this._closePromise;this.closed=!0,this.removeAllListeners();let e=[];return this._closers.forEach(s=>s.forEach(i=>{let r=i();r instanceof Promise&&e.push(r)})),this._streams.forEach(s=>s.destroy()),this._userIgnored=void 0,this._readyCount=0,this._readyEmitted=!1,this._watched.forEach(s=>s.dispose()),this._closers.clear(),this._watched.clear(),this._streams.clear(),this._symlinkPaths.clear(),this._throttled.clear(),this._closePromise=e.length?Promise.all(e).then(()=>{}):Promise.resolve(),this._closePromise}getWatched(){let e={};return this._watched.forEach((s,i)=>{let o=(this.options.cwd?m.relative(this.options.cwd,i):i)||Xe;e[o]=s.getChildren().sort()}),e}emitWithAll(e,s){this.emit(e,...s),e!==x.ERROR&&this.emit(x.ALL,e,...s)}async _emit(e,s,i){if(this.closed)return;let r=this.options;Ee&&(s=m.normalize(s)),r.cwd&&(s=m.relative(r.cwd,s));let o=[s];i!=null&&o.push(i);let a=r.awaitWriteFinish,n;if(a&&(n=this._pendingWrites.get(s)))return n.lastChange=new Date,this;if(r.atomic){if(e===x.UNLINK)return this._pendingUnlinks.set(s,[e,...o]),setTimeout(()=>{this._pendingUnlinks.forEach((c,d)=>{this.emit(...c),this.emit(x.ALL,...c),this._pendingUnlinks.delete(d)})},typeof r.atomic=="number"?r.atomic:100),this;e===x.ADD&&this._pendingUnlinks.has(s)&&(e=x.CHANGE,this._pendingUnlinks.delete(s))}if(a&&(e===x.ADD||e===x.CHANGE)&&this._readyEmitted){let c=(d,l)=>{d?(e=x.ERROR,o[0]=d,this.emitWithAll(e,o)):l&&(o.length>1?o[1]=l:o.push(l),this.emitWithAll(e,o))};return this._awaitWriteFinish(s,a.stabilityThreshold,e,c),this}if(e===x.CHANGE&&!this._throttle(x.CHANGE,s,50))return this;if(r.alwaysStat&&i===void 0&&(e===x.ADD||e===x.ADD_DIR||e===x.CHANGE)){let c=r.cwd?m.join(r.cwd,s):s,d;try{d=await Zt(c)}catch{}if(!d||this.closed)return;o.push(d)}return this.emitWithAll(e,o),this}_handleError(e){let s=e&&e.code;return e&&s!=="ENOENT"&&s!=="ENOTDIR"&&(!this.options.ignorePermissionErrors||s!=="EPERM"&&s!=="EACCES")&&this.emit(x.ERROR,e),e||this.closed}_throttle(e,s,i){this._throttled.has(e)||this._throttled.set(e,new Map);let r=this._throttled.get(e);if(!r)throw new Error("invalid throttle");let o=r.get(s);if(o)return o.count++,!1;let a,n=()=>{let d=r.get(s),l=d?d.count:0;return r.delete(s),clearTimeout(a),d&&clearTimeout(d.timeoutObject),l};a=setTimeout(n,i);let c={timeoutObject:a,clear:n,count:0};return r.set(s,c),c}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(e,s,i,r){let o=this.options.awaitWriteFinish;if(typeof o!="object")return;let a=o.pollInterval,n,c=e;this.options.cwd&&!m.isAbsolute(e)&&(c=m.join(this.options.cwd,e));let d=new Date,l=this._pendingWrites;function f(u){Xt(c,(w,_)=>{if(w||!l.has(e)){w&&w.code!=="ENOENT"&&r(w);return}let D=Number(new Date);u&&_.size!==u.size&&(l.get(e).lastChange=D);let j=l.get(e);D-j.lastChange>=s?(l.delete(e),r(void 0,_)):n=setTimeout(f,a,_)})}l.has(e)||(l.set(e,{lastChange:d,cancelWait:()=>(l.delete(e),clearTimeout(n),i)}),n=setTimeout(f,a))}_isIgnored(e,s){if(this.options.atomic&&ns.test(e))return!0;if(!this._userIgnored){let{cwd:i}=this.options,o=(this.options.ignored||[]).map(Qe(i)),n=[...[...this._ignoredPaths].map(Qe(i)),...o];this._userIgnored=ds(n,void 0)}return this._userIgnored(e,s)}_isntIgnored(e,s){return!this._isIgnored(e,s)}_getWatchHelpers(e){return new ve(e,this.options.followSymlinks,this)}_getWatchedDir(e){let s=m.resolve(e);return this._watched.has(s)||this._watched.set(s,new De(s,this._boundRemove)),this._watched.get(s)}_hasReadPermissions(e){return this.options.ignorePermissionErrors?!0:!!(Number(e.mode)&256)}_remove(e,s,i){let r=m.join(e,s),o=m.resolve(r);if(i=i??(this._watched.has(r)||this._watched.has(o)),!this._throttle("remove",r,100))return;!i&&this._watched.size===1&&this.add(e,s,!0),this._getWatchedDir(r).getChildren().forEach(u=>this._remove(r,u));let c=this._getWatchedDir(e),d=c.has(s);c.remove(s),this._symlinkPaths.has(o)&&this._symlinkPaths.delete(o);let l=r;if(this.options.cwd&&(l=m.relative(this.options.cwd,r)),this.options.awaitWriteFinish&&this._pendingWrites.has(l)&&this._pendingWrites.get(l).cancelWait()===x.ADD)return;this._watched.delete(r),this._watched.delete(o);let f=i?x.UNLINK_DIR:x.UNLINK;d&&!this._isIgnored(r)&&this._emit(f,r),this._closePath(r)}_closePath(e){this._closeFile(e);let s=m.dirname(e);this._getWatchedDir(s).remove(m.basename(e))}_closeFile(e){let s=this._closers.get(e);s&&(s.forEach(i=>i()),this._closers.delete(e))}_addPathCloser(e,s){if(!s)return;let i=this._closers.get(e);i||(i=[],this._closers.set(e,i)),i.push(s)}_readdirp(e,s){if(this.closed)return;let i={type:x.ALL,alwaysStat:!0,lstat:!0,...s,depth:0},r=Oe(e,i);return this._streams.add(r),r.once(Ue,()=>{r=void 0}),r.once(xe,()=>{r&&(this._streams.delete(r),r=void 0)}),r}};function ps(t,e={}){let s=new te(e);return s.add(t),s}var et={watch:ps,FSWatcher:te};import{existsSync as k,mkdirSync as Is,readFileSync as Rs,unlinkSync as Ss}from"fs";import{basename as rt,join as P,relative as it}from"path";import{copyFileSync as _s,existsSync as I,mkdirSync as gs,readdirSync as Re,readFileSync as ws,writeFileSync as ys}from"fs";import{basename as tt,dirname as O,extname as xs,join as N,normalize as Es,relative as W,sep as bs}from"path";var Ps=/import\s+(?:(?:{[^}]*})|(?:[^{}\s,]*))?\s*(?:,\s*(?:{[^}]*}))?\s*from\s+['"]([./]+[^'"]*)['"]/g,Ds=/import\s+(?:(?:{[^}]*})|(?:[^{}\s,]*))?\s*(?:,\s*(?:{[^}]*}))?\s*from\s+['"](@\/[^'"]*)['"]/g,vs=/import\s*\(\s*['"](@\/[^'"]*)['"]\s*\)/g,Ne=/\.(js|jsx|ts|tsx)$/,Ie=/^page\.(tsx|ts|jsx|js)$/i,$=(t,e)=>{let i=W(e,t).split(bs);i.pop();let r=i.filter(o=>!o.startsWith("("));return Es(r.join("/"))},se=t=>{let e=new Map,s=i=>{if(I(i))for(let r of Re(i,{withFileTypes:!0})){let o=N(i,r.name);if(r.isDirectory()){s(o);continue}if(Ie.test(r.name)){let a=$(o,t);e.set(a,o)}}};return s(t),e},Ns=(t,e)=>{let s=t.replace(Ps,(i,r)=>{if(r.startsWith(".")){let a=r.replace(Ne,"").replace(/^(?:\.\.\/)+/,"");return i.replace(r,`${e}/${a}`)}return i});return s=s.replace(Ds,(i,r)=>{let o=r.replace(/^@\//,"").replace(Ne,"");return i.replace(r,`${e}/${o}`)}),s=s.replace(vs,(i,r)=>{let o=r.replace(/^@\//,"").replace(Ne,"");return i.replace(r,`${e}/${o}`)}),s};function re(t){let e=t;for(;e!==O(e);){if(I(N(e,"turbo.json"))||I(N(e,".git")))return e;e=O(e)}let s=N(t,"package.json");if(I(s))return O(s);throw new Error("\u274C Could not locate project root")}function ie(t){let e=N(t,"src","app","[locale]");if(I(e))return e;let i=(o=>{let a=[];if(!I(o))return a;let n=(c,d=0)=>{if(!(d>4))try{let l=Re(c,{withFileTypes:!0});for(let f of l){if(!f.isDirectory())continue;let u=N(c,f.name);if(f.name==="[locale]"&&O(u).endsWith(N("src","app"))){a.push(u);continue}n(u,d+1)}}catch{}};return n(o),a})(t);return i.length>0?i[0]:N(t,"apps","docs","src","app","[locale]")}var H=t=>{let e=[];if(!I(t))return e;let s=Re(t,{withFileTypes:!0});for(let i of s){let r=N(t,i.name);i.isDirectory()?e.push(...H(r)):e.push(r)}return e},Y=t=>I(t)?H(t).length===0:!0,Se=(t,e,s,i,r,o,a=!0)=>{let n=tt(t);if(Ie.test(n)){let c=$(e,r),d=i.get(c);if(d&&d!==e){a&&console.log(`\x1B[31mSkipped duplicate page:\x1B[0m ${W(o,e)} (collides with ${W(o,d)})`);return}}try{let c=O(e);I(c)||gs(c,{recursive:!0});let d=xs(t);if(s&&[".js",".jsx",".ts",".tsx"].includes(d)){let l=ws(t,"utf-8"),f=Ns(l,s);ys(e,f)}else _s(t,e);if(a){let l=t.indexOf(N("src","app")),f=l!==-1?t.substring(l):t.startsWith(o)?W(o,t):t,u=e.startsWith(o)?W(o,e):e;console.log(`\x1B[32mCopied:\x1B[0m ${f} \u2192 ${u}`)}if(Ie.test(tt(e))){let l=$(e,r);i.set(l,e)}}catch(c){console.error(`\x1B[31mError copying file:\x1B[0m ${t}`,c)}},st=(t,e,s,i,r,o,a=!0)=>{if(!I(t)||Y(t))return;let n=H(t);for(let c of n){let d=W(t,c),l=N(e,d);Se(c,l,s,i,r,o,a)}};var ot=({initMessage:t})=>{let e=process.cwd(),s=re(e),i=ie(s),r=se(i),o=rt(e);try{let h=P(e,"package.json");k(h)&&(o=JSON.parse(Rs(h,"utf-8")).name??"")}catch(h){console.error("\x1B[31mError reading package.json:\x1B[0m",h);return}let a=o.replace(/\//g,"-").replace(/@/g,""),n=P(s,"apps","docs","src","app","[locale]","(main)",P("(plugins)",`(${a})`)),c=P(s,"apps","docs","src","app","[locale]","admin","(auth)",P("(plugins)",`(${a})`)),d=P(s,"apps","docs","src","locales",o),l=[{sourceDir:P(e,"src","app_admin"),destinationDir:c},{sourceDir:P(e,"src","app"),destinationDir:n},{sourceDir:P(e,"src","locales"),destinationDir:d}];for(let{sourceDir:h,destinationDir:g}of l)k(h)&&!Y(h)&&!k(g)&&Is(g,{recursive:!0});let f=(h,g)=>{Se(h,g,o,r,i,s)},u=h=>{try{if(k(h)&&(Ss(h),console.log(`\x1B[33mRemoved:\x1B[0m ${h}`),/^page\.(tsx|ts|jsx|js)$/i.test(rt(h)))){let g=$(h,i);r.get(g)===h&&r.delete(g)}}catch(g){console.error(`\x1B[31mError removing file:\x1B[0m ${h}`,g)}},w=(h,g)=>{if(!k(g)||g.includes(P("src","locales")))return;let me=H(g);for(let T of me){let V=it(g,T),bt=P(h,V);k(bt)||u(T)}};for(let{sourceDir:h,destinationDir:g}of l)w(h,g);console.log(`${t} \x1B[34mWatching for changes in plugins...\x1B[0m`);let _=l.map(h=>h.sourceDir).filter(h=>k(h)),D=et.watch(_,{ignoreInitial:!1,persistent:!0}),j=h=>{let g=l.filter(({sourceDir:T})=>h.startsWith(T));if(g.length===0)throw new Error(`No matching source directory for: ${h}`);let he=g.reduce((T,V)=>V.sourceDir.length>T.sourceDir.length?V:T),me=it(he.sourceDir,h);return P(he.destinationDir,me)};D.on("add",h=>{let g=j(h);f(h,g)}).on("change",h=>{let g=j(h);f(h,g)}).on("unlink",h=>{let g=j(h);u(g)}).on("error",h=>{console.error("\x1B[31mWatcher error:\x1B[0m",h)})};import*as wt from"dotenv";import{count as gt}from"drizzle-orm";import{drizzle as zs}from"drizzle-orm/postgres-js";import{join as Ms}from"path";import{relations as dt}from"drizzle-orm";import{index as fe,pgTable as ft}from"drizzle-orm/pg-core";import{pgTable as As}from"drizzle-orm/pg-core";var E=As("core_roles",t=>({id:t.serial().primaryKey(),createdAt:t.timestamp().notNull().defaultNow(),updatedAt:t.timestamp().notNull().$onUpdate(()=>new Date),protected:t.boolean().notNull().default(!1),default:t.boolean().notNull().default(!1),root:t.boolean().notNull().default(!1),guest:t.boolean().notNull().default(!1),color:t.varchar({length:19})})).enableRLS();import{relations as at}from"drizzle-orm";import{index as ct,pgTable as lt}from"drizzle-orm/pg-core";import{relations as le}from"drizzle-orm";import{index as ne,pgTable as de}from"drizzle-orm/pg-core";import{relations as Ts}from"drizzle-orm";import{index as Ae,pgTable as nt}from"drizzle-orm/pg-core";var R=nt("core_languages",t=>({id:t.serial().primaryKey(),code:t.varchar({length:32}).notNull().unique(),name:t.varchar({length:255}).notNull(),timezone:t.varchar({length:255}).notNull().default("UTC"),protected:t.boolean().notNull().default(!1),default:t.boolean().notNull().default(!1),enabled:t.boolean().notNull().default(!0),createdAt:t.timestamp().notNull().defaultNow(),updatedAt:t.timestamp().notNull().$onUpdate(()=>new Date),time24:t.boolean().notNull().default(!1)}),t=>[Ae("core_languages_code_idx").on(t.code),Ae("core_languages_name_idx").on(t.name)]).enableRLS(),oe=nt("core_languages_words",t=>({id:t.serial().primaryKey(),languageCode:t.varchar().notNull().references(()=>R.code,{onDelete:"cascade"}),pluginCode:t.varchar({length:50}).notNull(),itemId:t.integer().notNull(),value:t.text().notNull(),tableName:t.varchar({length:255}).notNull(),variable:t.varchar({length:255}).notNull()}),t=>[Ae("core_languages_words_lang_code_idx").on(t.languageCode)]).enableRLS(),pr=Ts(oe,({one:t})=>({language:t(R,{fields:[oe.languageCode],references:[R.code]})}));var p=de("core_users",t=>({id:t.serial().primaryKey(),nameCode:t.varchar({length:255}).notNull().unique(),name:t.varchar({length:255}).notNull().unique(),email:t.varchar({length:255}).notNull().unique(),password:t.varchar(),createdAt:t.timestamp().notNull().defaultNow(),newsletter:t.boolean().notNull().default(!1),avatarColor:t.varchar({length:6}).notNull(),emailVerified:t.boolean().notNull().default(!1),roleId:t.integer().references(()=>E.id).notNull(),birthday:t.timestamp(),ipAddress:t.varchar({length:40}).notNull(),language:t.varchar({length:32}).notNull().default("en").references(()=>R.code,{onDelete:"set default"})}),t=>[ne("core_users_name_code_idx").on(t.nameCode),ne("core_users_name_idx").on(t.name),ne("core_users_email_idx").on(t.email)]).enableRLS(),Er=le(p,({one:t,many:e})=>({group:t(E,{fields:[p.roleId],references:[E.id]}),language:t(R,{fields:[p.language],references:[R.code]}),confirm_email:t(ae,{fields:[p.id],references:[ae.userId]}),sso:e(Te),forgot_password:t(ce,{fields:[p.id],references:[ce.userId]})})),Te=de("core_users_sso",t=>({userId:t.integer().references(()=>p.id,{onDelete:"cascade"}).notNull(),providerId:t.varchar({length:255}).notNull(),providerAccountId:t.varchar({length:255}).notNull(),createdAt:t.timestamp().notNull().defaultNow(),updatedAt:t.timestamp().notNull().$onUpdate(()=>new Date)}),t=>[ne("core_users_sso_user_id_idx").on(t.userId)]).enableRLS(),br=le(Te,({one:t})=>({user:t(p,{fields:[Te.userId],references:[p.id]})})),ae=de("core_users_confirm_emails",t=>({id:t.serial().primaryKey(),userId:t.integer().references(()=>p.id,{onDelete:"cascade"}).notNull(),token:t.varchar({length:100}).notNull().unique(),createdAt:t.timestamp().notNull().defaultNow(),expires:t.timestamp().notNull()})).enableRLS(),Pr=le(ae,({one:t})=>({user:t(p,{fields:[ae.userId],references:[p.id]})})),ce=de("core_users_forgot_password",t=>({id:t.serial().primaryKey(),userId:t.integer().references(()=>p.id,{onDelete:"cascade"}).notNull().unique(),token:t.varchar({length:100}).notNull().unique(),ip_address:t.varchar({length:40}).notNull(),createdAt:t.timestamp().notNull().defaultNow(),expiresAt:t.timestamp().notNull()})).enableRLS(),Dr=le(ce,({one:t})=>({user:t(p,{fields:[ce.userId],references:[p.id]})}));var U=lt("core_sessions",t=>({id:t.serial().primaryKey(),token:t.varchar({length:255}).notNull().unique(),userId:t.integer().notNull().references(()=>p.id,{onDelete:"cascade"}),createdAt:t.timestamp().notNull().defaultNow(),expiresAt:t.timestamp().notNull(),deviceId:t.integer().references(()=>A.id,{onDelete:"cascade"}).notNull()}),t=>[ct("core_sessions_user_id_idx").on(t.userId)]).enableRLS(),Sr=at(U,({one:t})=>({user:t(p,{fields:[U.userId],references:[p.id]}),device:t(A,{fields:[U.deviceId],references:[A.id]})})),A=lt("core_sessions_known_devices",t=>({id:t.serial().primaryKey(),publicId:t.varchar({length:32}).notNull().unique(),ipAddress:t.varchar({length:40}).notNull(),userAgent:t.text().notNull(),lastSeen:t.timestamp().notNull().defaultNow()}),t=>[ct("core_sessions_known_devices_ip_address_idx").on(t.ipAddress)]).enableRLS(),Ar=at(A,({one:t})=>({session:t(U,{fields:[A.id],references:[U.deviceId]})}));var K=ft("core_admin_permissions",t=>({id:t.serial().primaryKey(),roleId:t.integer().references(()=>E.id,{onDelete:"cascade"}),userId:t.integer().references(()=>p.id,{onDelete:"cascade"}),createdAt:t.timestamp().notNull().defaultNow(),updatedAt:t.timestamp().notNull().$onUpdate(()=>new Date),protected:t.boolean().notNull().default(!1)}),t=>[fe("core_admin_permissions_role_id_idx").on(t.roleId),fe("core_admin_permissions_user_id_idx").on(t.userId)]).enableRLS(),jr=dt(K,({one:t})=>({group:t(E,{fields:[K.roleId],references:[E.id]}),user:t(p,{fields:[K.userId],references:[p.id]})})),Fe=ft("core_admin_sessions",t=>({id:t.serial().primaryKey(),token:t.varchar({length:255}).notNull().unique(),userId:t.integer().notNull().references(()=>p.id,{onDelete:"cascade"}),createdAt:t.timestamp().notNull().defaultNow(),lastSeen:t.timestamp().notNull().defaultNow(),expiresAt:t.timestamp().notNull(),deviceId:t.integer().references(()=>A.id,{onDelete:"cascade"}).notNull()}),t=>[fe("core_admin_sessions_token_idx").on(t.token),fe("core_admin_sessions_user_id_idx").on(t.userId)]).enableRLS(),zr=dt(Fe,({one:t})=>({user:t(p,{fields:[Fe.userId],references:[p.id]}),device:t(A,{fields:[Fe.deviceId],references:[A.id]})}));import{relations as Fs}from"drizzle-orm";import{index as ut,pgTable as ks}from"drizzle-orm/pg-core";var G=ks("core_moderators_permissions",t=>({id:t.serial().primaryKey(),roleId:t.integer().references(()=>E.id,{onDelete:"cascade"}),userId:t.integer().references(()=>p.id,{onDelete:"cascade"}),createdAt:t.timestamp().notNull().defaultNow(),updatedAt:t.timestamp().notNull().$onUpdate(()=>new Date),protected:t.boolean().notNull().default(!1)}),t=>[ut("core_moderators_permissions_role_id_idx").on(t.roleId),ut("core_moderators_permissions_user_id_idx").on(t.userId)]).enableRLS(),Ur=Fs(G,({one:t})=>({group:t(E,{fields:[G.roleId],references:[E.id]}),user:t(p,{fields:[G.userId],references:[p.id]})}));import{existsSync as mt}from"fs";import{readFile as Ws}from"fs/promises";import{join as S,relative as pt}from"path";import{join as Cs}from"path";import{pathToFileURL as Ls}from"url";var ht=async()=>{let t=Cs(process.cwd(),"src","vitnode.config.ts");try{return(await import(Ls(t).href)).vitNodeConfig}catch(e){console.error("Failed to load config:",e),process.exit(1)}};var _t=async()=>{let e=[...(await ht()).plugins.map(a=>a.pluginId),"@vitnode/core"],s=re(process.cwd()),i=ie(s),r=se(i),o=process.cwd();await Promise.all(e.map(async a=>{let n=S(process.cwd(),"node_modules",a),c="";try{let _=S(n,"package.json");mt(_)&&(c=JSON.parse(await Ws(_,"utf-8")).name??"")}catch(_){console.error(`\x1B[31mError reading package.json for ${a}:\x1B[0m`,_);return}let d=a.replace(/\//g,"-").replace(/@/g,""),l=S(o,"src","app","[locale]","(main)",S("(plugins)",`(${d})`)),f=S(o,"src","app","[locale]","admin","(auth)",S("(plugins)",`(${d})`)),u=S(o,"src","locales",a),w=[{sourceDir:S(n,"src","app_admin"),destinationDir:f},{sourceDir:S(n,"src","app"),destinationDir:l},{sourceDir:S(n,"src","locales"),destinationDir:u}];for(let{sourceDir:_,destinationDir:D}of w)mt(_)&&!Y(_)&&(console.log(`\x1B[36mCopying ${a}:\x1B[0m ${pt(s,_)} \u2192 ${pt(s,D)}`),st(_,D,c,r,i,s,!1))}))};import{spawn as js}from"child_process";var ue=async(t,e=[])=>new Promise((s,i)=>{let r=js(t,e,{stdio:"inherit",shell:!0});r.on("error",o=>{i(o)}),r.on("close",o=>{o!==0?i(new Error(`Command failed with exit code ${o}`)):s(!0)})});wt.config({path:Ms(process.cwd(),"..","..",".env")});var C=zs({connection:process.env.POSTGRES_URL??"postgresql://root:root@localhost:5432/vitnode",casing:"camelCase"}),Os=async()=>{try{await ue("npm",["run","drizzle-kit","up"]),await ue("npm",["run","drizzle-kit","generate"])}catch(t){console.error("\x1B[31m%s\x1B[0m",t),process.exit(1)}},$s=async()=>{try{await ue("npm",["run","drizzle-kit","migrate"])}catch(t){console.error("\x1B[31m%s\x1B[0m",t),process.exit(1)}},Hs=async()=>{let[t]=await C.select({count:gt()}).from(E).limit(1),[e]=await C.select({count:gt()}).from(R);if(e.count===0&&await C.insert(R).values([{code:"en",name:"English (USA)",default:!0,protected:!0,timezone:"America/New_York"}]),t.count===0){let s=await C.insert(E).values([{protected:!0,guest:!0},{protected:!0,default:!0},{protected:!0,color:"hsl(122, 80%, 45%)"},{protected:!0,root:!0,color:"hsl(0, 100%, 50%)"}]).returning({id:E.id});await C.insert(oe).values([{languageCode:"en",pluginCode:"core",itemId:s[0].id,value:"Guest",tableName:"core_roles",variable:"name"},{languageCode:"en",pluginCode:"core",itemId:s[1].id,value:"Member",tableName:"core_roles",variable:"name"},{languageCode:"en",pluginCode:"core",itemId:s[2].id,value:"Moderator",tableName:"core_roles",variable:"name"},{languageCode:"en",pluginCode:"core",itemId:s[3].id,value:"Administrator",tableName:"core_roles",variable:"name"}]),await Promise.all([await C.insert(G).values({roleId:s[2].id,protected:!0}),await C.insert(K).values({roleId:s[3].id,protected:!0})])}},yt=async({initMessage:t})=>{console.log(`${t} [1/4] Prepare plugins files...`),await _t(),console.log(`${t} [2/4] Generate migrations...`),await Os(),console.log(`${t} [3/4] Run migrations...`),await $s(),console.log(`
|
|
7
|
+
${t} [4/4] Insert initial data...`),await Hs(),console.log(`${t} \x1B[32mDatabase prepared successfully.\x1B[0m`),process.exit(0)};var ke="\x1B[34m[VitNode]\x1B[0m",xt=process.argv[2],Et=process.argv[3];switch(xt){case"init":yt({initMessage:ke});break;case"plugin":(Et==="--w"||Et==="--watch")&&ot({initMessage:ke});break;default:console.log(`${ke} \x1B[31mCommand not found: "${xt??""}"\x1B[0m`),process.exit(1)}
|
|
8
8
|
/*! Bundled license information:
|
|
9
9
|
|
|
10
10
|
chokidar/esm/index.js:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../../scripts/shared/file-utils.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,QAAQ,GAAI,UAAU,MAAM,EAAE,YAAY,MAAM,KAAG,MAY/D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,YAAY,MAAM,KACjB,GAAG,CAAC,MAAM,EAAE,MAAM,CAwBpB,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,MAAM,EACf,YAAY,MAAM,KACjB,MAiDF,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmBlD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../../scripts/shared/file-utils.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,QAAQ,GAAI,UAAU,MAAM,EAAE,YAAY,MAAM,KAAG,MAY/D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,YAAY,MAAM,KACjB,GAAG,CAAC,MAAM,EAAE,MAAM,CAwBpB,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,MAAM,EACf,YAAY,MAAM,KACjB,MAiDF,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmBlD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkEvD;AAED,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,KAAG,MAAM,EAgB/C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,OAM9C,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,QAAQ,GACnB,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,YAAY,MAAM,EAClB,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,YAAY,MAAM,EAClB,UAAU,MAAM,EAChB,iBAAc,SAkEf,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,WAAW,MAAM,EACjB,gBAAgB,MAAM,EACtB,YAAY,MAAM,EAClB,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,YAAY,MAAM,EAClB,UAAU,MAAM,EAChB,iBAAc,SAoBf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/api/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAOjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAWxE,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EACF,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,GAC3D,MAAM,GACN,MAAM,EAAE,CAAC;CACd;AAED,KAAK,sBAAsB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;AAC5E,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,sBAAsB,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;CACrD;AAED,wBAAgB,UAAU,CAAC,EACzB,GAAG,EACH,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,WAAW,EACjB,gBAAgB,EAChB,aAAa,GACd,EAAE;IACD,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;CAC9B,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/api/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAOjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAWxE,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EACF,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,GAC3D,MAAM,GACN,MAAM,EAAE,CAAC;CACd;AAED,KAAK,sBAAsB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;AAC5E,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,sBAAsB,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;CACrD;AAED,wBAAgB,UAAU,CAAC,EACzB,GAAG,EACH,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,WAAW,EACjB,gBAAgB,EAChB,aAAa,GACd,EAAE;IACD,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;CAC9B,oCAoDA"}
|
package/dist/src/api/config.js
CHANGED
|
@@ -24,7 +24,8 @@ export function VitNodeAPI({ app, cors: corsOptions, csrf: csrfOptions, vitNodeA
|
|
|
24
24
|
emailAdapter: vitNodeApiConfig.emailAdapter,
|
|
25
25
|
metadata: vitNodeConfig.metadata,
|
|
26
26
|
authorization: vitNodeApiConfig.authorization,
|
|
27
|
-
dbProvider: vitNodeApiConfig.dbProvider
|
|
27
|
+
dbProvider: vitNodeApiConfig.dbProvider,
|
|
28
|
+
captcha: vitNodeApiConfig.captcha
|
|
28
29
|
}));
|
|
29
30
|
app.use(async (c, next)=>{
|
|
30
31
|
if (c.req.path.includes('/admin/')) {
|
|
@@ -4,6 +4,7 @@ type RoutingPath<P extends string> = P extends `${infer Head}/{${infer Param}}${
|
|
|
4
4
|
type ValidHandler<R extends RouteConfig> = (c: Parameters<RouteHandler<R, EnvVitNode>>[0]) => ReturnType<RouteHandler<R>>;
|
|
5
5
|
export declare const buildRoute: <Plugin extends string, P extends string, R extends Omit<RouteConfig, "path"> & {
|
|
6
6
|
path: P;
|
|
7
|
+
withCaptcha?: boolean;
|
|
7
8
|
}, H extends ValidHandler<R & {
|
|
8
9
|
path: P;
|
|
9
10
|
}>>({ route, handler, pluginId, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/api/lib/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/api/lib/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKnE,OAAO,EACL,KAAK,UAAU,EAEhB,MAAM,kCAAkC,CAAC;AAE1C,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,IAC/B,CAAC,SAAS,GAAG,MAAM,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,GACnD,GAAG,IAAI,KAAK,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,GACvC,CAAC,CAAC;AAER,KAAK,YAAY,CAAC,CAAC,SAAS,WAAW,IAAI,CACzC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAC1C,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjC,eAAO,MAAM,UAAU,GACrB,MAAM,SAAS,MAAM,EACrB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG;IACpC,IAAI,EAAE,CAAC,CAAC;IACR,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,GAAG;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,EACvC,+BAIC;IACD,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,CAAC,CAAC;CACV,KAAG;IACF,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,CAAC,GAAG;QACT,cAAc,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KAC9C,CAAC;CA4BH,CAAC;AAEF,MAAM,WAAW,KAAK,CACpB,MAAM,SAAS,MAAM,GAAG,MAAM,EAC9B,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAE3C,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,CAAC,CAAC;CACV"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createRoute as createRouteHono } from "@hono/zod-openapi";
|
|
2
|
+
import { captchaMiddleware } from "../middlewares/captcha.middleware.js";
|
|
2
3
|
import { pluginMiddleware } from "../middlewares/global.middleware.js";
|
|
3
4
|
export const buildRoute = ({ route, handler, pluginId })=>{
|
|
4
5
|
const pluginTag = pluginId.split(/[-_]/).map((word)=>word.charAt(0).toUpperCase() + word.slice(1)).join(' ');
|
|
@@ -11,6 +12,9 @@ export const buildRoute = ({ route, handler, pluginId })=>{
|
|
|
11
12
|
tags,
|
|
12
13
|
middleware: [
|
|
13
14
|
pluginMiddleware(pluginId),
|
|
15
|
+
...route.withCaptcha ? [
|
|
16
|
+
captchaMiddleware()
|
|
17
|
+
] : [],
|
|
14
18
|
...Array.isArray(route.middleware) ? route.middleware : route.middleware ? [
|
|
15
19
|
route.middleware
|
|
16
20
|
] : []
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captcha.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/captcha.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAoE1C,eAAO,MAAM,iBAAiB,SACd,GAAG,OAAO,EAAE,MAAM,IAAI,kBAuBrC,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { HTTPException } from "hono/http-exception";
|
|
2
|
+
const getResFromReCaptcha = async ({ token, userIp, captchaConfig })=>{
|
|
3
|
+
if (captchaConfig.type === 'cloudflare_turnstile') {
|
|
4
|
+
const res = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {
|
|
5
|
+
method: 'POST',
|
|
6
|
+
body: JSON.stringify({
|
|
7
|
+
secret: captchaConfig.secretKey,
|
|
8
|
+
response: token,
|
|
9
|
+
remoteip: userIp
|
|
10
|
+
}),
|
|
11
|
+
headers: {
|
|
12
|
+
'Content-Type': 'application/json'
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
const data = await res.json();
|
|
16
|
+
return {
|
|
17
|
+
success: data.success,
|
|
18
|
+
score: data.success ? 1 : 0,
|
|
19
|
+
'error-codes': data['error-codes']
|
|
20
|
+
};
|
|
21
|
+
} else if (captchaConfig.type === 'recaptcha_v3') {
|
|
22
|
+
const res = await fetch(`https://www.google.com/recaptcha/api/siteverify?secret=${captchaConfig.secretKey}&response=${token}&remoteip=${userIp}`, {
|
|
23
|
+
method: 'POST'
|
|
24
|
+
});
|
|
25
|
+
const data = await res.json();
|
|
26
|
+
return {
|
|
27
|
+
success: data.success,
|
|
28
|
+
score: data.score ?? 0,
|
|
29
|
+
'error-codes': data['error-codes']
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
success: false,
|
|
34
|
+
score: 0
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export const captchaMiddleware = ()=>{
|
|
38
|
+
return async (c, next)=>{
|
|
39
|
+
const token = c.req.header('x-vitnode-captcha-token');
|
|
40
|
+
const captchaConfig = c.get('core').captcha;
|
|
41
|
+
if (!token || !captchaConfig) {
|
|
42
|
+
throw new HTTPException(400, {
|
|
43
|
+
message: 'Captcha token is required'
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const res = await getResFromReCaptcha({
|
|
47
|
+
token,
|
|
48
|
+
userIp: c.get('ipAddress'),
|
|
49
|
+
captchaConfig
|
|
50
|
+
});
|
|
51
|
+
if (!res.success || res.score < 0.5) {
|
|
52
|
+
throw new HTTPException(400, {
|
|
53
|
+
message: 'Captcha validation failed'
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
await next();
|
|
57
|
+
};
|
|
58
|
+
};
|
|
@@ -30,8 +30,9 @@ interface EnvVariablesVitNode {
|
|
|
30
30
|
cookieSecure: boolean;
|
|
31
31
|
deviceCookieExpires: number;
|
|
32
32
|
deviceCookieName: string;
|
|
33
|
-
|
|
33
|
+
ssoAdapters: SSOApiPlugin[];
|
|
34
34
|
};
|
|
35
|
+
captcha?: Pick<VitNodeApiConfig, 'captcha'>['captcha'];
|
|
35
36
|
emailAdapter?: EmailApiPlugin;
|
|
36
37
|
metadata: {
|
|
37
38
|
shortTitle?: string;
|
|
@@ -61,7 +62,7 @@ declare module 'hono' {
|
|
|
61
62
|
interface ContextVariableMap extends EnvVariablesVitNode {
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
|
-
export declare const globalMiddleware: ({ authorization, metadata, emailAdapter, dbProvider, }: Pick<VitNodeApiConfig, "authorization" | "dbProvider" | "emailAdapter"> & Pick<VitNodeConfig, "metadata">) => (c: Context, next: Next) => Promise<void>;
|
|
65
|
+
export declare const globalMiddleware: ({ authorization, metadata, emailAdapter, dbProvider, captcha, }: Pick<VitNodeApiConfig, "authorization" | "captcha" | "dbProvider" | "emailAdapter"> & Pick<VitNodeConfig, "metadata">) => (c: Context, next: Next) => Promise<void>;
|
|
65
66
|
export declare const pluginMiddleware: (pluginId: string) => (c: Context, next: Next) => Promise<void>;
|
|
66
67
|
export declare const globalAdminMiddleware: () => (c: Context, next: Next) => Promise<void>;
|
|
67
68
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/global.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,UAAW,SAAQ,GAAG;IACrC,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED,UAAU,mBAAmB;IAC3B,KAAK,EAAE,IAAI,GAAG;QACZ,IAAI,EAAE;YACJ,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;YACtB,SAAS,EAAE,IAAI,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,aAAa,EAAE,OAAO,CAAC;YACvB,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,OAAO,CAAC;YACpB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,IAAI,EAAE;QACJ,aAAa,EAAE;YACb,kBAAkB,EAAE,MAAM,CAAC;YAC3B,eAAe,EAAE,MAAM,CAAC;YACxB,cAAc,EAAE,MAAM,CAAC;YACvB,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,OAAO,CAAC;YACtB,mBAAmB,EAAE,MAAM,CAAC;YAC5B,gBAAgB,EAAE,MAAM,CAAC;YACzB,
|
|
1
|
+
{"version":3,"file":"global.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/global.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,UAAW,SAAQ,GAAG;IACrC,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED,UAAU,mBAAmB;IAC3B,KAAK,EAAE,IAAI,GAAG;QACZ,IAAI,EAAE;YACJ,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;YACtB,SAAS,EAAE,IAAI,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,aAAa,EAAE,OAAO,CAAC;YACvB,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,OAAO,CAAC;YACpB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,IAAI,EAAE;QACJ,aAAa,EAAE;YACb,kBAAkB,EAAE,MAAM,CAAC;YAC3B,eAAe,EAAE,MAAM,CAAC;YACxB,cAAc,EAAE,MAAM,CAAC;YACvB,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,OAAO,CAAC;YACtB,mBAAmB,EAAE,MAAM,CAAC;YAC5B,gBAAgB,EAAE,MAAM,CAAC;YACzB,WAAW,EAAE,YAAY,EAAE,CAAC;SAC7B,CAAC;QACF,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;QACvD,YAAY,CAAC,EAAE,cAAc,CAAC;QAC9B,QAAQ,EAAE;YACR,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;IACF,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,oBAAoB,CAAC;IAC1B,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,IAAI,EAAE,IAAI,GAAG;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;QACtB,SAAS,EAAE,IAAI,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,OAAO,CAAC;QACvB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,OAAO,QAAQ,MAAM,CAAC;IAEpB,UAAU,kBAAmB,SAAQ,mBAAmB;KAAG;CAC5D;AAED,eAAO,MAAM,gBAAgB,GAAI,iEAM9B,IAAI,CACL,gBAAgB,EAChB,eAAe,GAAG,SAAS,GAAG,YAAY,GAAG,cAAc,CAC5D,GACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,MACjB,GAAG,OAAO,EAAE,MAAM,IAAI,kBAyErC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,MACjC,GAAG,OAAO,EAAE,MAAM,IAAI,kBAMrC,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAClB,GAAG,OAAO,EAAE,MAAM,IAAI,kBASrC,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { HTTPException } from "hono/http-exception";
|
|
|
2
2
|
import { SessionModel } from "../models/session.js";
|
|
3
3
|
import { SessionAdminModel } from "../models/session-admin.js";
|
|
4
4
|
import { loggerMiddleware } from "../lib/logger-middleware.js";
|
|
5
|
-
export const globalMiddleware = ({ authorization, metadata, emailAdapter, dbProvider })=>{
|
|
5
|
+
export const globalMiddleware = ({ authorization, metadata, emailAdapter, dbProvider, captcha })=>{
|
|
6
6
|
return async (c, next)=>{
|
|
7
7
|
// Collect possible IP header keys in order of trust/preference
|
|
8
8
|
const ipHeaderKeys = [
|
|
@@ -51,13 +51,14 @@ export const globalMiddleware = ({ authorization, metadata, emailAdapter, dbProv
|
|
|
51
51
|
authorization: {
|
|
52
52
|
cookieName: authorization?.cookieName ?? 'vitnode_auth',
|
|
53
53
|
cookie_expires: authorization?.cookieExpires ?? 1000 * 60 * 60 * 24 * 90,
|
|
54
|
-
|
|
54
|
+
ssoAdapters: authorization?.ssoAdapters ?? [],
|
|
55
55
|
deviceCookieName: authorization?.deviceCookieName ?? 'vitnode_device',
|
|
56
56
|
deviceCookieExpires: authorization?.deviceCookieExpires ?? 1000 * 60 * 60 * 24 * 365,
|
|
57
57
|
adminCookieName: authorization?.adminCookieName ?? 'vitnode_auth_admin',
|
|
58
58
|
adminCookieExpires: authorization?.adminCookieExpires ?? 1000 * 60 * 60 * 24 * 1,
|
|
59
59
|
cookieSecure: authorization?.cookieSecure ?? true
|
|
60
|
-
}
|
|
60
|
+
},
|
|
61
|
+
captcha
|
|
61
62
|
});
|
|
62
63
|
const user = await new SessionModel(c).getUser();
|
|
63
64
|
c.set('user', user);
|
|
@@ -10,7 +10,7 @@ export const getRedirectUri = (code)=>new URL(`${CONFIG.frontend.href}login/sso/
|
|
|
10
10
|
export class SSOModel {
|
|
11
11
|
constructor(c){
|
|
12
12
|
this.c = c;
|
|
13
|
-
this.plugins = c.get('core').authorization.
|
|
13
|
+
this.plugins = c.get('core').authorization.ssoAdapters;
|
|
14
14
|
}
|
|
15
15
|
c;
|
|
16
16
|
plugins;
|
|
@@ -203,6 +203,7 @@ export declare const adminModule: import("../../../api/lib/module").BuildModuleR
|
|
|
203
203
|
nameCode: string;
|
|
204
204
|
}>>;
|
|
205
205
|
}, "strip", import("zod").ZodTypeAny, {
|
|
206
|
+
method: string;
|
|
206
207
|
ipAddress: string;
|
|
207
208
|
user: {
|
|
208
209
|
id: number;
|
|
@@ -216,9 +217,9 @@ export declare const adminModule: import("../../../api/lib/module").BuildModuleR
|
|
|
216
217
|
path: string;
|
|
217
218
|
pluginId: string;
|
|
218
219
|
content: string;
|
|
219
|
-
method: string;
|
|
220
220
|
statusCode: number;
|
|
221
221
|
}, {
|
|
222
|
+
method: string;
|
|
222
223
|
ipAddress: string;
|
|
223
224
|
user: {
|
|
224
225
|
id: number;
|
|
@@ -232,7 +233,6 @@ export declare const adminModule: import("../../../api/lib/module").BuildModuleR
|
|
|
232
233
|
path: string;
|
|
233
234
|
pluginId: string;
|
|
234
235
|
content: string;
|
|
235
|
-
method: string;
|
|
236
236
|
statusCode: number;
|
|
237
237
|
}>, "many">;
|
|
238
238
|
pageInfo: import("zod").ZodObject<{
|
|
@@ -259,6 +259,7 @@ export declare const adminModule: import("../../../api/lib/module").BuildModuleR
|
|
|
259
259
|
}>;
|
|
260
260
|
}, "strip", import("zod").ZodTypeAny, {
|
|
261
261
|
edges: {
|
|
262
|
+
method: string;
|
|
262
263
|
ipAddress: string;
|
|
263
264
|
user: {
|
|
264
265
|
id: number;
|
|
@@ -272,7 +273,6 @@ export declare const adminModule: import("../../../api/lib/module").BuildModuleR
|
|
|
272
273
|
path: string;
|
|
273
274
|
pluginId: string;
|
|
274
275
|
content: string;
|
|
275
|
-
method: string;
|
|
276
276
|
statusCode: number;
|
|
277
277
|
}[];
|
|
278
278
|
pageInfo: {
|
|
@@ -285,6 +285,7 @@ export declare const adminModule: import("../../../api/lib/module").BuildModuleR
|
|
|
285
285
|
};
|
|
286
286
|
}, {
|
|
287
287
|
edges: {
|
|
288
|
+
method: string;
|
|
288
289
|
ipAddress: string;
|
|
289
290
|
user: {
|
|
290
291
|
id: number;
|
|
@@ -298,7 +299,6 @@ export declare const adminModule: import("../../../api/lib/module").BuildModuleR
|
|
|
298
299
|
path: string;
|
|
299
300
|
pluginId: string;
|
|
300
301
|
content: string;
|
|
301
|
-
method: string;
|
|
302
302
|
statusCode: number;
|
|
303
303
|
}[];
|
|
304
304
|
pageInfo: {
|
|
@@ -102,6 +102,7 @@ export declare const debugAdminModule: import("../../../lib/module").BuildModule
|
|
|
102
102
|
nameCode: string;
|
|
103
103
|
}>>;
|
|
104
104
|
}, "strip", import("zod").ZodTypeAny, {
|
|
105
|
+
method: string;
|
|
105
106
|
ipAddress: string;
|
|
106
107
|
user: {
|
|
107
108
|
id: number;
|
|
@@ -115,9 +116,9 @@ export declare const debugAdminModule: import("../../../lib/module").BuildModule
|
|
|
115
116
|
path: string;
|
|
116
117
|
pluginId: string;
|
|
117
118
|
content: string;
|
|
118
|
-
method: string;
|
|
119
119
|
statusCode: number;
|
|
120
120
|
}, {
|
|
121
|
+
method: string;
|
|
121
122
|
ipAddress: string;
|
|
122
123
|
user: {
|
|
123
124
|
id: number;
|
|
@@ -131,7 +132,6 @@ export declare const debugAdminModule: import("../../../lib/module").BuildModule
|
|
|
131
132
|
path: string;
|
|
132
133
|
pluginId: string;
|
|
133
134
|
content: string;
|
|
134
|
-
method: string;
|
|
135
135
|
statusCode: number;
|
|
136
136
|
}>, "many">;
|
|
137
137
|
pageInfo: import("zod").ZodObject<{
|
|
@@ -158,6 +158,7 @@ export declare const debugAdminModule: import("../../../lib/module").BuildModule
|
|
|
158
158
|
}>;
|
|
159
159
|
}, "strip", import("zod").ZodTypeAny, {
|
|
160
160
|
edges: {
|
|
161
|
+
method: string;
|
|
161
162
|
ipAddress: string;
|
|
162
163
|
user: {
|
|
163
164
|
id: number;
|
|
@@ -171,7 +172,6 @@ export declare const debugAdminModule: import("../../../lib/module").BuildModule
|
|
|
171
172
|
path: string;
|
|
172
173
|
pluginId: string;
|
|
173
174
|
content: string;
|
|
174
|
-
method: string;
|
|
175
175
|
statusCode: number;
|
|
176
176
|
}[];
|
|
177
177
|
pageInfo: {
|
|
@@ -184,6 +184,7 @@ export declare const debugAdminModule: import("../../../lib/module").BuildModule
|
|
|
184
184
|
};
|
|
185
185
|
}, {
|
|
186
186
|
edges: {
|
|
187
|
+
method: string;
|
|
187
188
|
ipAddress: string;
|
|
188
189
|
user: {
|
|
189
190
|
id: number;
|
|
@@ -197,7 +198,6 @@ export declare const debugAdminModule: import("../../../lib/module").BuildModule
|
|
|
197
198
|
path: string;
|
|
198
199
|
pluginId: string;
|
|
199
200
|
content: string;
|
|
200
|
-
method: string;
|
|
201
201
|
statusCode: number;
|
|
202
202
|
}[];
|
|
203
203
|
pageInfo: {
|
|
@@ -103,6 +103,7 @@ export declare const logsDebugAdminRoute: {
|
|
|
103
103
|
nameCode: string;
|
|
104
104
|
}>>;
|
|
105
105
|
}, "strip", z.ZodTypeAny, {
|
|
106
|
+
method: string;
|
|
106
107
|
ipAddress: string;
|
|
107
108
|
user: {
|
|
108
109
|
id: number;
|
|
@@ -116,9 +117,9 @@ export declare const logsDebugAdminRoute: {
|
|
|
116
117
|
path: string;
|
|
117
118
|
pluginId: string;
|
|
118
119
|
content: string;
|
|
119
|
-
method: string;
|
|
120
120
|
statusCode: number;
|
|
121
121
|
}, {
|
|
122
|
+
method: string;
|
|
122
123
|
ipAddress: string;
|
|
123
124
|
user: {
|
|
124
125
|
id: number;
|
|
@@ -132,7 +133,6 @@ export declare const logsDebugAdminRoute: {
|
|
|
132
133
|
path: string;
|
|
133
134
|
pluginId: string;
|
|
134
135
|
content: string;
|
|
135
|
-
method: string;
|
|
136
136
|
statusCode: number;
|
|
137
137
|
}>, "many">;
|
|
138
138
|
pageInfo: z.ZodObject<{
|
|
@@ -159,6 +159,7 @@ export declare const logsDebugAdminRoute: {
|
|
|
159
159
|
}>;
|
|
160
160
|
}, "strip", z.ZodTypeAny, {
|
|
161
161
|
edges: {
|
|
162
|
+
method: string;
|
|
162
163
|
ipAddress: string;
|
|
163
164
|
user: {
|
|
164
165
|
id: number;
|
|
@@ -172,7 +173,6 @@ export declare const logsDebugAdminRoute: {
|
|
|
172
173
|
path: string;
|
|
173
174
|
pluginId: string;
|
|
174
175
|
content: string;
|
|
175
|
-
method: string;
|
|
176
176
|
statusCode: number;
|
|
177
177
|
}[];
|
|
178
178
|
pageInfo: {
|
|
@@ -185,6 +185,7 @@ export declare const logsDebugAdminRoute: {
|
|
|
185
185
|
};
|
|
186
186
|
}, {
|
|
187
187
|
edges: {
|
|
188
|
+
method: string;
|
|
188
189
|
ipAddress: string;
|
|
189
190
|
user: {
|
|
190
191
|
id: number;
|
|
@@ -198,7 +199,6 @@ export declare const logsDebugAdminRoute: {
|
|
|
198
199
|
path: string;
|
|
199
200
|
pluginId: string;
|
|
200
201
|
content: string;
|
|
201
|
-
method: string;
|
|
202
202
|
statusCode: number;
|
|
203
203
|
}[];
|
|
204
204
|
pageInfo: {
|