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(VI,"asyncSerialization");a(KI,"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:()=>WI,decodeBlobsWithWrites:()=>yg,decodeFromDatabase:()=>ra,decodeWithBlobCallback:()=>ap,deleteBlob:()=>gg,deleteBlobsInObject:()=>nc,deleteRootBlobPathsForDB:()=>QI,encodeBlobsAsBuffers:()=>Ene,encodeBlobsWithFilePath:()=>Tg,findBlobsInObject:()=>hl,getFileId:()=>Sg,getFilePathForBlob:()=>ZF,getRootBlobPathsForDB:()=>sd,isSaving:()=>une,saveBlob:()=>op,setDeletionDelay:()=>lne,startPreCommitBlobsForRecord:()=>JI});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?YI(e,r.source,r):r.contentBuffer?dne(e,r):YI(e,rc.Readable.from(e.stream()),r),r}function YI(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?zI: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=WI.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)],WI.set(e,t)}return t}async function QI(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,YI(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,jI.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,jI.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 JI(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,jI,ip,Qi,vt,jF,td,zF,Or,QF,zI,VF,one,ane,KF,$r,ta,Bs,ed,Xr,kn,El,sp,hg,cne,YF,rd,XF,WI,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"),jI=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,zI=1,VF=255,one=new Uint8Array([0,QF,255,255,255,255,255,255]),ane=new Uint8Array([0,zI,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):(KI()&&VI(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]===zI?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(YI,"writeBlobWithStream");a(Sg,"getFileId");a(une,"isSaving");a(ZF,"getFilePathForBlob");WI=new Map;a(sd,"getRootBlobPathsForDB");a(QI,"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(JI,"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=XI(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=XI(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 XI(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=XI(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=UI[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,ZI=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(XI,"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:()=>rw});function nw({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=nw(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,ew,tw,uk,dk,Rne,bne,Ane,Ine,rw,mk=ie(()=>{ck=b(IF()),wg=b(Xu()),hi=b(ge());Oe();lk=b(Fm());$();ew=b(Wo()),tw=b(cs()),uk=b(ue());Ja();ZI();dk=b(ee()),{HDB_ERROR_MSGS:Rne}=hi.hdbErrors,bne="data",Ane=1e4,Ine=10,rw=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:nw(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}),ew.signalSchemaChange(new tw.SchemaEventMsg(process.pid,Y.CREATE_SCHEMA,t.schema))}async dropSchema(t){await sw(t.schema),ew.signalSchemaChange(new tw.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:nw(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(nw,"getSelect");a(ik,"getRecords");a(Ji,"getTable");a(ok,"createDeleteResponse");a(ak,"groupRecordsInHistory")});var fs=x((RDe,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((ADe,_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((wDe,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 ow=x((CDe,Ak)=>{var $ne=ht(),iw=require("joi"),{hdbTable:Vne,hdbDatabase:Rk}=Vo(),bk={schema:Rk,database:Rk,table:Vne},Kne={date:iw.date().iso().required()},Yne={timestamp:iw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ak.exports=function(e,t){let r=t==="timestamp"?{...bk,...Yne}:{...bk,...Kne},n=iw.object(r);return $ne.validateBySchema(e,n)}});var Nk=x((ODe,wk)=>{var Wne=ht(),aw=require("joi"),{hdbTable:jne,hdbDatabase:Ik}=Vo(),zne=aw.object({schema:Ik,database:Ik,table:jne,hash_values:aw.array().required(),ids:aw.array()});wk.exports=function(e){return Wne.validateBySchema(e,zne)}});var dw=x((PDe,Ck)=>{"use strict";var cw=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}},lw=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}},uw=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Ck.exports={InsertObject:cw,NoSQLSeachObject:lw,DeleteResponseObject:uw}});var Al=x((DDe,vk)=>{"use strict";var Pk=ow(),Qne=Nk(),Rl=ue(),Ok=require("moment"),Lk=ee(),{promisify:Jne,callbackify:Xne}=require("util"),bl=($(),D(z)),Zne=Xi(),fw=Jne(Zne.getTableSchema),mw=fs(),{DeleteResponseObject:ese}=dw(),{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 mw.deleteRecordsBefore(e);if(await fw(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 mw.deleteAuditLogsBefore(e);return await fw(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 fw(e.schema,e.table);let n=await mw.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 gw={};Re(gw,{HASH_FUNCTION:()=>Vr,hash:()=>Ew,validate:()=>_w});function pw(e=dp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(up.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Ew(e,t=Vr[Uk?.toUpperCase()]??Vr.SHA256){return hw[t](e)}function _w(e,t,r=Vr[Uk?.toUpperCase()]??Vr.SHA256){return e?ose[r](e,t):!1}var up,od,Mk,Uk,dp,xk,Vr,hw,ose,Sw=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(pw,"generateSalt");hw={[Vr.MD5]:(e,t=void 0)=>{t=t??pw(xk);let r=up.createHash(Vr.MD5).update(e+t).digest("hex");return t+r},[Vr.SHA256]:(e,t=void 0)=>{t=t??pw(dp);let r=up.createHash(Vr.SHA256).update(e+t).digest("hex");return t+r},[Vr.ARGON2ID]:async e=>{let t=pw(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===hw[Vr.MD5](t,r)},[Vr.SHA256]:(e,t)=>{let r=e.slice(0,dp);return e===hw[Vr.SHA256](t,r)},[Vr.ARGON2ID]:async(e,t)=>await od.verify(e.slice(dp),t)};a(Ew,"hash");a(_w,"validate")});var Fk=x((xDe,Bk)=>{var Tw=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,Tw.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,Tw.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,Tw.validateObject(e,Sn)}a(lse,"dropUserValidation");Bk.exports={addUserValidation:ase,alterUserValidation:cse,dropUserValidation:lse}});var Jk=x((FDe,Qk)=>{"use strict";var yw=require("recursive-iterator"),use=require("alasql"),Rw=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"),bw=Symbol("validateTable"),Vk=Symbol("validateAllColumns"),Dg=Symbol("findColumn"),Kk=Symbol("validateOrderBy"),fp=Symbol("validateSegment"),Aw=Symbol("validateColumn"),Yk=Symbol("setColumnsForTable"),Wk=Symbol("checkColumnsForAsterisk"),jk=Symbol("validateGroupBy"),zk=Symbol("hasColumns"),Iw=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[bw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[bw](t.table)})}}[zk](){let t=!1,r=new yw(this.statement);for(let{node:n}of r)if(n&&n.columnid){t=!0;break}return t}[bw](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=Rw(s);i.table=Rw(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 yw(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 yw(t),s=[];for(let{node:i}of n)!kk.isEmpty(i)&&!kk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Kk](i):s.push(this[Aw](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=Rw(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[Aw](t)}[Aw](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=Iw});var tH=x((HDe,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((qDe,rH)=>{"use strict";var hr=require("moment"),ww="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(ww),"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(ww),"get_server_time"),offset_utc:a((e,t)=>hr(e).utc().utcOffset(t).format(ww),"offset_utc")}});var aH=x((VDe,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((YDe,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((WDe,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 Nw=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=Nw});var $n=x((zDe,mH)=>{"use strict";mH.exports={searchByConditions:Fse,searchByHash:kse,searchByValue:Hse,search:Gse};var Cw=fs(),{transformReq:Ow}=ue();async function Fse(e){return Ow(e),Cw.searchByConditions(e)}a(Fse,"searchByConditions");async function kse(e){Ow(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Cw.searchByHash(e))r&&t.push(r);return t}a(kse,"searchByHash");async function Hse(e){Ow(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Cw.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((JDe,_H)=>{"use strict";var Ep=require("crypto"),qse=fe(),{CONFIG_PARAMS:$se}=($(),D(z)),hH="aes-256-cbc",Vse=32,Kse=16,Pw=64,EH=32,Yse=Pw+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,Pw),r=e.substr(Pw,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((ZDe,SH)=>{"use strict";var Qse="nats-server.zip",Lw="nats-server",Jse=process.platform==="win32"?`${Lw}.exe`:Lw,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:Lw,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 vw=x((tve,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(),Dw=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,Dw.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(!Dw.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Dw.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,Mw=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 xw(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=Uw.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=Uw.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]):xw(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)xw(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]):xw(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,Uw,LH,DH,ld,Hg=ie(()=>{ac=b(require("fs-extra")),Uw=b(require("node:path")),LH=b(require("node:crypto"));Mw();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(xw,"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}=vw(),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}=(Mw(),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=Hw;ar.getClusteringRoutes=roe;ar.initOldConfig=qH;ar.getConfigFromFile=noe;ar.getConfigFilePath=Nl;ar.addConfig=soe;ar.deleteConfigFromFile=ioe;ar.getConfigObj=ooe;ar.resolvePath=Bw;ar.getFlatConfigObj=aoe;function Bw(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(Bw,"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=Fw(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}),kw(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 Bw(Es.join(t,Fs.HDB_CONFIG_FILE));let r=UH(e);return Bw(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),kw(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 kw(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(kw,"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=Fw(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 _=Fw(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),kw(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 Fw(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(Fw,"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 Hw(){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(Hw,"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=Hw(),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=Hw();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:()=>jw,alterUser:()=>zw,dropUser:()=>Qw,findAndValidateUser:()=>md,getClusterUser:()=>Soe,getSuperUser:()=>Ap,getUsersWithRolesCache:()=>goe,listUsers:()=>Wg,listUsersExternal:()=>Xw,setUsersWithRolesCache:()=>Si,userInfo:()=>Jw});async function jw(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=Yw.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(Kw.debug(s),await Si(),s.skipped_hashes.length===1)throw new gi(fd.USER_ALREADY_EXISTS(t.username),ia.CONFLICT);return await Vw.signalUserChange(new Ww(process.pid)),`${t.username} successfully added`}async function zw(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=Yw.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 Vw.signalUserChange(new Ww(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 Qw(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 Kw.debug(r),await Si(),await Vw.signalUserChange(new Ww(process.pid)),`${e.username} successfully deleted`}async function Jw(e){if(!e||!e.hdb_user)return"There was no user info in the body";let t=$w.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 Xw(){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]=$w.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=$w.cloneDeep(s),s.role=t[s.role],_oe(s.role),n.set(s.username,s);return n}function _oe(e){if(!e){Kw.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(Gw.GENERIC_AUTH_FAIL,ia.UNAUTHORIZED)}if(n&&!n.active)throw new gi(Gw.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(Gw.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(qw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(r==null||r?.role?.role!==qw.ROLE_TYPES_ENUM.CLUSTER_USER)return;let n=Yw.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,Vw,to,XH,Kw,loe,Yw,qw,$H,uoe,doe,foe,moe,gi,ia,Gw,fd,Ww,$w,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=(Sw(),D(gw)),JH=Fk(),bp=$n(),Vw=Wo(),to=ue(),XH=require("validate.js"),Kw=ee(),{promisify:loe}=require("util"),Yw=sa(),qw=($(),D(z)),$H=Er(),uoe=Nt(),doe=fe(),foe=ul(),{hdbErrors:moe,ClientError:gi}=ge(),{HTTP_STATUS_CODES:ia,AUTHENTICATION_ERROR_MSGS:Gw,HDB_ERROR_MSGS:fd}=moe,{UserEventMsg:Ww}=cs(),$w=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(qw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Rp.HASH_FUNCTION.SHA256;a(jw,"addUser");a(zw,"alterUser");a(Eoe,"isClusterUser");a(Qw,"dropUser");a(Jw,"userInfo");a(Xw,"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((lve,nG)=>{"use strict";var gs=ee(),Tn=($(),D(z)),Toe=kx(),yoe=(_s(),D(no)),{validateEvent:Zw}=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=Zw(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=Zw(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=Zw(e);if(t){gs.error(t);return}gs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(wp(),D(eN)),{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((dve,iG)=>{"use strict";var tN=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")||tN.isEmpty(e.type))return Np.MISSING_TYPE;if(!e.hasOwnProperty("message")||tN.isEmpty(e.message))return Np.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||tN.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,rN,pd,nN,hd,sN,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)}},rN=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}},nN=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}},sN=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,iN=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(()=>{OA();Vu();iN();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 oN(e),cG.set(e,t)),t}function uG(){gr.reset()}var oN,cG,so,dG,fG=ie(()=>{Xg();Vu();oN=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:()=>nN,COMPONENT_STATUS_LEVELS:()=>Le,ComponentStatus:()=>Ku,ComponentStatusError:()=>lc,ComponentStatusOperationError:()=>hd,ComponentStatusRegistry:()=>dc,CrossThreadCollectionError:()=>sN,CrossThreadStatusCollector:()=>Cp,CrossThreadTimeoutError:()=>rN,ITCError:()=>pd,StatusAggregator:()=>Ed,componentStatusRegistry:()=>gr,crossThreadCollector:()=>Qg,query:()=>Boe});var Boe,mG=ie(()=>{Xg();Jg();OA();Jg();iN();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 eN={};Re(eN,{STATUS:()=>dG,internal:()=>Op,lifecycle:()=>so,reset:()=>uG,statusForComponent:()=>lG});var wp=ie(()=>{fG();mG()});var dN={};Re(dN,{DEFAULT_STATUS_ID:()=>Lm,STATUS_IDS:()=>H_,Status:()=>oa,clear:()=>cN,get:()=>lN,set:()=>uN});function Lp(){return aN||(aN=Qe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),aN}function cN({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=fN();return{systemStatus:e,componentStatus:r,restartRequired:n}}function lN({id:e}){return e?(Pp.debug?.("getStatus",e),Lp().get(e)):(Pp.debug?.("getStatus","all"),koe())}function uN({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,aN,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(cN,"clearStatus");a(koe,"getAllStatus");a(lN,"getStatus");a(uN,"setStatus")});var hG={};Re(hG,{requestRestart:()=>hN,resetRestartNeeded:()=>Hoe,restartNeeded:()=>fN});function pN(){mN||(mN=oa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),tS=new Uint8Array(mN))}function hN(){pN(),tS[0]=1}function fN(){return pN(),tS[0]===1}function Hoe(){pN(),tS[0]=0}var mN,tS,eS=ie(()=>{Dp();a(pN,"ensureInitialized");a(hN,"requestRestart");a(fN,"restartNeeded");a(Hoe,"resetRestartNeeded")});var Pl,EN=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 _N={};Re(_N,{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();EN();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 TN={};Re(TN,{loadGQLSchema:()=>Voe,start:()=>SN,startOnMainThread:()=>$oe});function SN({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,gN.dirname)(n),h.tableClass):i.set((0,gN.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 gN,gG,SG,qoe,$oe,Voe,TG=ie(()=>{gN=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(SN,"start");$oe=SN,Voe=a(e=>SN({ensureTable:Qe}).handleFile(e,null,null,new _d),"loadGQLSchema")});var bN={};Re(bN,{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 RN(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:RN(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:RN(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 RN(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){yN.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:yN.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,yN,Kr,io,PG=ie(()=>{He=b(require("graphql"));ea();fc();yN=b(ee());a(Koe,"assertExecutableDefinitionNode");a(yG,"assertRequestParams");a(RN,"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((cMe,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,AN=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=AN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,MG(e,t)}a(cae,"addRoleValidation");function lae(e){let t=AN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,MG(e,t)}a(lae,"alterRoleValidation");function uae(e){let t=AN();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((uMe,HG)=>{"use strict";var BG=ms(),FG=$n(),pae=Al(),wN=xG(),NN=Wo(),hae=require("util"),nS=($(),D(z)),Eae=ue(),CN=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:ON}=cs();HG.exports={addRole:Rae,alterRole:bae,dropRole:Aae,listRoles:Iae};function IN(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(IN,"scrubRoleDetails");async function Rae(e){let t=wN.addRoleValidation(e);if(t)throw t;e=IN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await CN(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),NN.signalUserChange(new ON(process.pid)),e=IN(e),e}a(Rae,"addRole");async function bae(e){let t=wN.alterRoleValidation(e);if(t)throw t;e=IN(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 NN.signalUserChange(new ON(process.pid)),e}a(bae,"alterRole");async function Aae(e){let t=wN.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 CN(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),NN.signalUserChange(new ON(process.pid)),`${n[0].role} successfully deleted`}a(Aae,"dropRole");async function Iae(){return CN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Iae,"listRoles")});var PN={};Re(PN,{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,LN=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 DN={};Re(DN,{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(()=>{LN();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 MN={};Re(MN,{start:()=>Uae});function Uae({resources:e}){e.set("login",vN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var vN,XG=ie(()=>{oo();a(Uae,"start");vN=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 UN||(UN=Qe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),UN}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,xN,UN,xae,BN=ie(()=>{Oe();ZG=b(require("crypto")),eq=require("node:net"),xN=new Map;a(aS,"getAnalyticsHostnameTable");xae=/(\d{1,3}\.){3}\d{1,3}$/;a(Bae,"normalizeIPv6");a(Fae,"nodeHashToNumber");a(xp,"stableNodeId")});var aa,FN=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:()=>HN,userCodeFolders:()=>cS});async function HN(e){let r=iq/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=kN.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;HN(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,kN,sq,tq,cS,iq,aq=ie(()=>{Kn();Bp=b(fe());$();rq=b(Dt()),nq=require("node:fs"),kN=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;kN.time.start({intervalMicros:iq});let e=((0,Bp.get)(U.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{HN(e)},e).unref()})();a(HN,"captureProfile")});var dS={};Re(dS,{addAnalyticsListener:()=>Gp,analyticsDelay:()=>VN,calculateCPUUtilization:()=>wq,diffResourceUsage:()=>Nq,onAnalyticsAggregate:()=>WN,recordAction:()=>qe,recordActionBinary:()=>nn,recordHostname:()=>KN,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(){GN||=performance.now(),kp=setTimeout(async()=>{kp=null;let e=performance.now()-GN;GN=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})},VN).unref()}async function KN(){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=xN.get(e);return t?(rn.trace?.("storeMetric cached nodeId:",t),t):(t=xp(e),rn.trace?.("storeMetric new nodeId:",t),xN.set(e,t),t)}function Rd(e,t){let r=Iq(Ue.hostname),n={id:[(0,$N.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=YN(),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 YN(){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(VN,e),await fq(YN(),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,$N.getNextMonotonicTime)(),YN().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,qN.open)((0,Fp.join)(r,"analytics.log"),"r+")}catch{mc=await(0,qN.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,iN=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(()=>{OA();Vu();iN();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 oN(e),cG.set(e,t)),t}function uG(){gr.reset()}var oN,cG,so,dG,fG=ie(()=>{Xg();Vu();oN=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:()=>nN,COMPONENT_STATUS_LEVELS:()=>Le,ComponentStatus:()=>Ku,ComponentStatusError:()=>lc,ComponentStatusOperationError:()=>hd,ComponentStatusRegistry:()=>dc,CrossThreadCollectionError:()=>sN,CrossThreadStatusCollector:()=>Cp,CrossThreadTimeoutError:()=>rN,ITCError:()=>pd,StatusAggregator:()=>Ed,componentStatusRegistry:()=>gr,crossThreadCollector:()=>Qg,query:()=>Boe});var Boe,mG=ie(()=>{Xg();Jg();OA();Jg();iN();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 eN={};Re(eN,{STATUS:()=>dG,internal:()=>Op,lifecycle:()=>so,reset:()=>uG,statusForComponent:()=>lG});var wp=ie(()=>{fG();mG()});var dN={};Re(dN,{DEFAULT_STATUS_ID:()=>Lm,STATUS_IDS:()=>H_,Status:()=>oa,clear:()=>cN,get:()=>lN,set:()=>uN});function Lp(){return aN||(aN=Qe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),aN}function cN({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=fN();return{systemStatus:e,componentStatus:r,restartRequired:n}}function lN({id:e}){return e?(Pp.debug?.("getStatus",e),Lp().get(e)):(Pp.debug?.("getStatus","all"),koe())}function uN({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,aN,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(cN,"clearStatus");a(koe,"getAllStatus");a(lN,"getStatus");a(uN,"setStatus")});var hG={};Re(hG,{requestRestart:()=>hN,resetRestartNeeded:()=>Hoe,restartNeeded:()=>fN});function pN(){mN||(mN=oa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),tS=new Uint8Array(mN))}function hN(){pN(),tS[0]=1}function fN(){return pN(),tS[0]===1}function Hoe(){pN(),tS[0]=0}var mN,tS,eS=ie(()=>{Dp();a(pN,"ensureInitialized");a(hN,"requestRestart");a(fN,"restartNeeded");a(Hoe,"resetRestartNeeded")});var Pl,EN=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 _N={};Re(_N,{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();EN();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 TN={};Re(TN,{loadGQLSchema:()=>Voe,start:()=>SN,startOnMainThread:()=>$oe});function SN({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,gN.dirname)(n),h.tableClass):i.set((0,gN.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 gN,gG,SG,qoe,$oe,Voe,TG=ie(()=>{gN=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(SN,"start");$oe=SN,Voe=a(e=>SN({ensureTable:Qe}).handleFile(e,null,null,new _d),"loadGQLSchema")});var bN={};Re(bN,{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 RN(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:RN(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:RN(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 RN(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){yN.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:yN.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,yN,Kr,io,PG=ie(()=>{He=b(require("graphql"));ea();fc();yN=b(ee());a(Koe,"assertExecutableDefinitionNode");a(yG,"assertRequestParams");a(RN,"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((cMe,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,AN=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=AN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,MG(e,t)}a(cae,"addRoleValidation");function lae(e){let t=AN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,MG(e,t)}a(lae,"alterRoleValidation");function uae(e){let t=AN();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((uMe,HG)=>{"use strict";var BG=ms(),FG=$n(),pae=Al(),wN=xG(),NN=Wo(),hae=require("util"),nS=($(),D(z)),Eae=ue(),CN=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:ON}=cs();HG.exports={addRole:Rae,alterRole:bae,dropRole:Aae,listRoles:Iae};function IN(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(IN,"scrubRoleDetails");async function Rae(e){let t=wN.addRoleValidation(e);if(t)throw t;e=IN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await CN(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),NN.signalUserChange(new ON(process.pid)),e=IN(e),e}a(Rae,"addRole");async function bae(e){let t=wN.alterRoleValidation(e);if(t)throw t;e=IN(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 NN.signalUserChange(new ON(process.pid)),e}a(bae,"alterRole");async function Aae(e){let t=wN.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 CN(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),NN.signalUserChange(new ON(process.pid)),`${n[0].role} successfully deleted`}a(Aae,"dropRole");async function Iae(){return CN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Iae,"listRoles")});var PN={};Re(PN,{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,LN=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 DN={};Re(DN,{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(()=>{LN();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 MN={};Re(MN,{start:()=>Uae});function Uae({resources:e}){e.set("login",vN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var vN,XG=ie(()=>{oo();a(Uae,"start");vN=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 UN||(UN=Qe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),UN}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,xN,UN,xae,BN=ie(()=>{Oe();ZG=b(require("crypto")),eq=require("node:net"),xN=new Map;a(aS,"getAnalyticsHostnameTable");xae=/(\d{1,3}\.){3}\d{1,3}$/;a(Bae,"normalizeIPv6");a(Fae,"nodeHashToNumber");a(xp,"stableNodeId")});var aa,FN=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:()=>HN,userCodeFolders:()=>cS});async function HN(e){let r=iq/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=kN.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;HN(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,kN,sq,tq,cS,iq,aq=ie(()=>{Kn();Bp=b(fe());$();rq=b(Dt()),nq=require("node:fs"),kN=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;kN.time.start({intervalMicros:iq});let e=((0,Bp.get)(U.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{HN(e)},e).unref()})();a(HN,"captureProfile")});var dS={};Re(dS,{addAnalyticsListener:()=>Gp,analyticsDelay:()=>VN,calculateCPUUtilization:()=>wq,diffResourceUsage:()=>Nq,onAnalyticsAggregate:()=>WN,recordAction:()=>qe,recordActionBinary:()=>nn,recordHostname:()=>KN,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(){GN||=performance.now(),kp=setTimeout(async()=>{kp=null;let e=performance.now()-GN;GN=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})},VN).unref()}async function KN(){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=xN.get(e);return t?(rn.trace?.("storeMetric cached nodeId:",t),t):(t=xp(e),rn.trace?.("storeMetric new nodeId:",t),xN.set(e,t),t)}function Rd(e,t){let r=Iq(Ue.hostname),n={id:[(0,$N.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=YN(),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 YN(){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(VN,e),await fq(YN(),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,$N.getNextMonotonicTime)(),YN().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,qN.open)((0,Fp.join)(r,"analytics.log"),"r+")}catch{mc=await(0,qN.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 WN(e){e&&bq.push(e)}var Dl,_q,gq,Fp,qN,$N,Hp,Sq,kae,Hae,rn,uS,Tq,kp,GN,VN,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"),qN=require("fs/promises"),$N=b(Ms()),Hp=b(fe());$();qr();Sq=b(require("node:fs"));BN();FN();({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");GN=0,VN=1e3,yq="analytics-report",Rq=[],bq=[];a(Gp,"addAnalyticsListener");Aq=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Vae,"sendAnalytics");a(KN,"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(YN,"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(WN,"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 zN(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 zN(fS[F.type],F.type)}:X==="Any"?m[J]={format:X}:m[J]=new zN(fS[X],X),p.push(new QN(J,"query",m[J]))}let E=Object.keys(m),_=new QN(f,"path",{type:"string",format:"ID"});_.required=!0,_.description="primary key of record";let R=new QN("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 jN(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 jN([_],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 jN([_,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 jN(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 zN(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 QN(e,t,r){this.name=e,this.in=t,this.schema=r}var kq,Zae,fS,Gs,Hq,JN=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(jN,"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(zN,"Type");a(Gq,"Ref");a(nce,"ArrayRef");a(QN,"Parameter")});var $q={};Re($q,{Request:()=>pc,createReuseportFd:()=>pS});var qq,pc,XN,ZN,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 ZN(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 XN(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)}},XN=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)}},ZN=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:()=>tC,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=tC(_);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 _=tC(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,eC.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",_),eC.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){eC=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 tC(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,eC,Kq,Yq,ES,Wq,Kp,ace,zq=ie(()=>{ea();Kn();Ti=b(ee()),Ad=b(ge());SS();$u();Ja();$p();JN();Vp();hS();({errorToString:jq}=Ti),sn=new Uint8Array(8),sce=new Float64Array(sn.buffer,0,1),eC={},Kq="openapi";a(ice,"http");Kp=0;a(oce,"start");ace={401:3e3,403:3003};a(tC,"parseHeaderValue")});var rC=x((eUe,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((tUe,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((rUe,e$)=>{"use strict";var fce=($(),D(z)).OPERATIONS_ENUM,nC=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=nC});var jp={};Re(jp,{createTokens:()=>iC,getJWTRSAKeys:()=>wS,refreshOperationToken:()=>oC,validateOperationToken:()=>aC,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 iC(e){let t=(0,sC.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=Ew(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 oC(e){let t=(0,sC.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 aC(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&&!_w(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,sC,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")),sC=b(ht());$();yi=b(ge()),IS=b(ee());Sw();_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(iC,"createTokens");a(oC,"refreshOperationToken");a(aC,"validateOperationToken");a(NS,"validateRefreshToken");a(o$,"validateToken")});var u$=x((aUe,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 mC=x((lUe,p$)=>{var LS=require("clone"),DS=ht(),bce=ue(),OS=($(),D(z)),cC=require("fs"),uC=require("joi"),{string:PS}=uC.types(),{hdbErrors:Ace,handleHDBError:CS}=ge(),{HTTP_STATUS_CODES:lC}=Ace,{commonValidators:Ld}=Vo(),d$=" is required",Ice=["insert","update","upsert"],dC={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(dC);f$.data.presence={message:d$};var m$=LS(dC);m$.file_path.presence={message:d$};var vce=Object.assign(LS(dC),Dce),fC=LS(wce);fC.csv_url=PS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();fC.passthrough_headers=uC.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,uC.object(fC));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,lC.BAD_REQUEST);if(e.operation===OS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{cC.accessSync(e.file_path,cC.constants.R_OK|cC.constants.F_OK)}catch(n){return n.code===OS.NODE_ERROR_CODES.ENOENT?CS(n,`No such file or directory ${n.path}`,lC.BAD_REQUEST):n.code===OS.NODE_ERROR_CODES.EACCES?CS(n,`Permission denied ${n.path}`,lC.BAD_REQUEST):CS(n)}}return t}a(vS,"postValidateChecks");p$.exports={dataObject:Mce,urlObject:Uce,fileObject:xce,s3FileObject:Bce}});var pC=x((dUe,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 hC=x((mUe,_$)=>{"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((hUe,g$)=>{"use strict";var EC=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}},_C=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:EC,BulkLoadDataObject:_C}});var y$=x((_Ue,T$)=>{"use strict";var gC=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=gC});var b$=x((SUe,R$)=>{"use strict";var SC=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};R$.exports=SC});var yC=x((yUe,I$)=>{"use strict";var A$=y$(),qce=b$(),{HDB_ERROR_MSGS:$ce}=En(),TC=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=TC});var Dd=x((bUe,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:RC}=Kce,C$=fe();C$.initSync();var{getDatabases:bC}=(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=bC(),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=bC()[r];if(!c)throw xS(new Error,BS.SCHEMA_NOT_FOUND(e.schema),RC.NOT_FOUND);let l=c[n];if(!l)throw xS(new Error,BS.TABLE_NOT_FOUND(e.schema,e.table),RC.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=bC()[n];if(!i)throw xS(new Error,BS.SCHEMA_NOT_FOUND(e.schema),RC.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((IUe,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")});var x$=x((NUe,U$)=>{"use strict";var Xce=fs();U$.exports={writeTransaction:Zce};function Zce(e,t,r){return Xce.writeTransaction(e,t,r)}a(Zce,"writeTransaction")});var CC=x((OUe,j$)=>{"use strict";var{decode:ele}=require("msgpackr"),GS=Lr(),vd=Er(),wC=($(),D(z)),Rn=ee(),IC=fe(),tle=($(),D(z)),{onMessageByType:rle}=ot(),H$=sa(),{recordAction:B$,recordActionBinary:nle}=(Kn(),D(dS)),{publishToStream:sle}=GS,{ConsumerEvents:F$}=require("nats"),ile=$n(),{promisify:ole}=require("util"),{decodeBlobsWithWrites:ale}=(us(),D(Rg)),G$=ole(setTimeout),qS=1e4,$S,HS,q$,Jp=new Map,Md=new Map;j$.exports={initialize:$$,ingestConsumer:NC,setSubscription:cle,setIgnoreOrigin:dle,getDatabaseSubscriptions:ule,updateConsumer:V$};async function $$(){rle(wC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async t=>{await V$(t)}),q$=!0,Rn.notify("Initializing clustering ingest service.");let{connection:e}=await GS.getNATSReferences();$S=e,HS=e.info.server_name}a($$,"initialize");async function V$(e){if(e.status==="start"){let{js:t,jsm:r}=await K$(e.node_domain_name);NC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Jp.get(e.stream_name+e.node_domain_name);t&&(Rn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Jp.set(e.stream_name+e.node_domain_name,"close")),Md.get(e.node_domain_name)==="failed"&&Md.set(e.node_domain_name,"close")}}a(V$,"updateConsumer");var VS=new Map;function cle(e,t,r){let n=VS.get(e);n||VS.set(e,n=new Map),n.set(t,r),q$||$$().then(lle)}a(cle,"setSubscription");async function lle(){let e=await ile.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+vd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await K$(r),!n))break;let{schema:o,table:c}=i,l=H$.createNatsTableStreamName(o,c);NC(l,n,s,r)}}}a(lle,"accessConsumers");async function K$(e){let t,r,n=1;for(;!r;)try{t=await $S.jetstream({domain:e}),r=await $S.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Md.get(e)==="close")break;Md.set(e,"failed"),n%10===1&&Rn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<qS?n++*100:qS;await G$(i)}return{js:t,jsm:r}}a(K$,"connectToRemoteJS");function ule(){return VS}a(ule,"getDatabaseSubscriptions");var Y$;function dle(e){Y$=e}a(dle,"setIgnoreOrigin");var W$=100,k$=new Array(W$),kS=0;async function NC(e,t,r,n){let{connection:s}=await GS.getNATSReferences();$S=s,HS=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,HS),Rn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Md.get(n)==="close")break;o%10===1&&Rn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Rn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await GS.createConsumer(r,e,HS,new Date(Date.now()).toISOString()));let d=o++*100<qS?o++*100:qS;await G$(d)}let c=!1,l;for(;!c;){if(Jp.get(e+n)==="close"||Md.get(n)==="close"){Jp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:IC.get(wC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Jp.set(e+n,l);let u=(async()=>{for await(let d of await l.status())if(d.type===F$.ConsumerDeleted&&(await l.close(),c=!0),d.type===F$.HeartbeatsMissed){let f=d.data;Rn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(Rn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop())}})();try{for await(let d of l)await k$[kS],k$[kS]=fle(d).catch(f=>{Rn.error(f)}),++kS>=W$&&(kS=0)}catch(d){d.message==="consumer deleted"?(Rn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Rn.error("Error consuming clustering ingest, restarting consumer",d)}}}a(NC,"ingestConsumer");async function fle(e){let t;await ale(()=>{t=ele(e.data)}),B$(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Rn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=IC.get(wC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(vd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(vd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(vd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!Y$),nle(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(vd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;Rn.trace("processing message:",o,c,u,(d?"records: "+d.map(w=>w?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),Rn.trace(`messageProcessor nats msg id: ${e.headers.get(vd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(w=>h=w),{timestamp:_,user:R,node_name:S}=m||{},y=VS.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:AC(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:_,table:u,onCommit:h,user:R,nodeName:S});else{let w=d.map((P,H)=>({type:AC(o),value:P,expiresAt:p,id:f?.[H],table:u}));for(;l;)w.push({type:AC(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:w,table:u,timestamp:_,onCommit:h,user:R,nodeName:S})}IC.get(tle.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&sle(e.subject.split(".").slice(0,-1).join("."),H$.createNatsTableStreamName(c,u),e.headers,e.data),await E;let I=Date.now()-_;_&&B$(I,"replication-latency",e.subject,o,"ingest")}catch(o){Rn.error(o)}e.ack()}a(fle,"messageProcessor");function AC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(AC,"convertOperation")});var Lr=x((LUe,dV)=>{"use strict";var Yr=fe();Yr.initSync();var mle=require("fs-extra"),ple=require("semver"),eh=require("path"),{monotonicFactory:hle}=require("ulidx"),Q$=hle(),Ele=require("util"),J$=require("child_process"),_le=Ele.promisify(J$.exec),gle=J$.spawn,on=Er(),rt=($(),D(z)),{packageJson:Sle,PACKAGE_ROOT:Tle}=Dt(),KS=ue(),Ri=ee(),YS=sa(),yle=x$(),Xp=Nt(),{broadcast:Rle,onMessageByType:ble,getWorkerIndex:Ale}=ot(),{isMainThread:X$}=require("worker_threads"),{Encoder:Ile,decode:DC}=require("msgpackr"),Z$=new Ile,{isEmpty:xl}=KS,eV=(_s(),D(no));X$&&ble(rt.ITC_EVENT_TYPES.RESTART,()=>{bn=void 0,Ul=void 0});var{connect:wle,StorageType:Nle,RetentionPolicy:Cle,AckPolicy:vC,DeliverPolicy:MC,DiscardPolicy:Ole,JSONCodec:Ple,createInbox:UC,headers:Lle,ErrorCode:z$}=require("nats"),{recordAction:Dle}=(Kn(),D(dS)),{encodeBlobsAsBuffers:vle}=(us(),D(Rg)),tV=Ple(),Mle="clustering",Ule=Sle.engines[on.NATS_SERVER_NAME],xle=eh.join(Tle,"dependencies"),LC=eh.join(xle,`${process.platform}-${process.arch}`,on.NATS_BINARY_NAME),OC,PC,Zp,vl,Ml;dV.exports={runCommand:rV,checkNATSServerInstalled:Ble,createConnection:xC,getConnection:th,getJetStreamManager:rh,getJetStream:sV,getNATSReferences:co,getServerList:kle,createLocalStream:BC,listStreams:iV,deleteLocalStream:Hle,getServerConfig:Ud,listRemoteStreams:Gle,viewStream:qle,viewStreamIterator:$le,publishToStream:Vle,request:Wle,reloadNATS:FC,reloadNATSHub:jle,reloadNATSLeaf:zle,extractServerName:Yle,requestErrorHandler:Qle,createLocalTableStream:lV,createTableStreams:Zle,purgeTableStream:uV,purgeSchemaTableStreams:eue,getStreamInfo:tue,updateLocalStreams:nue,closeConnection:Fle,getJsmServerName:WS,addNatsMsgHeader:oV,clearClientCache:nV,updateRemoteConsumer:Jle,createConsumer:aV,updateConsumerIterator:Xle};async function rV(e,t=void 0){let{stdout:r,stderr:n}=await _le(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
14
14
|
`,""));return r.replace(`
|
|
15
15
|
`,"")}a(rV,"runCommand");async function Ble(){try{await mle.access(LC)}catch{return!1}let e=await rV(`${LC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return ple.eq(t,Ule)}a(Ble,"checkNATSServerInstalled");async function xC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await eV.getClusterUser();if(xl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ri.trace("create nats connection called");let i=await wle({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Yr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Yr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Yr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ri.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ri.error("Error with Nats client connection, connection closed",o),i===bn&&nV()}),i}a(xC,"createConnection");function nV(){bn=void 0,vl=void 0,Ml=void 0,Ul=void 0}a(nV,"clearClientCache");async function Fle(){bn&&(await bn.drain(),bn=void 0,vl=void 0,Ml=void 0,Ul=void 0)}a(Fle,"closeConnection");var bn,Ul;async function th(){return Ul||(Ul=xC(Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),bn=await Ul),bn||Ul}a(th,"getConnection");async function rh(){if(vl)return vl;xl(bn)&&await th();let{domain:e}=Ud(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(xl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return vl=await bn.jetstreamManager({domain:e,timeout:6e4}),vl}a(rh,"getJetStreamManager");async function sV(){if(Ml)return Ml;xl(bn)&&await th();let{domain:e}=Ud(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(xl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ml=bn.jetstream({domain:e,timeout:6e4}),Ml}a(sV,"getJetStream");async function co(){let e=bn||await th(),t=vl||await rh(),r=Ml||await sV();return{connection:e,jsm:t,js:r}}a(co,"getNATSReferences");async function kle(e){let t=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await eV.getClusterUser(),s=await xC(t,r,n),i=UC(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=tV.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await KS.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(kle,"getServerList");async function BC(e,t){let{jsm:r}=await co(),n=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Nle.File,retention:Cle.Limits,subjects:t,discard:Ole.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(BC,"createLocalStream");async function iV(){let{jsm:e}=await co(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(iV,"listStreams");async function Hle(e){let{jsm:t}=await co();await t.streams.delete(e)}a(Hle,"deleteLocalStream");async function Gle(e){let{connection:t}=await co(),r=[],n=UC(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(tV.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Gle,"listRemoteStreams");async function qle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await co(),i=Q$(),o={durable_name:i,ack_policy:vC.Explicit};t&&(o.deliver_policy=MC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=DC(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(on.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(qle,"viewStream");async function*$le(e,t=void 0,r=void 0){let{jsm:n,js:s}=await co(),i=Q$(),o={durable_name:i,ack_policy:vC.Explicit};t&&(o.deliver_policy=MC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=DC(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(on.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}a($le,"viewStreamIterator");async function Vle(e,t,r,n){Ri.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=oV(n,r);let{js:s}=await co(),i=await WS(),o=`${e}.${i}`,c=await vle(()=>n instanceof Uint8Array?n:Z$.encode(n));try{Ri.trace(`publishToStream publishing to subject: ${o}`),Dle(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return cV(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ri.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await BC(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Vle,"publishToStream");function oV(e,t){t===void 0&&(t=Lle());let r=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(on.MSG_HEADERS.ORIGIN)&&r&&t.append(on.MSG_HEADERS.ORIGIN,r),t}a(oV,"addNatsMsgHeader");function Ud(e){e=e.toLowerCase();let t=eh.join(Yr.get(rt.CONFIG_PARAMS.ROOTPATH),Mle);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return xl(PC)&&(PC={port:Xp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Xp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.HUB,config_file:on.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:eh.join(t,on.PID_FILES.HUB),hdbNatsPath:t}),PC;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return xl(OC)&&(OC={port:Xp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Xp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,config_file:on.NATS_CONFIG_FILES.LEAF_SERVER,domain:Xp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,pid_file_path:eh.join(t,on.PID_FILES.LEAF),hdbNatsPath:t}),OC;Ri.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ud,"getServerConfig");async function aV(e,t,r,n){try{await e.consumers.add(t,{ack_policy:vC.Explicit,durable_name:r,deliver_policy:MC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(aV,"createConsumer");async function Kle(e,t,r){await e.consumers.delete(t,r)}a(Kle,"removeConsumer");function Yle(e){return e.split(".")[1]}a(Yle,"extractServerName");async function Wle(e,t,r=6e4,n=UC()){if(!KS.isObject(t))throw new Error("data param must be an object");let s=Z$.encode(t),{connection:i}=await co(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return DC(c.data)}a(Wle,"request");function FC(e){return new Promise(async(t,r)=>{let n=gle(LC,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",()=>{s&&r(s),t(i)})})}a(FC,"reloadNATS");async function jle(){let{pid_file_path:e}=Ud(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await FC(e)}a(jle,"reloadNATSHub");async function zle(){let{pid_file_path:e}=Ud(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await FC(e)}a(zle,"reloadNATSLeaf");function Qle(e,t,r){let n;switch(e.code){case z$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case z$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Qle,"requestErrorHandler");async function Jle(e,t){let r=t+on.SERVER_SUFFIX.LEAF,{connection:n}=await co(),{jsm:s}=await iue(r),{schema:i,table:o}=e,c=YS.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await cV(async()=>{if(e.subscribe===!0)await aV(s,c,n.info.server_name,l);else try{await Kle(s,c,n.info.server_name)}catch(u){Ri.trace(u)}})}a(Jle,"updateRemoteConsumer");async function Xle(e,t,r,n){let s=YS.createNatsTableStreamName(e,t),i=r+on.SERVER_SUFFIX.LEAF,o={type:rt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!X$&&Ale()<Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=CC();await c(o)}await Rle(o),n==="stop"&&await KS.asyncSetTimeout(1e3)}a(Xle,"updateConsumerIterator");function cV(e){return yle.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(cV,"exclusiveLock");async function lV(e,t){let r=YS.createNatsTableStreamName(e,t),n=await WS(),s=rue(e,t,n);await BC(r,[s])}a(lV,"createLocalTableStream");async function Zle(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await lV(n,s)}}a(Zle,"createTableStreams");async function uV(e,t,r=void 0){if(Yr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=YS.createNatsTableStreamName(e,t),{domain:s}=Ud(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await th()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ri.warn(n);else throw n}}a(uV,"purgeTableStream");async function eue(e,t){if(Yr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await uV(e,t[r])}a(eue,"purgeSchemaTableStreams");async function tue(e){return(await rh()).streams.info(e)}a(tue,"getStreamInfo");function rue(e,t,r){return`${on.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(rue,"createSubjectName");async function WS(){if(Zp)return Zp;if(Zp=(await rh())?.nc?.info?.server_name,Zp===void 0)throw new Error("Unable to get jetstream manager server name");return Zp}a(WS,"getJsmServerName");async function nue(){let e=await rh(),t=await WS(),r=await iV();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=sue(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");Ri.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(nue,"updateLocalStreams");function sue(e){let{config:t}=e,r=!1,n=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(sue,"updateStreamLimits");async function iue(e){let t,r;try{t=await bn.jetstream({domain:e}),r=await bn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ri.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(iue,"connectToRemoteJS")});function kC(e){let t=e.get(jS),r=t?(0,xd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=nt();r.nodeName=nt();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:sh(e)??1,nodes:[]})})}s[n]=0,e.putSync(jS,(0,xd.pack)(r))}return r}function nh(e){return kC(e).remoteNameToId}function mV(e,t){let r=kC(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(jS,(0,xd.pack)(r)),s}function zS(e,t){let r=kC(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(jS,(0,xd.pack)(r))}return fV.trace?.("The remote node name map",e,n,s),s}var fV,xd,jS,HC=ie(()=>{fV=b(pr());Ss();xd=require("msgpackr"),jS=Symbol.for("remote-ids");a(kC,"getIdMappingRecord");a(nh,"exportIdMapping");a(mV,"remoteToLocalNodeId");a(zS,"getIdOfRemoteNode")});function $C(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=hV,oue(e.primaryStore,e.auditStore)):(c=pV,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{EV(pV[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 qC(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 EV(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),_V(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,GC.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,GC.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 oue(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",()=>{let i=hV[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{EV(i)}finally{r.threadLocalWrites[0]=i.lastTxnTime,r.unlock("thread-local-writes",0)}},"acquiredLock");r.attemptLock("thread-local-writes",0,o)&&o()})}}function _V(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function gV(e){return e.nextTransaction||($C({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),_V(e)),e.nextTransaction}var GC,pV,hV,qC,VC=ie(()=>{GC=b(ee());$u();fc();Wi();pV=Object.create(null),hV=Object.create(null);a($C,"addSubscription");qC=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(EV,"notifyFromTransactionData");a(oue,"listenToCommits");a(_V,"nextTransaction");a(gV,"whenNextTransaction")});var AV={};Re(AV,{commitsAwaitingReplication:()=>Bd,getHDBNodeTable:()=>Yt,getReplicationSharedStatus:()=>Fd,iterateRoutes:()=>oh,shouldReplicateToNode:()=>ih,subscribeToNodeUpdates:()=>kd});function Yt(){return SV||(SV=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 Fd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function kd(e){Yt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;bV.debug?.("adding node",n,"on node",nt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==nt()&&(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 ih(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(nt())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function aue(){kd(e=>{Ec({},(t,r)=>{let n=e.name,s=TV.get(n);if(s||TV.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=Fd(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of Bd.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*oh(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){yV.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 yV,RV,hc,bV,SV,TV,Bd,Hd=ie(()=>{Oe();Ss();Om();yV=require("worker_threads"),RV=b(ge()),hc=b(fe());$();bV=b(pr());server.nodes=[];a(Yt,"getHDBNodeTable");a(Fd,"getReplicationSharedStatus");a(kd,"subscribeToNodeUpdates");a(ih,"shouldReplicateToNode");TV=new Map;mx((e,t,r)=>{if(r>server.nodes.length)throw new RV.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Bd||(Bd=new Map,aue());let n=Bd.get(e);return n||(n=[],Bd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(aue,"startSubscriptionToReplications");a(oh,"iterateRoutes")});var LV={};Re(LV,{connectedToNode:()=>Bl,disconnectedFromNode:()=>qd,ensureNode:()=>la,requestClusterStatus:()=>PV,startOnMainThread:()=>KC});async function KC(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){QS.set(o,sh(u.auditStore));break}}}bi.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=nt();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 oh(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),IV.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}kd(s)});let n;function s(o,c=o?.name){let l=nt()&&c===nt()||_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 lo){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){lo.get(m).iterator.remove(),lo.delete(m);return}}return}if(l)return;if(!o.url){at.info(`Node ${o.name} is missing url`);return}let u=lo.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 ${nt()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of Gd)if(o.url===p.url){Gd.delete(m);break}Gd.set(o.name,o)}let d=dt();if(u||(u=new Map,lo.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}];QS.has(m)&&ah.default.get(U.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:p,name:nt(),startTime:QS.get(m),endTime:Date.now(),replicates:!0}),QS.delete(m));let R=ih(o,m),S=bi.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=cue.HDB_LEADER_URL??process.env.HDB_LEADER_URL??IV[0]?.url,I=y?new URL(y).hostname:Array.from(Yt().primaryStore.getKeys({}).filter(P=>P!==nt()))[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):ch(P)},lue)}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(nt())?.replicates}),Yt().primaryStore.get(nt())?.replicates||(n=!1,at.info("Disabling replication, this node name",nt(),Yt().primaryStore.get(nt()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:_};E?E.postMessage(y):XS(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),qd=a(function(o){try{at.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(Gd.keys()),l=c.sort(),u=l.indexOf(o.name||Ai(o.url));if(u===-1){at.warn("Disconnected node not found in node map",o.name,c);return}let d=lo.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||!ah.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],_=Gd.get(E);d=lo.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"),Bl=a(function(o){let c=lo.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(ah.default.get(U.REPLICATION_FAILOVER)){l.nodes=[u];for(let d of lo.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=bi.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]}):ch({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,bi.onMessageByType)("disconnected-from-node",qd),(0,bi.onMessageByType)("connected-to-node",Bl),(0,bi.onMessageByType)("request-cluster-status",PV)}function PV(e,t){let r=[];for(let[n,s]of Gd)try{let i=lo.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=NV(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??Ai(t.url),t.name=e;try{if(t.ca){let s=new CV.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&&!ah.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=NV(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 bi,JS,at,wV,ah,CV,OV,NV,cue,lue,lo,qd,Bl,Gd,QS,IV,lh=ie(()=>{Oe();bi=b(ot());Ss();JS=require("worker_threads");Hd();at=b(ee()),wV=b(require("lodash")),ah=b(fe());$();CV=require("crypto"),OV=b(require("minimist")),{cloneDeep:NV}=wV.default,cue=(0,OV.default)(process.argv),lue=200,lo=new Map,Gd=new Map,QS=new Map,IV=[];a(KC,"startOnMainThread");a(PV,"requestClusterStatus");JS.parentPort&&(qd=a(e=>{JS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Bl=a(e=>{JS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,bi.onMessageByType)("subscribe-to-node",e=>{ch(e)}),(0,bi.onMessageByType)("unsubscribe-from-node",e=>{XS(e)}));a(la,"ensureNode")});var DV=x(An=>{"use strict";var uue={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
|