harperdb 4.7.27 → 4.7.28
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/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +246 -246
- package/package.json +2 -2
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadServer.js +1 -1
- package/studio/web/assets/{index-BKH0o6vZ.js → index-BLrHW_4X.js} +5 -5
- package/studio/web/assets/{index-BKH0o6vZ.js.map → index-BLrHW_4X.js.map} +1 -1
- package/studio/web/assets/{index.lazy-D5vviOl1.js → index.lazy-B3bMWbNh.js} +2 -2
- package/studio/web/assets/{index.lazy-D5vviOl1.js.map → index.lazy-B3bMWbNh.js.map} +1 -1
- package/studio/web/assets/{profile-V6JtmyCF.js → profile-BLeDamUk.js} +2 -2
- package/studio/web/assets/{profile-V6JtmyCF.js.map → profile-BLeDamUk.js.map} +1 -1
- package/studio/web/assets/{status-9_1gEAyL.js → status-CdZyfe1S.js} +2 -2
- package/studio/web/assets/{status-9_1gEAyL.js.map → status-CdZyfe1S.js.map} +1 -1
- package/studio/web/index.html +1 -1
- package/utility/scripts/restartHdb.js +1 -1
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
`},"serialize"),compressible:!1,q:.8});gn.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});qF={type:"application/json",serializeStream:Zm,serialize:ep,deserialize:Xre,q:.5};gn.set("*/*",qF);gn.set("",qF);a(Xre,"tryJSONParse");a(rp,"registerContentHandlers");Zre=(0,HF.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=pg(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});a(pg,"findBestSerializer");xF=mg.default.get(U.HTTP_COMPRESSIONTHRESHOLD);a(np,"serialize");a(Xo,"serializeMessage");a(KI,"asyncSerialization");a(YI,"hasAsyncSerialization");a(ene,"streamToBuffer");tne=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(rne,"isBufferEncoding");a(nne,"parseContentType");a(Zo,"getDeserializer");a(sne,"deserializerUnknownType");a(ine,"transformIterable");a(fg,"toCsvStream")});var Rg={};Re(Rg,{Blob:()=>Bs,blobsWereEncoded:()=>El,cleanupOrphans:()=>Sne,databasePaths:()=>jI,decodeBlobsWithWrites:()=>yg,decodeFromDatabase:()=>ra,decodeWithBlobCallback:()=>ap,deleteBlob:()=>gg,deleteBlobsInObject:()=>nc,deleteRootBlobPathsForDB:()=>JI,encodeBlobsAsBuffers:()=>Ene,encodeBlobsWithFilePath:()=>Tg,findBlobsInObject:()=>hl,getFileId:()=>Sg,getFilePathForBlob:()=>ZF,getRootBlobPathsForDB:()=>sd,isSaving:()=>une,saveBlob:()=>op,setDeletionDelay:()=>lne,startPreCommitBlobsForRecord:()=>XI});function JF(){}function gg(e){let t=ZF(e);t&&setTimeout(()=>{(0,Ve.unlink)(t,r=>{r&&vt.default.debug?.("Error trying to remove blob file",r)})},XF)}function lne(e){XF=e}function op(e,t=!1){let r=$r.get(e);if(!r)r={storageIndex:0,fileId:null,store:kn},$r.set(e,r);else{if(r.fileId)return r;r.store=kn}return r.deleteOnFailure=t,fne(r),r.source?WI(e,r.source,r):r.contentBuffer?dne(e,r):WI(e,rc.Readable.from(e.stream()),r),r}function WI(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,Ve.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;o?(m||f.write(ane),p=(0,_g.createDeflate)(),(0,rc.pipeline)(t,p,f,E)):(m||f.write(one),(0,rc.pipeline)(t,f,E));function h(_){let R=BigInt(_),S=new Uint8Array(Or),y=new DataView(S.buffer);return R|=BigInt(o?QI:QF)<<48n,y.setBigInt64(0,R),S}a(h,"createHeader");function E(_){let R=f.fd;if(_){if(i.unlock(d,0),R&&((0,Ve.close)(R),f.fd=null),r.deleteOnFailure)(0,Ve.unlink)(n,S=>{S&&vt.default.debug?.("Error while deleting aborted blob file",S)});else try{if((0,Ve.statSync)(n).size===0){let S=Buffer.from(_.toString());(0,Ve.writeFile)(n,Buffer.concat([h(BigInt(S.length)+0xff000000000000n),S]),y=>{y&&vt.default.debug?.("Error write error message to blob file",y)})}}catch(S){vt.default.debug?.("Error checking blob file after abort",S)}u(_)}else{if(!m){m=!0;let S=p?p.bytesWritten:f.bytesWritten-Or;e.size=S,(0,Ve.write)(R,h(S),0,Or,0,E);return}i.unlock(d,0),c?(0,Ve.fdatasync)(R,S=>{S&&u(S),l(),(0,Ve.close)(R),f.fd=null}):(l(),(0,Ve.close)(R),f.fd=null)}}a(E,"finished")}),e}function Sg(e){return $r.get(e)?.fileId}function une(e){return $r.get(e)?.saving}function ZF(e){let t=$r.get(e);return t?.fileId&&nd(t)}function sd(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=jI.get(e);if(!t){if(!e.databaseName)return vt.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,ip.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Qi.join)(n,e.databaseName)):t=[(0,Qi.join)((0,ip.getHdbBasePath)(),"blobs",e.databaseName)],jI.set(e,t)}return t}async function JI(e){let t=sd(e);t&&await Promise.all(t.map(r=>ek(r)))}async function ek(e){if((0,Ve.existsSync)(e)){for(let t of await(0,Hn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await ek((0,Qi.join)(e,t.name));else try{await(0,Hn.unlink)((0,Qi.join)(e,t.name))}catch(r){vt.default.warn?.("Error deleting file",r)}try{await(0,Hn.rmdir)(e)}catch(t){vt.default.warn?.("Error deleting directory",t)}}}function nd({storageIndex:e,fileId:t,store:r}){let n=sd(r);return(0,Qi.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function dne(e,t){let r=t.contentBuffer,n=r.length;if(!(n<zF))return e.size=n,WI(e,rc.Readable.from([r]),t)}function fne(e){let t=sd(e.store),r=mne(),n=t?.length>1?pne(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=nd(e),o=(0,Qi.dirname)(i);(0,Ve.existsSync)(o)||(0,zI.ensureDirSync)(o),e.filePath=i}function mne(){let e=WF.get(kn);if(!e){let t=0,r=sd(kn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,Ve.existsSync)(n))for(let c of(0,Ve.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,Qi.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(kn.getUserSharedBuffer("blob-file-id",e.buffer)),WF.set(kn,e)}return Number(Atomics.add(e,0,1n))}function pne(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(Eg);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,hne(e)),e.frequencyTable[t%Eg]}async function hne(e){if(!Hn.statfs)return;let t=await Promise.all(e.map(async s=>{let i;try{i=await(0,Hn.statfs)(s)}catch(c){if(c.code!=="ENOENT")throw c;(0,zI.ensureDirSync)(s),i=await(0,Hn.statfs)(s)}let o=i.bavail*i.bsize;return Math.pow(o,.8)})),r=new Array(Eg),n=t.map(s=>1/s);for(let s=0;s<Eg;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function Tg(e,t,r){ed=t,kn=r,El=!1;try{return e()}finally{ed=void 0,kn=void 0}}function Ene(e){Xr=[];let t;try{t=e()}catch(n){throw Xr=void 0,n}let r=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,r?r.then(()=>e()):t}function yg(e,t,r){try{Xr=[],ta=r,kn=t,e()}catch(s){throw ta=void 0,Xr=void 0,s}ta=void 0;let n=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,n}function ap(e,t,r){kn=r;try{return ta=t,e()}finally{ta=void 0}}function ra(e,t){return kn=t,e()}function nc(e){hl(e,t=>{gg(t)})}function hl(e,t){if(e instanceof Bs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&hl(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&hl(e[r],t)}}function XI(e,t){let r=[];for(let n in e){let s=e[n];s instanceof rd&&s.saveBeforeCommit&&r.push(s)}if(r.length>0)return()=>(kn=t,Promise.all(r.map(n=>op(n,!0).saving??Promise.resolve())))}function gne(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function Sne(e,t){let r,n,s=0;for(let d in e){let f=e[d];if(r=f.primaryStore.rootStore,n=f.auditStore,n)break}let i=new Set,o=sd(r);if(o)for(let d of o)await c(d);return await l(),vt.default.warn?.(`Cleaned Orphan Blobs from ${t??"database"}, deleted ${s} blobs)`),s;async function c(d){try{if(!(0,Ve.existsSync)(d))return;for(let f of await(0,Hn.readdir)(d,{withFileTypes:!0})){let m=(0,Qi.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&vt.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let p=(0,jF.getHeapStatistics)();p.used_heap_size>p.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){vt.default.error?.("Error searching path for blobs",d,f)}}a(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,ip.get)(U.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){vt.default.warn?.("Checking for references to potential orphaned blobs in table",m);let p=e[m];for(let h of p.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{h.metadataFlags&Zr&&h.value&&u(h.value),d++%f===0?await(0,td.setTimeout)(1):await(0,td.setImmediate)()}catch(E){vt.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",E)}}vt.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:m}of n.getRange({start:1,snapshot:!1,lazy:!0}))try{let p=wt(m),h=n.tableStores[p.tableId],E=h?.getEntry(p.recordId);(!E||E.version!==p.version||!E.value)&&u(p.getValue(h)),d++%f===0?await(0,td.setTimeout)(1):await(0,td.setImmediate)()}catch(p){vt.default.error?.("Error searching audit log for references to potential orphaned blobs failed",p)}vt.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,Hn.unlink)(m)}catch(p){vt.default.warn?.("Error deleting file",p)}vt.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}a(l,"removePathsThatAreNotReferenced");function u(d){hl(d,f=>{if(f instanceof rd){let m=$r.get(f);if(m.fileId!=null){let p=nd(m);i.has(p)&&i.delete(p)}}})}a(u,"checkObjectForReferences")}var zi,Hn,Ve,_g,rc,zI,ip,Qi,vt,jF,td,zF,Or,QF,QI,VF,one,ane,KF,$r,ta,Bs,ed,Xr,kn,El,sp,hg,cne,YF,rd,XF,jI,WF,Eg,_ne,us=ie(()=>{zi=require("msgpackr"),Hn=require("node:fs/promises"),Ve=require("node:fs"),_g=require("node:zlib"),rc=require("node:stream"),zI=require("fs-extra"),ip=b(fe());$();Qi=require("path"),vt=b(pr());ea();Wi();jF=require("node:v8"),td=require("node:timers/promises"),zF=8192,Or=8,QF=0,QI=1,VF=255,one=new Uint8Array([0,QF,255,255,255,255,255,255]),ane=new Uint8Array([0,QI,255,255,255,255,255,255]),KF=0xffffffffffff,$r=new WeakMap,Bs=global.Blob||gne(),El=!1,sp=new Uint8Array(8),hg=new DataView(sp.buffer),cne=6e4;a(JF,"InstanceOfBlobWithNoConstructor");JF.prototype=Bs.prototype;YF=!1,rd=class e extends JF{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=$r.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(YI()&&KI(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=$r.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=nd(t),o,c=a(async()=>{let l,u=Or;try{if(l=await(0,Hn.readFile)(i),l.length>=Or){l.copy(sp,0,0,Or);let f=hg.getBigUint64(0);if(Number(f>>48n)===VF)throw new Error("Error in blob: "+l.subarray(Or));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<KF&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(o)throw new Error(`Incomplete blob for ${i}`);return new Promise(h=>{if(m.attemptLock(p,0,()=>(o=!0,h(c()))))return o=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return a(d,"checkCompletion"),l[1]===QI?new Promise((f,m)=>{(0,_g.deflate)(l.subarray(Or),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Or))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=$r.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=nd(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,_=a((R,S)=>{(0,Ve.open)(i,"r",(y,I)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(vt.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),_(R,S)},20).unref();S(y),p.#e?.forEach(w=>w(y))}else o=I,R(I)})},"openFile");return new Promise(_)},pull:a(E=>{let _=0,R=100;return new Promise(a(function S(y,I){function w(H){(0,Ve.close)(o),clearTimeout(d),u&&u.close(),I(H),p.#e?.forEach(Z=>Z(H))}a(w,"onError");let P=Buffer.allocUnsafe(262144);(0,Ve.read)(o,P,0,P.length,c,(H,Z,X)=>{if(l+=Z,H)return w(H);if(c===0){if(Z<Or){R-- >0&&f!==!1?(h(),vt.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,I),20).unref()):(vt.default.debug?.("File was empty, throwing error",i,R),w(new Error(`Blob ${t.fileId} was empty`)));return}X.copy(sp,0,0,Or);let J=hg.getBigUint64(0);if(Number(J>>48n)===VF)return w(new Error("Error in blob: "+X.subarray(Or,Z)));if(_=Number(J&0xffffffffffffn),_<KF&&p.size!==_&&(p.size=_,p.#t))for(let F of p.#t)F(_);X=X.subarray(Or,Z),l-=Or}else if(Z===0){let J=Buffer.allocUnsafe(8);return(0,Ve.read)(o,J,0,Or,0,F=>{if(F)return w(F);if(sp.set(J),_=Number(hg.getBigUint64(0)&0xffffffffffffn),_>l){h()?(u=(0,Ve.watch)(i,{persistent:!1},()=>{u.close(),u=null,clearTimeout(d),S(y,I)}),(0,Ve.readSync)(o,J,0,J.length,c)>0?(u.close(),u=null,S(y,I)):d=setTimeout(()=>{w(new Error(`File read timed out reading from ${i}`))},cne).unref()):m?w(new Error("Blob is incomplete")):(m=!0,S(y,I));return}(0,Ve.close)(o),E.close(),y()})}else X=X.subarray(0,Z);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=Z,S(y,I);s&&l>=s&&(l>s&&(X=X.subarray(0,s-c)),l=_=s),n&&n>c&&(X=X.subarray(n-c))}c+=Z;try{E.enqueue(X)}catch(J){return vt.default.debug?.("Error enqueuing chunk",J),y()}l===_&&((0,Ve.close)(o),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,Ve.close)(o),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,_=t.fileId+":blob";f=!E.attemptLock(_,0,()=>{f=!1}),f||E.unlock(_,0)}return f}}slice(t,r,n){let s=$r.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};$r.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};$r.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return YF||(YF=!0,vt.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}get written(){return $r.get(this)?.saving??Promise.resolve()}},XF=500;a(gg,"deleteBlob");a(lne,"setDeletionDelay");global.createBlob=function(e,t){let r=new rd(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if($r.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof rc.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=rc.Readable.from(e);else throw new Error("Invalid source type");return r};a(op,"saveBlob");a(WI,"writeBlobWithStream");a(Sg,"getFileId");a(une,"isSaving");a(ZF,"getFilePathForBlob");jI=new Map;a(sd,"getRootBlobPathsForDB");a(JI,"deleteRootBlobPathsForDB");a(ek,"rimrafSteadily");a(nd,"getFilePath");a(dne,"writeBlobWithBuffer");a(fne,"generateFilePath");WF=new Map;a(mne,"getNextFileId");Eg=128;a(pne,"getNextStorageIndex");a(hne,"createFrequencyTableForStoragePaths");a(Tg,"encodeBlobsWithFilePath");a(Ene,"encodeBlobsAsBuffers");a(yg,"decodeBlobsWithWrites");a(ap,"decodeWithBlobCallback");a(ra,"decodeFromDatabase");a(nc,"deleteBlobsInObject");a(hl,"findBlobsInObject");a(XI,"startPreCommitBlobsForRecord");_ne=new zi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,zi.addExtension)({Class:Bs,type:11,unpack:a(function(e){let t=_ne.unpack(e),r=new rd;if(Object.assign(r,t[0]),typeof t[1]!="object"){if($r.set(r,{storageIndex:t[1],fileId:t[2],store:kn}),ta)return ta(r)??r;if(!kn)throw new Error("No store specified, cannot load blob from storage")}else $r.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=$r.get(e);if(ed!==void 0&&(El=!0,t?.recordId!==void 0&&t.recordId!==ed))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<zF)return r.size=t.contentBuffer.length,(0,zi.pack)([r,t.contentBuffer])}if(ed!==void 0){if(t=op(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=ed,(0,zi.pack)([r,t.storageIndex,t.fileId])}if(t){if(ta)return ta(e),(0,zi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,Ve.readFileSync)(nd(t));if(n.length>=Or&&(n.copy(sp,0,0,Or),Number(hg.getBigUint64(0)&0xffffffffffffn)===n.length-Or))return Buffer.concat([(0,zi.pack)([r]),n]);if(Xr)Xr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Xr)return Xr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,zi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(gne,"polyfillBlob");a(Sne,"cleanupOrphans")});function Gn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function lp(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=a(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);Gn(this)[u]=m},"set");break;case"ID":d=a(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);Gn(this)[u]=m},"set");break;case"Float":case"Number":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a number, attempt to assign ${p}`);Gn(this)[u]=m},"set");break;case"Int":d=a(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Gn(this)[u]=m},"set");break;case"Long":d=a(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Gn(this)[u]=m},"set");break;case"BigInt":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be a number, attempt to assign ${m}`);Gn(this)[u]=m},"set");break;case"Boolean":d=a(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Gn(this)[u]=m},"set");break;case"Date":d=a(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ds.ClientError(`${u} must be a Date, attempt to assign ${m}`);Gn(this)[u]=m},"set");break;case"Bytes":d=a(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Gn(this)[u]=m},"set");break;case"Blob":d=a(function(m){if(!(m instanceof Bs||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Gn(this)[u]=m},"set");break;case"Any":case void 0:d=a(function(m){Gn(this)[u]=m},"set");break;default:d=a(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be an object, attempt to assign ${m}`);Gn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=ZI(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}o("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),o("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ds.ClientError("Can not add a property to a sealed table schema");Gn(this)[l]=u}),o("deleteProperty",function(l){Gn(this)[l]=void 0}),o("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||o("get",n.getProperty),n.delete||o("delete",n.deleteProperty),n.then||o("then",null);function o(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}a(o,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?nk:rk);break}c=l}while(c&&c!==rk&&c!==nk)}function sk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(tk[t])return tk[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=ZI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Tne(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function ZI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends gl{static{a(this,"TrackedObject")}},lp(r,t)),new r(e)):new gl(e);case Array:let n=new Ag(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=ZI(o,t?.elements)),n[s]=o}return n;default:return e}}function Ig(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Ig(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function Sl(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Sl(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=xI[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Sl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)yne.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function bg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[_l]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(bg(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(bg(s))return!0}else return!0}else return!0}}return!1}var ds,tk,rk,nk,gl,yne,_l,Ag,cp,ew=ie(()=>{ds=b(ge());dg();us();a(Gn,"getChanges");a(lp,"assignTrackedAccessors");tk=Object.prototype,rk=new Proxy({},{get:sk}),nk=new Proxy({},{get:sk,set:Tne});a(sk,"getProxiedProperty");a(Tne,"setProxiedProperty");a(ZI,"trackObject");gl=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};lp(gl,{},!0);a(Ig,"collapseData");yne=Object.prototype.hasOwnProperty;a(Sl,"updateAndFreeze");a(bg,"hasChanges");_l=Symbol.for("has-array-changes"),Ag=class extends Array{static{a(this,"TrackedArray")}#e;[_l];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[_l]=!0,super.splice(...t)}push(...t){return this[_l]=!0,super.push(...t)}pop(){return this[_l]=!0,super.pop()}unshift(...t){return this[_l]=!0,super.unshift(...t)}shift(){return this[_l]=!0,super.shift()}};Ag.prototype.constructor=Array;cp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var fk={};Re(fk,{ResourceBridge:()=>nw});function sw({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function ik(e,t){let r=Ji(e),n=sw(e,r);if(!r)throw new hi.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;It(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&Ig(d)}catch(f){d={message:(0,dk.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ji(e){let t=e.database||e.schema||bne,r=dt()[t];if(!r)throw(0,hi.handleHDBError)(new Error,Rne.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function ok(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*ak(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var ck,wg,hi,lk,tw,rw,uk,dk,Rne,bne,Ane,Ine,nw,mk=ie(()=>{ck=b(IF()),wg=b(Xu()),hi=b(ge());Oe();lk=b(Fm());$();tw=b(Wo()),rw=b(cs()),uk=b(ue());Ja();ew();dk=b(ee()),{HDB_ERROR_MSGS:Rne}=hi.hdbErrors,bne="data",Ane=1e4,Ine=10,nw=class extends ck.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=Ji(t);if(!r)throw new hi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let o=i;return{attribute:o.attribute??o.search_attribute,comparator:o.comparator??o.search_type,value:o.value!==void 0?o.value:o.search_value}}}a(n,"mapCondition");let s=(0,wg.default)(t,"conditions");if(s)throw(0,hi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:sw(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new hi.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Qe({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ji(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ji(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(o);return i(o,d,f)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return Ji(t).dropTable()}createSchema(t){return id({database:t.schema,table:null}),tw.signalSchemaChange(new rw.SchemaEventMsg(process.pid,Y.CREATE_SCHEMA,t.schema))}async dropSchema(t){await iw(t.schema),tw.signalSchemaChange(new rw.SchemaEventMsg(process.pid,Y.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{attributes:r}=(0,lk.default)(t),n,s=dt()[t.schema][t.table],i={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(i.replicateTo=t.replicateTo),t.replicatedConfirmation&&(i.replicatedConfirmation=t.replicatedConfirmation),It(i,async o=>{if(!s.schemaDefined){n=[];for(let u of r)s.attributes.find(f=>f.name==u)||n.push(u);n.length>0&&await s.addAttributes(n.map(u=>({name:u,indexed:!0})))}let c=[],l=[];for(let u of t.records){let d=u[s.primaryKey],f=d!=null&&await s.get(d,i);if(t.requires_existing&&!f||t.requires_no_existing&&f){l.push(u[s.primaryKey]);continue}f&&(f=Ig(f));for(let m in u)if(Object.prototype.hasOwnProperty.call(u,m)){let p=u[m];if(typeof p=="function")try{let h=p([[f]]);Array.isArray(h)&&(p=h[0].func_val,u[m]=p)}catch(h){throw h.message+="Trying to set key "+m+" on object"+JSON.stringify(u),h}}if(f)for(let m in f)Object.prototype.hasOwnProperty.call(u,m)||(u[m]=f[m]);await(d==null?s.create(u,i):s.put(u,i)),c.push(u[s.primaryKey])}return{txn_time:o.timestamp,written_hashes:c,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=dt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),It(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return ok(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=dt()[t.schema][t.table];if(!r.createdTimeProperty)throw new hi.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:b_.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,uk.asyncSetTimeout)(Ine),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Ane===0&&await u();return l.length>0&&await u(),s?ok(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,wg.default)(t,"hashes");if(r)throw r;return ik(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of ik(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&_A[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,wg.default)(t,"value");if(n)throw n;let s=Ji(t);if(!s)throw new hi.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===b_.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:sw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ji(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Ji({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ji(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ji(t),n={};switch(t.search_type){case A_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let o=i.operation??i.type;return o==="put"&&(o="upsert"),{operation:o,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case A_.USERNAME:{let s=t.search_values;for await(let i of ak(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return ak(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(sw,"getSelect");a(ik,"getRecords");a(Ji,"getTable");a(ok,"createDeleteResponse");a(ak,"groupRecordsInHistory")});var fs=x((bDe,pk)=>{"use strict";var{ResourceBridge:wne}=(mk(),D(fk)),Nne=fe();Nne.initSync();var Ng;function Cne(){return Ng||(Ng=new wne,Ng)}a(Cne,"getBridge");pk.exports=Cne()});var Xi=x((IDe,_k)=>{var One=ul(),{promisify:Pne}=require("util"),{getDatabases:Ek}=(Oe(),D(Et));_k.exports={setSchemaDataToGlobal:hk,getTableSchema:Lne,getSystemSchema:Dne,setSchemaDataToGlobalAsync:Pne(hk)};function hk(e){global.hdb_schema=Ek(),e&&e()}a(hk,"setSchemaDataToGlobal");function Lne(e,t,r){let n=Ek()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(Lne,"getTableSchema");function Dne(){return One}a(Dne,"getSystemSchema")});var ms=x((NDe,yk)=>{"use strict";var Og=Kx(),en=ue(),vne=require("util"),Pg=fs(),Mne=Xi(),gk=ee(),{handleHDBError:Tl,hdbErrors:Une}=ge(),{HTTP_STATUS_CODES:yl}=Une,xne=vne.promisify(Mne.getTableSchema),Bne="updated",Sk="inserted",Tk="upserted";yk.exports={insert:kne,update:Hne,upsert:Gne,validation:Fne,flush:qne};async function Fne(e){if(en.isEmpty(e))throw new Error("invalid update parameters defined.");if(en.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(en.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await xne(e.schema,e.table),r=Og(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&en.isEmptyOrZeroLength(c[n]))throw gk.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!en.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw gk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!en.isEmpty(c[n])&&c[n]!==""&&s.has(en.autoCast(c[n]))&&(c.skip=!0),s.add(en.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(Fne,"validation");async function kne(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Og(e);if(t)throw Tl(new Error,t.message,yl.BAD_REQUEST);en.transformReq(e);let r=en.checkSchemaTableExist(e.schema,e.table);if(r)throw Tl(new Error,r,yl.BAD_REQUEST);let n=await Pg.createRecords(e);return Cg(Sk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(kne,"insertData");async function Hne(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Og(e);if(t)throw Tl(new Error,t.message,yl.BAD_REQUEST);en.transformReq(e);let r=en.checkSchemaTableExist(e.schema,e.table);if(r)throw Tl(new Error,r,yl.BAD_REQUEST);let n=await Pg.updateRecords(e);return en.isEmpty(n.existing_rows)?Cg(Bne,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Cg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Hne,"updateData");async function Gne(e){if(e.operation!=="upsert")throw Tl(new Error,"invalid operation, must be upsert",yl.INTERNAL_SERVER_ERROR);let t=Og(e);if(t)throw Tl(new Error,t.message,yl.BAD_REQUEST);en.transformReq(e);let r=en.checkSchemaTableExist(e.schema,e.table);if(r)throw Tl(new Error,r,yl.BAD_REQUEST);let n=await Pg.upsertRecords(e);return Cg(Tk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Gne,"upsertData");function Cg(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===Sk?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Tk?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Cg,"returnObject");function qne(e){return en.transformReq(e),Pg.flush(e.schema,e.table)}a(qne,"flush")});var aw=x((ODe,Ak)=>{var $ne=ht(),ow=require("joi"),{hdbTable:Vne,hdbDatabase:Rk}=Vo(),bk={schema:Rk,database:Rk,table:Vne},Kne={date:ow.date().iso().required()},Yne={timestamp:ow.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ak.exports=function(e,t){let r=t==="timestamp"?{...bk,...Yne}:{...bk,...Kne},n=ow.object(r);return $ne.validateBySchema(e,n)}});var Nk=x((PDe,wk)=>{var Wne=ht(),cw=require("joi"),{hdbTable:jne,hdbDatabase:Ik}=Vo(),zne=cw.object({schema:Ik,database:Ik,table:jne,hash_values:cw.array().required(),ids:cw.array()});wk.exports=function(e){return Wne.validateBySchema(e,zne)}});var fw=x((LDe,Ck)=>{"use strict";var lw=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},uw=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=o}},dw=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Ck.exports={InsertObject:lw,NoSQLSeachObject:uw,DeleteResponseObject:dw}});var Al=x((vDe,vk)=>{"use strict";var Pk=aw(),Qne=Nk(),Rl=ue(),Ok=require("moment"),Lk=ee(),{promisify:Jne,callbackify:Xne}=require("util"),bl=($(),D(z)),Zne=Xi(),mw=Jne(Zne.getTableSchema),pw=fs(),{DeleteResponseObject:ese}=fw(),{handleHDBError:sc,hdbErrors:tse}=ge(),{HDB_ERROR_MSGS:Lg,HTTP_STATUS_CODES:ic}=tse,rse="records successfully deleted",nse=Xne(Dk);vk.exports={delete:nse,deleteRecord:Dk,deleteFilesBefore:sse,deleteAuditLogsBefore:ise};async function sse(e){let t=Pk(e,"date");if(t)throw sc(t,t.message,ic.BAD_REQUEST,void 0,void 0,!0);if(Rl.transformReq(e),!Ok(e.date,Ok.ISO_8601).isValid())throw sc(new Error,Lg.INVALID_DATE,ic.BAD_REQUEST,bl.LOG_LEVELS.ERROR,Lg.INVALID_DATE,!0);let n=Rl.checkSchemaTableExist(e.schema,e.table);if(n)throw sc(new Error,n,ic.NOT_FOUND,bl.LOG_LEVELS.ERROR,n,!0);let s=await pw.deleteRecordsBefore(e);if(await mw(e.schema,e.table),Lk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(sse,"deleteFilesBefore");async function ise(e){let t=Pk(e,"timestamp");if(t)throw sc(t,t.message,ic.BAD_REQUEST,void 0,void 0,!0);if(Rl.transformReq(e),isNaN(e.timestamp))throw sc(new Error,Lg.INVALID_VALUE("Timestamp"),ic.BAD_REQUEST,bl.LOG_LEVELS.ERROR,Lg.INVALID_VALUE("Timestamp"),!0);let r=Rl.checkSchemaTableExist(e.schema,e.table);if(r)throw sc(new Error,r,ic.NOT_FOUND,bl.LOG_LEVELS.ERROR,r,!0);let n=await pw.deleteAuditLogsBefore(e);return await mw(e.schema,e.table),Lk.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(ise,"deleteAuditLogsBefore");async function Dk(e){e.ids&&(e.hash_values=e.ids);let t=Qne(e);if(t)throw sc(t,t.message,ic.BAD_REQUEST,void 0,void 0,!0);Rl.transformReq(e);let r=Rl.checkSchemaTableExist(e.schema,e.table);if(r)throw sc(new Error,r,ic.NOT_FOUND,bl.LOG_LEVELS.ERROR,r,!0);try{await mw(e.schema,e.table);let n=await pw.deleteRecords(e);return Rl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${rse}`),n}catch(n){if(n.message===bl.SEARCH_NOT_FOUND_MESSAGE){let s=new ese;return s.message=bl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Dk,"deleteRecord")});var Sw={};Re(Sw,{HASH_FUNCTION:()=>Vr,hash:()=>_w,validate:()=>gw});function hw(e=dp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(up.randomBytes(e)).map(r=>t[r%t.length]).join("")}function _w(e,t=Vr[Uk?.toUpperCase()]??Vr.SHA256){return Ew[t](e)}function gw(e,t,r=Vr[Uk?.toUpperCase()]??Vr.SHA256){return e?ose[r](e,t):!1}var up,od,Mk,Uk,dp,xk,Vr,Ew,ose,Tw=ie(()=>{up=b(require("node:crypto")),od=b(require("argon2")),Mk=b(fe());$();Uk=(0,Mk.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),dp=16,xk=9,Vr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(hw,"generateSalt");Ew={[Vr.MD5]:(e,t=void 0)=>{t=t??hw(xk);let r=up.createHash(Vr.MD5).update(e+t).digest("hex");return t+r},[Vr.SHA256]:(e,t=void 0)=>{t=t??hw(dp);let r=up.createHash(Vr.SHA256).update(e+t).digest("hex");return t+r},[Vr.ARGON2ID]:async e=>{let t=hw(dp),r=await od.hash(e,{type:od.argon2id,salt:Buffer.from(t)});return t+r}},ose={[Vr.MD5]:(e,t)=>{let r=e.slice(0,xk);return e===Ew[Vr.MD5](t,r)},[Vr.SHA256]:(e,t)=>{let r=e.slice(0,dp);return e===Ew[Vr.SHA256](t,r)},[Vr.ARGON2ID]:async(e,t)=>await od.verify(e.slice(dp),t)};a(_w,"hash");a(gw,"validate")});var Fk=x((BDe,Bk)=>{var yw=ht(),Sn={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function ase(e){return Sn.password.presence=!0,Sn.username.presence=!0,Sn.role.presence=!0,Sn.active.presence=!0,yw.validateObject(e,Sn)}a(ase,"addUserValidation");function cse(e){return Sn.password.presence=!1,Sn.username.presence=!0,Sn.role.presence=!1,Sn.active.presence=!1,yw.validateObject(e,Sn)}a(cse,"alterUserValidation");function lse(e){return Sn.password.presence=!1,Sn.username.presence=!0,Sn.role.presence=!1,Sn.active.presence=!1,yw.validateObject(e,Sn)}a(lse,"dropUserValidation");Bk.exports={addUserValidation:ase,alterUserValidation:cse,dropUserValidation:lse}});var Jk=x((kDe,Qk)=>{"use strict";var Rw=require("recursive-iterator"),use=require("alasql"),bw=require("clone"),kk=ue(),{handleHDBError:Hk,hdbErrors:dse}=ge(),{HDB_ERROR_MSGS:Gk,HTTP_STATUS_CODES:qk}=dse,{getDatabases:fse}=(Oe(),D(Et)),mse=["DISTINCT_ARRAY"],$k=Symbol("validateTables"),Aw=Symbol("validateTable"),Vk=Symbol("validateAllColumns"),Dg=Symbol("findColumn"),Kk=Symbol("validateOrderBy"),fp=Symbol("validateSegment"),Iw=Symbol("validateColumn"),Yk=Symbol("setColumnsForTable"),Wk=Symbol("checkColumnsForAsterisk"),jk=Symbol("validateGroupBy"),zk=Symbol("hasColumns"),ww=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$k](),this[Wk](),this[Vk]()}[$k](){if(this[zk]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Aw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Aw](t.table)})}}[zk](){let t=!1,r=new Rw(this.statement);for(let{node:n}of r)if(n&&n.columnid){t=!0;break}return t}[Aw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=fse();if(!r[t.databaseid])throw Hk(new Error,Gk.SCHEMA_NOT_FOUND(t.databaseid),qk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Hk(new Error,Gk.TABLE_NOT_FOUND(t.databaseid,t.tableid),qk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=bw(s);i.table=bw(t),this.attributes.push(i)})}[Dg](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[Wk](){let t=new Rw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Yk](r.tableid)}[Yk](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new use.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Vk](){this[fp](this.statement.columns,!1),this[fp](this.statement.joins,!1),this[fp](this.statement.where,!1),this[jk](this.statement.group,!1),this[fp](this.statement.order,!0)}[fp](t,r){if(!t)return;let n=new Rw(t),s=[];for(let{node:i}of n)!kk.isEmpty(i)&&!kk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Kk](i):s.push(this[Iw](i)));return s}[jk](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&mse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=bw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Dg](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Dg](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Kk](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Iw](t)}[Iw](t){let r=this[Dg](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};Qk.exports=ww});var tH=x((GDe,eH)=>{"use strict";var Xk=require("lodash"),mp=require("mathjs"),pse=require("jsonata"),Zk=ue();eH.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Xk.uniqWith(e,Xk.isEqual):e,"distinct_array"),searchJSON:hse,mad:pp.bind(null,mp.mad),mean:pp.bind(null,mp.mean),mode:pp.bind(null,mp.mode),prod:pp.bind(null,mp.prod),median:pp.bind(null,mp.median)};function pp(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(pp,"aggregateFunction");function hse(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(Zk.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Zk.isEmpty(this.__ala__.res[r])){let n=pse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(hse,"searchJSON")});var nH=x(($De,rH)=>{"use strict";var hr=require("moment"),Nw="YYYY-MM-DDTHH:mm:ss.SSSZZ";hr.suppressDeprecationWarnings=!0;rH.exports={current_date:a(()=>hr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>hr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return hr(e).utc().format("YYYY");case"month":return hr(e).utc().format("MM");case"day":return hr(e).utc().format("DD");case"hour":return hr(e).utc().format("HH");case"minute":return hr(e).utc().format("mm");case"second":return hr(e).utc().format("ss");case"millisecond":return hr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>hr(e).utc().format(Nw),"date"),date_format:a((e,t)=>hr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>hr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>hr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=hr(e).utc(),s=hr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>hr().utc().valueOf(),"now"),get_server_time:a(()=>hr().format(Nw),"get_server_time"),offset_utc:a((e,t)=>hr(e).utc().utcOffset(t).format(Nw),"offset_utc")}});var aH=x((KDe,oH)=>{"use strict";var Ese=require("@turf/area"),_se=require("@turf/length"),gse=require("@turf/circle"),Sse=require("@turf/difference"),Tse=require("@turf/distance"),yse=require("@turf/boolean-contains"),Rse=require("@turf/boolean-equal"),bse=require("@turf/boolean-disjoint"),Ase=require("@turf/helpers"),sH=($(),D(z)),Ze=ue(),na=ee();oH.exports={geoArea:Ise,geoLength:wse,geoCircle:Nse,geoDifference:Cse,geoDistance:iH,geoNear:Ose,geoContains:Pse,geoEqual:Lse,geoCrosses:Dse,geoConvert:vse};function Ise(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return Ese.default(e)}catch(t){return na.trace(t,e),NaN}}a(Ise,"geoArea");function wse(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return _se.default(e,{units:t||"kilometers"})}catch(r){return na.trace(r,e),NaN}}a(wse,"geoLength");function Nse(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return gse.default(e,t,{units:r||"kilometers"})}catch(n){return na.trace(n,e,t),NaN}}a(Nse,"geoCircle");function Cse(e,t){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Sse(e,t)}catch(r){return na.trace(r,e,t),NaN}}a(Cse,"geoDifference");function iH(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Tse.default(e,t,{units:r||"kilometers"})}catch(n){return na.trace(n,e,t),NaN}}a(iH,"geoDistance");function Ose(e,t,r,n){if(Ze.isEmpty(e)||Ze.isEmpty(t))return!1;if(Ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return iH(e,t,n)<=r}catch(s){return na.trace(s,e,t),!1}}a(Ose,"geoNear");function Pse(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return yse.default(e,t)}catch(r){return na.trace(r,e,t),!1}}a(Pse,"geoContains");function Lse(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Rse.default(e,t)}catch(r){return na.trace(r,e,t),!1}}a(Lse,"geoEqual");function Dse(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return!bse.default(e,t)}catch(r){return na.trace(r,e,t),!1}}a(Dse,"geoCrosses");function vse(e,t,r){if(Ze.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ze.isEmpty(t))throw new Error("geo_type is required");if(Ze.isEmpty(sH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(sH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),Ase[t](e,r)}a(vse,"geoConvert")});var vg=x((WDe,cH)=>{var Il=tH(),ps=nH(),Zi=aH();cH.exports=e=>{e.aggr.mad=e.aggr.MAD=Il.mad,e.aggr.mean=e.aggr.MEAN=Il.mean,e.aggr.mode=e.aggr.MODE=Il.mode,e.aggr.prod=e.aggr.PROD=Il.prod,e.aggr.median=e.aggr.MEDIAN=Il.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Il.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Il.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ps.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ps.current_time,e.fn.extract=e.fn.EXTRACT=ps.extract,e.fn.date=e.fn.DATE=ps.date,e.fn.date_format=e.fn.DATE_FORMAT=ps.date_format,e.fn.date_add=e.fn.DATE_ADD=ps.date_add,e.fn.date_sub=e.fn.DATE_SUB=ps.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ps.date_diff,e.fn.now=e.fn.NOW=ps.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ps.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ps.get_server_time,e.fn.getdate=e.fn.GETDATE=ps.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ps.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Zi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Zi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Zi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Zi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Zi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Zi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Zi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Zi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Zi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Zi.geoNear}});var fH=x((jDe,dH)=>{"use strict";var hp=require("lodash"),qn=require("alasql");qn.options.cache=!1;var Mse=vg(),lH=require("clone"),Mg=require("recursive-iterator"),Ke=ee(),it=ue(),ad=fs(),Use=($(),D(z)),{hdbErrors:xse}=ge(),{getDatabases:uH}=(Oe(),D(Et)),Bse="IS NULL",Ei="There was a problem performing this search. Please check the logs and try again.";Mse(qn);var Cw=class{static{a(this,"SQLSearch")}constructor(t,r){if(it.isEmpty(t))throw Ke.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),it.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!it.isEmptyOrZeroLength(n))return Ke.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ke.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ke.error(n),new Error(Ei)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ke.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ke.error(n),new Error(Ei)}if(Object.keys(this.data).length===0)return Ke.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ke.error("Error thrown from processJoins in SQLSearch class method search."),Ke.error(n),new Error(Ei)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ke.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ke.error(n),new Error(Ei)}try{return t=await this._finalSQL(),t}catch(n){throw Ke.error("Error thrown from finalSQL in SQLSearch class method search."),Ke.error(n),new Error(Ei)}}_getColumns(){let t=new Mg(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(lH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=hp.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=uH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(it.isEmpty(this.statement.where)){Ke.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Mg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!it.isEmpty(r)&&r.right)if(it.isNotEmptyAndHasValue(r.right.value)){let n=it.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new qn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=it.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new qn.yy.LogicValue({value:i}):n instanceof qn.yy.StringValue&&it.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new qn.yy.NumValue({value:i}))});if(t){Ke.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Mg(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!it.isEmpty(Use.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(it.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(it.isEmptyOrZeroLength(r.left.columnid)||it.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(it.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!it.isEmpty(r.right.value)||!it.isEmpty(r.left.value)?n.add(it.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from)&&it.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&hp.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(it.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);it.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(it.isEmptyOrZeroLength(this.all_table_attributes)&&!it.isEmptyOrZeroLength(this.columns.columns))return t;if(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await qn.promise(r)}catch(r){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ke.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(lH(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(it.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(Bse)>-1&&this.tables.forEach(s=>{let i={columnid:uH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=hp.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hashName;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!it.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await ad.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw Ke.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ke.error(d),new Error(Ei)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await ad.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ke.error(d),new Error(Ei)}else if(!it.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await ad.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,_]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,_[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ke.error(d),new Error(Ei)}else try{c.attribute=s.attribute,c.value="*";let d=await ad.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ke.error(d),new Error(Ei)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof qn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new qn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new qn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new qn.yy.FuncValue:new qn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let o=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;o.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await qn.promise(h,t),t=null}catch(p){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ke.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];o.forEach(_=>{E[_.key]!==null&&E[_.key]!==void 0&&_.keys.add(E[_.key])})}o.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=hp.difference(h,[...p.keys].map(_=>_.toString()));for(let _=0,R=E.length;_<R;_++){let S=E[_];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Mg(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=hp.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ke.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ke.error(i),new Error(Ei)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await ad.getDataByHash(c),u=s.columns.length;for(let d=0,f=o.length;d<f;d++){let m=o[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],_=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(_)}}}}catch(r){throw Ke.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ke.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ke.trace(`Final SQL: ${s}`),n=await qn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ke.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ke.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ke.error(xse.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ke.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let o=await ad.getDataByValue(i);for(let[c,l]of o)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ke.error("There was an error when processing this SQL operation. Check your logs"),Ke.error(o),new Error(Ei)}}return Object.values(Object.values(this.data)[0].__mergedData)}};dH.exports=Cw});var $n=x((QDe,mH)=>{"use strict";mH.exports={searchByConditions:Fse,searchByHash:kse,searchByValue:Hse,search:Gse};var Ow=fs(),{transformReq:Pw}=ue();async function Fse(e){return Pw(e),Ow.searchByConditions(e)}a(Fse,"searchByConditions");async function kse(e){Pw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Ow.searchByHash(e))r&&t.push(r);return t}a(kse,"searchByHash");async function Hse(e){Pw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Ow.searchByValue(e))t.push(r);return t}a(Hse,"searchByValue");function Gse(e,t){try{let r=Jk(),n=fH(),s=new r(e);s.validate(),new n(s.statement,s.attributes).search().then(o=>{t(null,o)}).catch(o=>{t(o,null)})}catch(r){return t(r)}}a(Gse,"search")});var sa=x((XDe,_H)=>{"use strict";var Ep=require("crypto"),qse=fe(),{CONFIG_PARAMS:$se}=($(),D(z)),hH="aes-256-cbc",Vse=32,Kse=16,Lw=64,EH=32,Yse=Lw+EH,pH=new Map;_H.exports={encrypt:Wse,decrypt:jse,createNatsTableStreamName:zse};function Wse(e){let t=Ep.randomBytes(Vse),r=Ep.randomBytes(Kse),n=Ep.createCipheriv(hH,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(Wse,"encrypt");function jse(e){let t=e.substr(0,Lw),r=e.substr(Lw,EH),n=e.substr(Yse,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Ep.createDecipheriv(hH,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(jse,"decrypt");function zse(e,t){let r=qse.get($se.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=pH.get(r);return n||(n=Ep.createHash("md5").update(r).digest("hex"),pH.set(r,n)),n}a(zse,"createNatsTableStreamName")});var Er=x((eve,SH)=>{"use strict";var Qse="nats-server.zip",Dw="nats-server",Jse=process.platform==="win32"?`${Dw}.exe`:Dw,Xse=/^[^\s.,*>]+$/,gH="__request__",Zse=a(e=>`${e}.${gH}`,"REQUEST_SUBJECT"),eie={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},tie={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},rie={HUB:"hub.pid",LEAF:"leaf.pid"},nie={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},sie={SUCCESS:"success",ERROR:"error"},iie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},oie={TXN:"txn",MSGID:"msgid"},cd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},aie={[cd.ERR]:1,[cd.WRN]:2,[cd.INF]:3,[cd.DBG]:4,[cd.TRC]:5},cie={debug:"-D",trace:"-DVV"};SH.exports={NATS_SERVER_ZIP:Qse,NATS_SERVER_NAME:Dw,NATS_BINARY_NAME:Jse,PID_FILES:rie,NATS_CONFIG_FILES:tie,SERVER_SUFFIX:nie,NATS_TERM_CONSTRAINTS_RX:Xse,REQUEST_SUFFIX:gH,UPDATE_REMOTE_RESPONSE_STATUSES:sie,CLUSTER_STATUS_STATUSES:iie,REQUEST_SUBJECT:Zse,SUBJECT_PREFIXES:oie,MSG_HEADERS:eie,LOG_LEVELS:cd,LOG_LEVEL_FLAGS:cie,LOG_LEVEL_HIERARCHY:aie}});var Mw=x((rve,IH)=>{"use strict";var bH=require("fs-extra"),be=require("joi"),lie=require("os"),{boolean:We,string:gt,number:_r,array:oc}=be.types(),{totalmem:TH}=require("os"),wl=require("path"),uie=ee(),vw=ue(),yH=($(),D(z)),die=ht(),RH="log",fie="components",mie="Invalid logging.rotation.maxSize unit. Available units are G, M or K",pie="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",hie="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Eie="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",_ie="rootPath config parameter is undefined",Vn=be.alternatives([_r.min(0),gt]).optional().empty(null),Ug=be.alternatives([oc.items(gt,{host:gt.required(),port:Vn},{hostname:gt.required(),port:Vn}).empty(null),oc.items(gt)]),eo,AH=!1;IH.exports={configValidator:gie,routesValidator:Aie,routeConstraints:Ug};function gie(e,t=!1){if(AH=t,eo=e.rootPath,vw.isEmpty(eo))throw _ie;let r=We.optional(),n=_r.min(0).max(1e3).empty(null).default(bie),s=gt.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/,"directory path").empty(null).default(_p),i=gt.optional().empty(null),o=gt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=be.string().empty(null).default(_p),l=be.custom(Tie).empty(null).default(_p),u=e.clustering?.enabled,d=be.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=be.object({enabled:r,hubServer:be.object({cluster:be.object({name:be.required().empty(null),network:be.object({port:Vn,routes:Ug}).required()}).required(),leafNodes:be.object({network:be.object({port:Vn}).required()}).required(),network:be.object({port:Vn}).required()}).required(),leafServer:be.object({network:be.object({port:Vn,routes:Ug}).required(),streams:be.object({maxAge:_r.min(120).allow(null).optional(),maxBytes:_r.min(1).allow(null).optional(),maxMsgs:_r.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:be.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:We.optional(),databaseLevel:We.optional(),tls:be.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:We.required(),verify:We.optional()}),user:gt.optional().empty(null)}).optional():f=be.object({enabled:r,tls:be.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:We.optional()})}).optional(),be.object({authentication:be.alternatives(be.object({authorizeLocal:We,cacheTTL:_r.required(),cookie:be.object({domains:oc.items(gt).optional(),expires:gt.optional()}),enableSessions:We,hashFunction:gt.valid("md5","sha256","argon2id").optional().empty(null)}),We).optional(),analytics:be.object({aggregatePeriod:_r,replicate:We.optional()}),replication:be.object({hostname:be.alternatives(gt,_r).optional().empty(null),url:gt.optional().empty(null),port:Vn,securePort:Vn,routes:oc.optional().empty(null),databases:be.alternatives(gt,oc),enableRootCAs:We.optional(),copyTablesToCatchUp:We.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:be.object({enabled:r}).required(),logging:be.object({auditAuthEvents:be.object({logFailed:We,logSuccessful:We}),file:We.required(),level:be.valid("notify","fatal","error","warn","info","debug","trace"),rotation:be.object({enabled:We.optional(),compress:We.optional(),interval:gt.custom(Rie).optional().empty(null),maxSize:gt.custom(yie).optional().empty(null),path:gt.optional().empty(null).default(_p)}).required(),root:s,stdStreams:We.required(),auditLog:We.required()}).required(),operationsApi:be.object({network:be.object({cors:We.optional(),corsAccessList:oc.optional(),headersTimeout:_r.min(1).optional(),keepAliveTimeout:_r.min(1).optional(),port:Vn,domainSocket:be.optional().empty("hdb/operations-server").default(_p),securePort:Vn,timeout:_r.min(1).optional()}).optional(),tls:be.alternatives([be.array().items(d),d])}).required(),rootPath:gt.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/,"directory path").required(),mqtt:be.object({network:be.object({port:Vn,securePort:Vn,mtls:be.alternatives([We.optional(),be.object({user:gt.optional(),certificateAuthority:i,required:We.optional()})])}).required(),webSocket:We.optional(),requireAuthentication:We.optional()}),http:be.object({compressionThreshold:_r.optional(),cors:We.optional(),corsAccessList:oc.optional(),headersTimeout:_r.min(1).optional(),port:Vn,securePort:Vn,maxHeaderSize:_r.optional(),mtls:be.alternatives([We.optional(),be.object({user:gt.optional(),certificateAuthority:i,required:We.optional()})]),threadRange:be.alternatives([oc.optional(),gt.optional()])}).required(),threads:be.alternatives(n.optional(),be.object({count:n.optional(),debug:be.alternatives(We.optional(),be.object({startingPort:_r.min(1).optional(),host:gt.optional(),waitForDebugger:We.optional()})),maxHeapMemory:_r.min(0).optional()})),storage:be.object({writeAsync:We.required(),overlappingSync:We.optional(),caching:We.optional(),compression:be.alternatives([We.optional(),be.object({dictionary:gt.optional(),threshold:_r.optional()})]),compactOnStart:We.optional(),compactOnStartKeepBackup:We.optional(),noReadAhead:We.optional(),path:l,prefetchWrites:We.optional(),maxFreeSpaceToLoad:_r.optional(),maxFreeSpaceToRetain:_r.optional()}).required(),ignoreScripts:We.optional(),tls:be.alternatives([be.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(gie,"configValidator");function Sie(e){return AH||bH.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Sie,"doesPathExist");function Tie(e,t){be.assert(e,gt.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/,"directory path"));let r=Sie(e);if(r)return t.message(r)}a(Tie,"validatePath");function yie(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(mie);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(hie):e}a(yie,"validateRotationMaxSize");function Rie(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(pie);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Eie):e}a(Rie,"validateRotationInterval");function bie(e,t){let r=t.state.path.join("."),n=lie.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||TH();return i=Math.round(Math.min(i,TH())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),uie.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(bie,"setDefaultThreads");function _p(e,t){let r=t.state.path.join(".");if(!vw.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(vw.isEmpty(eo))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return wl.join(eo,fie);case"logging.root":return wl.join(eo,RH);case"clustering.leafServer.streams.path":return wl.join(eo,"clustering","leaf");case"storage.path":let n=wl.join(eo,yH.LEGACY_DATABASES_DIR_NAME);return bH.existsSync(n)?n:wl.join(eo,yH.DATABASES_DIR_NAME);case"logging.rotation.path":return wl.join(eo,RH);case"operationsApi.network.domainSocket":return r==null?null:wl.join(eo,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(_p,"setDefaultRoot");function Aie(e){let t=be.object({routes:Ug});return die.validateBySchema({routes:e},t)}a(Aie,"routesValidator")});var NH={};Re(NH,{getBackupDirPath:()=>xg});function xg(e){return wH.join(e,pA)}var wH,Uw=ie(()=>{wH=b(require("node:path"));$();a(xg,"getBackupDirPath")});var kg={};Re(kg,{ConfigEnvVarError:()=>ld,applyRuntimeEnvConfig:()=>Mie,filterArgsAgainstRuntimeConfig:()=>Iie});function Bg(){let{loggerWithTag:e}=pr();return e("env-config")}function Fg(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&Object.prototype.toString.call(e)==="[object Object]"}function Iie(e){if(!process.env.HARPER_SET_CONFIG)return e;let t;try{t=JSON.parse(process.env.HARPER_SET_CONFIG)}catch(i){return Bg().warn("Failed to parse HARPER_SET_CONFIG for arg filtering",i),e}if(Object.keys(t).length===0)return e;let r=a((i,o="")=>{let c=new Set;for(let l in i){let u=o?`${o}_${l}`:l;i[l]!==null&&typeof i[l]=="object"&&!Array.isArray(i[l])?r(i[l],u).forEach(d=>c.add(d)):c.add(u.toLowerCase())}return c},"flattenSetConfig"),n=r(t),s={};for(let i in e)n.has(i.toLowerCase())||(s[i]=e[i]);return s}function gp(e,t=""){let r={};for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let s=e[n],i=t?`${t}.${n}`:n;Fg(s)?Object.assign(r,gp(s,i)):r[i]=s}return r}function Sp(e,t){let r=t.split("."),n=e;for(let s of r){if(n==null)return;n=n[s]}return n}function Tp(e,t,r){let n=t.split("."),s=e;for(let i=0;i<n.length-1;i++){let o=n[i];Fg(s[o])||(s[o]={}),s=s[o]}s[n[n.length-1]]=r}function Bw(e,t){let r=t.split("."),n=e;for(let s=0;s<r.length-1;s++){let i=r[s];if(!Fg(n[i]))return;n=n[i]}delete n[r[r.length-1]]}function wie(e){let t=a(n=>n===null||typeof n!="object"?JSON.stringify(n):Array.isArray(n)?"["+n.map(t).join(",")+"]":"{"+Object.keys(n).sort().map(o=>JSON.stringify(o)+":"+t(n[o])).join(",")+"}","sortedStringify"),r=t(e);return LH.createHash("sha256").update(r).digest("hex")}function Nie(e,t){if(!e||e.trim()==="")return null;try{let r=JSON.parse(e.trim());if(!Fg(r))throw new ld(`${t} must be a JSON object, got: ${typeof r}`,t);return r}catch(r){throw r instanceof ld?r:new ld(`Invalid JSON syntax in ${t}: ${r.message}`,t,r)}}function Cie(e){let t=xw.join(xg(e),DH);if(!ac.existsSync(t))return{version:"1.0",sources:{},originalValues:{},snapshots:{}};try{let r=ac.readJsonSync(t);return r.originalValues||(r.originalValues={}),r}catch(r){return Bg().warn(`Failed to load config state file, starting fresh: ${r.message}`),{version:"1.0",sources:{},originalValues:{},snapshots:{}}}}function Oie(e,t){let r=xg(e),n=xw.join(r,DH);ac.ensureDirSync(r),ac.writeJsonSync(n,t,{spaces:2})}function Pie(e,t){let r=[];for(let[n,s]of Object.entries(t.sources)){if(s!=="HARPER_DEFAULT_CONFIG"&&s!=="HARPER_SET_CONFIG")continue;let i=t.snapshots[s];if(!i)continue;let o=Sp(e,n),c=Sp(i.config,n);JSON.stringify(o)!==JSON.stringify(c)&&r.push(n)}return r}function CH(e,t,r,n,s={}){let{respectSources:i=[],storeOriginals:o=!1}=s,c=gp(r);for(let[l,u]of Object.entries(c)){let d=t.sources[l],f=Sp(e,l);d&&i.includes(d)||(o&&!d&&f!==void 0&&f!==null&&(l in t.originalValues||(t.originalValues[l]=f)),Tp(e,l,u),t.sources[l]=n)}}function Lie(e,t,r,n,s){let i=Object.keys(gp(r)),o=Object.keys(gp(n)),c=i.filter(l=>!o.includes(l));for(let l of c)t.sources[l]===s&&((s==="HARPER_DEFAULT_CONFIG"||s==="HARPER_SET_CONFIG")&&l in t.originalValues?(Tp(e,l,t.originalValues[l]),delete t.originalValues[l]):Bw(e,l),delete t.sources[l])}function Die(e,t,r){let n=Object.keys(t.sources).filter(s=>t.sources[s]===r);for(let s of n)Bw(e,s),delete t.sources[s]}function vie(e,t,r){let n={};for(let s in t.sources)if(t.sources[s]===r){let i=Sp(e,s);i!==void 0&&Tp(n,s,i)}return n}function OH(e,t,r,n,s={}){let i=process.env[r];if(!i)return;let o=Bg(),c=Nie(i,r);if(!c)return;let l=wie(c),u=t.snapshots[n];if(n==="HARPER_SET_CONFIG")CH(e,t,c,n,{respectSources:[],storeOriginals:!0});else if(n==="HARPER_DEFAULT_CONFIG")if(s.isInstall)CH(e,t,c,n,{respectSources:["HARPER_SET_CONFIG","user"],storeOriginals:!0});else{let m=gp(c);for(let[p,h]of Object.entries(m)){let E=t.sources[p],_=Sp(e,p);if(!(E&&E!=="HARPER_DEFAULT_CONFIG")){if(!E&&_!=null){p in t.originalValues||(t.originalValues[p]=_);continue}Tp(e,p,h),t.sources[p]=n}}}u&&u.hash!==l&&Lie(e,t,u.config,c,n);let d=vie(e,t,n);t.snapshots[n]={hash:l,config:d};let f=s.isInstall?"installation":"runtime";o.debug?.(`Applied ${r} at ${f}`)}function PH(e,t,r,n){if(!t.snapshots[n])return;let s=Bg();if(n==="HARPER_DEFAULT_CONFIG"||n==="HARPER_SET_CONFIG"){let i=Object.keys(t.sources).filter(o=>t.sources[o]===n);for(let o of i)o in t.originalValues?(Tp(e,o,t.originalValues[o]),delete t.originalValues[o]):Bw(e,o),delete t.sources[o]}else Die(e,t,n);delete t.snapshots[n],s.debug?.(`${r} removed, cleaned up values`)}function Mie(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG,i=Cie(t);if(!n&&!s&&Object.keys(i.snapshots).length===0)return e;if(!r.isInstall){let o=Pie(e,i);for(let c of o)i.sources[c]="user"}return OH(e,i,"HARPER_DEFAULT_CONFIG","HARPER_DEFAULT_CONFIG",r),n||PH(e,i,"HARPER_DEFAULT_CONFIG","HARPER_DEFAULT_CONFIG"),OH(e,i,"HARPER_SET_CONFIG","HARPER_SET_CONFIG",r),s||PH(e,i,"HARPER_SET_CONFIG","HARPER_SET_CONFIG"),Oie(t,i),e}var ac,xw,LH,DH,ld,Hg=ie(()=>{ac=b(require("fs-extra")),xw=b(require("node:path")),LH=b(require("node:crypto"));Uw();DH=".harper-config-state.json";a(Bg,"getLogger");ld=class extends Error{static{a(this,"ConfigEnvVarError")}envVarName;originalError;constructor(t,r,n){super(t),this.name="ConfigEnvVarError",this.envVarName=r,this.originalError=n}};a(Fg,"isPlainObject");a(Iie,"filterArgsAgainstRuntimeConfig");a(gp,"flattenObject");a(Sp,"getNestedValue");a(Tp,"setNestedValue");a(Bw,"deleteNestedValue");a(wie,"hashConfig");a(Nie,"parseConfigEnvVar");a(Cie,"loadConfigState");a(Oie,"saveConfigState");a(Pie,"detectConfigDrift");a(CH,"applyConfigLayer");a(Lie,"handleDeletions");a(Die,"removeValuesWithSource");a(vie,"buildSnapshot");a(OH,"processEnvVar");a(PH,"cleanupRemovedEnvVar");a(Mie,"applyRuntimeEnvConfig")});var Nt=x(ar=>{"use strict";var Fs=($(),D(z)),Pr=ue(),Mt=ee(),{configValidator:Uie,routesValidator:vH}=Mw(),tn=require("fs-extra"),$g=require("yaml"),Es=require("path"),xie=require("is-number"),UH=require("properties-reader"),Bie=require("lodash"),{handleHDBError:Fie}=ge(),{HTTP_STATUS_CODES:kie,HDB_ERROR_MSGS:ud}=En(),{server:Hie}=(qr(),D(Pm)),{PACKAGE_ROOT:xH}=Dt(),{getBackupDirPath:Gie}=(Uw(),D(NH)),{DATABASES_PARAM_CONFIG:yp,CONFIG_PARAMS:hs,CONFIG_PARAM_MAP:_i}=Fs,qie="Unable to get config value because config is uninitialized",$ie="Config successfully initialized",Vie="Error backing up config file",Kie="Empty parameter sent to getConfigValue",BH=Es.join(xH,"config","yaml",Fs.HDB_DEFAULT_CONFIG_FILE),Yie=Es.join(xH,"config","yaml","defaultNatsConfig.yaml"),Wie="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",MH={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},Gg,Vt,qg;ar.createConfigFile=jie;ar.getDefaultConfig=zie;ar.getConfigValue=kH;ar.initConfig=Vg;ar.flattenConfig=dd;ar.updateConfigValue=HH;ar.updateConfigObject=Jie;ar.getConfiguration=eoe;ar.setConfiguration=toe;ar.readConfigFile=Gw;ar.getClusteringRoutes=roe;ar.initOldConfig=qH;ar.getConfigFromFile=noe;ar.getConfigFilePath=Nl;ar.addConfig=soe;ar.deleteConfigFromFile=ioe;ar.getConfigObj=ooe;ar.resolvePath=Fw;ar.getFlatConfigObj=aoe;function Fw(e){if(e?.startsWith("~/"))return Es.join(Pr.getHomeDir(),e.slice(1));let t=fe();try{return Es.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(Fw,"resolvePath");function jie(e,t=!1){let r=cc(BH);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=$g.parseDocument(tn.readFileSync(Yie,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Gg=dd(r.toJSON());let n;for(let c in e){let l=_i[c.toLowerCase()];if(l===hs.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=kw(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){Mt.error(f)}}}n&&FH(r,n),GH(r,null,{isInstall:!0}),Hw(r,t);let s=r.toJSON();Vt=dd(s);let i=r.getIn(["rootPath"]),o=Es.join(i,Fs.HDB_CONFIG_FILE);if(tn.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);tn.writeFileSync(o,String(r)),Mt.trace(`Config file written to ${o}`)}a(jie,"createConfigFile");function FH(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Pr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(yp.TABLES))for(let i in n[s][yp.TABLES])for(let o in n[s][yp.TABLES][i]){let c=n[s][yp.TABLES][i][o],l=[hs.DATABASES,s,yp.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[hs.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Mt.error("Error parsing schemas CLI/env config arguments",n)}}a(FH,"setSchemasConfig");function zie(e){if(Gg===void 0){let r=cc(BH);Gg=dd(r.toJSON())}let t=_i[e.toLowerCase()];if(t!==void 0)return Gg[t.toLowerCase()]}a(zie,"getDefaultConfig");function kH(e){if(e==null){Mt.info(Kie);return}if(Vt===void 0){Mt.trace(qie);return}let t=_i[e.toLowerCase()];if(t!==void 0)return Vt[t.toLowerCase()]}a(kH,"getConfigValue");function Nl(e=Pr.getPropsFilePath()){let t=Pr.getEnvCliRootPath();if(t)return Fw(Es.join(t,Fs.HDB_CONFIG_FILE));let r=UH(e);return Fw(r.get(Fs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(Nl,"getConfigFilePath");function Vg(e=!1){if(Vt===void 0||e){let t;if(!Pr.noBootFile()){t=Pr.getPropsFilePath();try{tn.accessSync(t,tn.constants.F_OK|tn.constants.R_OK)}catch(i){throw Mt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Nl(t),n;if(r.includes("config/settings.js"))try{qH(r);return}catch(i){if(i.code!==Fs.NODE_ERROR_CODES.ENOENT)throw i}try{n=cc(r)}catch(i){if(i.code===Fs.NODE_ERROR_CODES.ENOENT){Mt.trace(`HarperDB config file not found at ${r}.
|
|
11
11
|
This can occur during early stages of install where the config file has not yet been created`);return}else throw Mt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Qie(n,r),GH(n,r),Hw(n);let s=n.toJSON();if(Hie.config=s,Vt=dd(s),Vt.logging_rotation_rotate)for(let i in MH)Vt[i]&&Mt.error(`Config ${MH[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Mt.trace($ie)}}a(Vg,"initConfig");function Qie(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Es.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Es.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(Mt.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);tn.writeFileSync(t,String(e))}}a(Qie,"checkForUpdatedConfig");function Hw(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw ud.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw ud.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=Uie(r,t);if(n.error)throw ud.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(Hw,"validateConfig");function Jie(e,t){Vt===void 0&&(Vt={});let r=_i[e.toLowerCase()];if(r===void 0){Mt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Vt[r.toLowerCase()]=t}a(Jie,"updateConfigObject");function HH(e,t,r=void 0,n=!1,s=!1,i=!1){Vt===void 0&&Vg();let o=kH(_i.hdb_root),c=Es.join(o,Fs.HDB_CONFIG_FILE),l=cc(c),u;if(r&&Vt){let m=!1;for(let p in r)if(r[p]!=Vt[p.toLowerCase()]){m=!0;break}if(!m){Mt.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===hs.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=_i[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=kw(m,t);l.setIn([...p],h)}else for(let m in r){let p=_i[m.toLowerCase()];if(p===hs.HTTP_SECUREPORT&&r[m]===Vt[hs.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===hs.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Vt[hs.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===hs.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=Fs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let _=kw(p,r[m]);p==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],_)}catch(R){Mt.error(R)}}}u&&FH(l,u),Hw(l);let d=l.getIn(["rootPath"]),f=Es.join(d,Fs.HDB_CONFIG_FILE);if(n===!0&&Xie(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);tn.writeFileSync(f,String(l)),s&&(Vt=dd(l.toJSON())),Mt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(HH,"updateConfigValue");function Xie(e,t){try{let r=Es.join(Gie(t),`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Fs.HDB_CONFIG_FILE}.bak`);tn.copySync(e,r),Mt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Mt.error(Vie),Mt.error(r)}}a(Xie,"backupConfigFile");var Zie=["databases"];function dd(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),qg=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!Zie.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!hs[l.toUpperCase()]&&_i[l]&&(s[_i[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(dd,"flattenConfig");function kw(e,t){if(e===hs.CLUSTERING_NODENAME||e===hs.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(xie(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Pr.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Pr.autoCast(t)}a(kw,"castConfigValue");function eoe(){let e=Pr.getPropsFilePath(),t=Nl(e);return cc(t).toJSON()}a(eoe,"getConfiguration");async function toe(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return HH(void 0,void 0,s,!0),Wie}catch(i){throw typeof i=="string"||i instanceof String?Fie(i,i,kie.BAD_REQUEST,void 0,void 0,!0):i}}a(toe,"setConfiguration");function Gw(){let e=Pr.getPropsFilePath();try{tn.accessSync(e,tn.constants.F_OK|tn.constants.R_OK)}catch(n){if(!Pr.noBootFile())throw Mt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Nl(e);return cc(t).toJSON()}a(Gw,"readConfigFile");function cc(e){return $g.parseDocument(tn.readFileSync(e,"utf8"),{simpleKeys:!0})}a(cc,"parseYamlDoc");function GH(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG;if(!n&&!s)return;let{applyRuntimeEnvConfig:i}=(Hg(),D(kg)),o=e.getIn(["rootPath"]);if(!o){Mt.warn("Cannot apply runtime env config: rootPath not found in config");return}let c=e.toJSON();try{i(c,o,r);let l=$g.parseDocument($g.stringify(c),{simpleKeys:!0});if(l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml: ${l.errors}`);e.contents=l.contents}catch(l){throw Mt.error(`Failed to apply runtime env config: ${l.message}`),l}if(t)try{if(e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml: ${e.errors}`);tn.writeFileSync(t,String(e)),Mt.debug("Config file updated with runtime env var values")}catch(l){throw Mt.error(`Failed to write config file after applying runtime env vars: ${l.message}`),l}}a(GH,"applyRuntimeEnvVarConfig");function roe(){let e=Gw(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Pr.isEmptyOrZeroLength(t)?[]:t;let r=vH(t);if(r)throw ud.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Pr.isEmptyOrZeroLength(n)?[]:n;let s=vH(n);if(s)throw ud.CONFIG_VALIDATION(s.message);if(!Pr.isEmptyOrZeroLength(n)&&!Pr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Pr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw ud.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(roe,"getClusteringRoutes");function qH(e){let t=UH(e);Vt={};for(let r in _i){let n=t.get(r.toUpperCase());if(Pr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=_i[r].toLowerCase();s===hs.LOGGING_ROOT?Vt[s]=Es.dirname(n):Vt[s]=n}return Vt}a(qH,"initOldConfig");function noe(e){let t=Gw();return Bie.get(t,e.replaceAll("_","."))}a(noe,"getConfigFromFile");async function soe(e,t){let r=cc(Nl());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await tn.writeFile(Nl(),String(r))}a(soe,"addConfig");function ioe(e){let t=Nl(Pr.getPropsFilePath()),r=cc(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Es.join(n,Fs.HDB_CONFIG_FILE);tn.writeFileSync(s,String(r))}a(ioe,"deleteConfigFromFile");function ooe(){return qg||(Vg(),qg)}a(ooe,"getConfigObj");function aoe(){return Vt||Vg(),Vt}a(aoe,"getFlatConfigObj")});var no={};Re(no,{ACTIVE_BOOLEAN:()=>zH,ALTERUSER_NOTHING_TO_UPDATE:()=>YH,EMPTY_PASSWORD:()=>WH,EMPTY_ROLE:()=>jH,USERNAME_REQUIRED:()=>KH,addUser:()=>zw,alterUser:()=>Qw,dropUser:()=>Jw,findAndValidateUser:()=>md,getClusterUser:()=>Soe,getSuperUser:()=>Ap,getUsersWithRolesCache:()=>goe,listUsers:()=>Wg,listUsersExternal:()=>Zw,setUsersWithRolesCache:()=>Si,userInfo:()=>Xw});async function zw(e){let t=XH.cleanAttributes(e,ZH),r=JH.addUserValidation(t);if(r)throw new gi(r.message);let n=await bp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new gi(fd.ROLE_NAME_NOT_FOUND(t.role),ia.NOT_FOUND);if(n.length>1)throw new gi(fd.DUP_ROLES_FOUND(t.role),ia.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Ww.encrypt(t.password)),t.password=await Rp.hash(t.password,Kg),t.hash_function=Kg,t.role=n[0].id;let s=await QH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Yw.debug(s),await Si(),s.skipped_hashes.length===1)throw new gi(fd.USER_ALREADY_EXISTS(t.username),ia.CONFLICT);return await Kw.signalUserChange(new jw(process.pid)),`${t.username} successfully added`}async function Qw(e){let t=XH.cleanAttributes(e,ZH);if(to.isEmptyOrZeroLength(t.username))throw new Error(KH);if(to.isEmptyOrZeroLength(t.password)&&to.isEmptyOrZeroLength(t.role)&&to.isEmptyOrZeroLength(t.active))throw new Error(YH);if(!to.isEmpty(t.password)&&to.isEmptyOrZeroLength(t.password.trim()))throw new Error(WH);if(!to.isEmpty(t.active)&&!to.isBoolean(t.active))throw new Error(zH);if(!to.isEmpty(t.password)&&!to.isEmptyOrZeroLength(t.password.trim())&&(Eoe(t.username)&&(t.hash=Ww.encrypt(t.password)),t.password=await Rp.hash(t.password,Kg),t.hash_function=Kg),t.role==="")throw new Error(jH);if(t.role){let n=await bp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new gi(fd.ALTER_USER_ROLE_NOT_FOUND(t.role),ia.NOT_FOUND);if(n.length>1)throw new gi(fd.DUP_ROLES_FOUND(t.role),ia.CONFLICT);t.role=n[0].id}let r=await QH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Si(),await Kw.signalUserChange(new jw(process.pid)),r}function Eoe(e){let t=!1,r=ro.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}async function Jw(e){let t=JH.dropUserValidation(e);if(t)throw new gi(t.message);if(ro.get(e.username)===void 0)throw new gi(fd.USER_NOT_EXIST(e.username),ia.NOT_FOUND);let r=await hoe({table:"hdb_user",schema:"system",hash_values:[e.username]});return Yw.debug(r),await Si(),await Kw.signalUserChange(new jw(process.pid)),`${e.username} successfully deleted`}async function Xw(e){if(!e||!e.hdb_user)return"There was no user info in the body";let t=Vw.cloneDeep(e.hdb_user),r=await bp.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}async function Zw(){let e=await Wg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}async function Wg(){let e=await bp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Vw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await bp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Vw.cloneDeep(s),s.role=t[s.role],_oe(s.role),n.set(s.username,s);return n}function _oe(e){if(!e){Yw.error("invalid user role found.");return}e.permission.system||(e.permission.system={tables:{}}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(foe)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}async function Si(e=void 0){e?ro=e:ro=await Wg()}async function goe(){return ro||await Si(),ro}async function md(e,t,r=!0){ro||await Si();let n=ro.get(e);if(!n){if(!r)return{username:e};throw new gi(qw.GENERIC_AUTH_FAIL,ia.UNAUTHORIZED)}if(n&&!n.active)throw new gi(qw.USER_INACTIVE,ia.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(VH.get(t)===n.password)return s;{let i=Rp.validate(n.password,t,n.hash_function||Rp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)VH.set(t,n.password);else throw new gi(qw.GENERIC_AUTH_FAIL,ia.UNAUTHORIZED)}}return s}async function Ap(){ro||await Si();for(let[,e]of ro)if(e.role.role==="super_user")return e}async function Soe(){let e=await Wg(),t=uoe.getConfigFromFile($w.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(r==null||r?.role?.role!==$w.ROLE_TYPES_ENUM.CLUSTER_USER)return;let n=Ww.decrypt(r.hash);return r.decrypt_hash=n,r.uri_encoded_d_hash=encodeURIComponent(n),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+$H.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+$H.SERVER_SUFFIX.ADMIN,r}var KH,YH,WH,jH,zH,QH,coe,Rp,JH,bp,Kw,to,XH,Yw,loe,Ww,$w,$H,uoe,doe,foe,moe,gi,ia,qw,fd,jw,Vw,Yg,poe,ZH,VH,hoe,Kg,ro,eG,_s=ie(()=>{"use strict";KH="username is required",YH="nothing to update, must supply active, role or password to update",WH="password cannot be an empty string",jH="If role is specified, it cannot be empty.",zH="active must be true or false",QH=ms(),coe=Al(),Rp=(Tw(),D(Sw)),JH=Fk(),bp=$n(),Kw=Wo(),to=ue(),XH=require("validate.js"),Yw=ee(),{promisify:loe}=require("util"),Ww=sa(),$w=($(),D(z)),$H=Er(),uoe=Nt(),doe=fe(),foe=ul(),{hdbErrors:moe,ClientError:gi}=ge(),{HTTP_STATUS_CODES:ia,AUTHENTICATION_ERROR_MSGS:qw,HDB_ERROR_MSGS:fd}=moe,{UserEventMsg:jw}=cs(),Vw=require("lodash"),{server:Yg}=(qr(),D(Pm)),poe=ee();Yg.getUser=(e,t)=>md(e,t,t!=null);Yg.authenticateUser=(e,t)=>md(e,t);ZH={username:!0,active:!0,role:!0,password:!0},VH=new Map,hoe=loe(coe.delete),Kg=doe.get($w.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Rp.HASH_FUNCTION.SHA256;a(zw,"addUser");a(Qw,"alterUser");a(Eoe,"isClusterUser");a(Jw,"dropUser");a(Xw,"userInfo");a(Zw,"listUsersExternal");a(Wg,"listUsers");a(_oe,"appendSystemTablesToRole");a(Si,"setUsersWithRolesCache");a(goe,"getUsersWithRolesCache");a(md,"findAndValidateUser");a(Ap,"getSuperUser");a(Soe,"getClusterUser");eG=[];Yg.invalidateUser=function(e){for(let t of eG)try{t(e)}catch(r){poe.error("Error invalidating user",r)}};Yg.onInvalidatedUser=function(e){eG.push(e)}});var km=x((uve,nG)=>{"use strict";var gs=ee(),Tn=($(),D(z)),Toe=kx(),yoe=(_s(),D(no)),{validateEvent:eN}=cs(),Ip=fs(),Roe=require("process"),{resetDatabases:boe}=(Oe(),D(Et)),Aoe={[Tn.ITC_EVENT_TYPES.SCHEMA]:Ioe,[Tn.ITC_EVENT_TYPES.USER]:rG,[Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Noe};async function Ioe(e){let t=eN(e);if(t){gs.error(t);return}gs.trace("ITC schemaHandler received schema event:",e),await Toe(e.message),await woe(e.message)}a(Ioe,"schemaHandler");async function woe(e){try{Ip.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ip.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ip.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=boe();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){gs.error(t)}}a(woe,"syncSchemaMetadata");var tG=[];async function rG(e){try{try{Ip.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ip.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){gs.warn(r)}let t=eN(e);if(t){gs.error(t);return}gs.trace(`ITC userHandler ${Tn.HDB_ITC_CLIENT_PREFIX}${Roe.pid} received user event:`,e),await yoe.setUsersWithRolesCache();for(let r of tG)r()}catch(t){gs.error(t)}}a(rG,"userHandler");rG.addListener=function(e){tG.push(e)};async function Noe(e){try{let t=eN(e);if(t){gs.error(t);return}gs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(wp(),D(tN)),{getWorkerIndex:n}=ot(),{sendItcEvent:s}=cs(),i=r.componentStatusRegistry.getAllStatuses(),o=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:o,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?gs.trace(`Sent component status response directly to thread ${u}`):(u===void 0?gs.debug("No originator threadId, falling back to broadcast"):gs.debug(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){gs.error("Error handling component status request:",t)}}a(Noe,"componentStatusRequestHandler");nG.exports=Aoe});var cs=x((fve,iG)=>{"use strict";var rN=ue(),Coe=($(),D(z)),{ITC_ERRORS:Np}=En(),{threadId:Ooe,isMainThread:Poe}=require("worker_threads"),{onMessageFromWorkers:Loe,broadcastWithAcknowledgement:Doe}=ot();iG.exports={sendItcEvent:voe,validateEvent:sG,SchemaEventMsg:Moe,UserEventMsg:Uoe};var jg;Loe(async(e,t)=>{jg=jg||km(),sG(e),jg[e.type]&&await jg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function voe(e){return!Poe&&e.message&&(e.message.originator=Ooe),Doe(e)}a(voe,"sendItcEvent");function sG(e){if(typeof e!="object")return Np.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||rN.isEmpty(e.type))return Np.MISSING_TYPE;if(!e.hasOwnProperty("message")||rN.isEmpty(e.message))return Np.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||rN.isEmpty(e.message.originator))return Np.MISSING_ORIGIN;if(Coe.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Np.INVALID_EVENT(e.type)}a(sG,"validateEvent");function Moe(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(Moe,"SchemaEventMsg");function Uoe(e){this.originator=e}a(Uoe,"UserEventMsg")});var Cl,lc,nN,pd,sN,hd,iN,zg=ie(()=>{Cl=b(En()),lc=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Cl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},nN=class extends lc{static{a(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,Cl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},pd=class extends lc{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Cl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},sN=class extends lc{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Cl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},hd=class extends lc{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Cl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},iN=class extends lc{static{a(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,Cl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
|
|
12
|
-
`)}}});var oG,Ol,aG,uc,Cp,Ed,xoe,Qg,oN=ie(()=>{oG=b(cs()),Ol=b(ot());$();aG=b(pr());Vu();zg();uc=(0,aG.loggerWithTag)("componentStatus.crossThread"),Cp=class{static{a(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,Ol.onMessageByType)(ku.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;uc.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&(uc.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let o=((0,Ol.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,_=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),uc.trace?.(`Collected all ${y.length} expected responses for request ${r}`),p(y))},"checkComplete"),R=setTimeout(()=>{if(!E){E=!0;let y=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),uc.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${o} responses`),p(y)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,_),(0,oG.sendItcEvent)({type:ku.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{_()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new pd("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Ol.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let _=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${_}`,{...E,workerIndex:p.workerIndex})}return uc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof pd?uc.error?.(`ITC failure during component status collection: ${r.message}`):uc.warn?.("Failed to collect component status from all threads:",r),uc.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,Ol.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[o,c]of r)n.set(`${o}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},Ed=class{static{a(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let o=s.indexOf("@"),c=o!==-1?s.substring(0,o):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let o=this.aggregateComponentGroup(s,i);r.set(s,o)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,o,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",_=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=_;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=_)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Le.HEALTHY&&p.message&&(!i||_>s)&&(s=_,i=p.message),p.error&&!o&&(o=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:o};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Le.ERROR,Le.WARNING,Le.LOADING,Le.UNKNOWN,Le.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Le.UNKNOWN}},xoe=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Qg=new Cp(xoe)});var dc,Jg=ie(()=>{PA();Vu();oN();zg();dc=class e{static{a(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new hd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Le).includes(r))throw new hd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Le).join(", ")}`);this.statusMap.set(t,new Ku(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Le.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Le.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Le.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Le.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Le.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Le.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[Le.HEALTHY]:0,[Le.ERROR]:0,[Le.WARNING]:0,[Le.LOADING]:0,[Le.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await Qg.collect(t);return Ed.aggregate(r)}async getAggregatedStatusFor(t,r){r||(r=await e.getAggregatedFromAllThreads(this));let n=[],s=t+".",i=r.get(t);i&&n.push({key:t,...i});for(let[f,m]of r)f.startsWith(s)&&n.push({key:f,...m});if(n.length===0)return{status:Le.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let o=n.some(f=>f.status===Le.ERROR),c=n.some(f=>f.status===Le.LOADING),l=o?Le.ERROR:c?Le.LOADING:Le.HEALTHY,u="All components loaded successfully",d={};if(o||c){u=n.filter(m=>m.status===Le.ERROR||m.status===Le.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Le.HEALTHY&&(d[m.key]={status:m.status,message:m.latestMessage})}return{status:l,message:u,...Object.keys(d).length>0&&{details:d},lastChecked:n[0]?.lastChecked||{workers:{}}}}}});var gr,Xg=ie(()=>{Jg();gr=new dc});function lG(e){let t=cG.get(e);return t||(t=new aN(e),cG.set(e,t)),t}function uG(){gr.reset()}var aN,cG,so,dG,fG=ie(()=>{Xg();Vu();aN=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return gr.setStatus(this.componentName,Le.HEALTHY,t),this}warning(t){return gr.setStatus(this.componentName,Le.WARNING,t),this}error(t,r){return gr.setStatus(this.componentName,Le.ERROR,t,r),this}loading(t){return gr.setStatus(this.componentName,Le.LOADING,t||"Loading..."),this}unknown(t){return gr.setStatus(this.componentName,Le.UNKNOWN,t),this}get(){return gr.getStatus(this.componentName)}},cG=new Map;a(lG,"statusForComponent");so={loading(e,t){gr.initializeLoading(e,t)},loaded(e,t){gr.markLoaded(e,t)},failed(e,t,r){gr.markFailed(e,t,r)}};a(uG,"reset");dG=Le});var Op={};Re(Op,{AggregationError:()=>sN,COMPONENT_STATUS_LEVELS:()=>Le,ComponentStatus:()=>Ku,ComponentStatusError:()=>lc,ComponentStatusOperationError:()=>hd,ComponentStatusRegistry:()=>dc,CrossThreadCollectionError:()=>iN,CrossThreadStatusCollector:()=>Cp,CrossThreadTimeoutError:()=>nN,ITCError:()=>pd,StatusAggregator:()=>Ed,componentStatusRegistry:()=>gr,crossThreadCollector:()=>Qg,query:()=>Boe});var Boe,mG=ie(()=>{Xg();Jg();PA();Jg();oN();Xg();zg();Vu();Boe={get(e){return gr.getStatus(e)},all(){return gr.getAllStatuses()},byStatus(e){return gr.getComponentsByStatus(e)},summary(){return gr.getStatusSummary()},async allThreads(){return dc.getAggregatedFromAllThreads(gr)}}});var tN={};Re(tN,{STATUS:()=>dG,internal:()=>Op,lifecycle:()=>so,reset:()=>uG,statusForComponent:()=>lG});var wp=ie(()=>{fG();mG()});var fN={};Re(fN,{DEFAULT_STATUS_ID:()=>Lm,STATUS_IDS:()=>H_,Status:()=>oa,clear:()=>lN,get:()=>uN,set:()=>dN});function Lp(){return cN||(cN=Qe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),cN}function lN({id:e}){return Pp.debug?.("clearStatus",e),Lp().delete(e)}async function koe(){Pp.debug?.("getAllStatus");let e=Lp().get({}),t=await Op.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=mN();return{systemStatus:e,componentStatus:r,restartRequired:n}}function uN({id:e}){return e?(Pp.debug?.("getStatus",e),Lp().get(e)):(Pp.debug?.("getStatus","all"),koe())}function dN({status:e,id:t=Lm}){let r=Sx({status:e,id:t});if(r)throw(0,Zg.handleHDBError)(r,r.message,Foe.BAD_REQUEST);return Pp.debug?.("setStatus",t,e),Lp().put(t,{status:e})}var Zg,pG,Foe,cN,oa,Pp,Dp=ie(()=>{Oe();Zg=b(ge()),pG=b(pr());Tx();G_();wp();eS();G_();({HTTP_STATUS_CODES:Foe}=Zg.hdbErrors);a(Lp,"getStatusTable");oa={get primaryStore(){return Lp().primaryStore}},Pp=(0,pG.loggerWithTag)("status");a(lN,"clearStatus");a(koe,"getAllStatus");a(uN,"getStatus");a(dN,"setStatus")});var hG={};Re(hG,{requestRestart:()=>EN,resetRestartNeeded:()=>Hoe,restartNeeded:()=>mN});function hN(){pN||(pN=oa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),tS=new Uint8Array(pN))}function EN(){hN(),tS[0]=1}function mN(){return hN(),tS[0]===1}function Hoe(){hN(),tS[0]=0}var pN,tS,eS=ie(()=>{Dp();a(hN,"ensureInitialized");a(EN,"requestRestart");a(mN,"restartNeeded");a(Hoe,"resetRestartNeeded")});var Pl,_N=ie(()=>{Pl=class{static{a(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var gN={};Re(gN,{Resources:()=>_d,keyArrayToString:()=>gd,resetResources:()=>Goe,resources:()=>ks});function Goe(){return ks=new _d,Ue.resources=ks,ks}function gd(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var EG,_G,_d,ks,fc=ie(()=>{Ja();_N();EG=b(ee()),_G=b(ge());qr();_d=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new _G.ServerError(`Conflicting paths for ${t}`);EG.default.error(c),i.Resource=new Pl(c)}super.set(t,i);for(let[c]of this){let l=2;for(;(l=c.indexOf("/",l))>-1;){let u=this.get(c.slice(0,l));u&&(u.hasSubPaths=!0),l+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===o&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return It(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(Goe,"resetResources");a(gd,"keyArrayToString")});var yN={};Re(yN,{loadGQLSchema:()=>Voe,start:()=>TN,startOnMainThread:()=>$oe});function TN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l}=await import("graphql"),u=o(new c(r.toString(),s)),d=new Map,f=[];for(let h of u.definitions)switch(h.kind){case l.OBJECT_TYPE_DEFINITION:let y=function(w){if(w.kind==="NonNullType"){let Z=y(w.type);return Z.nullable=!1,Z}if(w.kind==="ListType")return{type:"array",elements:y(w.type)};let H={type:w.name?.value};return Object.defineProperty(H,"location",{value:w.loc.startToken}),H};a(y,"getProperty");let E=h.name.value,_=[],R={table:null,database:null,properties:_};d.set(E,R),i.allTypes.set(E,R);for(let w of h.directives){if(w.name.value==="table"){for(let H of w.arguments)R[H.name.value]=H.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=E),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,f.push(R)}if(w.name.value==="sealed"&&(R.sealed=!0),w.name.value==="splitSegments"&&(R.splitSegments=!0),w.name.value==="replicate"&&(R.replicate=!0),w.name.value==="export"){R.export=!0;for(let H of w.arguments)typeof R.export!="object"&&(R.export={}),R.export[H.name.value]=H.value.value}}let S=!1,I={};for(let w of h.fields){let P=y(w.type);P.name=w.name.value,_.push(P),I[P.name]=void 0;for(let H of w.directives){let Z=H.name.value;if(Z==="primaryKey")S?console.warn("Can not define two attributes as a primary key at",H.loc):(P.isPrimaryKey=!0,S=!0);else if(Z==="indexed"){let X={};for(let J of H.arguments||[])X[J.name.value]=J.value.value;P.indexed=X}else if(Z==="computed"){for(let X of H.arguments||[])if(X.name.value==="from"){let J=X.value.value;P.computed={from:p(J,X,I)},P.version==null&&(P.version=J)}else X.name.value==="version"&&(P.version=X.value.value);P.computed=P.computed||!0}else if(Z==="relationship"){let X={};for(let J of H.arguments)X[J.name.value]=J.value.value;P.relationship=X}else if(Z==="createdTime")P.assignCreatedTime=!0;else if(Z==="updatedTime")P.assignUpdatedTime=!0;else if(Z==="expiresAt")P.expiresAt=!0;else if(Z==="enumerable")P.enumerable=!0;else if(Z==="allow"){let X=P.authorizedRoles=[];for(let J of H.arguments)J.name.value==="role"&&X.push(J.value.value)}else server.knownGraphQLDirectives.includes(Z)&&console.warn(`@${Z} is an unknown directive, at`,H.loc)}}R.type=E}function m(h){let E=d.get(h.type);E?(Object.defineProperty(h,"properties",{value:E.properties}),Object.defineProperty(h,"definition",{value:E})):h.type==="array"?m(h.elements):qoe.includes(h.type)||(0,SG.getWorkerIndex)()===0&&console.error(`The type ${h.type} is unknown at line ${h.location.line}, column ${h.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let h of d.values())for(let E of h.properties)m(E);for(let h of f)h.tableClass=e(h),h.export&&(h.export.name===""?i.set((0,SN.dirname)(n),h.tableClass):i.set((0,SN.dirname)(n)+"/"+(h.export.name||h.type),h.tableClass,h.export));function p(h,E,_){return new gG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${h}; } } } } computed;`,{filename:s,lineOffset:E.loc.startToken.line-1,columnOffset:E.loc.startToken.column}).runInThisContext()(_)}a(p,"createComputedFrom")}}var SN,gG,SG,qoe,$oe,Voe,TG=ie(()=>{SN=require("path"),gG=require("node:vm");Oe();SG=b(ot());fc();qoe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives||(server.knownGraphQLDirectives=[]);server.knownGraphQLDirectives.push("table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow","enumerable");a(TN,"start");$oe=TN,Voe=a(e=>TN({ensureTable:Qe}).handleFile(e,null,null,new _d),"loadGQLSchema")});var AN={};Re(AN,{start:()=>Zoe});function Koe(e){if(e.kind!==He.Kind.OPERATION_DEFINITION&&e.kind!==He.Kind.FRAGMENT_DEFINITION)throw new Kr(`Unexpected non-executable definition type ${e.kind}.`)}function yG(e){if(typeof e!="object"||e===null)throw new io("Request body must be an object.");if(!("query"in e))throw new io("Request body must contain a `query` field.");if(typeof e.query!="string")throw new io("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new io("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new io("Request body `operationName` field must be a string.")}function bN(e){return parseInt(e.value,10)}function bG(e){return parseFloat(e.value)}function AG(e,t,r){let n=r.get(e.name.value);return IG(n)?wG(n,t):{attribute:t,value:n}}function IG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function wG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],IG(n)?wG(n,t):{attribute:t,value:n}))}function Yoe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case He.Kind.NULL:return{attribute:t,value:null};case He.Kind.INT:return{attribute:t,value:bN(e.value)};case He.Kind.FLOAT:return{attribute:t,value:bG(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return AG(e.value,t,r);case He.Kind.OBJECT:return NG(e.value,t,r);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.value.kind}, is not supported.`)}}function NG(e,t,r){return e.fields.flatMap(n=>Yoe(n,t,r))}function Woe(e,t){switch(e.value.kind){case He.Kind.NULL:return{attribute:e.name.value,value:null};case He.Kind.INT:return{attribute:e.name.value,value:bN(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:bG(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return AG(e.value,e.name.value,t);case He.Kind.OBJECT:return NG(e.value,[e.name.value],t);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Argument type, ${e.value.kind}, is not supported.`)}}function joe(e,t){return e.flatMap(r=>Woe(r,t))}function rS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case He.Kind.FIELD:return r;case He.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Kr(`Fragment \`${n}\` not found.`);return rS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return rS(r.selectionSet,t)}})}function CG(e,t){return rS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:CG(r.selectionSet,t)}:r.name.value)}async function zoe(e,t,r,n){let s=ks.getMatch(e.name.value,"graphql");if(s===void 0)throw new Kr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:CG(e.selectionSet,r),conditions:joe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function OG(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return bN(e);case He.Kind.FLOAT:return parseFloat(e.value);case He.Kind.STRING:case He.Kind.BOOLEAN:return e.value;case He.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:OG(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.kind}, is not supported.`)}}function Qoe(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=OG(n.defaultValue)),n.type.kind===He.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Kr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Joe(e,t,r,n){if(e.operation===He.OperationTypeNode.SUBSCRIPTION)throw new Kr("Subscriptions are not supported.");if(e.operation===He.OperationTypeNode.MUTATION)throw new Kr("Mutations are not supported yet.");let s=Qoe(e.variableDefinitions,t),i=await Promise.all(rS(e.selectionSet,r).map(c=>zoe(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function RG({query:e,variables:t={},operationName:r},n){let s=He.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(Koe(u),u.kind===He.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Kr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Kr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Kr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Kr(`Operation \`${r}\` not found.`);let l=await Joe(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Xoe(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return yG(r),RG(r,e)}case"POST":{let r=await Zo(e.headers.get("content-type"),!0)(e._nodeRequest);return yG(r),RG(r,e)}default:throw new io("Method Not Allowed",405,{Allow:"GET, POST"})}}function Zoe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Xoe(t)}catch(n){RN.default.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof io)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof He.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Kr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:RN.default.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof io)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof He.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Kr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var He,RN,Kr,io,PG=ie(()=>{He=b(require("graphql"));ea();fc();RN=b(ee());a(Koe,"assertExecutableDefinitionNode");a(yG,"assertRequestParams");a(bN,"processIntValueNode");a(bG,"processFloatValueNode");a(AG,"processVariableNode");a(IG,"isObject");a(wG,"transformObjectIntoQueryCondition");a(Yoe,"processObjectFieldNode");a(NG,"processObjectValueNode");a(Woe,"processArgumentNode");a(joe,"buildConditionsQuery");a(rS,"fillInFragments");a(CG,"buildSelectQuery");a(zoe,"processFieldNode");a(OG,"processConstValueNode");a(Qoe,"resolveVariables");a(Joe,"executeOperation");a(RG,"resolver");Kr=class extends Error{static{a(this,"GraphQLQueryingError")}},io=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(Xoe,"graphqlQueryingHandler");a(Zoe,"start")});var xG=x((lMe,UG)=>{var Sd=require("validate.js"),DG=ht(),Td=($(),D(z)),{handleHDBError:eae,hdbErrors:tae}=ge(),{HDB_ERROR_MSGS:cr,HTTP_STATUS_CODES:rae}=tae,IN=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),nae={STRUCTURE_USER:"structure_user"},LG=Object.values(Td.ROLE_TYPES_ENUM),sae="attribute_permissions",iae="attribute_name",{PERMS_CRUD_ENUM:yd}=Td,oae=[sae,...Object.values(yd)],vG=[yd.READ,yd.INSERT,yd.UPDATE],aae=[iae,...vG];function cae(e){let t=IN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,MG(e,t)}a(cae,"addRoleValidation");function lae(e){let t=IN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,MG(e,t)}a(lae,"alterRoleValidation");function uae(e){let t=IN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,DG.validateObject(e,t)}a(uae,"dropRoleValidation");var dae=["operation","role","id","permission","hdb_user","access"];function MG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)dae.includes(n[o])||s.push(n[o]);s.length>0&&Sr(cr.INVALID_ROLE_JSON_KEYS(s),r);let i=DG.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Sr(o,r)}),e.permission){let o=fae(e);o&&Sr(o,r),LG.forEach(c=>{e.permission[c]&&!Sd.isBoolean(e.permission[c])&&Sr(cr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(LG.indexOf(o)<0){if(o===nae.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||Sr(cr.SCHEMA_NOT_FOUND(f),r)}continue}Sr(cr.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Sr(cr.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){Sr(cr.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{oae.includes(d)||Sr(cr.INVALID_PERM_KEY(d),r,o,l)}),Object.values(yd).forEach(d=>{Sd.isDefined(u[d])?Sd.isBoolean(u[d])||Sr(cr.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):Sr(cr.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){Sr(cr.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){Sr(cr.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!aae.includes(E)&&E!==yd.DELETE&&Sr(cr.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Sd.isDefined(p.attribute_name)){Sr(cr.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){Sr(cr.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}vG.forEach(E=>{Sd.isDefined(p[E])?Sd.isBoolean(p[E])||Sr(cr.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):Sr(cr.ATTR_PERM_MISSING(E,h),r,o,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${o}.${l}`;Sr(cr.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return mae(r)}a(MG,"customValidate");UG.exports={addRoleValidation:cae,alterRoleValidation:lae,dropRoleValidation:uae};function fae(e){let{operation:t,permission:r}=e;if(t===Td.OPERATIONS_ENUM.ADD_ROLE||t===Td.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return cr.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Td.ROLE_TYPES_ENUM.SUPER_USER:Td.ROLE_TYPES_ENUM.CLUSTER_USER;return cr.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(fae,"validateNoSUPerms");function mae(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:cr.ROLE_PERMS_ERROR,...e};return eae(new Error,n,rae.BAD_REQUEST)}else return null}a(mae,"generateRolePermResponse");function Sr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(Sr,"addPermError")});var Mp=x((dMe,HG)=>{"use strict";var BG=ms(),FG=$n(),pae=Al(),NN=xG(),CN=Wo(),hae=require("util"),nS=($(),D(z)),Eae=ue(),ON=FG.searchByValue,_ae=FG.searchByHash,gae=hae.promisify(pae.delete),Sae=Ki(),Tae=Wm(),{hdbErrors:yae,handleHDBError:Ll}=ge(),{HDB_ERROR_MSGS:kG,HTTP_STATUS_CODES:vp}=yae,{UserEventMsg:PN}=cs();HG.exports={addRole:Rae,alterRole:bae,dropRole:Aae,listRoles:Iae};function wN(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(wN,"scrubRoleDetails");async function Rae(e){let t=NN.addRoleValidation(e);if(t)throw t;e=wN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await ON(r)||[])}catch(i){throw Ll(i)}if(n&&n.length>0)throw Ll(new Error,kG.ROLE_ALREADY_EXISTS(e.role),vp.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await BG.insert(s),CN.signalUserChange(new PN(process.pid)),e=wN(e),e}a(Rae,"addRole");async function bae(e){let t=NN.alterRoleValidation(e);if(t)throw t;e=wN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await BG.update(r)}catch(s){throw Ll(s)}if(n&&n?.message==="updated 0 of 1 records")throw Ll(new Error,"Invalid role id",vp.BAD_REQUEST,void 0,void 0,!0);return await CN.signalUserChange(new PN(process.pid)),e}a(bae,"alterRole");async function Aae(e){let t=NN.dropRoleValidation(e);if(t)throw Ll(new Error,t,vp.BAD_REQUEST,void 0,void 0,!0);let r=new Tae(nS.SYSTEM_SCHEMA_NAME,nS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await _ae(r));if(n.length===0)throw Ll(new Error,kG.ROLE_NOT_FOUND,vp.NOT_FOUND,void 0,void 0,!0);let s=new Sae(nS.SYSTEM_SCHEMA_NAME,nS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await ON(s)),o=!1;if(Eae.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Ll(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,vp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await gae(c),CN.signalUserChange(new PN(process.pid)),`${n[0].role} successfully deleted`}a(Aae,"dropRole");async function Iae(){return ON({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Iae,"listRoles")});var LN={};Re(LN,{start:()=>$G,startOnMainThread:()=>Cae});function $G({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,GG.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(wae.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Nae(i)}}}async function Nae(e){let t=dt().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,qG.isEqual)(i,e)?void 0:(e.id=r.id,(0,sS.alterRole)(e))}return(0,sS.addRole)(e)}var sS,GG,qG,wae,Cae,VG=ie(()=>{Oe();sS=b(Mp()),GG=require("yaml"),qG=require("lodash"),wae=["super_user","cluster_user","structure_user"];a($G,"start");a(Nae,"ensureRole");Cae=$G});async function iS(e){let t=(0,WG.pathToFileURL)(e).toString();if(Oae)return Up||(Up=Pae(Dae)),(await(await Up).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Pae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Up=new Compartment({console,Math,Date,fetch:Lae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,YG.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Kt,s.tables=yn,s.databases=xe}};let n=await(0,KG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Up}function Lae(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function Dae(){return{Resource:Kt,tables:yn}}var KG,YG,WG,Oae,Up,DN=ie(()=>{oo();Oe();KG=require("fs/promises"),YG=require("path"),WG=require("url"),Oae=!1;a(iS,"secureImport");a(Pae,"getCompartment");a(Lae,"secureOnlyFetch");a(Dae,"getGlobalVars")});var vN={};Re(vN,{ResourceLoadError:()=>oS,handleApplication:()=>vae,suppressHandleApplicationWarning:()=>Mae});function zG(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function vae(e){e.handleEntry(a(async function(r){if(r.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${r.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(r.eventType!=="add"){e.requestRestart();return}try{let n=await iS(r.absolutePath),s=(0,jG.dirname)(r.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");zG(n.default)&&(e.resources.set(s,n.default),e.logger.debug(`Registered root resource: ${s}`)),QG(e,n,s)}catch(n){throw new oS(r.absolutePath,n)}},"handleResourceEntry"))}function QG(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;zG(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&QG(e,s,i)}}var jG,oS,Mae,JG=ie(()=>{DN();jG=require("path");a(zG,"isResource");oS=class extends Error{static{a(this,"ResourceLoadError")}filePath;cause;constructor(t,r){super(`Failed to load resource module ${t}${r?`: ${r.message}`:""}`),this.name="ResourceLoadError",this.filePath=t,this.cause=r}};a(vae,"handleApplication");a(QG,"recurseForResources");Mae=!0});var UN={};Re(UN,{start:()=>Uae});function Uae({resources:e}){e.set("login",MN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var MN,XG=ie(()=>{oo();a(Uae,"start");MN=class extends Kt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i}=r;return{data:await n.login(s,i)}}}});function aS(){return xN||(xN=Qe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),xN}function Bae(e){return e=e.replace(xae,t=>{let[r,n,s,i]=t.split(".").map(o=>parseInt(o));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function Fae(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function xp(e){let t=ZG.default.createHash("shake128",{outputLength:4}),r;return(0,eq.isIPv6)(e)?r=Bae(e):r=e.toLowerCase(),Fae(Uint8Array.from(t.update(r).digest()))}var ZG,eq,BN,xN,xae,FN=ie(()=>{Oe();ZG=b(require("crypto")),eq=require("node:net"),BN=new Map;a(aS,"getAnalyticsHostnameTable");xae=/(\d{1,3}\.){3}\d{1,3}$/;a(Bae,"normalizeIPv6");a(Fae,"nodeHashToNumber");a(xp,"stableNodeId")});var aa,kN=ie(()=>{aa={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var oq={};Re(oq,{captureProfile:()=>GN,userCodeFolders:()=>cS});async function GN(e){let r=iq/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=HN.time.stop(!0),d=u.stringTable.strings;for(let f of u.function)s.set(f.id,d[f.filename]);for(let f of u.location)n.set(f.id,f.line[0]);for(let f of u.sample)l(f);qe(c*r,"cpu-usage","harper"),qe(o*r,"cpu-usage","user");for(let[f,m]of i)if(m>100){let p=n.get(f),h=s.get(p.functionId)+":"+p.line;qe(m*r,"cpu-usage",h)}}catch(u){sq.error?.("analytics profiler error:",u)}finally{e&&setTimeout(()=>{let u=((0,Bp.get)(U.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;GN(u)},e).unref()}function l(u){let d=!1;for(let f of u.locationId){let m=s.get(n.get(f).functionId);if(cS.some(p=>m.startsWith(p))){let p=u.value[0];o+=p,d||i.set(f,(i.get(f)??0)+p);return}if(m.startsWith(rq.PACKAGE_ROOT)){let p=u.value[0];c+=p,d||(i.set(f,(i.get(f)??0)+p),d=!0)}}}a(l,"getUserHitCount")}var Bp,rq,nq,HN,sq,tq,cS,iq,aq=ie(()=>{Kn();Bp=b(fe());$();rq=b(Dt()),nq=require("node:fs"),HN=require("@datadog/pprof"),sq=b(ee()),tq=(0,Bp.getHdbBasePath)(),cS=tq?[tq]:[];process.env.RUN_HDB_APP&&cS.push((0,nq.realpathSync)(process.env.RUN_HDB_APP));iq=5e4;(async()=>{if(cS.length===0)return;HN.time.start({intervalMicros:iq});let e=((0,Bp.get)(U.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{GN(e)},e).unref()})();a(GN,"captureProfile")});var dS={};Re(dS,{addAnalyticsListener:()=>Gp,analyticsDelay:()=>KN,calculateCPUUtilization:()=>wq,diffResourceUsage:()=>Nq,onAnalyticsAggregate:()=>jN,recordAction:()=>qe,recordActionBinary:()=>nn,recordHostname:()=>YN,setAnalyticsEnabled:()=>Gae});function Gae(e){Tq=e,clearTimeout(kp),kp=null}function qae(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function $ae(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},uS.set(e,o)}function qe(e,t,r,n,s){if(!Tq)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=uS.get(i);o?qae(e,o):$ae(i,e,t,r,n,s),kp||Vae()}function nn(e,t,r,n,s){qe(!!e,t,r,n,s)}function Gp(e){Rq.push(e)}function Vae(){qN||=performance.now(),kp=setTimeout(async()=>{kp=null;let e=performance.now()-qN;qN=0;let t=[],r={time:Date.now(),period:e,threadId:Dl.threadId,metrics:t};for(let[s,i]of uS){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let f of Aq){let m=Math.floor(c*f),p=o[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await Cq()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Dl.threadId,byThread:!0,...n});for(let s of Rq)s(t);uS=new Map,Dl.parentPort?Dl.parentPort.postMessage({type:yq,report:r}):Lq({report:r})},KN).unref()}async function YN(){let e=Ue.hostname;rn.trace?.("recordHostname server.hostname:",e);let t=xp(e);rn.trace?.("recordHostname nodeId:",t);let r=aS();if(!await r.get(t)){let s={id:t,hostname:e};rn.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),await r.put(s.id,s)}}function Iq(e){let t=BN.get(e);return t?(rn.trace?.("storeMetric cached nodeId:",t),t):(t=xp(e),rn.trace?.("storeMetric new nodeId:",t),BN.set(e,t),t)}function Rd(e,t){let r=Iq(Ue.hostname),n={id:[(0,VN.getNextMonotonicTime)(),r],...t};rn.trace?.(`storing metric ${JSON.stringify(n)}`),e.put(n.id,n)}function wq(e,t){let r=e.userCPUTime+e.systemCPUTime;return rn.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function Nq(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Kae(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:aa.TABLE_SIZE,database:t,table:s,size:c};rn.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),Rd(e,l),n+=c}return n}function cq(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=Sq.statSync(s.primaryStore.env.path).size,c=Kae(e,r,n),l=o-c,u={metric:aa.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};Rd(e,u),rn.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){rn.warn?.("Error getting DB size metrics",s)}}function lq(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={metric:aa.STORAGE_VOLUME,database:r,...i};Rd(e,o),rn.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){rn.warn?.("Error getting DB volume metrics",s)}}async function Yae(e,t=6e4){let r=WN(),n=Oq(),s=new Promise(I=>{let w=performance.now();setImmediate(()=>{let P=performance.now();P-w>5e3&&rn.warn?.("Unusually high event queue latency on the main thread of "+Math.round(P-w)+"ms"),w=performance.now()}),n.primaryStore.prefetch([1],()=>{let P=performance.now();P-w>5e3&&rn.warn?.("Unusually high task queue latency on the main thread of "+Math.round(P-w)+"ms"),I(P-w)})}),i,o=Iq(Ue.hostname);for(let I of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(!(!I.value?.time||I.value?.id[1]!==o)){i=I.value.time;break}if(Date.now()-t<i)return;let c,l=new Map,u=new Map,d=[],f;for(let{key:I,value:w}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!w)continue;if(c){if(I>c+t)break}else c=I;f=I;let{metrics:P,threadId:H}=w;for(let Z of P||[]){let{path:X,method:J,type:F,metric:de,count:oe,total:ae,distribution:he,threads:Te,...De}=Z;oe||(oe=1);let Je=de+(X?"-"+X:"");J!==void 0&&(Je+="-"+J),F!==void 0&&(Je+="-"+F);let $e=l.get(Je);if($e){if($e.threads){let Pt=$e.threads[H];if(Pt)$e=Pt;else{$e.threads[H]={...De};continue}}$e.count||($e.count=1);let ns=$e.count;for(let Pt in De){let Lt=De[Pt];typeof Lt=="number"&&($e[Pt]=($e[Pt]*ns+Lt*oe)/(ns+oe))}$e.count+=oe,ae>=0&&($e.total+=ae,$e.ratio=$e.total/$e.count)}else $e={period:t,...Z},delete $e.distribution,l.set(Je,$e),$e.byThread&&($e.threads=[],$e.threads[H]={...De},d.push($e));if(he){he=he.map(Pt=>typeof Pt=="number"?{value:Pt,count:1}:Pt);let ns=u.get(Je);ns?ns.push(...he):u.set(Je,he)}}await Cq()}for(let I of d){let{path:w,method:P,type:H,metric:Z,count:X,total:J,distribution:F,threads:de,...oe}=I;de=de.filter(ae=>ae);for(let ae in oe){if(typeof I[ae]!="number")continue;let he=0;for(let Te of de){let De=Te[ae];typeof De=="number"&&(he+=De)}I[ae]=he}I.count=de.length,delete I.threads,delete I.byThread}for(let[I,w]of u){let P=l.get(I);w.sort((Pt,Lt)=>Pt.value>Lt.value?1:-1);let H=P.count-1,Z=[],X=0,J=0,F;for(let Pt of Aq){let Lt=H*Pt;for(;X<Lt;)F=w[J++],X+=F.count,J===1&&X--;let Ya=w[J>1?J-2:0];F||(F=w[0]),Z.push(F.value-(F.value-Ya.value)*(X-Lt)/F.count)}let[de,oe,ae,he,Te,De,Je,$e,ns]=Z;Object.assign(P,{p1:de,p10:oe,p25:ae,median:he,p75:Te,p90:De,p95:Je,p99:$e,p999:ns})}let m;for(let[,I]of l)I.time=f,Rd(n,I),m=!0;if(m)for(let I of bq)I(l.values());let p=Date.now(),{idle:h,active:E}=performance.eventLoopUtilization();if(m||E*10>h){let I={metric:aa.MAIN_THREAD_UTILIZATION,idle:h-uq,active:E-dq,taskQueueLatency:await s,time:p,...process.memoryUsage()};Rd(n,I)}uq=h,dq=E;let _=process.resourceUsage();_.time=p,_.userCPUTime=_.userCPUTime/1e3,_.systemCPUTime=_.systemCPUTime/1e3,rn.trace?.(`process.resourceUsage: ${JSON.stringify(_)}`);let R=Nq(lS,_);rn.trace?.(`diffed resourceUsage: ${JSON.stringify(R)}`),R.time=p,R.period=lS.time?p-lS.time:t,R.cpuUtilization=wq(R,R.period);let S={metric:aa.RESOURCE_USAGE,...R};Rd(n,S),lS=_;let y=dt();cq(n,y),cq(n,{system:y.system}),lq(n,y),lq(n,{system:y.system})}async function fq(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function WN(){return mq||(mq=Qe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Oq(){return pq||(pq=Qe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function zae(){Pq=!0;let e=(0,Hp.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Yae(KN,e),await fq(WN(),Wae),await fq(Oq(),jae)},Math.min(e/2,2147483647)).unref()}function Lq(e,t){let r=e.report;r.threadId=t?.threadId||Dl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(hq+=n.mean*n.count);r.totalBytesProcessed=hq,t&&(r.metrics.push({metric:aa.UTILIZATION,...t.performance.eventLoopUtilization(Eq.get(t))}),Eq.set(t,t.performance.eventLoopUtilization())),r.id=(0,VN.getNextMonotonicTime)(),WN().primaryStore.put(r.id,r),Pq||zae(),Qae&&(Dq=Xae(r))}async function Xae(e){if(await Dq,!mc){let r=(0,Fp.dirname)(kae());try{mc=await(0,$N.open)((0,Fp.join)(r,"analytics.log"),"r+")}catch{mc=await(0,$N.open)((0,Fp.join)(r,"analytics.log"),"w+")}}let t=(await mc.stat()).size;if(t>Jae){let r=Buffer.alloc(t);await mc.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await mc.write(r,{position:0}),await mc.truncate(r.length),t=r.length}await mc.write(JSON.stringify(e)+`
|
|
12
|
+
`)}}});var oG,Ol,aG,uc,Cp,Ed,xoe,Qg,oN=ie(()=>{oG=b(cs()),Ol=b(ot());$();aG=b(pr());Vu();zg();uc=(0,aG.loggerWithTag)("componentStatus.crossThread"),Cp=class{static{a(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,Ol.onMessageByType)(ku.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;uc.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&(uc.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let o=((0,Ol.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,_=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),uc.trace?.(`Collected all ${y.length} expected responses for request ${r}`),p(y))},"checkComplete"),R=setTimeout(()=>{if(!E){E=!0;let y=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),uc.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${o} responses`),p(y)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,_),(0,oG.sendItcEvent)({type:ku.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{_()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new pd("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Ol.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let _=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${_}`,{...E,workerIndex:p.workerIndex})}return uc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof pd?uc.error?.(`ITC failure during component status collection: ${r.message}`):uc.warn?.("Failed to collect component status from all threads:",r),uc.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,Ol.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[o,c]of r)n.set(`${o}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},Ed=class{static{a(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let o=s.indexOf("@"),c=o!==-1?s.substring(0,o):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let o=this.aggregateComponentGroup(s,i);r.set(s,o)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,o,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",_=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=_;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=_)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Le.HEALTHY&&p.message&&(!i||_>s)&&(s=_,i=p.message),p.error&&!o&&(o=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:o};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Le.ERROR,Le.WARNING,Le.LOADING,Le.UNKNOWN,Le.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Le.UNKNOWN}},xoe=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Qg=new Cp(xoe)});var dc,Jg=ie(()=>{PA();Vu();oN();zg();dc=class e{static{a(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new hd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Le).includes(r))throw new hd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Le).join(", ")}`);this.statusMap.set(t,new Ku(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Le.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Le.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Le.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Le.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Le.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Le.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[Le.HEALTHY]:0,[Le.ERROR]:0,[Le.WARNING]:0,[Le.LOADING]:0,[Le.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await Qg.collect(t);return Ed.aggregate(r)}async getAggregatedStatusFor(t,r){r||(r=await e.getAggregatedFromAllThreads(this));let n=[],s=t+".",i=r.get(t);i&&n.push({key:t,...i});for(let[f,m]of r)f.startsWith(s)&&n.push({key:f,...m});if(n.length===0)return{status:Le.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let o=n.some(f=>f.status===Le.ERROR),c=n.some(f=>f.status===Le.LOADING),l=o?Le.ERROR:c?Le.LOADING:Le.HEALTHY,u="All components loaded successfully",d={};if(o||c){u=n.filter(m=>m.status===Le.ERROR||m.status===Le.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Le.HEALTHY&&(d[m.key]={status:m.status,message:m.latestMessage})}return{status:l,message:u,...Object.keys(d).length>0&&{details:d},lastChecked:n[0]?.lastChecked||{workers:{}}}}}});var gr,Xg=ie(()=>{Jg();gr=new dc});function lG(e){let t=cG.get(e);return t||(t=new aN(e),cG.set(e,t)),t}function uG(){gr.reset()}var aN,cG,so,dG,fG=ie(()=>{Xg();Vu();aN=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return gr.setStatus(this.componentName,Le.HEALTHY,t),this}warning(t){return gr.setStatus(this.componentName,Le.WARNING,t),this}error(t,r){return gr.setStatus(this.componentName,Le.ERROR,t,r),this}loading(t){return gr.setStatus(this.componentName,Le.LOADING,t||"Loading..."),this}unknown(t){return gr.setStatus(this.componentName,Le.UNKNOWN,t),this}get(){return gr.getStatus(this.componentName)}},cG=new Map;a(lG,"statusForComponent");so={loading(e,t){gr.initializeLoading(e,t)},loaded(e,t){gr.markLoaded(e,t)},failed(e,t,r){gr.markFailed(e,t,r)}};a(uG,"reset");dG=Le});var Op={};Re(Op,{AggregationError:()=>sN,COMPONENT_STATUS_LEVELS:()=>Le,ComponentStatus:()=>Ku,ComponentStatusError:()=>lc,ComponentStatusOperationError:()=>hd,ComponentStatusRegistry:()=>dc,CrossThreadCollectionError:()=>iN,CrossThreadStatusCollector:()=>Cp,CrossThreadTimeoutError:()=>nN,ITCError:()=>pd,StatusAggregator:()=>Ed,componentStatusRegistry:()=>gr,crossThreadCollector:()=>Qg,query:()=>Boe});var Boe,mG=ie(()=>{Xg();Jg();PA();Jg();oN();Xg();zg();Vu();Boe={get(e){return gr.getStatus(e)},all(){return gr.getAllStatuses()},byStatus(e){return gr.getComponentsByStatus(e)},summary(){return gr.getStatusSummary()},async allThreads(){return dc.getAggregatedFromAllThreads(gr)}}});var tN={};Re(tN,{STATUS:()=>dG,internal:()=>Op,lifecycle:()=>so,reset:()=>uG,statusForComponent:()=>lG});var wp=ie(()=>{fG();mG()});var fN={};Re(fN,{DEFAULT_STATUS_ID:()=>Lm,STATUS_IDS:()=>H_,Status:()=>oa,clear:()=>lN,get:()=>uN,set:()=>dN});function Lp(){return cN||(cN=Qe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),cN}function lN({id:e}){return Pp.debug?.("clearStatus",e),Lp().delete(e)}async function koe(){Pp.debug?.("getAllStatus");let e=Lp().get({}),t=await Op.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=mN();return{systemStatus:e,componentStatus:r,restartRequired:n}}function uN({id:e}){return e?(Pp.debug?.("getStatus",e),Lp().get(e)):(Pp.debug?.("getStatus","all"),koe())}function dN({status:e,id:t=Lm}){let r=Sx({status:e,id:t});if(r)throw(0,Zg.handleHDBError)(r,r.message,Foe.BAD_REQUEST);return Pp.debug?.("setStatus",t,e),Lp().put(t,{status:e})}var Zg,pG,Foe,cN,oa,Pp,Dp=ie(()=>{Oe();Zg=b(ge()),pG=b(pr());Tx();G_();wp();eS();G_();({HTTP_STATUS_CODES:Foe}=Zg.hdbErrors);a(Lp,"getStatusTable");oa={get primaryStore(){return Lp().primaryStore}},Pp=(0,pG.loggerWithTag)("status");a(lN,"clearStatus");a(koe,"getAllStatus");a(uN,"getStatus");a(dN,"setStatus")});var hG={};Re(hG,{requestRestart:()=>EN,resetRestartNeeded:()=>Hoe,restartNeeded:()=>mN});function hN(){pN||(pN=oa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),tS=new Uint8Array(pN))}function EN(){hN(),tS[0]=1}function mN(){return hN(),tS[0]===1}function Hoe(){hN(),tS[0]=0}var pN,tS,eS=ie(()=>{Dp();a(hN,"ensureInitialized");a(EN,"requestRestart");a(mN,"restartNeeded");a(Hoe,"resetRestartNeeded")});var Pl,_N=ie(()=>{Pl=class{static{a(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var gN={};Re(gN,{Resources:()=>_d,keyArrayToString:()=>gd,resetResources:()=>Goe,resources:()=>ks});function Goe(){return ks=new _d,Ue.resources=ks,ks}function gd(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var EG,_G,_d,ks,fc=ie(()=>{Ja();_N();EG=b(ee()),_G=b(ge());qr();_d=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new _G.ServerError(`Conflicting paths for ${t}`);EG.default.error(c),i.Resource=new Pl(c)}super.set(t,i);for(let[c]of this){let l=2;for(;(l=c.indexOf("/",l))>-1;){let u=this.get(c.slice(0,l));u&&(u.hasSubPaths=!0),l+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===o&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return It(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(Goe,"resetResources");a(gd,"keyArrayToString")});var yN={};Re(yN,{loadGQLSchema:()=>Voe,start:()=>TN,startOnMainThread:()=>$oe});function TN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l}=await import("graphql"),u=o(new c(r.toString(),s)),d=new Map,f=[];for(let h of u.definitions)switch(h.kind){case l.OBJECT_TYPE_DEFINITION:let y=function(w){if(w.kind==="NonNullType"){let Z=y(w.type);return Z.nullable=!1,Z}if(w.kind==="ListType")return{type:"array",elements:y(w.type)};let H={type:w.name?.value};return Object.defineProperty(H,"location",{value:w.loc.startToken}),H};a(y,"getProperty");let E=h.name.value,_=[],R={table:null,database:null,properties:_};d.set(E,R),i.allTypes.set(E,R);for(let w of h.directives){if(w.name.value==="table"){for(let H of w.arguments)R[H.name.value]=H.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=E),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,f.push(R)}if(w.name.value==="sealed"&&(R.sealed=!0),w.name.value==="splitSegments"&&(R.splitSegments=!0),w.name.value==="replicate"&&(R.replicate=!0),w.name.value==="export"){R.export=!0;for(let H of w.arguments)typeof R.export!="object"&&(R.export={}),R.export[H.name.value]=H.value.value}}let S=!1,I={};for(let w of h.fields){let P=y(w.type);P.name=w.name.value,_.push(P),I[P.name]=void 0;for(let H of w.directives){let Z=H.name.value;if(Z==="primaryKey")S?console.warn("Can not define two attributes as a primary key at",H.loc):(P.isPrimaryKey=!0,S=!0);else if(Z==="indexed"){let X={};for(let J of H.arguments||[])X[J.name.value]=J.value.value;P.indexed=X}else if(Z==="computed"){for(let X of H.arguments||[])if(X.name.value==="from"){let J=X.value.value;P.computed={from:p(J,X,I)},P.version==null&&(P.version=J)}else X.name.value==="version"&&(P.version=X.value.value);P.computed=P.computed||!0}else if(Z==="relationship"){let X={};for(let J of H.arguments)X[J.name.value]=J.value.value;P.relationship=X}else if(Z==="createdTime")P.assignCreatedTime=!0;else if(Z==="updatedTime")P.assignUpdatedTime=!0;else if(Z==="expiresAt")P.expiresAt=!0;else if(Z==="enumerable")P.enumerable=!0;else if(Z==="allow"){let X=P.authorizedRoles=[];for(let J of H.arguments)J.name.value==="role"&&X.push(J.value.value)}else server.knownGraphQLDirectives.includes(Z)&&console.warn(`@${Z} is an unknown directive, at`,H.loc)}}R.type=E}function m(h){let E=d.get(h.type);E?(Object.defineProperty(h,"properties",{value:E.properties}),Object.defineProperty(h,"definition",{value:E})):h.type==="array"?m(h.elements):qoe.includes(h.type)||(0,SG.getWorkerIndex)()===0&&console.error(`The type ${h.type} is unknown at line ${h.location.line}, column ${h.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let h of d.values())for(let E of h.properties)m(E);for(let h of f)h.tableClass=e(h),h.export&&(h.export.name===""?i.set((0,SN.dirname)(n),h.tableClass):i.set((0,SN.dirname)(n)+"/"+(h.export.name||h.type),h.tableClass,h.export));function p(h,E,_){return new gG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${h}; } } } } computed;`,{filename:s,lineOffset:E.loc.startToken.line-1,columnOffset:E.loc.startToken.column}).runInThisContext()(_)}a(p,"createComputedFrom")}}var SN,gG,SG,qoe,$oe,Voe,TG=ie(()=>{SN=require("path"),gG=require("node:vm");Oe();SG=b(ot());fc();qoe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives||(server.knownGraphQLDirectives=[]);server.knownGraphQLDirectives.push("table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow","enumerable");a(TN,"start");$oe=TN,Voe=a(e=>TN({ensureTable:Qe}).handleFile(e,null,null,new _d),"loadGQLSchema")});var AN={};Re(AN,{start:()=>Zoe});function Koe(e){if(e.kind!==He.Kind.OPERATION_DEFINITION&&e.kind!==He.Kind.FRAGMENT_DEFINITION)throw new Kr(`Unexpected non-executable definition type ${e.kind}.`)}function yG(e){if(typeof e!="object"||e===null)throw new io("Request body must be an object.");if(!("query"in e))throw new io("Request body must contain a `query` field.");if(typeof e.query!="string")throw new io("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new io("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new io("Request body `operationName` field must be a string.")}function bN(e){return parseInt(e.value,10)}function bG(e){return parseFloat(e.value)}function AG(e,t,r){let n=r.get(e.name.value);return IG(n)?wG(n,t):{attribute:t,value:n}}function IG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function wG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],IG(n)?wG(n,t):{attribute:t,value:n}))}function Yoe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case He.Kind.NULL:return{attribute:t,value:null};case He.Kind.INT:return{attribute:t,value:bN(e.value)};case He.Kind.FLOAT:return{attribute:t,value:bG(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return AG(e.value,t,r);case He.Kind.OBJECT:return NG(e.value,t,r);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.value.kind}, is not supported.`)}}function NG(e,t,r){return e.fields.flatMap(n=>Yoe(n,t,r))}function Woe(e,t){switch(e.value.kind){case He.Kind.NULL:return{attribute:e.name.value,value:null};case He.Kind.INT:return{attribute:e.name.value,value:bN(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:bG(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return AG(e.value,e.name.value,t);case He.Kind.OBJECT:return NG(e.value,[e.name.value],t);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Argument type, ${e.value.kind}, is not supported.`)}}function joe(e,t){return e.flatMap(r=>Woe(r,t))}function rS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case He.Kind.FIELD:return r;case He.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Kr(`Fragment \`${n}\` not found.`);return rS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return rS(r.selectionSet,t)}})}function CG(e,t){return rS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:CG(r.selectionSet,t)}:r.name.value)}async function zoe(e,t,r,n){let s=ks.getMatch(e.name.value,"graphql");if(s===void 0)throw new Kr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:CG(e.selectionSet,r),conditions:joe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function OG(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return bN(e);case He.Kind.FLOAT:return parseFloat(e.value);case He.Kind.STRING:case He.Kind.BOOLEAN:return e.value;case He.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:OG(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.kind}, is not supported.`)}}function Qoe(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=OG(n.defaultValue)),n.type.kind===He.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Kr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Joe(e,t,r,n){if(e.operation===He.OperationTypeNode.SUBSCRIPTION)throw new Kr("Subscriptions are not supported.");if(e.operation===He.OperationTypeNode.MUTATION)throw new Kr("Mutations are not supported yet.");let s=Qoe(e.variableDefinitions,t),i=await Promise.all(rS(e.selectionSet,r).map(c=>zoe(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function RG({query:e,variables:t={},operationName:r},n){let s=He.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(Koe(u),u.kind===He.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Kr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Kr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Kr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Kr(`Operation \`${r}\` not found.`);let l=await Joe(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Xoe(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return yG(r),RG(r,e)}case"POST":{let r=await Zo(e.headers.get("content-type"),!0)(e._nodeRequest);return yG(r),RG(r,e)}default:throw new io("Method Not Allowed",405,{Allow:"GET, POST"})}}function Zoe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Xoe(t)}catch(n){RN.default.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof io)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof He.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Kr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:RN.default.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof io)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof He.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Kr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var He,RN,Kr,io,PG=ie(()=>{He=b(require("graphql"));ea();fc();RN=b(ee());a(Koe,"assertExecutableDefinitionNode");a(yG,"assertRequestParams");a(bN,"processIntValueNode");a(bG,"processFloatValueNode");a(AG,"processVariableNode");a(IG,"isObject");a(wG,"transformObjectIntoQueryCondition");a(Yoe,"processObjectFieldNode");a(NG,"processObjectValueNode");a(Woe,"processArgumentNode");a(joe,"buildConditionsQuery");a(rS,"fillInFragments");a(CG,"buildSelectQuery");a(zoe,"processFieldNode");a(OG,"processConstValueNode");a(Qoe,"resolveVariables");a(Joe,"executeOperation");a(RG,"resolver");Kr=class extends Error{static{a(this,"GraphQLQueryingError")}},io=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(Xoe,"graphqlQueryingHandler");a(Zoe,"start")});var xG=x((lMe,UG)=>{var Sd=require("validate.js"),DG=ht(),Td=($(),D(z)),{handleHDBError:eae,hdbErrors:tae}=ge(),{HDB_ERROR_MSGS:cr,HTTP_STATUS_CODES:rae}=tae,IN=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),nae={STRUCTURE_USER:"structure_user"},LG=Object.values(Td.ROLE_TYPES_ENUM),sae="attribute_permissions",iae="attribute_name",{PERMS_CRUD_ENUM:yd}=Td,oae=[sae,...Object.values(yd)],vG=[yd.READ,yd.INSERT,yd.UPDATE],aae=[iae,...vG];function cae(e){let t=IN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,MG(e,t)}a(cae,"addRoleValidation");function lae(e){let t=IN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,MG(e,t)}a(lae,"alterRoleValidation");function uae(e){let t=IN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,DG.validateObject(e,t)}a(uae,"dropRoleValidation");var dae=["operation","role","id","permission","hdb_user","access"];function MG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)dae.includes(n[o])||s.push(n[o]);s.length>0&&Sr(cr.INVALID_ROLE_JSON_KEYS(s),r);let i=DG.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Sr(o,r)}),e.permission){let o=fae(e);o&&Sr(o,r),LG.forEach(c=>{e.permission[c]&&!Sd.isBoolean(e.permission[c])&&Sr(cr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(LG.indexOf(o)<0){if(o===nae.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||Sr(cr.SCHEMA_NOT_FOUND(f),r)}continue}Sr(cr.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Sr(cr.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){Sr(cr.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{oae.includes(d)||Sr(cr.INVALID_PERM_KEY(d),r,o,l)}),Object.values(yd).forEach(d=>{Sd.isDefined(u[d])?Sd.isBoolean(u[d])||Sr(cr.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):Sr(cr.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){Sr(cr.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){Sr(cr.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!aae.includes(E)&&E!==yd.DELETE&&Sr(cr.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Sd.isDefined(p.attribute_name)){Sr(cr.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){Sr(cr.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}vG.forEach(E=>{Sd.isDefined(p[E])?Sd.isBoolean(p[E])||Sr(cr.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):Sr(cr.ATTR_PERM_MISSING(E,h),r,o,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${o}.${l}`;Sr(cr.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return mae(r)}a(MG,"customValidate");UG.exports={addRoleValidation:cae,alterRoleValidation:lae,dropRoleValidation:uae};function fae(e){let{operation:t,permission:r}=e;if(t===Td.OPERATIONS_ENUM.ADD_ROLE||t===Td.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return cr.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Td.ROLE_TYPES_ENUM.SUPER_USER:Td.ROLE_TYPES_ENUM.CLUSTER_USER;return cr.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(fae,"validateNoSUPerms");function mae(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:cr.ROLE_PERMS_ERROR,...e};return eae(new Error,n,rae.BAD_REQUEST)}else return null}a(mae,"generateRolePermResponse");function Sr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(Sr,"addPermError")});var Mp=x((dMe,HG)=>{"use strict";var BG=ms(),FG=$n(),pae=Al(),NN=xG(),CN=Wo(),hae=require("util"),nS=($(),D(z)),Eae=ue(),ON=FG.searchByValue,_ae=FG.searchByHash,gae=hae.promisify(pae.delete),Sae=Ki(),Tae=Wm(),{hdbErrors:yae,handleHDBError:Ll}=ge(),{HDB_ERROR_MSGS:kG,HTTP_STATUS_CODES:vp}=yae,{UserEventMsg:PN}=cs();HG.exports={addRole:Rae,alterRole:bae,dropRole:Aae,listRoles:Iae};function wN(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(wN,"scrubRoleDetails");async function Rae(e){let t=NN.addRoleValidation(e);if(t)throw t;e=wN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await ON(r)||[])}catch(i){throw Ll(i)}if(n&&n.length>0)throw Ll(new Error,kG.ROLE_ALREADY_EXISTS(e.role),vp.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await BG.insert(s),CN.signalUserChange(new PN(process.pid)),e=wN(e),e}a(Rae,"addRole");async function bae(e){let t=NN.alterRoleValidation(e);if(t)throw t;e=wN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await BG.update(r)}catch(s){throw Ll(s)}if(n&&n?.message==="updated 0 of 1 records")throw Ll(new Error,"Invalid role id",vp.BAD_REQUEST,void 0,void 0,!0);return await CN.signalUserChange(new PN(process.pid)),e}a(bae,"alterRole");async function Aae(e){let t=NN.dropRoleValidation(e);if(t)throw Ll(new Error,t,vp.BAD_REQUEST,void 0,void 0,!0);let r=new Tae(nS.SYSTEM_SCHEMA_NAME,nS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await _ae(r));if(n.length===0)throw Ll(new Error,kG.ROLE_NOT_FOUND,vp.NOT_FOUND,void 0,void 0,!0);let s=new Sae(nS.SYSTEM_SCHEMA_NAME,nS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await ON(s)),o=!1;if(Eae.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Ll(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,vp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await gae(c),CN.signalUserChange(new PN(process.pid)),`${n[0].role} successfully deleted`}a(Aae,"dropRole");async function Iae(){return ON({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Iae,"listRoles")});var LN={};Re(LN,{start:()=>$G,startOnMainThread:()=>Cae});function $G({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,GG.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(wae.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Nae(i)}}}async function Nae(e){let t=dt().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,qG.isEqual)(i,e)?void 0:(e.id=r.id,(0,sS.alterRole)(e))}return(0,sS.addRole)(e)}var sS,GG,qG,wae,Cae,VG=ie(()=>{Oe();sS=b(Mp()),GG=require("yaml"),qG=require("lodash"),wae=["super_user","cluster_user","structure_user"];a($G,"start");a(Nae,"ensureRole");Cae=$G});async function iS(e){let t=(0,WG.pathToFileURL)(e).toString();if(Oae)return Up||(Up=Pae(Dae)),(await(await Up).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Pae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Up=new Compartment({console,Math,Date,fetch:Lae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,YG.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Kt,s.tables=yn,s.databases=xe}};let n=await(0,KG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Up}function Lae(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function Dae(){return{Resource:Kt,tables:yn}}var KG,YG,WG,Oae,Up,DN=ie(()=>{oo();Oe();KG=require("fs/promises"),YG=require("path"),WG=require("url"),Oae=!1;a(iS,"secureImport");a(Pae,"getCompartment");a(Lae,"secureOnlyFetch");a(Dae,"getGlobalVars")});var vN={};Re(vN,{ResourceLoadError:()=>oS,handleApplication:()=>vae,suppressHandleApplicationWarning:()=>Mae});function zG(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function vae(e){e.handleEntry(a(async function(r){if(r.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${r.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(r.eventType!=="add"){e.requestRestart();return}try{let n=await iS(r.absolutePath),s=(0,jG.dirname)(r.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");zG(n.default)&&(e.resources.set(s,n.default),e.logger.debug(`Registered root resource: ${s}`)),QG(e,n,s)}catch(n){throw new oS(r.absolutePath,n)}},"handleResourceEntry"))}function QG(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;zG(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&QG(e,s,i)}}var jG,oS,Mae,JG=ie(()=>{DN();jG=require("path");a(zG,"isResource");oS=class extends Error{static{a(this,"ResourceLoadError")}filePath;cause;constructor(t,r){super(`Failed to load resource module ${t}${r?`: ${r.message}`:""}`),this.name="ResourceLoadError",this.filePath=t,this.cause=r}};a(vae,"handleApplication");a(QG,"recurseForResources");Mae=!0});var UN={};Re(UN,{start:()=>Uae});function Uae({resources:e}){e.set("login",MN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var MN,XG=ie(()=>{oo();a(Uae,"start");MN=class extends Kt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i}=r;return{data:await n.login(s,i)}}}});function aS(){return xN||(xN=Qe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),xN}function Bae(e){return e=e.replace(xae,t=>{let[r,n,s,i]=t.split(".").map(o=>parseInt(o));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function Fae(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function xp(e){let t=ZG.default.createHash("shake128",{outputLength:4}),r;return(0,eq.isIPv6)(e)?r=Bae(e):r=e.toLowerCase(),Fae(Uint8Array.from(t.update(r).digest()))}var ZG,eq,BN,xN,xae,FN=ie(()=>{Oe();ZG=b(require("crypto")),eq=require("node:net"),BN=new Map;a(aS,"getAnalyticsHostnameTable");xae=/(\d{1,3}\.){3}\d{1,3}$/;a(Bae,"normalizeIPv6");a(Fae,"nodeHashToNumber");a(xp,"stableNodeId")});var aa,kN=ie(()=>{aa={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var oq={};Re(oq,{captureProfile:()=>GN,userCodeFolders:()=>cS});async function GN(e){let r=iq/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=HN.time.stop(!0),d=u.stringTable.strings;for(let f of u.function)s.set(f.id,d[f.filename]);for(let f of u.location)n.set(f.id,f.line[0]);for(let f of u.sample)l(f);qe(c*r,"cpu-usage","harper"),qe(o*r,"cpu-usage","user");for(let[f,m]of i)if(m>100){let p=n.get(f),h=s.get(p.functionId)+":"+p.line;qe(m*r,"cpu-usage",h)}}catch(u){sq.error?.("analytics profiler error:",u)}finally{e&&setTimeout(()=>{let u=((0,Bp.get)(U.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;GN(u)},e).unref()}function l(u){let d=!1;for(let f of u.locationId){let m=s.get(n.get(f).functionId);if(cS.some(p=>m.startsWith(p))){let p=u.value[0];o+=p,d||i.set(f,(i.get(f)??0)+p);return}if(m.startsWith(rq.PACKAGE_ROOT)){let p=u.value[0];c+=p,d||(i.set(f,(i.get(f)??0)+p),d=!0)}}}a(l,"getUserHitCount")}var Bp,rq,nq,HN,sq,tq,cS,iq,aq=ie(()=>{Kn();Bp=b(fe());$();rq=b(Dt()),nq=require("node:fs"),HN=require("@datadog/pprof"),sq=b(ee()),tq=(0,Bp.getHdbBasePath)(),cS=tq?[tq]:[];process.env.RUN_HDB_APP&&cS.push((0,nq.realpathSync)(process.env.RUN_HDB_APP));iq=5e4;(async()=>{if(cS.length===0)return;HN.time.start({intervalMicros:iq});let e=((0,Bp.get)(U.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{GN(e)},e).unref()})();a(GN,"captureProfile")});var dS={};Re(dS,{addAnalyticsListener:()=>Gp,analyticsDelay:()=>KN,calculateCPUUtilization:()=>wq,diffResourceUsage:()=>Nq,onAnalyticsAggregate:()=>jN,recordAction:()=>qe,recordActionBinary:()=>nn,recordHostname:()=>YN,setAnalyticsEnabled:()=>Gae});function Gae(e){Tq=e,clearTimeout(kp),kp=null}function qae(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function $ae(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},uS.set(e,o)}function qe(e,t,r,n,s){if(!Tq)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=uS.get(i);o?qae(e,o):$ae(i,e,t,r,n,s),kp||Vae()}function nn(e,t,r,n,s){qe(!!e,t,r,n,s)}function Gp(e){Rq.push(e)}function Vae(){qN||=performance.now(),kp=setTimeout(async()=>{kp=null;let e=performance.now()-qN;qN=0;let t=[],r={time:Date.now(),period:e,threadId:Dl.threadId,metrics:t};for(let[s,i]of uS){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let f of Aq){let m=Math.floor(c*f),p=o[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await Cq()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Dl.threadId,byThread:!0,...n});for(let s of Rq)s(t);uS=new Map,Dl.parentPort?Dl.parentPort.postMessage({type:yq,report:r}):Lq({report:r})},KN).unref()}async function YN(){let e=Ue.hostname;rn.trace?.("recordHostname server.hostname:",e);let t=xp(e);rn.trace?.("recordHostname nodeId:",t);let r=aS(),n={id:t,hostname:e};rn.trace?.(`recordHostname storing hostname: ${JSON.stringify(n)}`),await r.put(n.id,n)}function Iq(e){let t=BN.get(e);return t?(rn.trace?.("storeMetric cached nodeId:",t),t):(t=xp(e),rn.trace?.("storeMetric new nodeId:",t),BN.set(e,t),t)}function Rd(e,t){let r=Iq(Ue.hostname),n={id:[(0,VN.getNextMonotonicTime)(),r],...t};rn.trace?.(`storing metric ${JSON.stringify(n)}`),e.put(n.id,n)}function wq(e,t){let r=e.userCPUTime+e.systemCPUTime;return rn.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function Nq(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Kae(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:aa.TABLE_SIZE,database:t,table:s,size:c};rn.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),Rd(e,l),n+=c}return n}function cq(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=Sq.statSync(s.primaryStore.env.path).size,c=Kae(e,r,n),l=o-c,u={metric:aa.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};Rd(e,u),rn.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){rn.warn?.("Error getting DB size metrics",s)}}function lq(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={metric:aa.STORAGE_VOLUME,database:r,...i};Rd(e,o),rn.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){rn.warn?.("Error getting DB volume metrics",s)}}async function Yae(e,t=6e4){let r=WN(),n=Oq(),s=new Promise(I=>{let w=performance.now();setImmediate(()=>{let P=performance.now();P-w>5e3&&rn.warn?.("Unusually high event queue latency on the main thread of "+Math.round(P-w)+"ms"),w=performance.now()}),n.primaryStore.prefetch([1],()=>{let P=performance.now();P-w>5e3&&rn.warn?.("Unusually high task queue latency on the main thread of "+Math.round(P-w)+"ms"),I(P-w)})}),i,o=Iq(Ue.hostname);for(let I of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(!(!I.value?.time||I.value?.id[1]!==o)){i=I.value.time;break}if(Date.now()-t<i)return;let c,l=new Map,u=new Map,d=[],f;for(let{key:I,value:w}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!w)continue;if(c){if(I>c+t)break}else c=I;f=I;let{metrics:P,threadId:H}=w;for(let Z of P||[]){let{path:X,method:J,type:F,metric:de,count:oe,total:ae,distribution:he,threads:Te,...De}=Z;oe||(oe=1);let Je=de+(X?"-"+X:"");J!==void 0&&(Je+="-"+J),F!==void 0&&(Je+="-"+F);let $e=l.get(Je);if($e){if($e.threads){let Pt=$e.threads[H];if(Pt)$e=Pt;else{$e.threads[H]={...De};continue}}$e.count||($e.count=1);let ns=$e.count;for(let Pt in De){let Lt=De[Pt];typeof Lt=="number"&&($e[Pt]=($e[Pt]*ns+Lt*oe)/(ns+oe))}$e.count+=oe,ae>=0&&($e.total+=ae,$e.ratio=$e.total/$e.count)}else $e={period:t,...Z},delete $e.distribution,l.set(Je,$e),$e.byThread&&($e.threads=[],$e.threads[H]={...De},d.push($e));if(he){he=he.map(Pt=>typeof Pt=="number"?{value:Pt,count:1}:Pt);let ns=u.get(Je);ns?ns.push(...he):u.set(Je,he)}}await Cq()}for(let I of d){let{path:w,method:P,type:H,metric:Z,count:X,total:J,distribution:F,threads:de,...oe}=I;de=de.filter(ae=>ae);for(let ae in oe){if(typeof I[ae]!="number")continue;let he=0;for(let Te of de){let De=Te[ae];typeof De=="number"&&(he+=De)}I[ae]=he}I.count=de.length,delete I.threads,delete I.byThread}for(let[I,w]of u){let P=l.get(I);w.sort((Pt,Lt)=>Pt.value>Lt.value?1:-1);let H=P.count-1,Z=[],X=0,J=0,F;for(let Pt of Aq){let Lt=H*Pt;for(;X<Lt;)F=w[J++],X+=F.count,J===1&&X--;let Ya=w[J>1?J-2:0];F||(F=w[0]),Z.push(F.value-(F.value-Ya.value)*(X-Lt)/F.count)}let[de,oe,ae,he,Te,De,Je,$e,ns]=Z;Object.assign(P,{p1:de,p10:oe,p25:ae,median:he,p75:Te,p90:De,p95:Je,p99:$e,p999:ns})}let m;for(let[,I]of l)I.time=f,Rd(n,I),m=!0;if(m)for(let I of bq)I(l.values());let p=Date.now(),{idle:h,active:E}=performance.eventLoopUtilization();if(m||E*10>h){let I={metric:aa.MAIN_THREAD_UTILIZATION,idle:h-uq,active:E-dq,taskQueueLatency:await s,time:p,...process.memoryUsage()};Rd(n,I)}uq=h,dq=E;let _=process.resourceUsage();_.time=p,_.userCPUTime=_.userCPUTime/1e3,_.systemCPUTime=_.systemCPUTime/1e3,rn.trace?.(`process.resourceUsage: ${JSON.stringify(_)}`);let R=Nq(lS,_);rn.trace?.(`diffed resourceUsage: ${JSON.stringify(R)}`),R.time=p,R.period=lS.time?p-lS.time:t,R.cpuUtilization=wq(R,R.period);let S={metric:aa.RESOURCE_USAGE,...R};Rd(n,S),lS=_;let y=dt();cq(n,y),cq(n,{system:y.system}),lq(n,y),lq(n,{system:y.system})}async function fq(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function WN(){return mq||(mq=Qe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Oq(){return pq||(pq=Qe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function zae(){Pq=!0;let e=(0,Hp.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Yae(KN,e),await fq(WN(),Wae),await fq(Oq(),jae)},Math.min(e/2,2147483647)).unref()}function Lq(e,t){let r=e.report;r.threadId=t?.threadId||Dl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(hq+=n.mean*n.count);r.totalBytesProcessed=hq,t&&(r.metrics.push({metric:aa.UTILIZATION,...t.performance.eventLoopUtilization(Eq.get(t))}),Eq.set(t,t.performance.eventLoopUtilization())),r.id=(0,VN.getNextMonotonicTime)(),WN().primaryStore.put(r.id,r),Pq||zae(),Qae&&(Dq=Xae(r))}async function Xae(e){if(await Dq,!mc){let r=(0,Fp.dirname)(kae());try{mc=await(0,$N.open)((0,Fp.join)(r,"analytics.log"),"r+")}catch{mc=await(0,$N.open)((0,Fp.join)(r,"analytics.log"),"w+")}}let t=(await mc.stat()).size;if(t>Jae){let r=Buffer.alloc(t);await mc.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await mc.write(r,{position:0}),await mc.truncate(r.length),t=r.length}await mc.write(JSON.stringify(e)+`
|
|
13
13
|
`,t)}function jN(e){e&&bq.push(e)}var Dl,_q,gq,Fp,$N,VN,Hp,Sq,kae,Hae,rn,uS,Tq,kp,qN,KN,yq,Rq,bq,Aq,uq,dq,lS,Cq,Wae,jae,mq,pq,Pq,hq,Eq,Qae,Dq,mc,Jae,Kn=ie(()=>{Dl=require("worker_threads"),_q=b(ot());Oe();gq=b(ee()),Fp=require("path"),$N=require("fs/promises"),VN=b(Ms()),Hp=b(fe());$();qr();Sq=b(require("node:fs"));FN();kN();({getLogFilePath:kae,forComponent:Hae}=gq.default);setTimeout(()=>{Promise.resolve().then(()=>aq())},1e3);rn=Hae("analytics").conditional;(0,Hp.initSync)();uS=new Map,Tq=(0,Hp.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;a(Gae,"setAnalyticsEnabled");a(qae,"recordExistingAction");a($ae,"recordNewAction");a(qe,"recordAction");Ue.recordAnalytics=qe;a(nn,"recordActionBinary");qN=0,KN=1e3,yq="analytics-report",Rq=[],bq=[];a(Gp,"addAnalyticsListener");Aq=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Vae,"sendAnalytics");a(YN,"recordHostname");a(Iq,"getHostNodeId");a(Rd,"storeMetric");a(wq,"calculateCPUUtilization");a(Nq,"diffResourceUsage");a(Kae,"storeTableSizeMetrics");a(cq,"storeDBSizeMetrics");a(lq,"storeVolumeMetrics");a(Yae,"aggregation");uq=0,dq=0,lS={userCPUTime:0,systemCPUTime:0},Cq=a(()=>new Promise(setImmediate),"rest");a(fq,"cleanup");Wae=36e5,jae=31536e6;a(WN,"getRawAnalyticsTable");a(Oq,"getAnalyticsTable");(0,_q.setChildListenerByType)(yq,Lq);a(zae,"startScheduledTasks");hq=0,Eq=new Map,Qae=!1;a(Lq,"recordAnalytics");Jae=1e6;a(Xae,"logAnalytics");a(jN,"onAnalyticsAggregate")});function qp(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function vq(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Hs(e));for(let[r,n]of t)if(!e.has(r))e.set(r,n);else if(r.toLowerCase()==="set-cookie"){let s=Array.isArray(n)?n:[n];if(e.append)for(let i of s)e.append(r,i);else{let i=e.get(r),o=Array.isArray(i)?[...i,...s]:[i,...s];e.set(r,o)}}return e}var Hs,$p=ie(()=>{Hs=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),Array.isArray(r)?r=r.map(n=>typeof n=="string"?n:""+n):typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(qp,"appendHeader");a(vq,"mergeHeaders")});function mS(e,t){let r={openapi:Zae,info:{title:"HarperDB HTTP REST interface",version:kq.packageJson.version},servers:[{description:"REST API",url:t}],paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},n=[{basicAuth:[],bearerAuth:[]}],s=a(i=>{if(i.type&&!r.components.schemas[i.type]){r.components.schemas[i.type]={};let o={},c=[];for(let l of i.properties)fS[l.type]?o[l.name]=new QN(fS[l.type],l.type):l.properties?(o[l.name]=new Gq(l.type),s(l)):l.elements?.properties&&(o[l.name]=new nce(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new Fq(o,!i.sealed,c)}},"includeDefinitionInSchema");for(let[,i]of e){if(!i.path||i.Resource.isError)continue;let{path:o}=i,c=o.split("/").pop(),{attributes:l,sealed:u}=i.Resource,{prototype:d,primaryKey:f="id"}=i.Resource;if(!l&&e.allTypes.has(i.path)){let X=e.allTypes.get(i.path);u=X.sealed,l=X.properties}if(!f)continue;let m={},p=[],h=[];if(l)for(let{type:X,name:J,elements:F,relationship:de,definition:oe,nullable:ae}of l){let he=oe??F?.definition;he&&s(he),ae===!1&&h.push(J),de?X==="array"?m[J]={type:"array",items:{$ref:Gs+F.type}}:m[J]={$ref:Gs+X}:he?X==="array"?m[J]={type:"array",items:{$ref:Gs+he.type}}:m[J]={$ref:Gs+he.type}:X==="array"?F.type==="Any"?m[J]={type:"array",items:{format:F.type}}:m[J]={type:"array",items:new QN(fS[F.type],F.type)}:X==="Any"?m[J]={format:X}:m[J]=new QN(fS[X],X),p.push(new JN(J,"query",m[J]))}let E=Object.keys(m),_=new JN(f,"path",{type:"string",format:"ID"});_.required=!0,_.description="primary key of record";let R=new JN("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new Fq(m,!u,h);let S=d.post!==Kt.prototype.post||d.update,y=typeof d.put=="function",I=typeof d.get=="function",w=typeof d.delete=="function",P=typeof d.patch=="function",H=`/${o}/`;r.paths[H]||(r.paths[H]={}),S&&(r.paths[H].post=new ece(c,n,{200:new bd({$ref:Gs+c},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),r.paths[H].options=new Mq(p,n,{200:new Uq},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),I&&(r.paths[H].get=new zN(p,n,{200:new bd({type:"array",items:{$ref:Gs+c}})},"search for records by the specified property name and value pairs")),w&&(r.paths[H].delete=new Bq(p,n,"delete all the records that match the provided query",{204:new xq}));let Z="/"+o+"/{"+f+"}";if(r.paths[Z]||(r.paths[Z]={}),r.paths[Z].options=new Mq(p,n,{200:new Uq},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),I&&(r.paths[Z].get=new zN([_],n,{200:new bd({$ref:Gs+c})},"retrieve a record by its primary key")),y&&(r.paths[Z].put=new tce([_],n,c,{200:new bd({$ref:Gs+c})},"create or update the record with the URL path that maps to the record's primary key")),P&&(r.paths[Z].patch=new rce([_],n,c,{200:new bd({$ref:Gs+c})},"patch the record with the URL path that maps to the record's primary key")),w&&(r.paths[Z].delete=new Bq([_],n,"delete a record with the given primary key",{204:new xq})),I&&R.schema.enum.length>0){let X=`/${o}/{${f}}.{property}`;r.paths[X]||(r.paths[X]={}),r.paths[X].get=new zN([_,R],n,{200:new bd({enum:E})},"used to retrieve the specified property of the specified record")}}for(let[,i]of e.allTypes)s(i),i.sealed&&r.components.schemas[i.type].additionalProperties&&(r.components.schemas[i.type].additionalProperties=!1);return r}function ece(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Gs+e}}}},this.security=t,this.responses=r}function zN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Mq(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Uq(){this.description=Hq,this.headers={},this.content={}}function bd(e,t){this.description=Hq,this.content={"application/json":{schema:e}},this.headers=t}function xq(){this.description="successfully processed request, no content returned to client"}function tce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Gs+r}}}},this.responses=n}function rce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Gs+r}}}},this.responses=n}function Bq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function Fq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function QN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function Gq(e){this.$ref=`#/components/schemas/${e}`}function nce(e){this.type="array",this.items=new Gq(e)}function JN(e,t,r){this.name=e,this.in=t,this.schema=r}var kq,Zae,fS,Gs,Hq,XN=ie(()=>{kq=b(Dt());oo();Zae="3.0.3",fS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Gs="#/components/schemas/",Hq="successful operation";a(mS,"generateJsonApi");a(ece,"Post");a(zN,"Get");a(Mq,"Options");a(Uq,"ResponseOptions200");a(bd,"Response200");a(xq,"Response204");a(tce,"Put");a(rce,"Patch");a(Bq,"Delete");a(Fq,"ResourceSchema");a(QN,"Type");a(Gq,"Ref");a(nce,"ArrayRef");a(JN,"Parameter")});var $q={};Re($q,{Request:()=>pc,createReuseportFd:()=>pS});var qq,pc,ZN,eC,pS,Vp=ie(()=>{qq=require("os"),pc=class{static{a(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new eC(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new ZN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get hostname(){return this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},ZN=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},eC=class{static{a(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,qq.platform)()!="win32"&&(pS=require("node-unix-socket").createReuseportFd)});var Vq,qs,hS=ie(()=>{Vq=b(fi());oo();qs=class extends URLSearchParams{static{a(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,Vq._assignPackageExport)("Resource",Kt)});var _S={};Re(_S,{parseHeaderValue:()=>rC,start:()=>oce});async function ice(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&gS(e);let i=new Hs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==Kq){let _=ES.getMatch(o,n?"sse":"rest");if(!_)return t(e);e.handlerPath=_.path,c=new qs(_.relativeURL),c.async=!0,l=_.Resource}if(l?.isCaching){let _=r["cache-control"];if(_){let R=rC(_);for(let S of R)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let _=rC(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=_.length===1&&+_[0]>=0?+_[0]:_[0]==="*"?void 0:_}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await It(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Zo(r["content-type"],!0)(e.body,e.headers)}catch(_){throw new Ad.ClientError(_,400)}if(e.authorize=!0,o===Kq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return mS(ES,`${e.protocol}://${e.hostname}`);throw new Ad.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Ad.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Ad.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,tC.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let _=vq(f.headers,i);return f.headers!==_&&(f.headers=_),f.data!==void 0&&(f.body=np(f.data,e,f)),f}else if(isFinite(p)){sce[0]=p;let _=String.fromCharCode(34,(sn[0]&63)+62,(sn[0]>>6)+(sn[1]<<2&63)+62,(sn[1]>>4)+(sn[2]<<4&63)+62,(sn[2]>>2)+62,(sn[3]&63)+62,(sn[3]>>6)+(sn[4]<<2&63)+62,(sn[4]>>4)+(sn[5]<<4&63)+62,(sn[5]>>2)+62,(sn[6]&63)+62,(sn[6]>>6)+(sn[7]<<2&63)+62,34),R=r["if-none-match"];R&&_==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",_),tC.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=np(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?Ti.warn(o):Ti.info(o):Ti.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=np(o instanceof Error?jq(o):o,e,c),c}}function oce(e){tC=e,e.includeExpensiveRecordCountEstimates&&(pc.prototype.includeExpensiveRecordCountEstimates=!0),!Yq&&(Yq=!0,ES=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return ice(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Kp++;let s=new is;Wq||(Wq=!0,Gp(l=>{Kp>0&&l.push({metric:"ws-connections",connections:Kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ti.warn(l)});let o;t.on("message",a(function(u){o||(o=Zo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);qe(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{Kp--,nn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=ES.getMatch(l,"ws");if(nn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,qe(h=>({count:h.count,total:Kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new qs(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await It(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Xo(p.value,r);t.send(h),qe(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Ti.warn(l):Ti.info(l):Ti.error(l),t.close(ace[l.statusCode]||1011,jq(l))}t.close()},e))}function rC(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Ti,Ad,jq,sn,sce,tC,Kq,Yq,ES,Wq,Kp,ace,zq=ie(()=>{ea();Kn();Ti=b(ee()),Ad=b(ge());SS();$u();Ja();$p();XN();Vp();hS();({errorToString:jq}=Ti),sn=new Uint8Array(8),sce=new Float64Array(sn.buffer,0,1),tC={},Kq="openapi";a(ice,"http");Kp=0;a(oce,"start");ace={401:3e3,403:3003};a(rC,"parseHeaderValue")});var nC=x((tUe,Jq)=>{var{recordAction:TS,recordActionBinary:Qq}=(Kn(),D(dS)),cce=require("fastify-plugin"),lce=200;Jq.exports=cce(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),TS(o,"duration",u,f,d),Qq(s.raw.statusCode<400,"success",u,f,d),Qq(1,"response_"+s.raw.statusCode,u,f,d);let m=lce;i?.pipe?(i.on("data",_=>{m+=_.length}),i.on("end",()=>{TS(performance.now()-c,"transfer",u,f,d),TS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,TS(m,"bytes-sent",u,f,d));let p=o.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var Zq=x((rUe,Xq)=>{var uce=ht(),dce={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Xq.exports=function(e){return uce.validateObject(e,dce)}});var yS=x((nUe,e$)=>{"use strict";var fce=($(),D(z)).OPERATIONS_ENUM,sC=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=fce.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};e$.exports=sC});var jp={};Re(jp,{createTokens:()=>oC,getJWTRSAKeys:()=>wS,refreshOperationToken:()=>aC,validateOperationToken:()=>cC,validateRefreshToken:()=>NS});async function wS(){if(RS)return RS;try{let e=Yp.default.join(Wp.default.getHdbBasePath(),mA),t=await bS.default.readFile(Yp.default.join(e,Sm.JWT_PASSPHRASE_NAME),"utf8"),r=await bS.default.readFile(Yp.default.join(e,Sm.JWT_PRIVATE_KEY_NAME),"utf8");return RS={publicKey:await bS.default.readFile(Yp.default.join(e,Sm.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},RS}catch(e){throw IS.default.error(e),new yi.ClientError(wd.NO_ENCRYPTION_KEYS,Id.INTERNAL_SERVER_ERROR)}}async function oC(e){let t=(0,iC.validateBySchema)(e,ao.default.object({username:ao.default.string().optional(),password:ao.default.string().optional(),role:ao.default.string().optional(),expires_in:ao.default.alternatives(ao.default.string(),ao.default.number()).optional()}));if(t)throw new yi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await md(e.username,e.password,f)}catch(f){throw IS.default.error(f),new yi.ClientError(wd.INVALID_CREDENTIALS,Id.UNAUTHORIZED)}if(!r)throw new yi.ClientError(wd.INVALID_CREDENTIALS,Id.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await wS(),c=await Nd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??i$,algorithm:AS,subject:Cd.OPERATION}),l=await Nd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:mce,algorithm:AS,subject:Cd.REFRESH}),u=_w(l,Vr.SHA256);if((await(0,t$.update)(new r$.default(_m,Fu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new yi.ClientError(wd.REFRESH_TOKEN_SAVE_FAILED,Id.INTERNAL_SERVER_ERROR);return n$.default.signalUserChange(new s$.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function aC(e){let t=(0,iC.validateBySchema)(e,ao.default.object({refresh_token:ao.default.string().required()}).required());if(t)throw new yi.ClientError(t.message);let{refresh_token:r}=e;await NS(r);let n=await wS(),s=await Nd.default.decode(r);return{operation_token:await Nd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:i$,algorithm:AS,subject:Cd.OPERATION})}}async function cC(e){return o$(e,Cd.OPERATION)}async function NS(e){return o$(e,Cd.REFRESH)}async function o$(e,t){try{let r=await wS(),n=await Nd.default.verify(e,r.publicKey,{algorithms:AS,subject:t});if(n.role)throw new Error("Invalid token");let s=await md(n.username,void 0,!1);if(t===Cd.REFRESH&&!gw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw IS.default.warn(r),r?.name==="TokenExpiredError"?new yi.ClientError(wd.TOKEN_EXPIRED,Id.FORBIDDEN):new yi.ClientError(wd.INVALID_TOKEN,Id.UNAUTHORIZED)}}var Nd,bS,Yp,ao,iC,yi,IS,t$,r$,n$,s$,Wp,Id,wd,i$,mce,AS,Cd,RS,Od=ie(()=>{Nd=b(require("jsonwebtoken")),bS=b(require("fs-extra")),Yp=b(require("node:path")),ao=b(require("joi")),iC=b(ht());$();yi=b(ge()),IS=b(ee());Tw();_s();t$=b(ms()),r$=b(yS()),n$=b(Wo()),s$=b(cs()),Wp=b(fe()),{HTTP_STATUS_CODES:Id,AUTHENTICATION_ERROR_MSGS:wd}=yi.hdbErrors;Wp.default.initSync();i$=Wp.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",mce=Wp.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",AS="RS256",Cd={OPERATION:"operation",REFRESH:"refresh"};a(wS,"getJWTRSAKeys");a(oC,"createTokens");a(aC,"refreshOperationToken");a(cC,"validateOperationToken");a(NS,"validateRefreshToken");a(o$,"validateToken")});var u$=x((cUe,l$)=>{"use strict";var pce=Zq(),Pd=require("passport"),hce=require("passport-local").Strategy,Ece=require("passport-http").BasicStrategy,_ce=require("util"),gce=(_s(),D(no)),c$=_ce.callbackify(gce.findAndValidateUser),Sce=($(),D(z)),a$=(Od(),D(jp)),{AccessViolation:Tce}=ge();Pd.use(new hce(function(e,t,r){c$(e,t,r)}));Pd.use(new Ece(function(e,t,r){c$(e,t,r)}));Pd.serializeUser(function(e,t){t(null,e)});Pd.deserializeUser(function(e,t){t(null,e)});function yce(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r(new Tce)}switch(a(i,"handleResponse"),n){case"Basic":Pd.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Sce.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?a$.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):a$.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Pd.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(yce,"authorize");function Rce(e,t){let r=pce(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(Rce,"checkPermissions");l$.exports={authorize:yce,checkPermissions:Rce}});var pC=x((uUe,p$)=>{var LS=require("clone"),DS=ht(),bce=ue(),OS=($(),D(z)),lC=require("fs"),dC=require("joi"),{string:PS}=dC.types(),{hdbErrors:Ace,handleHDBError:CS}=ge(),{HTTP_STATUS_CODES:uC}=Ace,{commonValidators:Ld}=Vo(),d$=" is required",Ice=["insert","update","upsert"],fC={database:{presence:!1,format:Ld.schema_format,length:Ld.schema_length},schema:{presence:!1,format:Ld.schema_format,length:Ld.schema_length},table:{presence:!0,format:Ld.schema_format,length:Ld.schema_length},action:{inclusion:{within:Ice,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},wce={schema:PS.required(),table:PS.required(),action:PS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Nce,AWS_SECRET:Cce,AWS_BUCKET:Oce,AWS_FILE_KEY:Pce,REGION:Lce}=OS.S3_BUCKET_AUTH_KEYS,Dce={s3:{presence:!0},[`s3.${Nce}`]:{presence:!0,type:"String"},[`s3.${Cce}`]:{presence:!0,type:"String"},[`s3.${Oce}`]:{presence:!0,type:"String"},[`s3.${Pce}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Lce}`]:{presence:!0,type:"String"}},f$=LS(fC);f$.data.presence={message:d$};var m$=LS(fC);m$.file_path.presence={message:d$};var vce=Object.assign(LS(fC),Dce),mC=LS(wce);mC.csv_url=PS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();mC.passthrough_headers=dC.object();function Mce(e){let t=DS.validateObject(e,f$);return vS(e,t)}a(Mce,"dataObject");function Uce(e){let t=DS.validateBySchema(e,dC.object(mC));return vS(e,t)}a(Uce,"urlObject");function xce(e){let t=DS.validateObject(e,m$);return vS(e,t)}a(xce,"fileObject");function Bce(e){let t=DS.validateObject(e,vce);return vS(e,t)}a(Bce,"s3FileObject");function vS(e,t){if(!t){let r=bce.checkGlobalSchemaTable(e.schema,e.table);if(r)return CS(new Error,r,uC.BAD_REQUEST);if(e.operation===OS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{lC.accessSync(e.file_path,lC.constants.R_OK|lC.constants.F_OK)}catch(n){return n.code===OS.NODE_ERROR_CODES.ENOENT?CS(n,`No such file or directory ${n.path}`,uC.BAD_REQUEST):n.code===OS.NODE_ERROR_CODES.EACCES?CS(n,`Permission denied ${n.path}`,uC.BAD_REQUEST):CS(n)}}return t}a(vS,"postValidateChecks");p$.exports={dataObject:Mce,urlObject:Uce,fileObject:xce,s3FileObject:Bce}});var hC=x((fUe,h$)=>{"use strict";var zp=ee(),MS=($(),D(z));async function Fce(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===MS.OPERATIONS_ENUM.INSERT||t.operation===MS.OPERATIONS_ENUM.UPDATE||t.operation===MS.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===MS.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(zp.info(i.message),i):i.http_resp_msg?(zp.error(`Error calling operation: ${e.name}`),zp.error(i.http_resp_msg),i):(zp.error(`Error calling operation: ${e.name}`),zp.error(i),i)}}a(Fce,"callOperationFunctionAsAwait");h$.exports={callOperationFunctionAsAwait:Fce}});var EC=x((pUe,_$)=>{"use strict";var{S3:kce,GetObjectCommand:Hce}=require("@aws-sdk/client-s3");_$.exports={getFileStreamFromS3:Gce,getS3AuthObj:E$};async function Gce(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await E$(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Hce(r))).Body}a(Gce,"getFileStreamFromS3");function E$(e,t,r){return new kce({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(E$,"getS3AuthObj")});var S$=x((EUe,g$)=>{"use strict";var _C=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},gC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};g$.exports={BulkLoadFileObject:_C,BulkLoadDataObject:gC}});var y$=x((gUe,T$)=>{"use strict";var SC=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};T$.exports=SC});var b$=x((TUe,R$)=>{"use strict";var TC=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};R$.exports=TC});var RC=x((RUe,I$)=>{"use strict";var A$=y$(),qce=b$(),{HDB_ERROR_MSGS:$ce}=En(),yC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=$ce.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new A$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new qce(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new A$(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};I$.exports=yC});var Dd=x((AUe,O$)=>{"use strict";var Qp=ee(),{validateBySchema:w$}=ht(),ca=require("joi"),Vce=sa(),US=ue(),{handleHDBError:xS,hdbErrors:Kce,ClientError:N$}=ge(),{HDB_ERROR_MSGS:BS,HTTP_STATUS_CODES:bC}=Kce,C$=fe();C$.initSync();var{getDatabases:AC}=(Oe(),D(Et)),Yce=require("fs-extra"),Wce=($(),D(z));O$.exports={describeAll:jce,describeTable:FS,describeSchema:zce};async function jce(e={}){try{let t=US.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=AC(),o={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){o[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await FS({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let _=n[m].tables[h].attribute_permissions;E=await FS({schema:m,table:h,exact_count:u,include_computed:d},_)}E&&l.push(E)}catch(E){Qp.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]):c[l[m].schema]&&(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]);for(let m in o)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return Qp.error("Got an error in describeAll"),Qp.error(t),xS(new Error,BS.DESCRIBE_ALL_ERR)}}a(jce,"describeAll");async function FS(e,t){US.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=w$(e,ca.object({database:ca.string(),table:ca.string().required(),exact_count:ca.boolean().strict(),include_computed:ca.boolean().strict()}));if(i)throw new N$(i.message);let c=AC()[r];if(!c)throw xS(new Error,BS.SCHEMA_NOT_FOUND(e.schema),bC.NOT_FOUND);let l=c[n];if(!l)throw xS(new Error,BS.TABLE_NOT_FOUND(e.schema,e.table),bC.NOT_FOUND);function u(p){(!p.computed||e.include_computed)&&d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,computed:p.computed?!0:void 0,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await Yce.stat(l.primaryStore.env.path)).size}catch(p){Qp.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),C$.get(Wce.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Vce.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){Qp.warn(`unable to stat table dbi due to ${p}`)}return m}a(FS,"descTable");async function zce(e){US.transformReq(e);let t=w$(e,ca.object({database:ca.string(),exact_count:ca.boolean().strict(),include_computed:ca.boolean().strict()}));if(t)throw new N$(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=AC()[n];if(!i)throw xS(new Error,BS.SCHEMA_NOT_FOUND(e.schema),bC.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),US.isEmpty(l)||l.describe){let u=await FS({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(zce,"describeSchema")});var M$=x((wUe,v$)=>{"use strict";var Qce=Dd(),{hdbErrors:P$}=ge(),{getDatabases:L$}=(Oe(),D(Et));v$.exports={checkSchemaExists:D$,checkSchemaTableExists:Jce,schemaDescribe:Qce};async function D$(e){if(!L$()[e])return P$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(D$,"checkSchemaExists");async function Jce(e,t){let r=await D$(e);if(r)return r;if(!L$()[e][t])return P$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Jce,"checkSchemaTableExists")});function IC(e){let t=e.get(kS),r=t?(0,vd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=rt();r.nodeName=rt();let s=r.remoteNameToId;if(s[n]!==0){let i=0,o;for(let c in s){let l=s[c];l===0?o=c:l>i&&(i=l)}if(o){i++,s[o]=i;let c=[Symbol.for("seq"),i];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(c)||e.rootStore.dbisDb.putSync(c,{seqId:Xp(e)??1,nodes:[]})})}s[n]=0,e.putSync(kS,(0,vd.pack)(r))}return r}function Jp(e){return IC(e).remoteNameToId}function x$(e,t){let r=IC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(kS,(0,vd.pack)(r)),s}function HS(e,t){let r=IC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(kS,(0,vd.pack)(r))}return U$.trace?.("The remote node name map",e,n,s),s}var U$,vd,kS,wC=ie(()=>{U$=b(pr());Ss();vd=require("msgpackr"),kS=Symbol.for("remote-ids");a(IC,"getIdMappingRecord");a(Jp,"exportIdMapping");a(x$,"remoteToLocalNodeId");a(HS,"getIdOfRemoteNode")});function OC(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=F$,Xce(e.primaryStore,e.auditStore)):(c=B$,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{k$(B$[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=gd(t);let d=new CC(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function k$(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),H$(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=wt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=gd(c),u=0;do{let d=o.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,NC.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,NC.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Xce(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",()=>{let i=F$[s];if(!i)return;let o=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),i.txnTime=r.threadLocalWrites[0]||Date.now();try{k$(i)}finally{r.threadLocalWrites[0]=i.lastTxnTime,r.unlock("thread-local-writes",0)}},"acquiredLock");r.attemptLock("thread-local-writes",0,o)&&o()})}}function H$(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function G$(e){return e.nextTransaction||(OC({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),H$(e)),e.nextTransaction}var NC,B$,F$,CC,PC=ie(()=>{NC=b(ee());$u();fc();Wi();B$=Object.create(null),F$=Object.create(null);a(OC,"addSubscription");CC=class extends is{static{a(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(k$,"notifyFromTransactionData");a(Xce,"listenToCommits");a(H$,"nextTransaction");a(G$,"whenNextTransaction")});var W$={};Re(W$,{commitsAwaitingReplication:()=>Md,getHDBNodeTable:()=>Yt,getReplicationSharedStatus:()=>Ud,iterateRoutes:()=>eh,shouldReplicateToNode:()=>Zp,subscribeToNodeUpdates:()=>xd});function Yt(){return q$||(q$=Qe({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Ud(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function xd(e){Yt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;Y$.debug?.("adding node",n,"on node",rt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==rt()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Yt().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Zp(e,t){let r=hc.default.get(U.REPLICATION_DATABASES);return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&(r==="*"||r?.find?.(n=>(typeof n=="string"?n:n.name)===t&&(!n.sharded||e.shard===hc.default.get(U.REPLICATION_SHARD))))&&Yt().primaryStore.get(rt())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function Zce(){xd(e=>{Ec({},(t,r)=>{let n=e.name,s=$$.get(n);if(s||$$.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=Ud(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of Md.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*eh(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=hc.default.get(U.REPLICATION_SECUREPORT)??(!hc.default.get(U.REPLICATION_PORT)&&hc.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||hc.default.get(U.REPLICATION_PORT)||hc.default.get(U.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){V$.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:t.replicates??!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var V$,K$,hc,Y$,q$,$$,Md,Bd=ie(()=>{Oe();Ss();Om();V$=require("worker_threads"),K$=b(ge()),hc=b(fe());$();Y$=b(pr());server.nodes=[];a(Yt,"getHDBNodeTable");a(Ud,"getReplicationSharedStatus");a(xd,"subscribeToNodeUpdates");a(Zp,"shouldReplicateToNode");$$=new Map;fx((e,t,r)=>{if(r>server.nodes.length)throw new K$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Md||(Md=new Map,Zce());let n=Md.get(e);return n||(n=[],Md.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Zce,"startSubscriptionToReplications");a(eh,"iterateRoutes")});var eV={};Re(eV,{connectedToNode:()=>vl,disconnectedFromNode:()=>kd,ensureNode:()=>la,requestClusterStatus:()=>Z$,startOnMainThread:()=>LC});async function LC(e){let t=0,r=dt();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){GS.set(o,Xp(u.auditStore));break}}}Ri.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=rt();function l(){let u=Yt().primaryStore.get(c);if(u!==null){let d=e.url??_c();if(u===void 0||u.url!==d||u.shard!==e.shard)return la(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Yt().primaryStore.get(c)&&l();for(let u of eh(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),j$.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}xd(s)});let n;function s(o,c=o?.name){let l=rt()&&c===rt()||_c()&&o?.url===_c();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Yt().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(at.trace("Setting up node replication for",o),!o){for(let[m,p]of co){let h;for(let[E,{nodes:_}]of p){let R=_[0];if(R&&R.name==c){h=!0;for(let[S,{worker:y}]of p)p.delete(S),at.warn("Node was deleted, unsubscribing from node",c,S,m),y?.postMessage({type:"unsubscribe-from-node",node:c,nodes:_,database:S,url:m});break}}if(h){co.get(m).iterator.remove(),co.delete(m);return}}return}if(l)return;if(!o.url){at.info(`Node ${o.name} is missing url`);return}let u=co.get(o.url);if(u&&u.iterator.remove(),!(o.replicates===!0||o.replicates?.sends)&&!o.subscriptions?.length&&!u)return;if(at.info(`Added node ${o.name} at ${o.url} for process ${rt()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of Fd)if(o.url===p.url){Fd.delete(m);break}Fd.set(o.name,o)}let d=dt();if(u||(u=new Map,co.set(o.url,u)),u.iterator=Ec(e,(m,p,h)=>{h?f(p,!0):f(p,!1)}),o.subscriptions)for(let m of o.subscriptions){let p=m.database||m.schema;d[p]||(at.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){at.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,_=[{replicateByDefault:p,...o}];GS.has(m)&&th.default.get(U.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:p,name:rt(),startTime:GS.get(m),endTime:Date.now(),replicates:!0}),GS.delete(m));let R=Zp(o,m),S=Ri.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=_,R)return}else R&&(t=t%S.length,E=S[t++],E||at.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:_,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=ele.HDB_LEADER_URL??process.env.HDB_LEADER_URL??j$[0]?.url,I=y?new URL(y).hostname:Array.from(Yt().primaryStore.getKeys({}).filter(P=>P!==rt()))[0],w=_[0].name??(_[0].url&&new URL(_[0].url).hostname);at.warn(`Setting up subscription with leader ${I} for node ${w}`),_[0].isLeader=!I||w===I,setTimeout(()=>{let P={..._[0],type:"subscribe-to-node",database:m,nodes:_};E?E.postMessage(P):rh(P)},tle)}else{at.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:Yt().primaryStore.get(rt())?.replicates}),Yt().primaryStore.get(rt())?.replicates||(n=!1,at.info("Disabling replication, this node name",rt(),Yt().primaryStore.get(rt()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:_};E?E.postMessage(y):$S(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),kd=a(function(o){try{at.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(Fd.keys()),l=c.sort(),u=l.indexOf(o.name||bi(o.url));if(u===-1){at.warn("Disconnected node not found in node map",o.name,c);return}let d=co.get(o.url),f=d?.get(o.database);if(!f){at.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!th.default.get(U.REPLICATION_FAILOVER))return;let m=f.nodes[0];if(!(m.replicates===!0||m.replicates?.sends||m.subscriptions?.length))return;let p=m.shard,h=(u+1)%l.length;for(;u!==h;){let E=l[h],_=Fd.get(E);d=co.get(_.url);let R=d?.get(o.database);if(!R||R.connected===!1||R.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=R,y=!1;for(let I of f.nodes){if(S.some(w=>w.name===I.name)){at.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}I.endTime<Date.now()||(S.push(I),at.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(I,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||at.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}at.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){at.error("Error failing over node",c)}},"disconnectedFromNode"),vl=a(function(o){let c=co.get(o.url),l=c?.get(o.database);if(!l){at.warn("Connected node not found in replication map, this may be because the node is being removed",o.database,c);return}l.connected=!0,l.latency=o.latency;let u=l.nodes[0];if(!u){at.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){at.debug("Connected node is not named yet",o.database,l);return}if(th.default.get(U.REPLICATION_FAILOVER)){l.nodes=[u];for(let d of co.values()){let f=d.get(o.database);if(!f||f==l)continue;let{nodes:m,connected:p}=f;if(m)if(p===!1&&m[0].shard===u.shard&&o.url===u.url)for(let h of m)i(h,o.database);else{let h=m.filter(E=>{if(E)return E.name===u.name&&E.worker?(E.worker.postMessage({type:"unsubscribe-to-node",database:o.database,url:o.url,nodes:[E]}),!1):!0});h.length<m.length&&(f.nodes=h)}}}},"connectedToNode");function i(o,c,l=o){let u=Ri.workers.filter(f=>f.name==="http");t=t%u.length;let d=u[t++];Object.defineProperty(o,"worker",{value:d,configurable:!0}),d?d.postMessage({url:l.url,name:l.name,type:"subscribe-to-node",database:c,nodes:[o]}):rh({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,Ri.onMessageByType)("disconnected-from-node",kd),(0,Ri.onMessageByType)("connected-to-node",vl),(0,Ri.onMessageByType)("request-cluster-status",Z$)}function Z$(e,t){let r=[];for(let[n,s]of Fd)try{let i=co.get(s.url);at.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)o.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=Q$(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){at.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function la(e,t){let r=Yt();e=e??bi(t.url),t.name=e;try{if(t.ca){let s=new J$.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){at.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(at.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!th.default.get(U.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=Q$(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}at.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Ri,qS,at,z$,th,J$,X$,Q$,ele,tle,co,kd,vl,Fd,GS,j$,nh=ie(()=>{Oe();Ri=b(ot());Ss();qS=require("worker_threads");Bd();at=b(ee()),z$=b(require("lodash")),th=b(fe());$();J$=require("crypto"),X$=b(require("minimist")),{cloneDeep:Q$}=z$.default,ele=(0,X$.default)(process.argv),tle=200,co=new Map,Fd=new Map,GS=new Map,j$=[];a(LC,"startOnMainThread");a(Z$,"requestClusterStatus");qS.parentPort&&(kd=a(e=>{qS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),vl=a(e=>{qS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Ri.onMessageByType)("subscribe-to-node",e=>{rh(e)}),(0,Ri.onMessageByType)("unsubscribe-from-node",e=>{$S(e)}));a(la,"ensureNode")});var tV=x(Rn=>{"use strict";var rle={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
14
14
|
`),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
15
15
|
`)},nle="certificate.pem",sle="privateKey.pem",ile="caCertificate.pem",ole="natsCertificate.pem",ale="natsCaCertificate.pem",Ut={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},cle={tls_certificate:Ut.SERVER,tlsCertificateAuthority:Ut.CA,customFunctions_tls_certificate:Ut.SERVER,customFunctionsTlsCertificateAuthority:Ut.CA,operationsApi_tls_certificate:Ut["OPERATIONS-API"],operationsApiTlsCertificateAuthority:Ut["OPERATIONS-CA"]},lle={[Ut.SERVER]:2,[Ut.DEFAULT]:1},ule={[Ut["OPERATIONS-API"]]:3,[Ut.SERVER]:2,[Ut.DEFAULT]:1},dle={[Ut["OPERATIONS-API"]]:3,[Ut.SERVER]:2,[Ut.DEFAULT]:1},fle={[Ut["OPERATIONS-CA"]]:3,[Ut.CA]:2,[Ut["DEFAULT-CA"]]:1},mle={[Ut["OPERATIONS-CA"]]:3,[Ut.CA]:2,[Ut["DEFAULT-CA"]]:1},ple={[Ut.CA]:2,[Ut["DEFAULT-CA"]]:1};Rn.CERTIFICATE_PEM_NAME=nle;Rn.PRIVATEKEY_PEM_NAME=sle;Rn.CA_PEM_NAME=ile;Rn.CERT_NAME=Ut;Rn.CERT_CONFIG_NAME_MAP=cle;Rn.CERT_PREFERENCE_APP=lle;Rn.CERT_PREFERENCE_OPS=ule;Rn.CERT_PREFERENCE_REP=dle;Rn.CA_CERT_PREFERENCE_REP=fle;Rn.CA_CERT_PREFERENCE_OPS=mle;Rn.CA_CERT_PREFERENCE_APP=ple;Rn.CERTIFICATE_VALUES=rle;Rn.NATS_CERTIFICATE_PEM_NAME=ole;Rn.NATS_CA_PEM_NAME=ale});var ys=x(Wt=>{"use strict";var Tr=require("path"),{watch:oV}=require("chokidar"),Yn=require("fs-extra"),Hd=require("node-forge"),hle=require("net"),{generateKeyPair:DC,X509Certificate:ua,createPrivateKey:aV,randomBytes:Ele}=require("node:crypto"),_le=require("util");DC=_le.promisify(DC);var St=Hd.pki,Ai=require("joi"),{v4:cV}=require("uuid"),{validateBySchema:BC}=ht(),{forComponent:gle}=ee(),Ts=fe(),$s=($(),D(z)),{CONFIG_PARAMS:xl}=$s,Ii=tV(),{ClientError:Ul}=ge(),YS=require("node:tls"),{relative:lV,join:Sle}=require("node:path"),{CERTIFICATE_VALUES:rV}=Ii,Tle=Hu(),KS=Nt(),{table:yle,getDatabases:Rle,databases:VS}=(Oe(),D(Et)),{getJWTRSAKeys:ble}=(Od(),D(jp)),Ye=gle("tls").conditional;Wt.generateKeys=GC;Wt.updateConfigCert=EV;Wt.createCsr=Lle;Wt.signCertificate=Dle;Wt.setCertTable=Gd;Wt.loadCertificates=HC;Wt.reviewSelfSignedCert=$C;Wt.createTLSSelector=gV;Wt.listCertificates=SV;Wt.addCertificate=Fle;Wt.removeCertificate=Hle;Wt.createNatsCerts=Ule;Wt.generateCertsKeys=Mle;Wt.getReplicationCert=ih;Wt.getReplicationCertAuth=Ole;Wt.renewSelfSigned=xle;Wt.hostnamesFromCert=YC;Wt.getKey=Gle;Wt.getHostnamesFromCertificate=qle;Wt.getPrimaryHostName=KC;Wt.generateSerialNumber=QS;var{urlToNodeName:uV,getThisNodeUrl:Ale,getThisNodeName:zS,clearThisNodeName:Ile,replicateOperation:dV}=(Ss(),D(fa)),{readFileSync:wle,statSync:fV}=require("node:fs"),{getTicketKeys:Nle,onMessageFromWorkers:Cle}=ot(),{isMainThread:vC}=require("worker_threads"),{TLSSocket:mV}=require("node:tls"),FC=3650,sh=["127.0.0.1","localhost","::1"],kC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function QS(){let e=Ele(8);return e[0]=e[0]&127|1,e.toString("hex")}a(QS,"generateSerialNumber");Cle(async e=>{e.type===$s.ITC_EVENT_TYPES.RESTART&&(Ts.initSync(!0),await $C())});var on;function da(){return on||(on=Rle().system.hdb_certificate,on||(on=yle({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),on}a(da,"getCertTable");async function ih(){let e=gV("replication"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(zS());if(!r)return;let n=new ua(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(ih,"getReplicationCert");async function Ole(){da();let e=(await ih()).options.cert,r=new ua(e).issuer.match(/CN=(.*)/)?.[1];return on.get(r)}a(Ole,"getReplicationCertAuth");var MC,Bl=new Map,WS=[],nV;function HC(){if(MC)return;if(MC=!0,!nV&&vC){let n=KS.getConfigFilePath();nV=oV(n,{persistent:!1}).on("change",()=>{Ye.warn?.("Config file changed, reloading certificates"),Ple()})}let e=[{configKey:xl.TLS},{configKey:xl.OPERATIONSAPI_TLS}];da();let t=Tr.dirname(KS.getConfigFilePath()),r;for(let{configKey:n}of e){let s=KS.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&lV(Sle(t,"keys"),o);if(c){let l=sV(o,u=>{Bl.set(c,u)},"private key");l&&WS.push(l)}for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&vC){let d=sV(u,f=>{if(rV.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=_V(u),h=new ua(p),E;try{E=!l&&i.name||KC(h)}catch(w){Ye.error?.("error extracting host name from certificate",w);return}if(E==null){Ye.error?.("No host name found on certificate");return}if(h.checkIssued(new ua(rV.cert)))return;let _=on.primaryStore.get(E),R=fV(u).mtimeMs,S=!_||_.is_self_signed?1:_.fileTimestamp??_.__updatedtime__,y=i.uses??["https",...n.includes("operations")?["operations"]:[]],I=_&&R===S&&(JSON.stringify(_.uses)!==JSON.stringify(y)||_.ciphers!==i.ciphers||JSON.stringify(_.hostnames)!==JSON.stringify(m));if(_&&R<=S&&!I){R<S&&Ye.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}I&&Ye.info?.(`Config values changed for certificate ${E}, updating record`),r=on.put({name:E,uses:y,ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate");d&&WS.push(d)}}}}}return r}a(HC,"loadCertificates");function Ple(){for(let e of WS)e.close();WS.length=0,MC=!1,HC()}a(Ple,"reloadCertificates");function sV(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&vC&&Ye.warn?.(`Reloading ${r}:`,i),n=c,t(_V(i)))}catch(c){Ye.error?.(`Error loading ${r}:`,i,c)}},"loadFile");return Yn.existsSync(e)?s(e,fV(e)):Ye.error?.(`${r} file not found:`,e),oV(e,{persistent:!1}).on("change",s)}a(sV,"loadAndWatch");function UC(){let e=Ale();if(e==null){let t=sh[0];return Ye.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return uV(e)}a(UC,"getHost");function jS(){let e=zS();if(e==null){let t=sh[0];return Ye.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(jS,"getCommonName");async function Lle(){let e=da(),t,r,n,s;for await(let l of e.search([]))if(l.is_self_signed&&!l.is_authority){let u=await VC(l.private_key_name);if(u){t=St.certificateFromPem(l.certificate),r=St.privateKeyFromPem(u),n=l.name,s=l.private_key_name;break}}if(!t||!r){let l=await ih();t=St.certificateFromPem(l.options.cert),r=St.privateKeyFromPem(l.options.key),n=l.name,s=l.options.key_file}Ye.info?.("Creating CSR with cert named:",n);let i=St.createCertificationRequest();i.publicKey=t.publicKey;let o=[{name:"commonName",value:jS()},...kC];Ye.info?.("Creating CSR with subject",o),i.setSubject(o);let c=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:pV()}];return Ye.info?.("Creating CSR with attributes",c),i.setAttributes(c),i.sign(r),{pem:Hd.pki.certificationRequestToPem(i),privateKeyName:s}}a(Lle,"createCsr");function pV(){let e=sh.includes(jS())?sh:[...sh,jS()];return e.includes(UC())||e.push(UC()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>hle.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(pV,"certExtensions");async function Dle(e){let t={},r=Tr.join(Ts.getHdbBasePath(),$s.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;da();for await(let d of on.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Bl.has(d.private_key_name)){n=Bl.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Yn.exists(Tr.join(r,d.private_key_name))){n=Yn.readFile(Tr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await xC();s=d.ca,n=d.private_key}n=St.privateKeyFromPem(n),t.signingCA=s.certificate;let i=St.certificateFromPem(s.certificate);Ye.info?.("Signing CSR with cert named",s.name);let o=St.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Ye.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Hd.pki.createCertificate();c.serialNumber=QS(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+FC),Ye.info?.("sign cert setting validity:",c.validity),Ye.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Ye.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Ye.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Hd.md.sha256.create()),t.certificate=St.certificateToPem(c)}else Ye.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Dle,"signCertificate");async function vle(e,t){await Gd({name:zS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Gd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:St.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(vle,"createCertificateTable");async function Gd(e){let t;try{t=new ua(e.certificate)}catch(r){Ye.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Ye.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},da(),await on.patch(e)}a(Gd,"setCertTable");async function GC(){let e=await DC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:St.publicKeyFromPem(e.publicKey),privateKey:St.privateKeyFromPem(e.privateKey)}}a(GC,"generateKeys");async function qC(e,t,r){let n=St.createCertificate();if(!t){let o=await ih();t=St.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=QS(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+FC);let i=[{name:"commonName",value:jS()},...kC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(pV()),n.sign(e,Hd.md.sha256.create()),St.certificateToPem(n)}a(qC,"generateCertificates");async function xC(){let e=await SV(),t;for(let r of e){if(!r.is_authority)continue;let n=await VC(r.private_key_name);if(r.private_key_name&&n&&new ua(r.certificate).checkPrivateKey(aV(n))){Ye.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Ye.trace?.("No CA found with matching private key")}a(xC,"getCertAuthority");async function hV(e,t,r=!0){let n=St.createCertificate();n.publicKey=t,n.serialNumber=QS(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+FC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ts.get(xl.REPLICATION_HOSTNAME)??uV(Ts.get(xl.REPLICATION_URL))??cV().split("-")[0]}`},...kC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,Hd.md.sha256.create());let o=Tr.join(Ts.getHdbBasePath(),$s.LICENSE_KEY_DIR_NAME),c=Tr.join(o,Ii.PRIVATEKEY_PEM_NAME);return r&&await Yn.writeFile(c,St.privateKeyToPem(e)),n}a(hV,"generateCertAuthority");async function Mle(){let{privateKey:e,publicKey:t}=await GC(),r=await hV(e,t),n=await qC(e,t,r);await vle(n,r),EV()}a(Mle,"generateCertsKeys");async function Ule(){let e=await qC(St.privateKeyFromPem(Ii.CERTIFICATE_VALUES.key),void 0,St.certificateFromPem(Ii.CERTIFICATE_VALUES.cert)),t=Tr.join(Ts.getHdbBasePath(),$s.LICENSE_KEY_DIR_NAME),r=Tr.join(t,Ii.NATS_CERTIFICATE_PEM_NAME);await Yn.exists(r)||await Yn.writeFile(r,e);let n=Tr.join(t,Ii.NATS_CA_PEM_NAME);await Yn.exists(n)||await Yn.writeFile(n,Ii.CERTIFICATE_VALUES.cert)}a(Ule,"createNatsCerts");async function xle(){da();for await(let e of on.search([{attribute:"is_self_signed",value:!0}]))await on.delete(e.name);await $C()}a(xle,"renewSelfSigned");async function $C(){Ile(),await HC(),da();let e=await xC();if(!e){Ye.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=a(u=>{try{return{key:St.privateKeyFromPem(Yn.readFileSync(u)),keyPath:u}}catch(d){return Ye.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ts.get(xl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=Ts.get(xl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=Tr.join(Ts.getHdbBasePath(),$s.LICENSE_KEY_DIR_NAME),c=lV(o,i);s||(Ye.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await GC(),Yn.existsSync(Tr.join(o,Ii.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${cV().split("-")[0]}.pem`),await Yn.writeFile(Tr.join(o,c),St.privateKeyToPem(s)));let l=await hV(s,St.setRsaPublicKey(s.n,s.e),!1);await Gd({name:l.subject.getField("CN").value,uses:["https"],certificate:St.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await ih()){let r=zS();Ye.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await xC();let n=St.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await qC(St.privateKeyFromPem(e.private_key),s,n);await Gd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a($C,"reviewSelfSignedCert");function EV(){let e=Tle(Object.keys($s.CONFIG_PARAM_MAP),!0),t=Tr.join(Ts.getHdbBasePath(),$s.LICENSE_KEY_DIR_NAME),r=Tr.join(t,Ii.PRIVATEKEY_PEM_NAME),n=Tr.join(t,Ii.NATS_CERTIFICATE_PEM_NAME),s=Tr.join(t,Ii.NATS_CA_PEM_NAME),i=$s.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r);let{filterArgsAgainstRuntimeConfig:c}=(Hg(),D(kg)),l=c(o);KS.updateConfigValue(void 0,void 0,l,!1,!0)}a(EV,"updateConfigCert");function _V(e){return e.startsWith("-----BEGIN")?e:wle(e,"utf8")}a(_V,"readPEM");var iV=YS.createSecureContext;YS.createSecureContext=function(e){if(!e.cert||!e.key)return iV(e);let t={...e};delete t.key,delete t.cert;let r=iV(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Ble=mV.prototype._init;mV.prototype._init=function(e,t){Ble.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Ml=new Map;function gV(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Ml.clear();let d=0;if(VS===void 0){c();return}for await(let f of VS.system.hdb_certificate.search([])){let m=f.certificate,p=new ua(m);f.is_authority&&(p.asString=m,Ml.set(p.subject,m))}for await(let f of VS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=f.is_self_signed?1:3;f.uses?.includes(e)&&(m+=1);let p=await VC(f.private_key_name),h=f.certificate,E=new ua(h);if(Ml.has(E.issuer)&&(h+=`
|