insite-server 2.0.5 → 2.0.6
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/bun.lockb +0 -0
- package/dist/index.js +4 -4
- package/package.json +6 -6
package/bun.lockb
CHANGED
|
Binary file
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var lt=Object.create;var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ut=Object.getOwnPropertyNames;var ct=Object.getPrototypeOf,dt=Object.prototype.hasOwnProperty;var y=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,s)=>(typeof require<"u"?require:t)[s]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var pt=(e,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ut(t))!dt.call(e,r)&&r!==s&&he(e,r,{get:()=>t[r],enumerable:!(i=at(t,r))||i.enumerable});return e};var fe=(e,t,s)=>(s=e!=null?lt(ct(e)):{},pt(t||!e||!e.__esModule?he(s,"default",{value:e,enumerable:!0}):s,e));var we=M((as,ge)=>{var z=/^[a-z0-9-]{1,32}$/,N=/^[a-z0-9-]{1,32}$/,K=/^[a-zA-Z0-9/+.-]+$/,me=/^([a-zA-Z0-9/+.-]+|)$/,ht=/^((-)?[1-9]\d*|0)$/,Z=/^v=(\d+)$/;function ft(e){return q(e).map(t=>[t,e[t]].join("=")).join(",")}function mt(e){let t={};return e.split(",").forEach(s=>{let i=s.split("=");if(i.length<2)throw new TypeError("params must be in the format name=value");t[i.shift()]=i.join("=")}),t}function q(e){return Object.keys(e)}function ve(e){return typeof Object.values=="function"?Object.values(e):q(e).map(t=>e[t])}function vt(e){let t=[""];if(typeof e!="object"||e===null)throw new TypeError("opts must be an object");if(typeof e.id!="string")throw new TypeError("id must be a string");if(!z.test(e.id))throw new TypeError(`id must satisfy ${z}`);if(t.push(e.id),typeof e.version<"u"){if(typeof e.version!="number"||e.version<0||!Number.isInteger(e.version))throw new TypeError("version must be a positive integer number");t.push(`v=${e.version}`)}if(typeof e.params<"u"){if(typeof e.params!="object"||e.params===null)throw new TypeError("params must be an object");let i=q(e.params);if(!i.every(o=>N.test(o)))throw new TypeError(`params names must satisfy ${N}`);i.forEach(o=>{typeof e.params[o]=="number"?e.params[o]=e.params[o].toString():Buffer.isBuffer(e.params[o])&&(e.params[o]=e.params[o].toString("base64").split("=")[0])});let r=ve(e.params);if(!r.every(o=>typeof o=="string"))throw new TypeError("params values must be strings");if(!r.every(o=>K.test(o)))throw new TypeError(`params values must satisfy ${K}`);let n=ft(e.params);t.push(n)}if(typeof e.salt<"u"){if(!Buffer.isBuffer(e.salt))throw new TypeError("salt must be a Buffer");if(t.push(e.salt.toString("base64").split("=")[0]),typeof e.hash<"u"){if(!Buffer.isBuffer(e.hash))throw new TypeError("hash must be a Buffer");t.push(e.hash.toString("base64").split("=")[0])}}return t.join("$")}function gt(e){if(typeof e!="string"||e==="")throw new TypeError("pchstr must be a non-empty string");if(e[0]!=="$")throw new TypeError("pchstr must contain a $ as first char");let t=e.split("$");t.shift();let s=5;if(Z.test(t[1])||s--,t.length>s)throw new TypeError(`pchstr contains too many fileds: ${t.length}/${s}`);let i=t.shift();if(!z.test(i))throw new TypeError(`id must satisfy ${z}`);let r;Z.test(t[0])&&(r=parseInt(t.shift().match(Z)[1],10));let n,o;me.test(t[t.length-1])&&(t.length>1&&me.test(t[t.length-2])&&(n=Buffer.from(t.pop(),"base64")),o=Buffer.from(t.pop(),"base64"));let a;if(t.length>0){let c=t.pop();if(a=mt(c),!q(a).every(d=>N.test(d)))throw new TypeError(`params names must satisfy ${N}`);if(!ve(a).every(d=>K.test(d)))throw new TypeError(`params values must satisfy ${K}`);q(a).forEach(d=>{a[d]=ht.test(a[d])?parseInt(a[d],10):a[d]})}if(t.length>0)throw new TypeError(`pchstr contains unrecognized fileds: ${t}`);let l={id:i};return r&&(l.version=r),a&&(l.params=a),o&&(l.salt=o),n&&(l.hash=n),l}ge.exports={serialize:vt,deserialize:gt}});var Le=M((us,qe)=>{var xe=y("fs"),O=y("path"),Oe=y("os"),Se=typeof __webpack_require__=="function"?__non_webpack_require__:y,wt=process.config&&process.config.variables||{},bt=!!process.env.PREBUILDS_ONLY,be=process.versions.modules,G=xt()?"electron":_t()?"node-webkit":"node",X=process.env.npm_config_arch||Oe.arch(),Y=process.env.npm_config_platform||Oe.platform(),
|
|
1
|
+
var lt=Object.create;var he=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ut=Object.getOwnPropertyNames;var ct=Object.getPrototypeOf,dt=Object.prototype.hasOwnProperty;var y=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,s)=>(typeof require<"u"?require:t)[s]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var pt=(e,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ut(t))!dt.call(e,r)&&r!==s&&he(e,r,{get:()=>t[r],enumerable:!(i=at(t,r))||i.enumerable});return e};var fe=(e,t,s)=>(s=e!=null?lt(ct(e)):{},pt(t||!e||!e.__esModule?he(s,"default",{value:e,enumerable:!0}):s,e));var we=M((as,ge)=>{var z=/^[a-z0-9-]{1,32}$/,N=/^[a-z0-9-]{1,32}$/,K=/^[a-zA-Z0-9/+.-]+$/,me=/^([a-zA-Z0-9/+.-]+|)$/,ht=/^((-)?[1-9]\d*|0)$/,Z=/^v=(\d+)$/;function ft(e){return q(e).map(t=>[t,e[t]].join("=")).join(",")}function mt(e){let t={};return e.split(",").forEach(s=>{let i=s.split("=");if(i.length<2)throw new TypeError("params must be in the format name=value");t[i.shift()]=i.join("=")}),t}function q(e){return Object.keys(e)}function ve(e){return typeof Object.values=="function"?Object.values(e):q(e).map(t=>e[t])}function vt(e){let t=[""];if(typeof e!="object"||e===null)throw new TypeError("opts must be an object");if(typeof e.id!="string")throw new TypeError("id must be a string");if(!z.test(e.id))throw new TypeError(`id must satisfy ${z}`);if(t.push(e.id),typeof e.version<"u"){if(typeof e.version!="number"||e.version<0||!Number.isInteger(e.version))throw new TypeError("version must be a positive integer number");t.push(`v=${e.version}`)}if(typeof e.params<"u"){if(typeof e.params!="object"||e.params===null)throw new TypeError("params must be an object");let i=q(e.params);if(!i.every(o=>N.test(o)))throw new TypeError(`params names must satisfy ${N}`);i.forEach(o=>{typeof e.params[o]=="number"?e.params[o]=e.params[o].toString():Buffer.isBuffer(e.params[o])&&(e.params[o]=e.params[o].toString("base64").split("=")[0])});let r=ve(e.params);if(!r.every(o=>typeof o=="string"))throw new TypeError("params values must be strings");if(!r.every(o=>K.test(o)))throw new TypeError(`params values must satisfy ${K}`);let n=ft(e.params);t.push(n)}if(typeof e.salt<"u"){if(!Buffer.isBuffer(e.salt))throw new TypeError("salt must be a Buffer");if(t.push(e.salt.toString("base64").split("=")[0]),typeof e.hash<"u"){if(!Buffer.isBuffer(e.hash))throw new TypeError("hash must be a Buffer");t.push(e.hash.toString("base64").split("=")[0])}}return t.join("$")}function gt(e){if(typeof e!="string"||e==="")throw new TypeError("pchstr must be a non-empty string");if(e[0]!=="$")throw new TypeError("pchstr must contain a $ as first char");let t=e.split("$");t.shift();let s=5;if(Z.test(t[1])||s--,t.length>s)throw new TypeError(`pchstr contains too many fileds: ${t.length}/${s}`);let i=t.shift();if(!z.test(i))throw new TypeError(`id must satisfy ${z}`);let r;Z.test(t[0])&&(r=parseInt(t.shift().match(Z)[1],10));let n,o;me.test(t[t.length-1])&&(t.length>1&&me.test(t[t.length-2])&&(n=Buffer.from(t.pop(),"base64")),o=Buffer.from(t.pop(),"base64"));let a;if(t.length>0){let c=t.pop();if(a=mt(c),!q(a).every(d=>N.test(d)))throw new TypeError(`params names must satisfy ${N}`);if(!ve(a).every(d=>K.test(d)))throw new TypeError(`params values must satisfy ${K}`);q(a).forEach(d=>{a[d]=ht.test(a[d])?parseInt(a[d],10):a[d]})}if(t.length>0)throw new TypeError(`pchstr contains unrecognized fileds: ${t}`);let l={id:i};return r&&(l.version=r),a&&(l.params=a),o&&(l.salt=o),n&&(l.hash=n),l}ge.exports={serialize:vt,deserialize:gt}});var Le=M((us,qe)=>{var xe=y("fs"),O=y("path"),Oe=y("os"),Se=typeof __webpack_require__=="function"?__non_webpack_require__:y,wt=process.config&&process.config.variables||{},bt=!!process.env.PREBUILDS_ONLY,be=process.versions.modules,G=xt()?"electron":_t()?"node-webkit":"node",X=process.env.npm_config_arch||Oe.arch(),Y=process.env.npm_config_platform||Oe.platform(),Te=process.env.LIBC||(Ot(Y)?"musl":"glibc"),Q=process.env.ARM_VERSION||(X==="arm64"?"8":wt.arm_version)||"",Ie=(process.versions.uv||"").split(".")[0];qe.exports=_;function _(e){return Se(_.resolve(e))}_.resolve=_.path=function(e){e=O.resolve(e||".");try{var t=Se(O.join(e,"package.json")).name.toUpperCase().replace(/-/g,"_");process.env[t+"_PREBUILD"]&&(e=process.env[t+"_PREBUILD"])}catch{}if(!bt){var s=ye(O.join(e,"build/Release"),_e);if(s)return s;var i=ye(O.join(e,"build/Debug"),_e);if(i)return i}var r=a(e);if(r)return r;var n=a(O.dirname(process.execPath));if(n)return n;var o=["platform="+Y,"arch="+X,"runtime="+G,"abi="+be,"uv="+Ie,Q?"armv="+Q:"","libc="+Te,"node="+process.versions.node,process.versions.electron?"electron="+process.versions.electron:"",typeof __webpack_require__=="function"?"webpack=true":""].filter(Boolean).join(" ");throw new Error("No native build was found for "+o+`
|
|
2
2
|
loaded from: `+e+`
|
|
3
|
-
`);function a(l){var c=ee(O.join(l,"prebuilds")).map(Ae),p=c.filter(je(Y,X)).sort($e)[0];if(p){var u=O.join(l,"prebuilds",p.name),d=ee(u).map(Ee),m=d.filter(Re(G,be)),S=m.sort(Me(G))[0];if(S)return O.join(u,S.file)}}};function ee(e){try{return xe.readdirSync(e)}catch{return[]}}function ye(e,t){var s=ee(e).filter(t);return s[0]&&O.join(e,s[0])}function _e(e){return/\.node$/.test(e)}function Ae(e){var t=e.split("-");if(t.length===2){var s=t[0],i=t[1].split("+");if(s&&i.length&&i.every(Boolean))return{name:e,platform:s,architectures:i}}}function je(e,t){return function(s){return s==null||s.platform!==e?!1:s.architectures.includes(t)}}function $e(e,t){return e.architectures.length-t.architectures.length}function Ee(e){var t=e.split("."),s=t.pop(),i={file:e,specificity:0};if(s==="node"){for(var r=0;r<t.length;r++){var n=t[r];if(n==="node"||n==="electron"||n==="node-webkit")i.runtime=n;else if(n==="napi")i.napi=!0;else if(n.slice(0,3)==="abi")i.abi=n.slice(3);else if(n.slice(0,2)==="uv")i.uv=n.slice(2);else if(n.slice(0,4)==="armv")i.armv=n.slice(4);else if(n==="glibc"||n==="musl")i.libc=n;else continue;i.specificity++}return i}}function Re(e,t){return function(s){return!(s==null||s.runtime&&s.runtime!==e&&!yt(s)||s.abi&&s.abi!==t&&!s.napi||s.uv&&s.uv!==Te||s.armv&&s.armv!==Q||s.libc&&s.libc!==Ie)}}function yt(e){return e.runtime==="node"&&e.napi}function Me(e){return function(t,s){return t.runtime!==s.runtime?t.runtime===e?-1:1:t.abi!==s.abi?t.abi?-1:1:t.specificity!==s.specificity?t.specificity>s.specificity?-1:1:0}}function _t(){return!!(process.versions&&process.versions.nw)}function xt(){return process.versions&&process.versions.electron||process.env.ELECTRON_RUN_AS_NODE?!0:typeof window<"u"&&window.process&&window.process.type==="renderer"}function Ot(e){return e==="linux"&&xe.existsSync("/etc/alpine-release")}_.parseTags=Ee;_.matchTags=Re;_.compareTags=Me;_.parseTuple=Ae;_.matchTuple=je;_.compareTuples=$e});var De=M((ds,se)=>{var te=typeof __webpack_require__=="function"?__non_webpack_require__:y;typeof te.addon=="function"?se.exports=te.addon.bind(te):se.exports=Le()});var ze=M((hs,I)=>{var St=y("node:assert"),{randomBytes:It,timingSafeEqual:Tt}=y("node:crypto"),{promisify:At}=y("node:util"),{deserialize:Pe,serialize:jt}=we(),$t=De(),{hash:ke}=$t(__dirname),Et=At(It),Be=0,Ce=1,ie=2;I.exports.argon2d=Be;I.exports.argon2i=Ce;I.exports.argon2id=ie;var L=Object.freeze({argon2d:Be,argon2i:Ce,argon2id:ie}),Rt=Object.freeze({[L.argon2d]:"argon2d",[L.argon2i]:"argon2i",[L.argon2id]:"argon2id"}),Ue=Object.freeze({hashLength:32,timeCost:3,memoryCost:65536,parallelism:4,type:ie,version:19}),We=Object.freeze({hashLength:{min:4,max:2**32-1},memoryCost:{min:1024,max:2**32-1},timeCost:{min:2,max:2**32-1},parallelism:{min:1,max:2**24-1}});I.exports.limits=We;async function Mt(e,t){let{raw:s,salt:i,...r}={...Ue,...t};for(let[S,{min:A,max:b}]of Object.entries(We)){let g=r[S];St(A<=g&&g<=b,`Invalid ${S}, must be between ${A} and ${b}.`)}i=i??await Et(16);let{hashLength:n,secret:o=Buffer.alloc(0),type:a,version:l,memoryCost:c,timeCost:p,parallelism:u,associatedData:d=Buffer.alloc(0)}=r,m=await ke({password:Buffer.from(e),salt:i,secret:o,data:d,hashLength:n,m:c,t:p,p:u,version:l,type:a});return s?m:jt({id:Rt[a],version:l,params:{m:c,t:p,p:u,...d.byteLength>0?{data:d}:{}},salt:i,hash:m})}I.exports.hash=Mt;function qt(e,t={}){let{memoryCost:s,timeCost:i,version:r}={...Ue,...t},{version:n,params:{m:o,t:a}}=Pe(e);return+n!=+r||+o!=+s||+a!=+i}I.exports.needsRehash=qt;async function Lt(e,t,s={}){let{id:i,...r}=Pe(e);if(!(i in L))return!1;let{version:n=16,params:{m:o,t:a,p:l,data:c=""},salt:p,hash:u}=r,{secret:d=Buffer.alloc(0)}=s;return Tt(await ke({password:Buffer.from(t),salt:p,secret:d,data:Buffer.from(c,"base64"),hashLength:u.byteLength,m:+o,t:+a,p:+l,version:+n,type:L[i]}),u)}I.exports.verify=Lt});var Ke=M((fs,re)=>{"use strict";var Dt=Object.prototype.hasOwnProperty,f="~";function D(){}Object.create&&(D.prototype=Object.create(null),new D().__proto__||(f=!1));function Pt(e,t,s){this.fn=e,this.context=t,this.once=s||!1}function Ne(e,t,s,i,r){if(typeof s!="function")throw new TypeError("The listener must be a function");var n=new Pt(s,i||e,r),o=f?f+t:t;return e._events[o]?e._events[o].fn?e._events[o]=[e._events[o],n]:e._events[o].push(n):(e._events[o]=n,e._eventsCount++),e}function F(e,t){--e._eventsCount===0?e._events=new D:delete e._events[t]}function h(){this._events=new D,this._eventsCount=0}h.prototype.eventNames=function(){var t=[],s,i;if(this._eventsCount===0)return t;for(i in s=this._events)Dt.call(s,i)&&t.push(f?i.slice(1):i);return Object.getOwnPropertySymbols?t.concat(Object.getOwnPropertySymbols(s)):t};h.prototype.listeners=function(t){var s=f?f+t:t,i=this._events[s];if(!i)return[];if(i.fn)return[i.fn];for(var r=0,n=i.length,o=new Array(n);r<n;r++)o[r]=i[r].fn;return o};h.prototype.listenerCount=function(t){var s=f?f+t:t,i=this._events[s];return i?i.fn?1:i.length:0};h.prototype.emit=function(t,s,i,r,n,o){var a=f?f+t:t;if(!this._events[a])return!1;var l=this._events[a],c=arguments.length,p,u;if(l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,s),!0;case 3:return l.fn.call(l.context,s,i),!0;case 4:return l.fn.call(l.context,s,i,r),!0;case 5:return l.fn.call(l.context,s,i,r,n),!0;case 6:return l.fn.call(l.context,s,i,r,n,o),!0}for(u=1,p=new Array(c-1);u<c;u++)p[u-1]=arguments[u];l.fn.apply(l.context,p)}else{var d=l.length,m;for(u=0;u<d;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,s);break;case 3:l[u].fn.call(l[u].context,s,i);break;case 4:l[u].fn.call(l[u].context,s,i,r);break;default:if(!p)for(m=1,p=new Array(c-1);m<c;m++)p[m-1]=arguments[m];l[u].fn.apply(l[u].context,p)}}return!0};h.prototype.on=function(t,s,i){return Ne(this,t,s,i,!1)};h.prototype.once=function(t,s,i){return Ne(this,t,s,i,!0)};h.prototype.removeListener=function(t,s,i,r){var n=f?f+t:t;if(!this._events[n])return this;if(!s)return F(this,n),this;var o=this._events[n];if(o.fn)o.fn===s&&(!r||o.once)&&(!i||o.context===i)&&F(this,n);else{for(var a=0,l=[],c=o.length;a<c;a++)(o[a].fn!==s||r&&!o[a].once||i&&o[a].context!==i)&&l.push(o[a]);l.length?this._events[n]=l.length===1?l[0]:l:F(this,n)}return this};h.prototype.removeAllListeners=function(t){var s;return t?(s=f?f+t:t,this._events[s]&&F(this,s)):(this._events=new D,this._eventsCount=0),this};h.prototype.off=h.prototype.removeListener;h.prototype.addListener=h.prototype.on;h.prefixed=f;h.EventEmitter=h;typeof re<"u"&&(re.exports=h)});import{CookieSetter as Gt,InSiteCookieMiddleware as Xt}from"insite-cookie/server";import{SubscriptionHandler as Yt}from"insite-subscriptions-server/ws";import{InSiteWebSocketServer as Qt}from"insite-ws/server";import{IncomingTransport as es,OutgoingTransport as ts}from"insite-ws-transfers/node";import{connect as ss}from"insite-db";import{InSiteHTTPServer as is,InSiteStaticMiddleware as rs,InSiteTemplateMiddleware as ns}from"insite-http";var W=fe(ze(),1);var Fe=fe(Ke(),1);var He=Fe.default;function P(e){if(e instanceof Set){let t=[];for(let s of e)t.push(s._id);return t}return e.map(t=>t._id)}function $(){}function x(e,t=0,s={}){let{leading:i=!1,trailing:r=!0}=s,{maxWait:n=1/0}=s,o,a,l,c,p,u,d,m,S=async()=>{let j=Date.now();j>=l?(o=void 0,l=void 0,clearTimeout(a),typeof d=="function"&&await d(),g.resolve(m),g.promise.isResolved=!0,u=i):(clearTimeout(o),o=setTimeout(S,l-j))},A=Number.isFinite(n)?()=>{d===b&&(d=!1),b(),a=setTimeout(A,n)}:null;async function b(){return m=await e.apply(c,p)}i&&typeof i=="boolean"&&(i=b),u=i,r&&typeof r=="boolean"&&(r=b),d=r;let g=Object.assign(function(...j){return p=j,c=this,l=Date.now()+t,d=r,g.promise.isResolved&&(g.promise=Object.assign(new Promise(ot=>{g.resolve=ot,typeof u=="function"&&(u(),u=!1,d===b&&(d=!1)),o||(o=setTimeout(S,t),A&&(a=setTimeout(A,n)))}),{isResolved:!1})),g.promise},{callback:e,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:$,run:b,clear:async j=>{clearTimeout(o),o=void 0,clearTimeout(a),g.promise.isResolved=!0,g.resolve(j?await b():m)}});return g}x.noop=Object.assign(()=>{},{callback:$,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:$,run:$,clear:$});function w(e,t){if(e){for(let s of t)delete e[s];return e}return null}function Ve(e){for(let t in e)delete e[t];return e}var H=class extends Array{constructor(){super(),Object.freeze(this)}push(){return 0}unshift(){return 0}splice(){return[]}};var E=class extends Set{constructor(){super()}add(){return this}};function ne(e,t,s=!1){return s&&(t=t.filter(i=>e.has(i))),t.map(i=>e.get(i))}function Je(e,t){for(let s of t)if(e.has(s))return!0;return!1}function Ze(e,t,s,i,r=!0){return Array.isArray(e)&&(e=e.length),typeof i!="string"&&(r=i??!0,i=s),(r?`${e}\xA0`:"")+Ze.raw(e,t,s,i)}Ze.raw=(e,t,s,i=s)=>{e=Math.abs(e);let r=e%10,n=e%100;return r===1&&n!==11?t:r>=2&&r<=4&&!(n>=12&&n<=15)?s:i};function Ge(e,...t){let s=[];e:for(let i of e){for(let r of t)if(r instanceof Set?!r.has(i):!r.includes(i))continue e;s.push(i)}return s}function V(e,t){return Math.floor(Math.random()*(t-e+1)+e)}function Xe(e,t){return e.delete(t),e.add(t),e}function T(e,t){let s,i=0;for(let r of t)for(;(s=e.indexOf(r))>-1;)e.splice(s,1),i++;return i}function Ye(e,t){let s=e.indexOf(t);return s>-1?(e.splice(s,1),!0):!1}function Qe(e,t){for(let s of[...e].sort(t))e.delete(s),e.add(s);return e}import{newObjectIdString as kt}from"insite-db";import{newObjectIdString as Ct}from"insite-db";import st from"node:crypto";var Bt=class extends Map{constructor(e){super(),this.schema=e,this.parse(this.schema)}schema;parse(e){for(let t of e)this.set(t._id,t),t.subAbilities&&this.parse(t.subAbilities)}merge(e,t){for(let[s,i]of Object.entries(t)){let r=this.get(s);if(r){if(r.isInheritable!==!1&&i){if(!(s in e))e[s]=structuredClone(i);else if(r.params){let n=e[s],o=i;for(let a of r.params)if(a.isInheritable!==!1&&a._id in o){if(!(a._id in n))n[a._id]=structuredClone(o[a._id]);else if(a.type==="number")n[a._id]<o[a._id]&&(n[a._id]=o[a._id]);else if(a.type==="items"){let l=n[a._id];for(let c of o[a._id])l.includes(c)||l.push(c)}}}}}else delete t[s]}return e}getMinimumOf(e){let t=this.get(e);if(t?.params){let s={};for(let i of t.params)i.type==="number"?s[i._id]=i.min??0:i.type==="items"&&(s[i._id]=[]);return s}return!0}getMaximum(){return[...this.values()].reduce((e,t)=>{if(t.params){let s={};for(let i of t.params)i.type==="number"?s[i._id]=i.max??0:i.type==="items"&&(s[i._id]=i.items.map(r=>r._id));e[t._id]=s}else e[t._id]=!0;return e},{})}getSchemeFor(e){return function t(s){for(let i=0;i<s.length;i++){let r=s[i],n=e.abilities[r._id];if(n){if(r.params)for(let o of r.params){let a=n[o._id];if(o.type==="number")"max"in o&&(o.max=a);else if(o.type==="items")for(let l=0;l<o.items.length;l++)a.includes(o.items[l]._id)||o.items.splice(l--,1)}r.subAbilities&&t(r.subAbilities)}else s.splice(i--,1)}return s}(structuredClone(this.schema))}},oe=new Map,R=class{constructor(e,t){this.orgs=e,this._id=t._id,e.set(this._id,this),this.update(t)}_id;title="";initials="";displayLabel="";_o=0;orgs;isOrg=!0;ownerOrgs=new Set;ownerUsers=new Set;users=new Set;slaveOrgs=new Set;ownerIds=[];update({_id:e,title:t,owners:s,...i},r){if(Object.assign(this,i),t!==void 0&&(this.title=t,this.initials=t?.[0]?.toUpperCase()??"",this.displayLabel=t),s){this.ownerIds=s;let n=this.ownerIds.join(",");n!==oe.get(this._id)&&(oe.set(this._id,n),this.orgs.users.isInited&&this.orgs.updateDebounced(),this.orgs.users.emit("orgs-org-update",this,r))}}delete(){this.orgs.delete(this._id),oe.delete(this._id),this.orgs.replace(this._id),this.orgs.updateDebounced()}},v={_id:/^[\dA-Fa-f]{24}$/,email:/^[^\s@]{1,63}@[^\s@]{1,63}\.[^\s@]{1,63}$/,argon2:/^\$argon2(?:i|d|id)\$v=\d+\$m=\d+,t=\d+,p=\d+(?:\$[\d+/A-Za-z]+){2}$/,sessionId:/^[\dA-Fa-f]{16,32}\$[\dA-Fa-f]{16,32}$/,role:/^[\d_a-z-]{1,64}$/,ip:/^(?:\d{1,3}\.){3}\d{1,3}$/},k={required:["_id","title","note","owners","createdAt"],properties:{_id:{bsonType:"string",pattern:v._id.source},title:{bsonType:"string",maxLength:512},note:{bsonType:"string",maxLength:131072},owners:{bsonType:"array",uniqueItems:!0,items:{bsonType:"string",pattern:v._id.source},additionalItems:!1},createdAt:{bsonType:"number"}},additionalProperties:!1},Ut=[[{owners:1}]];function et(){throw new Error("Direct usage of orgs collection.deleteOne or .deleteMany is forbidden. Use orgs.collectionDelete instead.")}var Wt=class extends Map{constructor(e,t={}){super(),this.users=e,this.collections=e.collections,this.preinitOptions=t}users;collections;preinitOptions;collection;null;load(e){new R(this,e)}resolve(e,t){t=[e,...t];for(let s of e.ownerOrgs){this.resolve(s,t);for(let i of t)s.slaveOrgs.add(i)}}sorted=[];update(){let e=[...this.values()],t=[];for(let s of e){s.ownerOrgs.clear(),s.ownerUsers.clear(),s.slaveOrgs.clear();for(let i of s.ownerIds){let r=this.get(i);if(r)s.ownerOrgs.add(r);else{let n=this.users.get(i);n&&s.ownerUsers.add(n)}}!s.ownerOrgs.size&&s._id&&t.push(s)}for(let s of e)e.some(i=>i.ownerOrgs.has(s))||this.resolve(s,[]);t.sort(this.sortOrgs);for(let s of e)Qe(s.slaveOrgs,this.sortOrgs);for(let s=0;s<t.length;s++){let i=t[s];for(let r of[...i.slaveOrgs].reverse())if(r.ownerOrgs.has(i)){let n=t.indexOf(r);~n&&(t.splice(n,1),s--),t.splice(s+1,0,r)}}for(let{length:s}=t,i=0;i<s;)t[i]._o=i++;this.sorted=t,this.users.emit("orgs-update"),this.users.isInited&&(this.users.updateDebounced.clear(),this.users.update())}sortOrgs(e,t){return t.slaveOrgs.size-e.slaveOrgs.size||(e.title>t.title?1:e.title<t.title?-1:0)}updateDebounced=x(this.update,250);preinit=async()=>{let{schema:e,indexes:t,null:s}=this.preinitOptions;e&&(e.required&&T(e.required,k.required),e.properties&&w(e,Object.keys(k.properties)));let i={...k,...e,required:[...k.required,...e?.required??[]],properties:{...k.properties,...e?.properties}};this.collection=Object.assign(await this.collections.ensure("orgs",{jsonSchema:i}),{deleteOne:et,deleteMany:et}),this.collection.ensureIndexes([...Ut,...t??[]]),this.null=Object.assign(new R(this,{...s,_id:"",title:"",note:"",owners:[],createdAt:Date.now()}),{_id:null,ownerIds:new H,ownerOrgs:new E,ownerUsers:new E,slaveOrgs:new E});for(let r of await this.collection.find().toArray())this.load(r);delete this.preinitOptions,delete this.preinit};init=async()=>{await this.update(),this.collection.changeListeners.add(e=>{switch(e.operationType){case"insert":{let t=new R(this,e.fullDocument);this.users.emit("orgs-org-update",t,e);break}case"replace":this.get(e.documentKey._id)?.update(e.fullDocument,e);break;case"update":this.get(e.documentKey._id)?.update(e.updateDescription.updatedFields,e);break;case"delete":this.get(e.documentKey._id)?.delete(),this.users.emit("orgs-org-update",null,e)}}),delete this.init};new({title:e,note:t,...s},i){return this.collection.insertOne({_id:Ct(),title:e??"",note:t??"",owners:i?[i]:[],...w(s,["_id","owners"]),createdAt:Date.now()})}collectionDelete(e){let t=typeof e=="string"?e:e._id;return this.collection.bulkWrite([{updateMany:{filter:{owners:t},update:{$pullAll:{owners:[t]}}}},{deleteOne:{filter:{_id:t}}}])}replaceMap=new Map;replaceHandlers=new Set;async replace(e){let t=this.replaceMap.get(e)??null;t&&this.replaceMap.delete(e);for(let s of this.replaceHandlers)await s(e,t)}},le=new Map,ae=class{constructor(e,t){this.roles=e,this._id=t._id,e.set(this._id,this),this.update(t)}roles;_id;ownInvolveIds;ownAbilities;title="";displayTitle="";_o=0;ownInvolves=[];involves=new Set;abilities={};inheritedAbilities={};update({_id:e,involves:t,abilities:s,title:i,...r},n){if(Object.assign(this,r),t&&(this.ownInvolveIds=t),s&&(this.ownAbilities=s),i!==void 0&&(this.title=i,this.displayTitle=i||this._id),t||s){let o=[this.ownInvolveIds.join(","),JSON.stringify(this.ownAbilities)].join(`
|
|
4
|
-
`);o!==le.get(this._id)&&(le.set(this._id,o),this.roles.users.isInited&&this.roles.updateDebounced(),this.roles.users.emit("roles-role-update",this,n))}}delete(){this.roles.delete(this._id),le.delete(this._id),this.roles.updateDebounced()}},B={required:["_id","involves","abilities","title","description","createdAt"],properties:{_id:{bsonType:"string",pattern:v.role.source,not:{enum:["root"]}},involves:{bsonType:"array",uniqueItems:!0,items:{bsonType:"string",pattern:v.role.source,not:{enum:["root"]}},additionalItems:!1},abilities:{bsonType:"object"},title:{bsonType:"string",maxLength:256},description:{bsonType:"string",maxLength:10240},createdAt:{bsonType:"number"}},additionalProperties:!1},zt=[[{involves:1}]];function tt(){throw new Error("Direct usage of roles collection.deleteOne or .deleteMany is forbidden. Use roles.collectionDelete instead.")}var Nt=class extends Map{constructor(e,t={}){super();let{root:s,...i}=t;this.users=e,this.collections=e.collections,this.abilitiesMap=e.abilitiesMap,this.root=new ae(this,{...s,_id:"root",involves:[],abilities:this.abilitiesMap.getMaximum(),title:"Root",description:"Root",createdAt:Date.now()}),this.initOptions=i}users;collections;collection;abilitiesMap;root;initOptions;load(e){new ae(this,e)}resolve(e,t){t=[e,...t];for(let s of e.ownInvolveIds){let i=this.get(s);if(i){for(let r of t)Xe(r.involves,i),this.abilitiesMap.merge(r.inheritedAbilities,i.abilities);i!==e&&this.resolve(i,t)}}}sorted=[];sortRoles(e,t){return t.involves.size-e.involves.size||(e.title&&t.title?e.title>t.title?1:e.title<t.title?-1:0:e.title?-1:t.title||e._id>t._id?1:e._id<t._id?-1:0)}update(){let e=[...this.values()];this.root.ownInvolveIds=[];for(let i of e)i!==this.root&&!e.some(r=>r.ownInvolveIds.includes(i._id))&&this.root.ownInvolveIds.push(i._id),i.involves.clear(),i.abilities=structuredClone(i.ownAbilities),i.inheritedAbilities={};this.root.involves.add(this.root),this.resolve(this.root,[]);for(let i of e)i.ownInvolves=ne(this,i.ownInvolveIds,!0).sort(this.sortRoles).reverse();let t=[this.root];for(let i=0;i<t.length;i++){let r=t[i];for(let n of r.ownInvolves){let o=t.indexOf(n);~o&&(t.splice(o,1),i--),t.splice(i+1,0,n)}}let s=0;for(let i of t)this.abilitiesMap.merge(i.abilities,i.inheritedAbilities),i._o=s++;this.sorted=t,this.users.emit("roles-update"),this.users.isInited&&(this.users.updateDebounced.clear(),this.users.update(!0))}updateDebounced=x(this.update,250);init=async()=>{let{schema:e,indexes:t}=this.initOptions;e&&(e.required&&T(e.required,B.required),e.properties&&w(e,Object.keys(B.properties)));let s={...B,...e,required:[...B.required,...e?.required??[]],properties:{...B.properties,...e?.properties}};this.collection=Object.assign(await this.collections.ensure("roles",{jsonSchema:s}),{deleteOne:tt,deleteMany:tt}),this.collection.ensureIndexes([...zt,...t??[]]);for(let i of await this.collection.find().toArray())this.load(i);await this.update(),this.collection.changeListeners.add(i=>{switch(i.operationType){case"insert":{let r=new ae(this,i.fullDocument);this.users.emit("roles-role-update",r,i);break}case"replace":this.get(i.documentKey._id)?.update(i.fullDocument,i);break;case"update":this.get(i.documentKey._id)?.update(i.updateDescription.updatedFields,i);break;case"delete":this.get(i.documentKey._id)?.delete(),this.users.emit("roles-role-update",null,i)}}),delete this.initOptions,delete this.init};new({_id:e,involves:t,title:s,description:i,...r}){return this.collection.insertOne({_id:e,involves:t||[],abilities:{},title:s??"",description:i??"",...w(r,["abilities"]),createdAt:Date.now()})}collectionDelete(e){let t=typeof e=="string"?e:e._id;return this.collection.bulkWrite([{updateMany:{filter:{involves:t},update:{$pullAll:{involves:[t]}}}},{deleteOne:{filter:{_id:t}}}])}cleanUpIds(e){let t=Ge(this.sorted,ne(this,e,!0)),s=[];for(let i of t)t.every(r=>r===i||!r.involves.has(i))&&s.push(i._id);return s}},C={required:["_id","user","remoteAddress","isOnline","createdAt","prolongedAt","expiresAt"],properties:{_id:{bsonType:"string",pattern:v.sessionId.source},user:{bsonType:"string",pattern:v._id.source},userAgent:{bsonType:"string",maxLength:4096},remoteAddress:{bsonType:"string",pattern:v.ip.source},isOnline:{bsonType:"bool"},createdAt:{bsonType:"number"},prolongedAt:{bsonType:"number"},expiresAt:{bsonType:"date"}},additionalProperties:!1},ue=class{constructor(e,t){let s=e.users.get(t.user);s?(this.sessions=e,this._id=t._id,this.sessions.set(this._id,this),this.user=s,this.user.sessions.add(this),this.sessions.users.bySessionId.set(this._id,this.user),this.update(t)):e.collection.deleteOne({_id:t._id})}_id;user;isOnline=!1;userAgent;remoteAddress;createdAt;prolongedAt;expiresAt;sessions;update({_id:e,user:t,isOnline:s,...i}){s!==void 0&&this.isOnline!==s&&(this.isOnline=s,this.sessions.isInited&&this.user.isOnline!==this.isOnline&&this.user.updateIsOnline()),Object.assign(this,i)}prolong({_id:e,user:t,...s}){let i=Date.now();return s.prolongedAt=i,s.expiresAt=new Date(i+this.sessions.collection.expireAfterSeconds*1e3),this.update(s),this.sessions.collection.updateOne({_id:this._id},{$set:s})}offline(){let e={isOnline:!1};return this.update(e),this.sessions.collection.updateOne({_id:this._id},{$set:e})}delete(){this.sessions.delete(this._id),this.user.sessions.delete(this),this.sessions.users.bySessionId.delete(this._id),this.sessions.users.emit("session-delete",this),this.isOnline&&this.user.updateIsOnline()}},pe=3600*24*7,Kt=[[{user:1}],[{expiresAt:1},{expireAfterSeconds:pe}]],Ft=class extends Map{constructor(e,t={}){super(),this.users=e,this.collections=e.collections,this.initOptions=t}users;collections;initOptions;collection;isInited=!1;uid(){let e;do e=`${st.randomBytes(V(8,16)).toString("hex")}$${st.randomBytes(V(8,16)).toString("hex")}`;while(this.has(e));return e}load(e){new ue(this,e)}init=async()=>{let{schema:e,indexes:t}=this.initOptions;e&&(e.required&&T(e.required,C.required),e.properties&&w(e,Object.keys(C.properties)));let s={...C,...e,required:[...C.required,...e?.required??[]],properties:{...C.properties,...e?.properties}};this.collection=Object.assign(await this.collections.ensure("sessions",{jsonSchema:s}),{expireAfterSeconds:pe}),this.collection.ensureIndexes([...Kt,...t??[]]),await this.collection.updateMany({isOnline:!0},{$set:{isOnline:!1}});for(let i of await this.collection.find().toArray())this.load(i);this.collection.changeListeners.add(i=>{switch(i.operationType){case"insert":this.has(i.documentKey._id)||new ue(this,i.fullDocument),this.users.get(i.fullDocument.user)?.trimSessions();break;case"replace":this.get(i.documentKey._id)?.update(i.fullDocument);break;case"update":this.get(i.documentKey._id)?.update(i.updateDescription.updatedFields);break;case"delete":this.get(i.documentKey._id)?.delete()}}),this.isInited=!0,delete this.initOptions,delete this.init};async new(e,t){let s=Date.now(),i={userAgent:"",remoteAddress:"127.0.0.1",isOnline:!0,...t,_id:this.uid(),user:e._id,createdAt:s,prolongedAt:s,expiresAt:new Date(s+pe*1e3)},r=new ue(this,i);return await this.collection.insertOne(i),r}},Ht={required:["_id","type","size","ts","data"],properties:{_id:{bsonType:"string",pattern:v._id.source},type:{bsonType:"string",maxLength:256},size:{bsonType:"number"},ts:{bsonType:"string",maxLength:10},data:{bsonType:"binData"}},additionalProperties:!1},Vt=class{constructor(e){this.users=e,this.collections=e.collections}users;collections;collection;init=async()=>{this.collection=await this.collections.ensure("users.avatars",{jsonSchema:Ht}),delete this.init}},U={required:["_id","email","password","roles","name","org","job","createdAt"],properties:{_id:{bsonType:"string",pattern:v._id.source},email:{bsonType:"string",pattern:v.email.source},password:{bsonType:"string",pattern:v.argon2.source},roles:{bsonType:"array",uniqueItems:!0,items:{bsonType:"string",pattern:v.role.source},additionalItems:!1},name:{bsonType:"object",required:["first","middle","last"],properties:{first:{bsonType:"string",maxLength:512},middle:{bsonType:"string",maxLength:512},last:{bsonType:"string",maxLength:512}},additionalProperties:!1},org:{oneOf:[{bsonType:"string",pattern:v._id.source},{bsonType:"null"}]},job:{bsonType:"string",maxLength:512},avatar:{oneOf:[{bsonType:"string",maxLength:10},{bsonType:"null"}]},createdAt:{bsonType:"number"}},additionalProperties:!1},ce=new Map,de=new Map,Jt=process.env.INSITE_STATIC_URL??"http://localhost:8080",J=class{constructor(e,t){this.users=e,this._id=t._id,e.set(this._id,this),this.update(t),e.isInited&&e.emit("user-create",this)}_id;email;name={first:"",middle:"",last:""};initials="";displayLabel="";org;job="";avatar=null;avatarUrl=null;users;isUser=!0;isRoot;roles=new Set;ownRoles=[];ownRoleIds=[];slaveRoles=new Set;slaveRoleIds=[];abilities={};slaveOrgs=new Set;slaveUsers=new Set;slaves=new Set;slaveIds=[];permissiveIds=[];sessions=new Set;isOnline=!1;update({_id:e,name:t,email:s,roles:i,org:r,avatar:n,...o}){Object.assign(this,o);let a;s&&this.email!==s&&(this.users.byEmail.delete(this.email),this.email=s,this.users.byEmail.set(s,this),a=!0);let l,c;t&&(this.name.first!==t.first||this.name.middle!==t.middle||this.name.last!==t.last)&&(c=this.name.last!==t.last,this.name={first:t.first??"",middle:t.middle??"",last:t.last??""},this.initials=((t.first?.[0]??"")+(t.last?.[0]??"")||this.email[0]).toUpperCase(),l=!0),(a||l)&&(this.displayLabel=`${this.name.first} ${this.name.last}`.trim()||this.name.middle||this.email);let p;if(i){this.ownRoleIds=i;let d=this.ownRoleIds.join(",");d!==ce.get(this._id)&&(ce.set(this._id,d),this.updateRoles(),p=!0)}let u;r!==void 0&&this.org?._id!==r&&(this.org?.users.delete(this),this.org=r&&this.users.orgs.get(r)||this.users.orgs.null,this.org.users.add(this),u=!0),n!==void 0&&this.avatar!==n&&(this.avatar=n,this.avatarUrl=n&&`${Jt}/avatars/${this._id}-${n}.webp`),p||u?(this.updatePermissions(),c&&(this.users.isSortRequired=!0),this.users.isInited&&this.users.updateDebounced()):c&&this.users.sortDebounced()}updateRoles(){if(this.users.isInited){this.ownRoles=[],this.roles.clear(),this.slaveRoles.clear(),Ve(this.abilities);for(let e of this.ownRoleIds){let t=this.users.roles.get(e);if(t){this.ownRoles.push(t),this.roles.add(t);for(let s of t.involves)this.roles.add(s),this.slaveRoles.add(s);this.slaveRoleIds=P(this.slaveRoles),this.users.abilitiesMap.merge(this.abilities,t.abilities)}}this.roles.has(this.users.roles.root)&&(this.isRoot=!0),this.trimSessions()}}updatePermissions(){if(this.users.isInited){this.slaveOrgs.clear(),this.slaveUsers.clear(),this.slaves.clear();let e=new Set;for(let i of this.users.orgs.sorted)if((i.ownerUsers.has(this)||this.isRoot)&&!this.slaveOrgs.has(i)){this.slaveOrgs.add(i),this.slaves.add(i),e.add(i._id);for(let r of i.slaveOrgs)this.slaveOrgs.add(r),this.slaves.add(r),e.add(r._id)}for(let i of new Set([this.org,...this.slaveOrgs,this.users.orgs.null]))for(let r of i.users)r!==this&&(Je(this.slaveRoles,r.ownRoles)||!r.ownRoles.length)&&(this.slaveUsers.add(r),this.slaves.add(r),e.add(r._id));this.slaveIds=[...e];let t=[];if(this.org._id){t.push(this.org._id);for(let i of this.org.slaveOrgs)this.slaveOrgs.has(i)||t.push(i._id)}this.permissiveIds=[...t,this._id,...e];let s=[this.permissiveIds.join(","),this.ownRoleIds.join(","),JSON.stringify(this.abilities),this.slaveRoleIds.join(",")].join(`
|
|
5
|
-
`);s!==de.get(this._id)&&(de.set(this._id,s),this.users.emit("user-permissions-change",this))}}trimSessions(){let e=this.abilities.login?.sessionsLimit??0;return this.sessions.size>e?this.users.sessions.collection.deleteMany({_id:{$in:P([...this.sessions].sort((t,s)=>t.expiresAt.valueOf()-s.expiresAt.valueOf()).slice(0,this.sessions.size-e))}}):null}updateIsOnline=x(()=>{let e=!1;for(let t of this.sessions)if(t.isOnline){e=!0;break}this.isOnline!==e&&(this.isOnline=e,this.users.emit("user-is-online",this))},500);delete(){this.org.users.delete(this),this.users.delete(this._id),this.users.byEmail.delete(this.email),Ye(this.users.sorted,this),ce.delete(this._id),de.delete(this._id),this.users.replace(this._id),this.users.updateDebounced()}},Zt=[[{email:1},{unique:!0}],[{org:1}]],it=class rt extends Map{constructor(t,s){super();let i=new He;this._events=i._events,this._eventsCount=i._eventsCount,this.emit=i.emit,this.on=i.on,this.once=i.once,this.addListener=i.addListener,this.off=i.off,this.removeListener=i.removeListener,this.collections=t,this.abilitiesMap=new Bt(s.abilities),this.initOptions=s,this.initPromise=this.init()}_events;_eventsCount;emit;on;once;addListener;off;removeListener;initOptions;collections;abilitiesMap;collection;roles;sessions;orgs;avatars;isInited=!1;byEmail=new Map;bySessionId=new Map;sorted=[];isSortRequired=!1;load(t){new J(this,t)}sort(){this.isSortRequired=!1,this.sorted=[...this.values()].sort((t,s)=>t.name.last>s.name.last?1:t.name.last<s.name.last?-1:0)}sortDebounced=x(()=>this.sort(),250);update(t){if(t)for(let s of this.values())s.updateRoles();for(let s of this.values())s.updatePermissions();this.isSortRequired&&this.sort()}updateDebounced=x(()=>this.update(),250);preinit=async()=>{let{indexes:t,schema:s,initialRoot:i}=this.initOptions;s&&(s.required&&
|
|
3
|
+
`);function a(l){var c=ee(O.join(l,"prebuilds")).map(Ae),p=c.filter(je(Y,X)).sort($e)[0];if(p){var u=O.join(l,"prebuilds",p.name),d=ee(u).map(Ee),m=d.filter(Re(G,be)),S=m.sort(Me(G))[0];if(S)return O.join(u,S.file)}}};function ee(e){try{return xe.readdirSync(e)}catch{return[]}}function ye(e,t){var s=ee(e).filter(t);return s[0]&&O.join(e,s[0])}function _e(e){return/\.node$/.test(e)}function Ae(e){var t=e.split("-");if(t.length===2){var s=t[0],i=t[1].split("+");if(s&&i.length&&i.every(Boolean))return{name:e,platform:s,architectures:i}}}function je(e,t){return function(s){return s==null||s.platform!==e?!1:s.architectures.includes(t)}}function $e(e,t){return e.architectures.length-t.architectures.length}function Ee(e){var t=e.split("."),s=t.pop(),i={file:e,specificity:0};if(s==="node"){for(var r=0;r<t.length;r++){var n=t[r];if(n==="node"||n==="electron"||n==="node-webkit")i.runtime=n;else if(n==="napi")i.napi=!0;else if(n.slice(0,3)==="abi")i.abi=n.slice(3);else if(n.slice(0,2)==="uv")i.uv=n.slice(2);else if(n.slice(0,4)==="armv")i.armv=n.slice(4);else if(n==="glibc"||n==="musl")i.libc=n;else continue;i.specificity++}return i}}function Re(e,t){return function(s){return!(s==null||s.runtime&&s.runtime!==e&&!yt(s)||s.abi&&s.abi!==t&&!s.napi||s.uv&&s.uv!==Ie||s.armv&&s.armv!==Q||s.libc&&s.libc!==Te)}}function yt(e){return e.runtime==="node"&&e.napi}function Me(e){return function(t,s){return t.runtime!==s.runtime?t.runtime===e?-1:1:t.abi!==s.abi?t.abi?-1:1:t.specificity!==s.specificity?t.specificity>s.specificity?-1:1:0}}function _t(){return!!(process.versions&&process.versions.nw)}function xt(){return process.versions&&process.versions.electron||process.env.ELECTRON_RUN_AS_NODE?!0:typeof window<"u"&&window.process&&window.process.type==="renderer"}function Ot(e){return e==="linux"&&xe.existsSync("/etc/alpine-release")}_.parseTags=Ee;_.matchTags=Re;_.compareTags=Me;_.parseTuple=Ae;_.matchTuple=je;_.compareTuples=$e});var De=M((ds,se)=>{var te=typeof __webpack_require__=="function"?__non_webpack_require__:y;typeof te.addon=="function"?se.exports=te.addon.bind(te):se.exports=Le()});var ze=M((hs,T)=>{var St=y("node:assert"),{randomBytes:Tt,timingSafeEqual:It}=y("node:crypto"),{promisify:At}=y("node:util"),{deserialize:Pe,serialize:jt}=we(),$t=De(),{hash:ke}=$t(__dirname),Et=At(Tt),Be=0,Ce=1,ie=2;T.exports.argon2d=Be;T.exports.argon2i=Ce;T.exports.argon2id=ie;var L=Object.freeze({argon2d:Be,argon2i:Ce,argon2id:ie}),Rt=Object.freeze({[L.argon2d]:"argon2d",[L.argon2i]:"argon2i",[L.argon2id]:"argon2id"}),Ue=Object.freeze({hashLength:32,timeCost:3,memoryCost:65536,parallelism:4,type:ie,version:19}),We=Object.freeze({hashLength:{min:4,max:2**32-1},memoryCost:{min:1024,max:2**32-1},timeCost:{min:2,max:2**32-1},parallelism:{min:1,max:2**24-1}});T.exports.limits=We;async function Mt(e,t){let{raw:s,salt:i,...r}={...Ue,...t};for(let[S,{min:A,max:b}]of Object.entries(We)){let g=r[S];St(A<=g&&g<=b,`Invalid ${S}, must be between ${A} and ${b}.`)}i=i??await Et(16);let{hashLength:n,secret:o=Buffer.alloc(0),type:a,version:l,memoryCost:c,timeCost:p,parallelism:u,associatedData:d=Buffer.alloc(0)}=r,m=await ke({password:Buffer.from(e),salt:i,secret:o,data:d,hashLength:n,m:c,t:p,p:u,version:l,type:a});return s?m:jt({id:Rt[a],version:l,params:{m:c,t:p,p:u,...d.byteLength>0?{data:d}:{}},salt:i,hash:m})}T.exports.hash=Mt;function qt(e,t={}){let{memoryCost:s,timeCost:i,version:r}={...Ue,...t},{version:n,params:{m:o,t:a}}=Pe(e);return+n!=+r||+o!=+s||+a!=+i}T.exports.needsRehash=qt;async function Lt(e,t,s={}){let{id:i,...r}=Pe(e);if(!(i in L))return!1;let{version:n=16,params:{m:o,t:a,p:l,data:c=""},salt:p,hash:u}=r,{secret:d=Buffer.alloc(0)}=s;return It(await ke({password:Buffer.from(t),salt:p,secret:d,data:Buffer.from(c,"base64"),hashLength:u.byteLength,m:+o,t:+a,p:+l,version:+n,type:L[i]}),u)}T.exports.verify=Lt});var Ke=M((fs,re)=>{"use strict";var Dt=Object.prototype.hasOwnProperty,f="~";function D(){}Object.create&&(D.prototype=Object.create(null),new D().__proto__||(f=!1));function Pt(e,t,s){this.fn=e,this.context=t,this.once=s||!1}function Ne(e,t,s,i,r){if(typeof s!="function")throw new TypeError("The listener must be a function");var n=new Pt(s,i||e,r),o=f?f+t:t;return e._events[o]?e._events[o].fn?e._events[o]=[e._events[o],n]:e._events[o].push(n):(e._events[o]=n,e._eventsCount++),e}function F(e,t){--e._eventsCount===0?e._events=new D:delete e._events[t]}function h(){this._events=new D,this._eventsCount=0}h.prototype.eventNames=function(){var t=[],s,i;if(this._eventsCount===0)return t;for(i in s=this._events)Dt.call(s,i)&&t.push(f?i.slice(1):i);return Object.getOwnPropertySymbols?t.concat(Object.getOwnPropertySymbols(s)):t};h.prototype.listeners=function(t){var s=f?f+t:t,i=this._events[s];if(!i)return[];if(i.fn)return[i.fn];for(var r=0,n=i.length,o=new Array(n);r<n;r++)o[r]=i[r].fn;return o};h.prototype.listenerCount=function(t){var s=f?f+t:t,i=this._events[s];return i?i.fn?1:i.length:0};h.prototype.emit=function(t,s,i,r,n,o){var a=f?f+t:t;if(!this._events[a])return!1;var l=this._events[a],c=arguments.length,p,u;if(l.fn){switch(l.once&&this.removeListener(t,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,s),!0;case 3:return l.fn.call(l.context,s,i),!0;case 4:return l.fn.call(l.context,s,i,r),!0;case 5:return l.fn.call(l.context,s,i,r,n),!0;case 6:return l.fn.call(l.context,s,i,r,n,o),!0}for(u=1,p=new Array(c-1);u<c;u++)p[u-1]=arguments[u];l.fn.apply(l.context,p)}else{var d=l.length,m;for(u=0;u<d;u++)switch(l[u].once&&this.removeListener(t,l[u].fn,void 0,!0),c){case 1:l[u].fn.call(l[u].context);break;case 2:l[u].fn.call(l[u].context,s);break;case 3:l[u].fn.call(l[u].context,s,i);break;case 4:l[u].fn.call(l[u].context,s,i,r);break;default:if(!p)for(m=1,p=new Array(c-1);m<c;m++)p[m-1]=arguments[m];l[u].fn.apply(l[u].context,p)}}return!0};h.prototype.on=function(t,s,i){return Ne(this,t,s,i,!1)};h.prototype.once=function(t,s,i){return Ne(this,t,s,i,!0)};h.prototype.removeListener=function(t,s,i,r){var n=f?f+t:t;if(!this._events[n])return this;if(!s)return F(this,n),this;var o=this._events[n];if(o.fn)o.fn===s&&(!r||o.once)&&(!i||o.context===i)&&F(this,n);else{for(var a=0,l=[],c=o.length;a<c;a++)(o[a].fn!==s||r&&!o[a].once||i&&o[a].context!==i)&&l.push(o[a]);l.length?this._events[n]=l.length===1?l[0]:l:F(this,n)}return this};h.prototype.removeAllListeners=function(t){var s;return t?(s=f?f+t:t,this._events[s]&&F(this,s)):(this._events=new D,this._eventsCount=0),this};h.prototype.off=h.prototype.removeListener;h.prototype.addListener=h.prototype.on;h.prefixed=f;h.EventEmitter=h;typeof re<"u"&&(re.exports=h)});import{CookieSetter as Gt,InSiteCookieMiddleware as Xt}from"insite-cookie/server";import{SubscriptionHandler as Yt}from"insite-subscriptions-server/ws";import{InSiteWebSocketServer as Qt}from"insite-ws/server";import{IncomingTransport as es,OutgoingTransport as ts}from"insite-ws-transfers/node";import{connect as ss}from"insite-db";import{InSiteHTTPServer as is,InSiteStaticMiddleware as rs,InSiteTemplateMiddleware as ns}from"insite-http";var W=fe(ze(),1);var Fe=fe(Ke(),1);var He=Fe.default;function P(e){if(e instanceof Set){let t=[];for(let s of e)t.push(s._id);return t}return e.map(t=>t._id)}function $(){}function x(e,t=0,s={}){let{leading:i=!1,trailing:r=!0}=s,{maxWait:n=1/0}=s,o,a,l,c,p,u,d,m,S=async()=>{let j=Date.now();j>=l?(o=void 0,l=void 0,clearTimeout(a),typeof d=="function"&&await d(),g.resolve(m),g.promise.isResolved=!0,u=i):(clearTimeout(o),o=setTimeout(S,l-j))},A=Number.isFinite(n)?()=>{d===b&&(d=!1),b(),a=setTimeout(A,n)}:null;async function b(){return m=await e.apply(c,p)}i&&typeof i=="boolean"&&(i=b),u=i,r&&typeof r=="boolean"&&(r=b),d=r;let g=Object.assign(function(...j){return p=j,c=this,l=Date.now()+t,d=r,g.promise.isResolved&&(g.promise=Object.assign(new Promise(ot=>{g.resolve=ot,typeof u=="function"&&(u(),u=!1,d===b&&(d=!1)),o||(o=setTimeout(S,t),A&&(a=setTimeout(A,n)))}),{isResolved:!1})),g.promise},{callback:e,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:$,run:b,clear:async j=>{clearTimeout(o),o=void 0,clearTimeout(a),g.promise.isResolved=!0,g.resolve(j?await b():m)}});return g}x.noop=Object.assign(()=>{},{callback:$,promise:Object.assign(Promise.resolve(),{isResolved:!0}),resolve:$,run:$,clear:$});function w(e,t){if(e){for(let s of t)delete e[s];return e}return null}function Ve(e){for(let t in e)delete e[t];return e}var H=class extends Array{constructor(){super(),Object.freeze(this)}push(){return 0}unshift(){return 0}splice(){return[]}};var E=class extends Set{constructor(){super()}add(){return this}};function ne(e,t,s=!1){return s&&(t=t.filter(i=>e.has(i))),t.map(i=>e.get(i))}function Je(e,t){for(let s of t)if(e.has(s))return!0;return!1}function Ze(e,t,s,i,r=!0){return Array.isArray(e)&&(e=e.length),typeof i!="string"&&(r=i??!0,i=s),(r?`${e}\xA0`:"")+Ze.raw(e,t,s,i)}Ze.raw=(e,t,s,i=s)=>{e=Math.abs(e);let r=e%10,n=e%100;return r===1&&n!==11?t:r>=2&&r<=4&&!(n>=12&&n<=15)?s:i};function Ge(e,...t){let s=[];e:for(let i of e){for(let r of t)if(r instanceof Set?!r.has(i):!r.includes(i))continue e;s.push(i)}return s}function V(e,t){return Math.floor(Math.random()*(t-e+1)+e)}function Xe(e,t){return e.delete(t),e.add(t),e}function I(e,t){let s,i=0;for(let r of t)for(;(s=e.indexOf(r))>-1;)e.splice(s,1),i++;return i}function Ye(e,t){let s=e.indexOf(t);return s>-1?(e.splice(s,1),!0):!1}function Qe(e,t){for(let s of[...e].sort(t))e.delete(s),e.add(s);return e}import{newObjectIdString as kt}from"insite-db";import{newObjectIdString as Ct}from"insite-db";import st from"node:crypto";var Bt=class extends Map{constructor(e){super(),this.schema=e,this.parse(this.schema)}schema;parse(e){for(let t of e)this.set(t._id,t),t.subAbilities&&this.parse(t.subAbilities)}merge(e,t){for(let[s,i]of Object.entries(t)){let r=this.get(s);if(r){if(r.isInheritable!==!1&&i){if(!(s in e))e[s]=structuredClone(i);else if(r.params){let n=e[s],o=i;for(let a of r.params)if(a.isInheritable!==!1&&a._id in o){if(!(a._id in n))n[a._id]=structuredClone(o[a._id]);else if(a.type==="number")n[a._id]<o[a._id]&&(n[a._id]=o[a._id]);else if(a.type==="items"){let l=n[a._id];for(let c of o[a._id])l.includes(c)||l.push(c)}}}}}else delete t[s]}return e}getMinimumOf(e){let t=this.get(e);if(t?.params){let s={};for(let i of t.params)i.type==="number"?s[i._id]=i.min??0:i.type==="items"&&(s[i._id]=[]);return s}return!0}getMaximum(){return[...this.values()].reduce((e,t)=>{if(t.params){let s={};for(let i of t.params)i.type==="number"?s[i._id]=i.max??0:i.type==="items"&&(s[i._id]=i.items.map(r=>r._id));e[t._id]=s}else e[t._id]=!0;return e},{})}getSchemeFor(e){return function t(s){for(let i=0;i<s.length;i++){let r=s[i],n=e.abilities[r._id];if(n){if(r.params)for(let o of r.params){let a=n[o._id];if(o.type==="number")"max"in o&&(o.max=a);else if(o.type==="items")for(let l=0;l<o.items.length;l++)a.includes(o.items[l]._id)||o.items.splice(l--,1)}r.subAbilities&&t(r.subAbilities)}else s.splice(i--,1)}return s}(structuredClone(this.schema))}},oe=new Map,R=class{constructor(e,t){this.orgs=e,this._id=t._id,e.set(this._id,this),this.update(t)}_id;title="";initials="";displayLabel="";_o=0;orgs;isOrg=!0;ownerOrgs=new Set;ownerUsers=new Set;users=new Set;slaveOrgs=new Set;ownerIds=[];update({_id:e,title:t,owners:s,...i},r){if(Object.assign(this,i),t!==void 0&&(this.title=t,this.initials=t?.[0]?.toUpperCase()??"",this.displayLabel=t),s){this.ownerIds=s;let n=this.ownerIds.join(",");n!==oe.get(this._id)&&(oe.set(this._id,n),this.orgs.users.isInited&&this.orgs.updateDebounced(),this.orgs.users.emit("orgs-org-update",this,r))}}delete(){this.orgs.delete(this._id),oe.delete(this._id),this.orgs.replace(this._id),this.orgs.updateDebounced()}},v={_id:/^[\dA-Fa-f]{24}$/,email:/^[^\s@]{1,63}@[^\s@]{1,63}\.[^\s@]{1,63}$/,argon2:/^\$argon2(?:i|d|id)\$v=\d+\$m=\d+,t=\d+,p=\d+(?:\$[\d+/A-Za-z]+){2}$/,sessionId:/^[\dA-Fa-f]{16,32}\$[\dA-Fa-f]{16,32}$/,role:/^[\d_a-z-]{1,64}$/,ip:/^(?:\d{1,3}\.){3}\d{1,3}$/},k={required:["_id","title","note","owners","createdAt"],properties:{_id:{bsonType:"string",pattern:v._id.source},title:{bsonType:"string",maxLength:512},note:{bsonType:"string",maxLength:131072},owners:{bsonType:"array",uniqueItems:!0,items:{bsonType:"string",pattern:v._id.source},additionalItems:!1},createdAt:{bsonType:"number"}},additionalProperties:!1},Ut=[[{owners:1}]];function et(){throw new Error("Direct usage of orgs collection.deleteOne or .deleteMany is forbidden. Use orgs.collectionDelete instead.")}var Wt=class extends Map{constructor(e,t={}){super(),this.users=e,this.collections=e.collections,this.preinitOptions=t}users;collections;preinitOptions;collection;null;load(e){new R(this,e)}resolve(e,t){t=[e,...t];for(let s of e.ownerOrgs){this.resolve(s,t);for(let i of t)s.slaveOrgs.add(i)}}sorted=[];update(){let e=[...this.values()],t=[];for(let s of e){s.ownerOrgs.clear(),s.ownerUsers.clear(),s.slaveOrgs.clear();for(let i of s.ownerIds){let r=this.get(i);if(r)s.ownerOrgs.add(r);else{let n=this.users.get(i);n&&s.ownerUsers.add(n)}}!s.ownerOrgs.size&&s._id&&t.push(s)}for(let s of e)e.some(i=>i.ownerOrgs.has(s))||this.resolve(s,[]);t.sort(this.sortOrgs);for(let s of e)Qe(s.slaveOrgs,this.sortOrgs);for(let s=0;s<t.length;s++){let i=t[s];for(let r of[...i.slaveOrgs].reverse())if(r.ownerOrgs.has(i)){let n=t.indexOf(r);~n&&(t.splice(n,1),s--),t.splice(s+1,0,r)}}for(let{length:s}=t,i=0;i<s;)t[i]._o=i++;this.sorted=t,this.users.emit("orgs-update"),this.users.isInited&&(this.users.updateDebounced.clear(),this.users.update())}sortOrgs(e,t){return t.slaveOrgs.size-e.slaveOrgs.size||(e.title>t.title?1:e.title<t.title?-1:0)}updateDebounced=x(this.update,250);preinit=async()=>{let{schema:e,indexes:t,null:s}=this.preinitOptions;e&&(e.required&&I(e.required,k.required),e.properties&&w(e,Object.keys(k.properties)));let i={...k,...e,required:[...k.required,...e?.required??[]],properties:{...k.properties,...e?.properties}};this.collection=Object.assign(await this.collections.ensure("orgs",{jsonSchema:i}),{deleteOne:et,deleteMany:et}),this.collection.ensureIndexes([...Ut,...t??[]]),this.null=Object.assign(new R(this,{...s,_id:"",title:"",note:"",owners:[],createdAt:Date.now()}),{_id:null,ownerIds:new H,ownerOrgs:new E,ownerUsers:new E,slaveOrgs:new E});for(let r of await this.collection.find().toArray())this.load(r);delete this.preinitOptions,delete this.preinit};init=async()=>{await this.update(),this.collection.changeListeners.add(e=>{switch(e.operationType){case"insert":{let t=new R(this,e.fullDocument);this.users.emit("orgs-org-update",t,e);break}case"replace":this.get(e.documentKey._id)?.update(e.fullDocument,e);break;case"update":this.get(e.documentKey._id)?.update(e.updateDescription.updatedFields,e);break;case"delete":this.get(e.documentKey._id)?.delete(),this.users.emit("orgs-org-update",null,e)}}),delete this.init};new({title:e,note:t,...s},i){return this.collection.insertOne({_id:Ct(),title:e??"",note:t??"",owners:i?[i]:[],...w(s,["_id","owners"]),createdAt:Date.now()})}collectionDelete(e){let t=typeof e=="string"?e:e._id;return this.collection.bulkWrite([{updateMany:{filter:{owners:t},update:{$pullAll:{owners:[t]}}}},{deleteOne:{filter:{_id:t}}}])}replaceMap=new Map;replaceHandlers=new Set;async replace(e){let t=this.replaceMap.get(e)??null;t&&this.replaceMap.delete(e);for(let s of this.replaceHandlers)await s(e,t)}},le=new Map,ae=class{constructor(e,t){this.roles=e,this._id=t._id,e.set(this._id,this),this.update(t)}roles;_id;ownInvolveIds;ownAbilities;title="";displayTitle="";_o=0;ownInvolves=[];involves=new Set;abilities={};inheritedAbilities={};update({_id:e,involves:t,abilities:s,title:i,...r},n){if(Object.assign(this,r),t&&(this.ownInvolveIds=t),s&&(this.ownAbilities=s),i!==void 0&&(this.title=i,this.displayTitle=i||this._id),t||s){let o=[this.ownInvolveIds.join(","),JSON.stringify(this.ownAbilities)].join(`
|
|
4
|
+
`);o!==le.get(this._id)&&(le.set(this._id,o),this.roles.users.isInited&&this.roles.updateDebounced(),this.roles.users.emit("roles-role-update",this,n))}}delete(){this.roles.delete(this._id),le.delete(this._id),this.roles.updateDebounced()}},B={required:["_id","involves","abilities","title","description","createdAt"],properties:{_id:{bsonType:"string",pattern:v.role.source,not:{enum:["root"]}},involves:{bsonType:"array",uniqueItems:!0,items:{bsonType:"string",pattern:v.role.source,not:{enum:["root"]}},additionalItems:!1},abilities:{bsonType:"object"},title:{bsonType:"string",maxLength:256},description:{bsonType:"string",maxLength:10240},createdAt:{bsonType:"number"}},additionalProperties:!1},zt=[[{involves:1}]];function tt(){throw new Error("Direct usage of roles collection.deleteOne or .deleteMany is forbidden. Use roles.collectionDelete instead.")}var Nt=class extends Map{constructor(e,t={}){super();let{root:s,...i}=t;this.users=e,this.collections=e.collections,this.abilitiesMap=e.abilitiesMap,this.root=new ae(this,{...s,_id:"root",involves:[],abilities:this.abilitiesMap.getMaximum(),title:"Root",description:"Root",createdAt:Date.now()}),this.initOptions=i}users;collections;collection;abilitiesMap;root;initOptions;load(e){new ae(this,e)}resolve(e,t){t=[e,...t];for(let s of e.ownInvolveIds){let i=this.get(s);if(i){for(let r of t)Xe(r.involves,i),this.abilitiesMap.merge(r.inheritedAbilities,i.abilities);i!==e&&this.resolve(i,t)}}}sorted=[];sortRoles(e,t){return t.involves.size-e.involves.size||(e.title&&t.title?e.title>t.title?1:e.title<t.title?-1:0:e.title?-1:t.title||e._id>t._id?1:e._id<t._id?-1:0)}update(){let e=[...this.values()];this.root.ownInvolveIds=[];for(let i of e)i!==this.root&&!e.some(r=>r.ownInvolveIds.includes(i._id))&&this.root.ownInvolveIds.push(i._id),i.involves.clear(),i.abilities=structuredClone(i.ownAbilities),i.inheritedAbilities={};this.root.involves.add(this.root),this.resolve(this.root,[]);for(let i of e)i.ownInvolves=ne(this,i.ownInvolveIds,!0).sort(this.sortRoles).reverse();let t=[this.root];for(let i=0;i<t.length;i++){let r=t[i];for(let n of r.ownInvolves){let o=t.indexOf(n);~o&&(t.splice(o,1),i--),t.splice(i+1,0,n)}}let s=0;for(let i of t)this.abilitiesMap.merge(i.abilities,i.inheritedAbilities),i._o=s++;this.sorted=t,this.users.emit("roles-update"),this.users.isInited&&(this.users.updateDebounced.clear(),this.users.update(!0))}updateDebounced=x(this.update,250);init=async()=>{let{schema:e,indexes:t}=this.initOptions;e&&(e.required&&I(e.required,B.required),e.properties&&w(e,Object.keys(B.properties)));let s={...B,...e,required:[...B.required,...e?.required??[]],properties:{...B.properties,...e?.properties}};this.collection=Object.assign(await this.collections.ensure("roles",{jsonSchema:s}),{deleteOne:tt,deleteMany:tt}),this.collection.ensureIndexes([...zt,...t??[]]);for(let i of await this.collection.find().toArray())this.load(i);await this.update(),this.collection.changeListeners.add(i=>{switch(i.operationType){case"insert":{let r=new ae(this,i.fullDocument);this.users.emit("roles-role-update",r,i);break}case"replace":this.get(i.documentKey._id)?.update(i.fullDocument,i);break;case"update":this.get(i.documentKey._id)?.update(i.updateDescription.updatedFields,i);break;case"delete":this.get(i.documentKey._id)?.delete(),this.users.emit("roles-role-update",null,i)}}),delete this.initOptions,delete this.init};new({_id:e,involves:t,title:s,description:i,...r}){return this.collection.insertOne({_id:e,involves:t||[],abilities:{},title:s??"",description:i??"",...w(r,["abilities"]),createdAt:Date.now()})}collectionDelete(e){let t=typeof e=="string"?e:e._id;return this.collection.bulkWrite([{updateMany:{filter:{involves:t},update:{$pullAll:{involves:[t]}}}},{deleteOne:{filter:{_id:t}}}])}cleanUpIds(e){let t=Ge(this.sorted,ne(this,e,!0)),s=[];for(let i of t)t.every(r=>r===i||!r.involves.has(i))&&s.push(i._id);return s}},C={required:["_id","user","remoteAddress","isOnline","createdAt","prolongedAt","expiresAt"],properties:{_id:{bsonType:"string",pattern:v.sessionId.source},user:{bsonType:"string",pattern:v._id.source},userAgent:{bsonType:"string",maxLength:4096},remoteAddress:{bsonType:"string",pattern:v.ip.source},isOnline:{bsonType:"bool"},createdAt:{bsonType:"number"},prolongedAt:{bsonType:"number"},expiresAt:{bsonType:"date"}},additionalProperties:!1},ue=class{constructor(e,t){let s=e.users.get(t.user);s?(this.sessions=e,this._id=t._id,this.sessions.set(this._id,this),this.user=s,this.user.sessions.add(this),this.sessions.users.bySessionId.set(this._id,this.user),this.update(t)):e.collection.deleteOne({_id:t._id})}_id;user;isOnline=!1;userAgent;remoteAddress;createdAt;prolongedAt;expiresAt;sessions;update({_id:e,user:t,isOnline:s,...i}){s!==void 0&&this.isOnline!==s&&(this.isOnline=s,this.sessions.isInited&&this.user.isOnline!==this.isOnline&&this.user.updateIsOnline()),Object.assign(this,i)}prolong({_id:e,user:t,...s}){let i=Date.now();return s.prolongedAt=i,s.expiresAt=new Date(i+this.sessions.collection.expireAfterSeconds*1e3),this.update(s),this.sessions.collection.updateOne({_id:this._id},{$set:s})}offline(){let e={isOnline:!1};return this.update(e),this.sessions.collection.updateOne({_id:this._id},{$set:e})}delete(){this.sessions.delete(this._id),this.user.sessions.delete(this),this.sessions.users.bySessionId.delete(this._id),this.sessions.users.emit("session-delete",this),this.isOnline&&this.user.updateIsOnline()}},pe=3600*24*7,Kt=[[{user:1}],[{expiresAt:1},{expireAfterSeconds:pe}]],Ft=class extends Map{constructor(e,t={}){super(),this.users=e,this.collections=e.collections,this.initOptions=t}users;collections;initOptions;collection;isInited=!1;uid(){let e;do e=`${st.randomBytes(V(8,16)).toString("hex")}$${st.randomBytes(V(8,16)).toString("hex")}`;while(this.has(e));return e}load(e){new ue(this,e)}init=async()=>{let{schema:e,indexes:t}=this.initOptions;e&&(e.required&&I(e.required,C.required),e.properties&&w(e,Object.keys(C.properties)));let s={...C,...e,required:[...C.required,...e?.required??[]],properties:{...C.properties,...e?.properties}};this.collection=Object.assign(await this.collections.ensure("sessions",{jsonSchema:s}),{expireAfterSeconds:pe}),this.collection.ensureIndexes([...Kt,...t??[]]),await this.collection.updateMany({isOnline:!0},{$set:{isOnline:!1}});for(let i of await this.collection.find().toArray())this.load(i);this.collection.changeListeners.add(i=>{switch(i.operationType){case"insert":this.has(i.documentKey._id)||new ue(this,i.fullDocument),this.users.get(i.fullDocument.user)?.trimSessions();break;case"replace":this.get(i.documentKey._id)?.update(i.fullDocument);break;case"update":this.get(i.documentKey._id)?.update(i.updateDescription.updatedFields);break;case"delete":this.get(i.documentKey._id)?.delete()}}),this.isInited=!0,delete this.initOptions,delete this.init};async new(e,t){let s=Date.now(),i={userAgent:"",remoteAddress:"127.0.0.1",isOnline:!0,...t,_id:this.uid(),user:e._id,createdAt:s,prolongedAt:s,expiresAt:new Date(s+pe*1e3)},r=new ue(this,i);return await this.collection.insertOne(i),r}},Ht={required:["_id","type","size","ts","data"],properties:{_id:{bsonType:"string",pattern:v._id.source},type:{bsonType:"string",maxLength:256},size:{bsonType:"number"},ts:{bsonType:"string",maxLength:10},data:{bsonType:"binData"}},additionalProperties:!1},Vt=class{constructor(e){this.users=e,this.collections=e.collections}users;collections;collection;init=async()=>{this.collection=await this.collections.ensure("users.avatars",{jsonSchema:Ht}),delete this.init}},U={required:["_id","email","password","roles","name","org","job","createdAt"],properties:{_id:{bsonType:"string",pattern:v._id.source},email:{bsonType:"string",pattern:v.email.source},password:{bsonType:"string",pattern:v.argon2.source},roles:{bsonType:"array",uniqueItems:!0,items:{bsonType:"string",pattern:v.role.source},additionalItems:!1},name:{bsonType:"object",required:["first","middle","last"],properties:{first:{bsonType:"string",maxLength:512},middle:{bsonType:"string",maxLength:512},last:{bsonType:"string",maxLength:512}},additionalProperties:!1},org:{oneOf:[{bsonType:"string",pattern:v._id.source},{bsonType:"null"}]},job:{bsonType:"string",maxLength:512},avatar:{oneOf:[{bsonType:"string",maxLength:10},{bsonType:"null"}]},createdAt:{bsonType:"number"}},additionalProperties:!1},ce=new Map,de=new Map,Jt=process.env.INSITE_STATIC_URL??"http://localhost:8080",J=class{constructor(e,t){this.users=e,this._id=t._id,e.set(this._id,this),this.update(t),e.isInited&&e.emit("user-create",this)}_id;email;name={first:"",middle:"",last:""};initials="";displayLabel="";org;job="";avatar=null;avatarUrl=null;users;isUser=!0;isRoot;roles=new Set;ownRoles=[];ownRoleIds=[];slaveRoles=new Set;slaveRoleIds=[];abilities={};slaveOrgs=new Set;slaveUsers=new Set;slaves=new Set;slaveIds=[];permissiveIds=[];sessions=new Set;isOnline=!1;update({_id:e,name:t,email:s,roles:i,org:r,avatar:n,...o}){Object.assign(this,o);let a;s&&this.email!==s&&(this.users.byEmail.delete(this.email),this.email=s,this.users.byEmail.set(s,this),a=!0);let l,c;t&&(this.name.first!==t.first||this.name.middle!==t.middle||this.name.last!==t.last)&&(c=this.name.last!==t.last,this.name={first:t.first??"",middle:t.middle??"",last:t.last??""},this.initials=((t.first?.[0]??"")+(t.last?.[0]??"")||this.email[0]).toUpperCase(),l=!0),(a||l)&&(this.displayLabel=`${this.name.first} ${this.name.last}`.trim()||this.name.middle||this.email);let p;if(i){this.ownRoleIds=i;let d=this.ownRoleIds.join(",");d!==ce.get(this._id)&&(ce.set(this._id,d),this.updateRoles(),p=!0)}let u;r!==void 0&&this.org?._id!==r&&(this.org?.users.delete(this),this.org=r&&this.users.orgs.get(r)||this.users.orgs.null,this.org.users.add(this),u=!0),n!==void 0&&this.avatar!==n&&(this.avatar=n,this.avatarUrl=n&&`${Jt}/avatars/${this._id}-${n}.webp`),p||u?(this.updatePermissions(),c&&(this.users.isSortRequired=!0),this.users.isInited&&this.users.updateDebounced()):c&&this.users.sortDebounced()}updateRoles(){if(this.users.isInited){this.ownRoles=[],this.roles.clear(),this.slaveRoles.clear(),Ve(this.abilities);for(let e of this.ownRoleIds){let t=this.users.roles.get(e);if(t){this.ownRoles.push(t),this.roles.add(t);for(let s of t.involves)this.roles.add(s),this.slaveRoles.add(s);this.slaveRoleIds=P(this.slaveRoles),this.users.abilitiesMap.merge(this.abilities,t.abilities)}}this.roles.has(this.users.roles.root)&&(this.isRoot=!0),this.trimSessions()}}updatePermissions(){if(this.users.isInited){this.slaveOrgs.clear(),this.slaveUsers.clear(),this.slaves.clear();let e=new Set;for(let i of this.users.orgs.sorted)if((i.ownerUsers.has(this)||this.isRoot)&&!this.slaveOrgs.has(i)){this.slaveOrgs.add(i),this.slaves.add(i),e.add(i._id);for(let r of i.slaveOrgs)this.slaveOrgs.add(r),this.slaves.add(r),e.add(r._id)}for(let i of new Set([this.org,...this.slaveOrgs,this.users.orgs.null]))for(let r of i.users)r!==this&&(Je(this.slaveRoles,r.ownRoles)||!r.ownRoles.length)&&(this.slaveUsers.add(r),this.slaves.add(r),e.add(r._id));this.slaveIds=[...e];let t=[];if(this.org._id){t.push(this.org._id);for(let i of this.org.slaveOrgs)this.slaveOrgs.has(i)||t.push(i._id)}this.permissiveIds=[...t,this._id,...e];let s=[this.permissiveIds.join(","),this.ownRoleIds.join(","),JSON.stringify(this.abilities),this.slaveRoleIds.join(",")].join(`
|
|
5
|
+
`);s!==de.get(this._id)&&(de.set(this._id,s),this.users.emit("user-permissions-change",this))}}trimSessions(){let e=this.abilities.login?.sessionsLimit??0;return this.sessions.size>e?this.users.sessions.collection.deleteMany({_id:{$in:P([...this.sessions].sort((t,s)=>t.expiresAt.valueOf()-s.expiresAt.valueOf()).slice(0,this.sessions.size-e))}}):null}updateIsOnline=x(()=>{let e=!1;for(let t of this.sessions)if(t.isOnline){e=!0;break}this.isOnline!==e&&(this.isOnline=e,this.users.emit("user-is-online",this))},500);delete(){this.org.users.delete(this),this.users.delete(this._id),this.users.byEmail.delete(this.email),Ye(this.users.sorted,this),ce.delete(this._id),de.delete(this._id),this.users.replace(this._id),this.users.updateDebounced()}},Zt=[[{email:1},{unique:!0}],[{org:1}]],it=class rt extends Map{constructor(t,s){super();let i=new He;this._events=i._events,this._eventsCount=i._eventsCount,this.emit=i.emit,this.on=i.on,this.once=i.once,this.addListener=i.addListener,this.off=i.off,this.removeListener=i.removeListener,this.collections=t,this.abilitiesMap=new Bt(s.abilities),this.initOptions=s,this.initPromise=this.init()}_events;_eventsCount;emit;on;once;addListener;off;removeListener;initOptions;collections;abilitiesMap;collection;roles;sessions;orgs;avatars;isInited=!1;byEmail=new Map;bySessionId=new Map;sorted=[];isSortRequired=!1;load(t){new J(this,t)}sort(){this.isSortRequired=!1,this.sorted=[...this.values()].sort((t,s)=>t.name.last>s.name.last?1:t.name.last<s.name.last?-1:0)}sortDebounced=x(()=>this.sort(),250);update(t){if(t)for(let s of this.values())s.updateRoles();for(let s of this.values())s.updatePermissions();this.isSortRequired&&this.sort()}updateDebounced=x(()=>this.update(),250);preinit=async()=>{let{indexes:t,schema:s,initialRoot:i}=this.initOptions;s&&(s.required&&I(s.required,U.required),s.properties&&w(s,Object.keys(U.properties)));let r={...U,...s,required:[...U.required,...s?.required??[]],properties:{...U.properties,...s?.properties}};this.collection=await this.collections.ensure("users",{jsonSchema:r}),this.collection.ensureIndexes([...Zt,...t??[]]),await this.collection.countDocuments({roles:"root"})||await this.new({email:process.env.INSITE_ROOT_EMAIL??"insite@root.email",password:process.env.INSITE_ROOT_PASSWORD??"inSiteRootPassword",roles:["root"],name:{first:"Root"},org:null,job:"Root",...i&&w(i,["roles","org"])});for(let n of await this.collection.find().toArray())this.load(n);delete this.preinit};initPromise;init=async()=>{this.isInited=!0;let{roles:t,orgs:s,sessions:i}=this.initOptions;return this.roles=new Nt(this,t),this.orgs=new Wt(this,s),this.sessions=new Ft(this,i),this.avatars=new Vt(this),await this.roles.init(),await this.orgs.preinit(),await this.preinit(),await this.orgs.init(),await this.avatars.init(),this.update(!0),this.collection.changeListeners.add(r=>{switch(r.operationType){case"insert":new J(this,r.fullDocument);break;case"replace":this.get(r.documentKey._id)?.update(r.fullDocument);break;case"update":this.get(r.documentKey._id)?.update(r.updateDescription.updatedFields);break;case"delete":this.get(r.documentKey._id)?.delete()}}),await this.sessions.init(),delete this.initOptions,delete this.init,this};whenReady(){return this.initPromise}async new({email:t,password:s,roles:i,name:r,org:n,job:o,...a}){if(this.byEmail.has(t))throw new Error("User exists");return await this.collection.insertOne({_id:kt(),email:t,password:await W.hash(s),roles:this.isInited?this.roles.cleanUpIds(i):i,name:{first:r.first??"",middle:r.middle??"",last:r.last??""},org:n??null,job:o??"",...w(a,["_id"]),createdAt:Date.now()}),!0}async changePassword(t,s){if(!this.has(t))throw new Error("usernotfound");if(!s)throw new Error("emptypasswordisnotallowed");await Promise.all([this.collection.updateOne({_id:t},{$set:{password:await W.hash(s)}}),this.sessions.collection.deleteMany({user:t})])}async login(t,s,i){let r=this.byEmail.get(t);if(!r)throw new Error("usernotfound");if(!await W.verify(r.password,s))throw new Error("incorrectpassword");if(!r.abilities.login)throw new Error("userisnotabletologin");return this.sessions.new(r,i)}logout(t){return t.delete(),this.sessions.collection.deleteOne({_id:t._id})}sortUsersAndOrgs(t,s){return t instanceof J&&s instanceof J?t.name.last&&s.name.last?t.name.last>s.name.last?1:t.name.last<s.name.last?-1:0:!t.name.last&&!s.name.last?t.displayLabel>s.displayLabel?1:t.displayLabel<s.displayLabel?-1:0:t.name.last?-1:1:t instanceof R&&s instanceof R?t.title>s.title?1:t.title<s.title?-1:0:t instanceof R?-1:1}sortIds(t){return P(t.map(s=>this.get(s)||this.orgs.get(s)).filter(Boolean).sort(this.sortUsersAndOrgs))}replaceMap=new Map;replaceHandlers=new Set;async replace(t){let s=this.replaceMap.get(t)??null;s&&this.replaceMap.delete(t);for(let i of this.replaceHandlers)await i(t,s)}static init(t,s){return new rt(t,s).whenReady()}};import{UsersServer as os}from"insite-users-server-ws";var nt=class e{constructor(t){this.initPromise=this.init(t)}mongoClient;db;collections;wss;incomingTransport;outgoingTransport;subscriptionHandler;usersServer;users;cookie;http;init=async t=>{let{db:s,wss:i,users:r,cookie:n,http:o}=t;if(s&&({client:this.mongoClient,db:this.db,collections:this.collections}=await ss(s)),i){let{subscriptions:a,incomingTransport:l,outgoingTransport:c,...p}=i;this.wss=new Qt(p),a!==null&&(this.subscriptionHandler=new Yt(this.wss,!!this.collections)),l!==null&&(l||this.collections&&r)&&(this.incomingTransport=new es(this.wss,l)),c&&(this.outgoingTransport=new ts(this.wss)),process.env.NODE_ENV==="development"&&this.wss.on("client-connect",u=>console.info(`\u{1F50C} WebSocket connected with ${u.session?.user.email}`)),this.wss.on("error",u=>console.error("\u{1F50C}\u2757\uFE0F WebSocket Server:",u)),this.wss.on("close",()=>console.error("\u{1F50C}\u2757\uFE0F WebSocket Server closed"))}if(r&&this.collections){let{server:a,...l}=r;this.wss&&this.subscriptionHandler?(this.usersServer=await os.init({...a,users:l,wss:this.wss,collections:this.collections,incomingTransport:this.incomingTransport}),this.users=this.usersServer.users):this.users=await it.init(this.collections,l)}if(o){let{static:a=void 0,template:l=void 0,middlewares:c=void 0,...p}=typeof o=="object"?o:{};this.http=new is(p,[a!==null&&new rs(a??{}),n!==null&&new Xt(n?.middleware??{}),l!==null&&new ns(l??{}),...c??[]].filter(Boolean))}if(n!==null&&this.usersServer&&this.http){let{middleware:a,...l}=n??{};this.cookie=new Gt({...l,usersServer:this.usersServer})}return delete this.init,this};initPromise;whenReady(){return this.initPromise}static init(t){return new e(t).whenReady()}};export{nt as InSite};
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "insite-server",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.6",
|
|
4
4
|
"description": "inSite server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -22,13 +22,13 @@
|
|
|
22
22
|
"author": "Eugene Nesvetaev <dev@nesvet.dev> (https://nesvet.dev/)",
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"insite-cookie": "^2.0.
|
|
25
|
+
"insite-cookie": "^2.0.4",
|
|
26
26
|
"insite-db": "^2.0.1",
|
|
27
|
-
"insite-http": "^2.0.
|
|
27
|
+
"insite-http": "^2.0.4",
|
|
28
28
|
"insite-subscriptions-server": "^2.0.4",
|
|
29
|
-
"insite-users-server-ws": "^2.0.
|
|
30
|
-
"insite-ws": "^2.0.
|
|
31
|
-
"insite-ws-transfers": "^2.0.
|
|
29
|
+
"insite-users-server-ws": "^2.0.4",
|
|
30
|
+
"insite-ws": "^2.0.13",
|
|
31
|
+
"insite-ws-transfers": "^2.0.8"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@nesvet/conveyer": "^2.2.1",
|