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.
@@ -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()}});ck={type:"application/json",serializeStream:sp,serialize:ip,deserialize:$ne,q:.5};gn.set("*/*",ck);gn.set("",ck);a($ne,"tryJSONParse");a(ap,"registerContentHandlers");Vne=(0,ok.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Ag(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(Ag,"findBestSerializer");rk=bg.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(cp,"serialize");a(Zo,"serializeMessage");a(tw,"asyncSerialization");a(rw,"hasAsyncSerialization");a(Kne,"streamToBuffer");Yne=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(Wne,"isBufferEncoding");a(jne,"parseContentType");a(ea,"getDeserializer");a(zne,"deserializerUnknownType");a(Qne,"transformIterable");a(yg,"toCsvStream")});var Dg={};ye(Dg,{Blob:()=>Bs,blobsWereEncoded:()=>gl,cleanupOrphans:()=>use,databasePaths:()=>sw,decodeBlobsWithWrites:()=>Lg,decodeFromDatabase:()=>na,decodeWithBlobCallback:()=>fp,deleteBlob:()=>Cg,deleteBlobsInObject:()=>sc,deleteRootBlobPathsForDB:()=>aw,encodeBlobsAsBuffers:()=>ase,encodeBlobsWithFilePath:()=>Pg,findBlobsInObject:()=>_l,getFileId:()=>Og,getFilePathForBlob:()=>Sk,getRootBlobPathsForDB:()=>ld,isSaving:()=>tse,saveBlob:()=>dp,setDeletionDelay:()=>ese,startPreCommitBlobsForRecord:()=>cw});function _k(){}function Cg(e){let t=Sk(e);t&&setTimeout(()=>{(0,Ve.unlink)(t,r=>{r&&vt.default.debug?.("Error trying to remove blob file",r)})},gk)}function ese(e){gk=e}function dp(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,nse(r),r.source?nw(e,r.source,r):r.contentBuffer?rse(e,r):nw(e,nc.Readable.from(e.stream()),r),r}function nw(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(Xne),p=(0,Ng.createDeflate)(),(0,nc.pipeline)(t,p,f,E)):(m||f.write(Jne),(0,nc.pipeline)(t,f,E));function h(_){let y=BigInt(_),S=new Uint8Array(Pr),R=new DataView(S.buffer);return y|=BigInt(o?ow:Ek)<<48n,R.setBigInt64(0,y),S}a(h,"createHeader");function E(_){let y=f.fd;if(_){if(i.unlock(d,0),y&&((0,Ve.close)(y),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]),R=>{R&&vt.default.debug?.("Error write error message to blob file",R)})}}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-Pr;e.size=S,(0,Ve.write)(y,h(S),0,Pr,0,E);return}i.unlock(d,0),c?(0,Ve.fdatasync)(y,S=>{S&&u(S),l(),(0,Ve.close)(y),f.fd=null}):(l(),(0,Ve.close)(y),f.fd=null)}}a(E,"finished")}),e}function Og(e){return $r.get(e)?.fileId}function tse(e){return $r.get(e)?.saving}function Sk(e){let t=$r.get(e);return t?.fileId&&cd(t)}function ld(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=sw.get(e);if(!t){if(!e.databaseName)return vt.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,up.get)(x.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Xi.join)(n,e.databaseName)):t=[(0,Xi.join)((0,up.getHdbBasePath)(),"blobs",e.databaseName)],sw.set(e,t)}return t}async function aw(e){let t=ld(e);t&&await Promise.all(t.map(r=>Tk(r)))}async function Tk(e){if((0,Ve.existsSync)(e)){for(let t of await(0,Hn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await Tk((0,Xi.join)(e,t.name));else try{await(0,Hn.unlink)((0,Xi.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 cd({storageIndex:e,fileId:t,store:r}){let n=ld(r);return(0,Xi.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 rse(e,t){let r=t.contentBuffer,n=r.length;if(!(n<hk))return e.size=n,nw(e,nc.Readable.from([r]),t)}function nse(e){let t=ld(e.store),r=sse(),n=t?.length>1?ise(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=cd(e),o=(0,Xi.dirname)(i);(0,Ve.existsSync)(o)||(0,iw.ensureDirSync)(o),e.filePath=i}function sse(){let e=mk.get(kn);if(!e){let t=0,r=ld(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,Xi.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)),mk.set(kn,e)}return Number(Atomics.add(e,0,1n))}function ise(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(wg);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,ose(e)),e.frequencyTable[t%wg]}async function ose(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,iw.ensureDirSync)(s),i=await(0,Hn.statfs)(s)}let o=i.bavail*i.bsize;return Math.pow(o,.8)})),r=new Array(wg),n=t.map(s=>1/s);for(let s=0;s<wg;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 Pg(e,t,r){id=t,kn=r,gl=!1;try{return e()}finally{id=void 0,kn=void 0}}function ase(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 Lg(e,t,r){try{Xr=[],ra=r,kn=t,e()}catch(s){throw ra=void 0,Xr=void 0,s}ra=void 0;let n=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,n}function fp(e,t,r){kn=r;try{return ra=t,e()}finally{ra=void 0}}function na(e,t){return kn=t,e()}function sc(e){_l(e,t=>{Cg(t)})}function _l(e,t){if(e instanceof Bs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&_l(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&_l(e[r],t)}}function cw(e,t){let r=[];for(let n in e){let s=e[n];s instanceof ad&&s.saveBeforeCommit&&r.push(s)}if(r.length>0)return()=>(kn=t,Promise.all(r.map(n=>dp(n,!0).saving??Promise.resolve())))}function lse(){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 use(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=ld(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,Xi.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,pk.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,up.get)(x.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,od.setTimeout)(1):await(0,od.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,od.setTimeout)(1):await(0,od.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){_l(d,f=>{if(f instanceof ad){let m=$r.get(f);if(m.fileId!=null){let p=cd(m);i.has(p)&&i.delete(p)}}})}a(u,"checkObjectForReferences")}var Ji,Hn,Ve,Ng,nc,iw,up,Xi,vt,pk,od,hk,Pr,Ek,ow,uk,Jne,Xne,dk,$r,ra,Bs,id,Xr,kn,gl,lp,Ig,Zne,fk,ad,gk,sw,mk,wg,cse,ds=ie(()=>{Ji=require("msgpackr"),Hn=require("node:fs/promises"),Ve=require("node:fs"),Ng=require("node:zlib"),nc=require("node:stream"),iw=require("fs-extra"),up=b(de());G();Xi=require("path"),vt=b(Er());ta();zi();pk=require("node:v8"),od=require("node:timers/promises"),hk=8192,Pr=8,Ek=0,ow=1,uk=255,Jne=new Uint8Array([0,Ek,255,255,255,255,255,255]),Xne=new Uint8Array([0,ow,255,255,255,255,255,255]),dk=0xffffffffffff,$r=new WeakMap,Bs=global.Blob||lse(),gl=!1,lp=new Uint8Array(8),Ig=new DataView(lp.buffer),Zne=6e4;a(_k,"InstanceOfBlobWithNoConstructor");_k.prototype=Bs.prototype;fk=!1,ad=class e extends _k{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):(rw()&&tw(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=cd(t),o,c=a(async()=>{let l,u=Pr;try{if(l=await(0,Hn.readFile)(i),l.length>=Pr){l.copy(lp,0,0,Pr);let f=Ig.getBigUint64(0);if(Number(f>>48n)===uk)throw new Error("Error in blob: "+l.subarray(Pr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<dk&&(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]===ow?new Promise((f,m)=>{(0,Ng.deflate)(l.subarray(Pr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Pr))},"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=cd(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,_=a((y,S)=>{(0,Ve.open)(i,"r",(R,I)=>{if(R){if(R.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(),_(y,S)},20).unref();S(R),p.#e?.forEach(w=>w(R))}else o=I,y(I)})},"openFile");return new Promise(_)},pull:a(E=>{let _=0,y=100;return new Promise(a(function S(R,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 L=Buffer.allocUnsafe(262144);(0,Ve.read)(o,L,0,L.length,c,(H,Z,X)=>{if(l+=Z,H)return w(H);if(c===0){if(Z<Pr){y-- >0&&f!==!1?(h(),vt.default.debug?.("File was empty, waiting for data to be written",i,y),setTimeout(()=>S(R,I),20).unref()):(vt.default.debug?.("File was empty, throwing error",i,y),w(new Error(`Blob ${t.fileId} was empty`)));return}X.copy(lp,0,0,Pr);let J=Ig.getBigUint64(0);if(Number(J>>48n)===uk)return w(new Error("Error in blob: "+X.subarray(Pr,Z)));if(_=Number(J&0xffffffffffffn),_<dk&&p.size!==_&&(p.size=_,p.#t))for(let F of p.#t)F(_);X=X.subarray(Pr,Z),l-=Pr}else if(Z===0){let J=Buffer.allocUnsafe(8);return(0,Ve.read)(o,J,0,Pr,0,F=>{if(F)return w(F);if(lp.set(J),_=Number(Ig.getBigUint64(0)&0xffffffffffffn),_>l){h()?(u=(0,Ve.watch)(i,{persistent:!1},()=>{u.close(),u=null,clearTimeout(d),S(R,I)}),(0,Ve.readSync)(o,J,0,J.length,c)>0?(u.close(),u=null,S(R,I)):d=setTimeout(()=>{w(new Error(`File read timed out reading from ${i}`))},Zne).unref()):m?w(new Error("Blob is incomplete")):(m=!0,S(R,I));return}(0,Ve.close)(o),E.close(),R()})}else X=X.subarray(0,Z);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=Z,S(R,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),R()}l===_&&((0,Ve.close)(o),E.close()),R()})},"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 fk||(fk=!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()}},gk=500;a(Cg,"deleteBlob");a(ese,"setDeletionDelay");global.createBlob=function(e,t){let r=new ad(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 nc.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=nc.Readable.from(e);else throw new Error("Invalid source type");return r};a(dp,"saveBlob");a(nw,"writeBlobWithStream");a(Og,"getFileId");a(tse,"isSaving");a(Sk,"getFilePathForBlob");sw=new Map;a(ld,"getRootBlobPathsForDB");a(aw,"deleteRootBlobPathsForDB");a(Tk,"rimrafSteadily");a(cd,"getFilePath");a(rse,"writeBlobWithBuffer");a(nse,"generateFilePath");mk=new Map;a(sse,"getNextFileId");wg=128;a(ise,"getNextStorageIndex");a(ose,"createFrequencyTableForStoragePaths");a(Pg,"encodeBlobsWithFilePath");a(ase,"encodeBlobsAsBuffers");a(Lg,"decodeBlobsWithWrites");a(fp,"decodeWithBlobCallback");a(na,"decodeFromDatabase");a(sc,"deleteBlobsInObject");a(_l,"findBlobsInObject");a(cw,"startPreCommitBlobsForRecord");cse=new Ji.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Ji.addExtension)({Class:Bs,type:11,unpack:a(function(e){let t=cse.unpack(e),r=new ad;if(Object.assign(r,t[0]),typeof t[1]!="object"){if($r.set(r,{storageIndex:t[1],fileId:t[2],store:kn}),ra)return ra(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(id!==void 0&&(gl=!0,t?.recordId!==void 0&&t.recordId!==id))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<hk)return r.size=t.contentBuffer.length,(0,Ji.pack)([r,t.contentBuffer])}if(id!==void 0){if(t=dp(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=id,(0,Ji.pack)([r,t.storageIndex,t.fileId])}if(t){if(ra)return ra(e),(0,Ji.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,Ve.readFileSync)(cd(t));if(n.length>=Pr&&(n.copy(lp,0,0,Pr),Number(Ig.getBigUint64(0)&0xffffffffffffn)===n.length-Pr))return Buffer.concat([(0,Ji.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,Ji.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(lse,"polyfillBlob");a(use,"cleanupOrphans")});function Gn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function pp(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 fs.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 fs.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 fs.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 fs.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 fs.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 fs.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 fs.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 fs.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 fs.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 fs.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 fs.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=lw(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 fs.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?bk:yk);break}c=l}while(c&&c!==yk&&c!==bk)}function Ak(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(Rk[t])return Rk[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=lw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function dse(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 lw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends Tl{static{a(this,"TrackedObject")}},pp(r,t)),new r(e)):new Tl(e);case Array:let n=new Mg(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=lw(o,t?.elements)),n[s]=o}return n;default:return e}}function Ug(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=Ug(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 Rl(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=Rl(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=YI[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Rl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)fse.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function vg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Sl]||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(vg(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(vg(s))return!0}else return!0}else return!0}}return!1}var fs,Rk,yk,bk,Tl,fse,Sl,Mg,mp,uw=ie(()=>{fs=b(ge());Rg();ds();a(Gn,"getChanges");a(pp,"assignTrackedAccessors");Rk=Object.prototype,yk=new Proxy({},{get:Ak}),bk=new Proxy({},{get:Ak,set:dse});a(Ak,"getProxiedProperty");a(dse,"setProxiedProperty");a(lw,"trackObject");Tl=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}};pp(Tl,{},!0);a(Ug,"collapseData");fse=Object.prototype.hasOwnProperty;a(Rl,"updateAndFreeze");a(vg,"hasChanges");Sl=Symbol.for("has-array-changes"),Mg=class extends Array{static{a(this,"TrackedArray")}#e;[Sl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Sl]=!0,super.splice(...t)}push(...t){return this[Sl]=!0,super.push(...t)}pop(){return this[Sl]=!0,super.pop()}unshift(...t){return this[Sl]=!0,super.unshift(...t)}shift(){return this[Sl]=!0,super.shift()}};Mg.prototype.constructor=Array;mp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var Dk={};ye(Dk,{ResourceBridge:()=>mw});function pw({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=Zi(e),n=pw(e,r);if(!r)throw new Ei.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&&Ug(d)}catch(f){d={message:(0,Lk.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 Zi(e){let t=e.database||e.schema||pse,r=ft()[t];if(!r)throw(0,Ei.handleHDBError)(new Error,mse.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function wk(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*Nk(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,xg,Ei,Ok,dw,fw,Pk,Lk,mse,pse,hse,Ese,mw,vk=ie(()=>{Ck=b(KF()),xg=b(rd()),Ei=b(ge());Oe();Ok=b($m());G();dw=b(jo()),fw=b(ls()),Pk=b(ue());Xa();uw();Lk=b(ee()),{HDB_ERROR_MSGS:mse}=Ei.hdbErrors,pse="data",hse=1e4,Ese=10,mw=class extends Ck.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=Zi(t);if(!r)throw new Ei.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,xg.default)(t,"conditions");if(s)throw(0,Ei.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:pw(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 Ei.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 Zi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Zi(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 Zi(t).dropTable()}createSchema(t){return ud({database:t.schema,table:null}),dw.signalSchemaChange(new fw.SchemaEventMsg(process.pid,Y.CREATE_SCHEMA,t.schema))}async dropSchema(t){await hw(t.schema),dw.signalSchemaChange(new fw.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,Ok.default)(t),n,s=ft()[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=Ug(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=ft()[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 wk(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ft()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ei.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:M_.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,Pk.asyncSetTimeout)(Ese),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%hse===0&&await u();return l.length>0&&await u(),s?wk(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,xg.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&&CA[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,xg.default)(t,"value");if(n)throw n;let s=Zi(t);if(!s)throw new Ei.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===M_.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:pw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Zi(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){Zi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Zi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Zi(t),n={};switch(t.search_type){case U_.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 U_.USERNAME:{let s=t.search_values;for await(let i of Nk(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return Nk(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(pw,"getSelect");a(Ik,"getRecords");a(Zi,"getTable");a(wk,"createDeleteResponse");a(Nk,"groupRecordsInHistory")});var ms=U((oMe,Mk)=>{"use strict";var{ResourceBridge:_se}=(vk(),P(Dk)),gse=de();gse.initSync();var Bg;function Sse(){return Bg||(Bg=new _se,Bg)}a(Sse,"getBridge");Mk.exports=Sse()});var _i=U((cMe,Bk)=>{var Tse=fl(),{promisify:Rse}=require("util"),{getDatabases:xk}=(Oe(),P(Et));Bk.exports={setSchemaDataToGlobal:Uk,getTableSchema:yse,getSystemSchema:bse,setSchemaDataToGlobalAsync:Rse(Uk)};function Uk(e){global.hdb_schema=xk(),e&&e()}a(Uk,"setSchemaDataToGlobal");function yse(e,t,r){let n=xk()[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(yse,"getTableSchema");function bse(){return Tse}a(bse,"getSystemSchema")});var qn=U((uMe,Gk)=>{"use strict";var kg=d0(),en=ue(),Ase=require("util"),Hg=ms(),Ise=_i(),Fk=ee(),{handleHDBError:yl,hdbErrors:wse}=ge(),{HTTP_STATUS_CODES:bl}=wse,Nse=Ase.promisify(Ise.getTableSchema),Cse="updated",kk="inserted",Hk="upserted";Gk.exports={insert:Pse,update:Lse,upsert:Dse,validation:Ose,flush:vse};async function Ose(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 Nse(e.schema,e.table),r=kg(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 Fk.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 Fk.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(Ose,"validation");async function Pse(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=kg(e);if(t)throw yl(new Error,t.message,bl.BAD_REQUEST);en.transformReq(e);let r=en.checkSchemaTableExist(e.schema,e.table);if(r)throw yl(new Error,r,bl.BAD_REQUEST);let n=await Hg.createRecords(e);return Fg(kk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Pse,"insertData");async function Lse(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=kg(e);if(t)throw yl(new Error,t.message,bl.BAD_REQUEST);en.transformReq(e);let r=en.checkSchemaTableExist(e.schema,e.table);if(r)throw yl(new Error,r,bl.BAD_REQUEST);let n=await Hg.updateRecords(e);return en.isEmpty(n.existing_rows)?Fg(Cse,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Fg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Lse,"updateData");async function Dse(e){if(e.operation!=="upsert")throw yl(new Error,"invalid operation, must be upsert",bl.INTERNAL_SERVER_ERROR);let t=kg(e);if(t)throw yl(new Error,t.message,bl.BAD_REQUEST);en.transformReq(e);let r=en.checkSchemaTableExist(e.schema,e.table);if(r)throw yl(new Error,r,bl.BAD_REQUEST);let n=await Hg.upsertRecords(e);return Fg(Hk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Dse,"upsertData");function Fg(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===kk?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Hk?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Fg,"returnObject");function vse(e){return en.transformReq(e),Hg.flush(e.schema,e.table)}a(vse,"flush")});var _w=U((fMe,Vk)=>{var Mse=ct(),Ew=require("joi"),{hdbTable:Use,hdbDatabase:qk}=Ko(),$k={schema:qk,database:qk,table:Use},xse={date:Ew.date().iso().required()},Bse={timestamp:Ew.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Vk.exports=function(e,t){let r=t==="timestamp"?{...$k,...Bse}:{...$k,...xse},n=Ew.object(r);return Mse.validateBySchema(e,n)}});var Wk=U((mMe,Yk)=>{var Fse=ct(),gw=require("joi"),{hdbTable:kse,hdbDatabase:Kk}=Ko(),Hse=gw.object({schema:Kk,database:Kk,table:kse,hash_values:gw.array().required(),ids:gw.array()});Yk.exports=function(e){return Fse.validateBySchema(e,Hse)}});var yw=U((pMe,jk)=>{"use strict";var Sw=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}},Tw=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}},Rw=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};jk.exports={InsertObject:Sw,NoSQLSeachObject:Tw,DeleteResponseObject:Rw}});var ac=U((EMe,Zk)=>{"use strict";var Qk=_w(),Gse=Wk(),Al=ue(),zk=require("moment"),Jk=ee(),{promisify:qse,callbackify:$se}=require("util"),Il=(G(),P(j)),Vse=_i(),bw=qse(Vse.getTableSchema),Aw=ms(),{DeleteResponseObject:Kse}=yw(),{handleHDBError:ic,hdbErrors:Yse}=ge(),{HDB_ERROR_MSGS:Gg,HTTP_STATUS_CODES:oc}=Yse,Wse="records successfully deleted",jse=$se(Xk);Zk.exports={delete:jse,deleteRecord:Xk,deleteFilesBefore:zse,deleteAuditLogsBefore:Qse};async function zse(e){let t=Qk(e,"date");if(t)throw ic(t,t.message,oc.BAD_REQUEST,void 0,void 0,!0);if(Al.transformReq(e),!zk(e.date,zk.ISO_8601).isValid())throw ic(new Error,Gg.INVALID_DATE,oc.BAD_REQUEST,Il.LOG_LEVELS.ERROR,Gg.INVALID_DATE,!0);let n=Al.checkSchemaTableExist(e.schema,e.table);if(n)throw ic(new Error,n,oc.NOT_FOUND,Il.LOG_LEVELS.ERROR,n,!0);let s=await Aw.deleteRecordsBefore(e);if(await bw(e.schema,e.table),Jk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(zse,"deleteFilesBefore");async function Qse(e){let t=Qk(e,"timestamp");if(t)throw ic(t,t.message,oc.BAD_REQUEST,void 0,void 0,!0);if(Al.transformReq(e),isNaN(e.timestamp))throw ic(new Error,Gg.INVALID_VALUE("Timestamp"),oc.BAD_REQUEST,Il.LOG_LEVELS.ERROR,Gg.INVALID_VALUE("Timestamp"),!0);let r=Al.checkSchemaTableExist(e.schema,e.table);if(r)throw ic(new Error,r,oc.NOT_FOUND,Il.LOG_LEVELS.ERROR,r,!0);let n=await Aw.deleteAuditLogsBefore(e);return await bw(e.schema,e.table),Jk.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Qse,"deleteAuditLogsBefore");async function Xk(e){e.ids&&(e.hash_values=e.ids);let t=Gse(e);if(t)throw ic(t,t.message,oc.BAD_REQUEST,void 0,void 0,!0);Al.transformReq(e);let r=Al.checkSchemaTableExist(e.schema,e.table);if(r)throw ic(new Error,r,oc.NOT_FOUND,Il.LOG_LEVELS.ERROR,r,!0);try{await bw(e.schema,e.table);let n=await Aw.deleteRecords(e);return Al.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Wse}`),n}catch(n){if(n.message===Il.SEARCH_NOT_FOUND_MESSAGE){let s=new Kse;return s.message=Il.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(Xk,"deleteRecord")});var Ow={};ye(Ow,{HASH_FUNCTION:()=>Vr,hash:()=>Nw,validate:()=>Cw});function Iw(e=Ep){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(hp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Nw(e,t=Vr[tH?.toUpperCase()]??Vr.SHA256){return ww[t](e)}function Cw(e,t,r=Vr[tH?.toUpperCase()]??Vr.SHA256){return e?Jse[r](e,t):!1}var hp,dd,eH,tH,Ep,rH,Vr,ww,Jse,Pw=ie(()=>{hp=b(require("node:crypto")),dd=b(require("argon2")),eH=b(de());G();tH=(0,eH.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Ep=16,rH=9,Vr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(Iw,"generateSalt");ww={[Vr.MD5]:(e,t=void 0)=>{t=t??Iw(rH);let r=hp.createHash(Vr.MD5).update(e+t).digest("hex");return t+r},[Vr.SHA256]:(e,t=void 0)=>{t=t??Iw(Ep);let r=hp.createHash(Vr.SHA256).update(e+t).digest("hex");return t+r},[Vr.ARGON2ID]:async e=>{let t=Iw(Ep),r=await dd.hash(e,{type:dd.argon2id,salt:Buffer.from(t)});return t+r}},Jse={[Vr.MD5]:(e,t)=>{let r=e.slice(0,rH);return e===ww[Vr.MD5](t,r)},[Vr.SHA256]:(e,t)=>{let r=e.slice(0,Ep);return e===ww[Vr.SHA256](t,r)},[Vr.ARGON2ID]:async(e,t)=>await dd.verify(e.slice(Ep),t)};a(Nw,"hash");a(Cw,"validate")});var sH=U((TMe,nH)=>{var Lw=ct(),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 Xse(e){return Sn.password.presence=!0,Sn.username.presence=!0,Sn.role.presence=!0,Sn.active.presence=!0,Lw.validateObject(e,Sn)}a(Xse,"addUserValidation");function Zse(e){return Sn.password.presence=!1,Sn.username.presence=!0,Sn.role.presence=!1,Sn.active.presence=!1,Lw.validateObject(e,Sn)}a(Zse,"alterUserValidation");function eie(e){return Sn.password.presence=!1,Sn.username.presence=!0,Sn.role.presence=!1,Sn.active.presence=!1,Lw.validateObject(e,Sn)}a(eie,"dropUserValidation");nH.exports={addUserValidation:Xse,alterUserValidation:Zse,dropUserValidation:eie}});var _H=U((yMe,EH)=>{"use strict";var Dw=require("recursive-iterator"),tie=require("alasql"),vw=require("clone"),iH=ue(),{handleHDBError:oH,hdbErrors:rie}=ge(),{HDB_ERROR_MSGS:aH,HTTP_STATUS_CODES:cH}=rie,{getDatabases:nie}=(Oe(),P(Et)),sie=["DISTINCT_ARRAY"],lH=Symbol("validateTables"),Mw=Symbol("validateTable"),uH=Symbol("validateAllColumns"),qg=Symbol("findColumn"),dH=Symbol("validateOrderBy"),_p=Symbol("validateSegment"),Uw=Symbol("validateColumn"),fH=Symbol("setColumnsForTable"),mH=Symbol("checkColumnsForAsterisk"),pH=Symbol("validateGroupBy"),hH=Symbol("hasColumns"),xw=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[lH](),this[mH](),this[uH]()}[lH](){if(this[hH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Mw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Mw](t.table)})}}[hH](){let t=!1,r=new Dw(this.statement);for(let{node:n}of r)if(n&&n.columnid){t=!0;break}return t}[Mw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=nie();if(!r[t.databaseid])throw oH(new Error,aH.SCHEMA_NOT_FOUND(t.databaseid),cH.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw oH(new Error,aH.TABLE_NOT_FOUND(t.databaseid,t.tableid),cH.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=vw(s);i.table=vw(t),this.attributes.push(i)})}[qg](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)}[mH](){let t=new Dw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[fH](r.tableid)}[fH](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new tie.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[uH](){this[_p](this.statement.columns,!1),this[_p](this.statement.joins,!1),this[_p](this.statement.where,!1),this[pH](this.statement.group,!1),this[_p](this.statement.order,!0)}[_p](t,r){if(!t)return;let n=new Dw(t),s=[];for(let{node:i}of n)!iH.isEmpty(i)&&!iH.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[dH](i):s.push(this[Uw](i)));return s}[pH](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&sie.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=vw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[qg](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[qg](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`}[dH](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[Uw](t)}[Uw](t){let r=this[qg](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]}};EH.exports=xw});var RH=U((AMe,TH)=>{"use strict";var gH=require("lodash"),gp=require("mathjs"),iie=require("jsonata"),SH=ue();TH.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?gH.uniqWith(e,gH.isEqual):e,"distinct_array"),searchJSON:oie,mad:Sp.bind(null,gp.mad),mean:Sp.bind(null,gp.mean),mode:Sp.bind(null,gp.mode),prod:Sp.bind(null,gp.prod),median:Sp.bind(null,gp.median)};function Sp(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(Sp,"aggregateFunction");function oie(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(SH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),SH.isEmpty(this.__ala__.res[r])){let n=iie(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(oie,"searchJSON")});var bH=U((wMe,yH)=>{"use strict";var _r=require("moment"),Bw="YYYY-MM-DDTHH:mm:ss.SSSZZ";_r.suppressDeprecationWarnings=!0;yH.exports={current_date:a(()=>_r().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>_r().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return _r(e).utc().format("YYYY");case"month":return _r(e).utc().format("MM");case"day":return _r(e).utc().format("DD");case"hour":return _r(e).utc().format("HH");case"minute":return _r(e).utc().format("mm");case"second":return _r(e).utc().format("ss");case"millisecond":return _r(e).utc().format("SSS");default:break}},"extract"),date:a(e=>_r(e).utc().format(Bw),"date"),date_format:a((e,t)=>_r(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>_r(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>_r(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=_r(e).utc(),s=_r(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>_r().utc().valueOf(),"now"),get_server_time:a(()=>_r().format(Bw),"get_server_time"),offset_utc:a((e,t)=>_r(e).utc().utcOffset(t).format(Bw),"offset_utc")}});var NH=U((CMe,wH)=>{"use strict";var aie=require("@turf/area"),cie=require("@turf/length"),lie=require("@turf/circle"),uie=require("@turf/difference"),die=require("@turf/distance"),fie=require("@turf/boolean-contains"),mie=require("@turf/boolean-equal"),pie=require("@turf/boolean-disjoint"),hie=require("@turf/helpers"),AH=(G(),P(j)),Ze=ue(),sa=ee();wH.exports={geoArea:Eie,geoLength:_ie,geoCircle:gie,geoDifference:Sie,geoDistance:IH,geoNear:Tie,geoContains:Rie,geoEqual:yie,geoCrosses:bie,geoConvert:Aie};function Eie(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return aie.default(e)}catch(t){return sa.trace(t,e),NaN}}a(Eie,"geoArea");function _ie(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return cie.default(e,{units:t||"kilometers"})}catch(r){return sa.trace(r,e),NaN}}a(_ie,"geoLength");function gie(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return lie.default(e,t,{units:r||"kilometers"})}catch(n){return sa.trace(n,e,t),NaN}}a(gie,"geoCircle");function Sie(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 uie(e,t)}catch(r){return sa.trace(r,e,t),NaN}}a(Sie,"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 die.default(e,t,{units:r||"kilometers"})}catch(n){return sa.trace(n,e,t),NaN}}a(IH,"geoDistance");function Tie(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 sa.trace(s,e,t),!1}}a(Tie,"geoNear");function Rie(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 fie.default(e,t)}catch(r){return sa.trace(r,e,t),!1}}a(Rie,"geoContains");function yie(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 mie.default(e,t)}catch(r){return sa.trace(r,e,t),!1}}a(yie,"geoEqual");function bie(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!pie.default(e,t)}catch(r){return sa.trace(r,e,t),!1}}a(bie,"geoCrosses");function Aie(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(AH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(AH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),hie[t](e,r)}a(Aie,"geoConvert")});var $g=U((PMe,CH)=>{var wl=RH(),ps=bH(),eo=NH();CH.exports=e=>{e.aggr.mad=e.aggr.MAD=wl.mad,e.aggr.mean=e.aggr.MEAN=wl.mean,e.aggr.mode=e.aggr.MODE=wl.mode,e.aggr.prod=e.aggr.PROD=wl.prod,e.aggr.median=e.aggr.MEDIAN=wl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=wl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=wl.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=eo.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=eo.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=eo.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=eo.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=eo.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=eo.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=eo.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=eo.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=eo.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=eo.geoNear}});var DH=U((LMe,LH)=>{"use strict";var Tp=require("lodash"),$n=require("alasql");$n.options.cache=!1;var Iie=$g(),OH=require("clone"),Vg=require("recursive-iterator"),Ke=ee(),ot=ue(),fd=ms(),wie=(G(),P(j)),{hdbErrors:Nie}=ge(),{getDatabases:PH}=(Oe(),P(Et)),Cie="IS NULL",gi="There was a problem performing this search. Please check the logs and try again.";Iie($n);var Fw=class{static{a(this,"SQLSearch")}constructor(t,r){if(ot.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(),ot.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!ot.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(gi)}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(gi)}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(gi)}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(gi)}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(gi)}}_getColumns(){let t=new Vg(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(OH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Tp.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=PH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(ot.isEmpty(this.statement.where)){Ke.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Vg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ot.isEmpty(r)&&r.right)if(ot.isNotEmptyAndHasValue(r.right.value)){let n=ot.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new $n.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=ot.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new $n.yy.LogicValue({value:i}):n instanceof $n.yy.StringValue&&ot.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new $n.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 Vg(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(!ot.isEmpty(wie.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ot.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ot.isEmptyOrZeroLength(r.left.columnid)||ot.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(ot.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"=":!ot.isEmpty(r.right.value)||!ot.isEmpty(r.left.value)?n.add(ot.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(ot.isEmptyOrZeroLength(this.all_table_attributes)&&ot.isEmptyOrZeroLength(this.statement.from)&&ot.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&&Tp.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(ot.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);ot.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(ot.isEmptyOrZeroLength(this.all_table_attributes)&&!ot.isEmptyOrZeroLength(this.columns.columns))return t;if(ot.isEmptyOrZeroLength(this.all_table_attributes)&&ot.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await $n.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(OH(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(ot.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(Cie)>-1&&this.tables.forEach(s=>{let i={columnid:PH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Tp.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),!ot.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!ot.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await fd.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(gi)}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 fd.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(gi)}else if(!ot.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!ot.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 fd.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(gi)}else try{c.attribute=s.attribute,c.value="*";let d=await fd.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(gi)}}}_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 $n.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 $n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new $n.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 $n.yy.FuncValue:new $n.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 $n.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=Tp.difference(h,[...p.keys].map(_=>_.toString()));for(let _=0,y=E.length;_<y;_++){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 Vg(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=Tp.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(gi)}}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 fd.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 $n.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(Nie.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 fd.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(gi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};LH.exports=Fw});var Vn=U((vMe,vH)=>{"use strict";vH.exports={searchByConditions:Oie,searchByHash:Pie,searchByValue:Lie,search:Die};var kw=ms(),{transformReq:Hw}=ue();async function Oie(e){return Hw(e),kw.searchByConditions(e)}a(Oie,"searchByConditions");async function Pie(e){Hw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of kw.searchByHash(e))r&&t.push(r);return t}a(Pie,"searchByHash");async function Lie(e){Hw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of kw.searchByValue(e))t.push(r);return t}a(Lie,"searchByValue");function Die(e,t){try{let r=_H(),n=DH(),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(Die,"search")});var ia=U((UMe,BH)=>{"use strict";var Rp=require("crypto"),vie=de(),{CONFIG_PARAMS:Mie}=(G(),P(j)),UH="aes-256-cbc",Uie=32,xie=16,Gw=64,xH=32,Bie=Gw+xH,MH=new Map;BH.exports={encrypt:Fie,decrypt:kie,createNatsTableStreamName:Hie};function Fie(e){let t=Rp.randomBytes(Uie),r=Rp.randomBytes(xie),n=Rp.createCipheriv(UH,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(Fie,"encrypt");function kie(e){let t=e.substr(0,Gw),r=e.substr(Gw,xH),n=e.substr(Bie,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Rp.createDecipheriv(UH,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(kie,"decrypt");function Hie(e,t){let r=vie.get(Mie.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=MH.get(r);return n||(n=Rp.createHash("md5").update(r).digest("hex"),MH.set(r,n)),n}a(Hie,"createNatsTableStreamName")});var Mt=U((BMe,kH)=>{"use strict";var Gie="nats-server.zip",qw="nats-server",qie=process.platform==="win32"?`${qw}.exe`:qw,$ie=/^[^\s.,*>]+$/,FH="__request__",Vie=a(e=>`${e}.${FH}`,"REQUEST_SUBJECT"),Kie={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Yie={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Wie={HUB:"hub.pid",LEAF:"leaf.pid"},jie={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},zie={SUCCESS:"success",ERROR:"error"},Qie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Jie={TXN:"txn",MSGID:"msgid"},md={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Xie={[md.ERR]:1,[md.WRN]:2,[md.INF]:3,[md.DBG]:4,[md.TRC]:5},Zie={debug:"-D",trace:"-DVV"};kH.exports={NATS_SERVER_ZIP:Gie,NATS_SERVER_NAME:qw,NATS_BINARY_NAME:qie,PID_FILES:Wie,NATS_CONFIG_FILES:Yie,SERVER_SUFFIX:jie,NATS_TERM_CONSTRAINTS_RX:$ie,REQUEST_SUFFIX:FH,UPDATE_REMOTE_RESPONSE_STATUSES:zie,CLUSTER_STATUS_STATUSES:Qie,REQUEST_SUBJECT:Vie,SUBJECT_PREFIXES:Jie,MSG_HEADERS:Kie,LOG_LEVELS:md,LOG_LEVEL_FLAGS:Zie,LOG_LEVEL_HIERARCHY:Xie}});var Vw=U((kMe,KH)=>{"use strict";var $H=require("fs-extra"),be=require("joi"),eoe=require("os"),{boolean:We,string:gt,number:gr,array:cc}=be.types(),{totalmem:HH}=require("os"),Nl=require("path"),toe=ee(),$w=ue(),GH=(G(),P(j)),roe=ct(),qH="log",noe="components",soe="Invalid logging.rotation.maxSize unit. Available units are G, M or K",ioe="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",ooe="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",aoe="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",coe="rootPath config parameter is undefined",Kn=be.alternatives([gr.min(0),gt]).optional().empty(null),Kg=be.alternatives([cc.items(gt,{host:gt.required(),port:Kn},{hostname:gt.required(),port:Kn}).empty(null),cc.items(gt)]),to,VH=!1;KH.exports={configValidator:loe,routesValidator:hoe,routeConstraints:Kg};function loe(e,t=!1){if(VH=t,to=e.rootPath,$w.isEmpty(to))throw coe;let r=We.optional(),n=gr.min(0).max(1e3).empty(null).default(poe),s=gt.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/,"directory path").empty(null).default(yp),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(yp),l=be.custom(doe).empty(null).default(yp),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:Kn,routes:Kg}).required()}).required(),leafNodes:be.object({network:be.object({port:Kn}).required()}).required(),network:be.object({port:Kn}).required()}).required(),leafServer:be.object({network:be.object({port:Kn,routes:Kg}).required(),streams:be.object({maxAge:gr.min(120).allow(null).optional(),maxBytes:gr.min(1).allow(null).optional(),maxMsgs:gr.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:gr.required(),cookie:be.object({domains:cc.items(gt).optional(),expires:gt.optional()}),enableSessions:We,hashFunction:gt.valid("md5","sha256","argon2id").optional().empty(null)}),We).optional(),analytics:be.object({aggregatePeriod:gr,replicate:We.optional()}),replication:be.object({hostname:be.alternatives(gt,gr).optional().empty(null),url:gt.optional().empty(null),port:Kn,securePort:Kn,routes:cc.optional().empty(null),databases:be.alternatives(gt,cc),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(moe).optional().empty(null),maxSize:gt.custom(foe).optional().empty(null),path:gt.optional().empty(null).default(yp)}).required(),root:s,stdStreams:We.required(),auditLog:We.required()}).required(),operationsApi:be.object({network:be.object({cors:We.optional(),corsAccessList:cc.optional(),headersTimeout:gr.min(1).optional(),keepAliveTimeout:gr.min(1).optional(),port:Kn,domainSocket:be.optional().empty("hdb/operations-server").default(yp),securePort:Kn,timeout:gr.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:Kn,securePort:Kn,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:gr.optional(),cors:We.optional(),corsAccessList:cc.optional(),headersTimeout:gr.min(1).optional(),port:Kn,securePort:Kn,maxHeaderSize:gr.optional(),mtls:be.alternatives([We.optional(),be.object({user:gt.optional(),certificateAuthority:i,required:We.optional()})]),threadRange:be.alternatives([cc.optional(),gt.optional()])}).required(),threads:be.alternatives(n.optional(),be.object({count:n.optional(),debug:be.alternatives(We.optional(),be.object({startingPort:gr.min(1).optional(),host:gt.optional(),waitForDebugger:We.optional()})),maxHeapMemory:gr.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:gr.optional()})]),compactOnStart:We.optional(),compactOnStartKeepBackup:We.optional(),noReadAhead:We.optional(),path:l,prefetchWrites:We.optional(),maxFreeSpaceToLoad:gr.optional(),maxFreeSpaceToRetain:gr.optional()}).required(),ignoreScripts:We.optional(),tls:be.alternatives([be.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(loe,"configValidator");function uoe(e){return VH||$H.existsSync(e)?null:`Specified path ${e} does not exist.`}a(uoe,"doesPathExist");function doe(e,t){be.assert(e,gt.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/,"directory path"));let r=uoe(e);if(r)return t.message(r)}a(doe,"validatePath");function foe(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(soe);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(ooe):e}a(foe,"validateRotationMaxSize");function moe(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(ioe);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(aoe):e}a(moe,"validateRotationInterval");function poe(e,t){let r=t.state.path.join("."),n=eoe.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||HH();return i=Math.round(Math.min(i,HH())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),toe.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(poe,"setDefaultThreads");function yp(e,t){let r=t.state.path.join(".");if(!$w.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if($w.isEmpty(to))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Nl.join(to,noe);case"logging.root":return Nl.join(to,qH);case"clustering.leafServer.streams.path":return Nl.join(to,"clustering","leaf");case"storage.path":let n=Nl.join(to,GH.LEGACY_DATABASES_DIR_NAME);return $H.existsSync(n)?n:Nl.join(to,GH.DATABASES_DIR_NAME);case"logging.rotation.path":return Nl.join(to,qH);case"operationsApi.network.domainSocket":return r==null?null:Nl.join(to,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(yp,"setDefaultRoot");function hoe(e){let t=be.object({routes:Kg});return roe.validateBySchema({routes:e},t)}a(hoe,"routesValidator")});var WH={};ye(WH,{getBackupDirPath:()=>Yg});function Yg(e){return YH.join(e,IA)}var YH,Kw=ie(()=>{YH=b(require("node:path"));G();a(Yg,"getBackupDirPath")});var zg={};ye(zg,{ConfigEnvVarError:()=>pd,applyRuntimeEnvConfig:()=>Ioe,filterArgsAgainstRuntimeConfig:()=>Eoe});function Wg(){let{loggerWithTag:e}=Er();return e("env-config")}function jg(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&Object.prototype.toString.call(e)==="[object Object]"}function Eoe(e){if(!process.env.HARPER_SET_CONFIG)return e;let t;try{t=JSON.parse(process.env.HARPER_SET_CONFIG)}catch(i){return Wg().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 bp(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;jg(s)?Object.assign(r,bp(s,i)):r[i]=s}return r}function Ap(e,t){let r=t.split("."),n=e;for(let s of r){if(n==null)return;n=n[s]}return n}function Ip(e,t,r){let n=t.split("."),s=e;for(let i=0;i<n.length-1;i++){let o=n[i];jg(s[o])||(s[o]={}),s=s[o]}s[n[n.length-1]]=r}function Ww(e,t){let r=t.split("."),n=e;for(let s=0;s<r.length-1;s++){let i=r[s];if(!jg(n[i]))return;n=n[i]}delete n[r[r.length-1]]}function _oe(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 JH.createHash("sha256").update(r).digest("hex")}function goe(e,t){if(!e||e.trim()==="")return null;try{let r=JSON.parse(e.trim());if(!jg(r))throw new pd(`${t} must be a JSON object, got: ${typeof r}`,t);return r}catch(r){throw r instanceof pd?r:new pd(`Invalid JSON syntax in ${t}: ${r.message}`,t,r)}}function Soe(e){let t=Yw.join(Yg(e),XH);if(!lc.existsSync(t))return{version:"1.0",sources:{},originalValues:{},snapshots:{}};try{let r=lc.readJsonSync(t);return r.originalValues||(r.originalValues={}),r}catch(r){return Wg().warn(`Failed to load config state file, starting fresh: ${r.message}`),{version:"1.0",sources:{},originalValues:{},snapshots:{}}}}function Toe(e,t){let r=Yg(e),n=Yw.join(r,XH);lc.ensureDirSync(r),lc.writeJsonSync(n,t,{spaces:2})}function Roe(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=Ap(e,n),c=Ap(i.config,n);JSON.stringify(o)!==JSON.stringify(c)&&r.push(n)}return r}function jH(e,t,r,n,s={}){let{respectSources:i=[],storeOriginals:o=!1}=s,c=bp(r);for(let[l,u]of Object.entries(c)){let d=t.sources[l],f=Ap(e,l);d&&i.includes(d)||(o&&!d&&f!==void 0&&f!==null&&(l in t.originalValues||(t.originalValues[l]=f)),Ip(e,l,u),t.sources[l]=n)}}function yoe(e,t,r,n,s){let i=Object.keys(bp(r)),o=Object.keys(bp(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?(Ip(e,l,t.originalValues[l]),delete t.originalValues[l]):Ww(e,l),delete t.sources[l])}function boe(e,t,r){let n=Object.keys(t.sources).filter(s=>t.sources[s]===r);for(let s of n)Ww(e,s),delete t.sources[s]}function Aoe(e,t,r){let n={};for(let s in t.sources)if(t.sources[s]===r){let i=Ap(e,s);i!==void 0&&Ip(n,s,i)}return n}function zH(e,t,r,n,s={}){let i=process.env[r];if(!i)return;let o=Wg(),c=goe(i,r);if(!c)return;let l=_oe(c),u=t.snapshots[n];if(n==="HARPER_SET_CONFIG")jH(e,t,c,n,{respectSources:[],storeOriginals:!0});else if(n==="HARPER_DEFAULT_CONFIG")if(s.isInstall)jH(e,t,c,n,{respectSources:["HARPER_SET_CONFIG","user"],storeOriginals:!0});else{let m=bp(c);for(let[p,h]of Object.entries(m)){let E=t.sources[p],_=Ap(e,p);if(!(E&&E!=="HARPER_DEFAULT_CONFIG")){if(!E&&_!=null){p in t.originalValues||(t.originalValues[p]=_);continue}Ip(e,p,h),t.sources[p]=n}}}u&&u.hash!==l&&yoe(e,t,u.config,c,n);let d=Aoe(e,t,n);t.snapshots[n]={hash:l,config:d};let f=s.isInstall?"installation":"runtime";o.debug?.(`Applied ${r} at ${f}`)}function QH(e,t,r,n){if(!t.snapshots[n])return;let s=Wg();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?(Ip(e,o,t.originalValues[o]),delete t.originalValues[o]):Ww(e,o),delete t.sources[o]}else boe(e,t,n);delete t.snapshots[n],s.debug?.(`${r} removed, cleaned up values`)}function Ioe(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG,i=Soe(t);if(!n&&!s&&Object.keys(i.snapshots).length===0)return e;if(!r.isInstall){let o=Roe(e,i);for(let c of o)i.sources[c]="user"}return zH(e,i,"HARPER_DEFAULT_CONFIG","HARPER_DEFAULT_CONFIG",r),n||QH(e,i,"HARPER_DEFAULT_CONFIG","HARPER_DEFAULT_CONFIG"),zH(e,i,"HARPER_SET_CONFIG","HARPER_SET_CONFIG",r),s||QH(e,i,"HARPER_SET_CONFIG","HARPER_SET_CONFIG"),Toe(t,i),e}var lc,Yw,JH,XH,pd,Qg=ie(()=>{lc=b(require("fs-extra")),Yw=b(require("node:path")),JH=b(require("node:crypto"));Kw();XH=".harper-config-state.json";a(Wg,"getLogger");pd=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(jg,"isPlainObject");a(Eoe,"filterArgsAgainstRuntimeConfig");a(bp,"flattenObject");a(Ap,"getNestedValue");a(Ip,"setNestedValue");a(Ww,"deleteNestedValue");a(_oe,"hashConfig");a(goe,"parseConfigEnvVar");a(Soe,"loadConfigState");a(Toe,"saveConfigState");a(Roe,"detectConfigDrift");a(jH,"applyConfigLayer");a(yoe,"handleDeletions");a(boe,"removeValuesWithSource");a(Aoe,"buildSnapshot");a(zH,"processEnvVar");a(QH,"cleanupRemovedEnvVar");a(Ioe,"applyRuntimeEnvConfig")});var Nt=U(lr=>{"use strict";var Fs=(G(),P(j)),Lr=ue(),Ut=ee(),{configValidator:woe,routesValidator:ZH}=Vw(),tn=require("fs-extra"),Zg=require("yaml"),Es=require("path"),Noe=require("is-number"),tG=require("properties-reader"),Coe=require("lodash"),{handleHDBError:Ooe}=ge(),{HTTP_STATUS_CODES:Poe,HDB_ERROR_MSGS:hd}=En(),{server:Loe}=(qr(),P(Um)),{PACKAGE_ROOT:rG}=Dt(),{getBackupDirPath:Doe}=(Kw(),P(WH)),{DATABASES_PARAM_CONFIG:wp,CONFIG_PARAMS:hs,CONFIG_PARAM_MAP:Si}=Fs,voe="Unable to get config value because config is uninitialized",Moe="Config successfully initialized",Uoe="Error backing up config file",xoe="Empty parameter sent to getConfigValue",nG=Es.join(rG,"config","yaml",Fs.HDB_DEFAULT_CONFIG_FILE),Boe=Es.join(rG,"config","yaml","defaultNatsConfig.yaml"),Foe="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",eG={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"},Jg,Kt,Xg;lr.createConfigFile=koe;lr.getDefaultConfig=Hoe;lr.getConfigValue=iG;lr.initConfig=eS;lr.flattenConfig=Ed;lr.updateConfigValue=oG;lr.updateConfigObject=qoe;lr.getConfiguration=Koe;lr.setConfiguration=Yoe;lr.readConfigFile=Jw;lr.getClusteringRoutes=Woe;lr.initOldConfig=cG;lr.getConfigFromFile=joe;lr.getConfigFilePath=Cl;lr.addConfig=zoe;lr.deleteConfigFromFile=Qoe;lr.getConfigObj=Joe;lr.resolvePath=jw;lr.getFlatConfigObj=Xoe;function jw(e){if(e?.startsWith("~/"))return Es.join(Lr.getHomeDir(),e.slice(1));let t=de();try{return Es.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(jw,"resolvePath");function koe(e,t=!1){let r=uc(nG);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=Zg.parseDocument(tn.readFileSync(Boe,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Jg=Ed(r.toJSON());let n;for(let c in e){let l=Si[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=zw(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){Ut.error(f)}}}n&&sG(r,n),aG(r,null,{isInstall:!0}),Qw(r,t);let s=r.toJSON();Kt=Ed(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)),Ut.trace(`Config file written to ${o}`)}a(koe,"createConfigFile");function sG(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Lr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(wp.TABLES))for(let i in n[s][wp.TABLES])for(let o in n[s][wp.TABLES][i]){let c=n[s][wp.TABLES][i][o],l=[hs.DATABASES,s,wp.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){Ut.error("Error parsing schemas CLI/env config arguments",n)}}a(sG,"setSchemasConfig");function Hoe(e){if(Jg===void 0){let r=uc(nG);Jg=Ed(r.toJSON())}let t=Si[e.toLowerCase()];if(t!==void 0)return Jg[t.toLowerCase()]}a(Hoe,"getDefaultConfig");function iG(e){if(e==null){Ut.info(xoe);return}if(Kt===void 0){Ut.trace(voe);return}let t=Si[e.toLowerCase()];if(t!==void 0)return Kt[t.toLowerCase()]}a(iG,"getConfigValue");function Cl(e=Lr.getPropsFilePath()){let t=Lr.getEnvCliRootPath();if(t)return jw(Es.join(t,Fs.HDB_CONFIG_FILE));let r=tG(e);return jw(r.get(Fs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(Cl,"getConfigFilePath");function eS(e=!1){if(Kt===void 0||e){let t;if(!Lr.noBootFile()){t=Lr.getPropsFilePath();try{tn.accessSync(t,tn.constants.F_OK|tn.constants.R_OK)}catch(i){throw Ut.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Cl(t),n;if(r.includes("config/settings.js"))try{cG(r);return}catch(i){if(i.code!==Fs.NODE_ERROR_CODES.ENOENT)throw i}try{n=uc(r)}catch(i){if(i.code===Fs.NODE_ERROR_CODES.ENOENT){Ut.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 Ut.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Goe(n,r),aG(n,r),Qw(n);let s=n.toJSON();if(Loe.config=s,Kt=Ed(s),Kt.logging_rotation_rotate)for(let i in eG)Kt[i]&&Ut.error(`Config ${eG[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ut.trace(Moe)}}a(eS,"initConfig");function Goe(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(Ut.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(Goe,"checkForUpdatedConfig");function Qw(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 hd.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 hd.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=woe(r,t);if(n.error)throw hd.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(Qw,"validateConfig");function qoe(e,t){Kt===void 0&&(Kt={});let r=Si[e.toLowerCase()];if(r===void 0){Ut.trace(`Unable to update config object because config param '${e}' does not exist`);return}Kt[r.toLowerCase()]=t}a(qoe,"updateConfigObject");function oG(e,t,r=void 0,n=!1,s=!1,i=!1){Kt===void 0&&eS();let o=iG(Si.hdb_root),c=Es.join(o,Fs.HDB_CONFIG_FILE),l=uc(c),u;if(r&&Kt){let m=!1;for(let p in r)if(r[p]!=Kt[p.toLowerCase()]){m=!0;break}if(!m){Ut.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=Si[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=zw(m,t);l.setIn([...p],h)}else for(let m in r){let p=Si[m.toLowerCase()];if(p===hs.HTTP_SECUREPORT&&r[m]===Kt[hs.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===hs.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Kt[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 _=zw(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(y){Ut.error(y)}}}u&&sG(l,u),Qw(l);let d=l.getIn(["rootPath"]),f=Es.join(d,Fs.HDB_CONFIG_FILE);if(n===!0&&$oe(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);tn.writeFileSync(f,String(l)),s&&(Kt=Ed(l.toJSON())),Ut.trace(`Config parameter: ${e} updated with value: ${t}`)}a(oG,"updateConfigValue");function $oe(e,t){try{let r=Es.join(Doe(t),`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Fs.HDB_CONFIG_FILE}.bak`);tn.copySync(e,r),Ut.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ut.error(Uoe),Ut.error(r)}}a($oe,"backupConfigFile");var Voe=["databases"];function Ed(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}),Xg=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])&&!Voe.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()]&&Si[l]&&(s[Si[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Ed,"flattenConfig");function zw(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(Noe(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Lr.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 Lr.autoCast(t)}a(zw,"castConfigValue");function Koe(){let e=Lr.getPropsFilePath(),t=Cl(e);return uc(t).toJSON()}a(Koe,"getConfiguration");async function Yoe(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return oG(void 0,void 0,s,!0),Foe}catch(i){throw typeof i=="string"||i instanceof String?Ooe(i,i,Poe.BAD_REQUEST,void 0,void 0,!0):i}}a(Yoe,"setConfiguration");function Jw(){let e=Lr.getPropsFilePath();try{tn.accessSync(e,tn.constants.F_OK|tn.constants.R_OK)}catch(n){if(!Lr.noBootFile())throw Ut.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Cl(e);return uc(t).toJSON()}a(Jw,"readConfigFile");function uc(e){return Zg.parseDocument(tn.readFileSync(e,"utf8"),{simpleKeys:!0})}a(uc,"parseYamlDoc");function aG(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG;if(!n&&!s)return;let{applyRuntimeEnvConfig:i}=(Qg(),P(zg)),o=e.getIn(["rootPath"]);if(!o){Ut.warn("Cannot apply runtime env config: rootPath not found in config");return}let c=e.toJSON();try{i(c,o,r);let l=Zg.parseDocument(Zg.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 Ut.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)),Ut.debug("Config file updated with runtime env var values")}catch(l){throw Ut.error(`Failed to write config file after applying runtime env vars: ${l.message}`),l}}a(aG,"applyRuntimeEnvVarConfig");function Woe(){let e=Jw(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Lr.isEmptyOrZeroLength(t)?[]:t;let r=ZH(t);if(r)throw hd.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Lr.isEmptyOrZeroLength(n)?[]:n;let s=ZH(n);if(s)throw hd.CONFIG_VALIDATION(s.message);if(!Lr.isEmptyOrZeroLength(n)&&!Lr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Lr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw hd.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(Woe,"getClusteringRoutes");function cG(e){let t=tG(e);Kt={};for(let r in Si){let n=t.get(r.toUpperCase());if(Lr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Si[r].toLowerCase();s===hs.LOGGING_ROOT?Kt[s]=Es.dirname(n):Kt[s]=n}return Kt}a(cG,"initOldConfig");function joe(e){let t=Jw();return Coe.get(t,e.replaceAll("_","."))}a(joe,"getConfigFromFile");async function zoe(e,t){let r=uc(Cl());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(Cl(),String(r))}a(zoe,"addConfig");function Qoe(e){let t=Cl(Lr.getPropsFilePath()),r=uc(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Es.join(n,Fs.HDB_CONFIG_FILE);tn.writeFileSync(s,String(r))}a(Qoe,"deleteConfigFromFile");function Joe(){return Xg||(eS(),Xg)}a(Joe,"getConfigObj");function Xoe(){return Kt||eS(),Kt}a(Xoe,"getFlatConfigObj")});var so={};ye(so,{ACTIVE_BOOLEAN:()=>hG,ALTERUSER_NOTHING_TO_UPDATE:()=>fG,EMPTY_PASSWORD:()=>mG,EMPTY_ROLE:()=>pG,USERNAME_REQUIRED:()=>dG,addUser:()=>iN,alterUser:()=>oN,dropUser:()=>aN,findAndValidateUser:()=>gd,getClusterUser:()=>uae,getSuperUser:()=>Op,getUsersWithRolesCache:()=>lae,listUsers:()=>nS,listUsersExternal:()=>lN,setUsersWithRolesCache:()=>Ri,userInfo:()=>cN});async function iN(e){let t=gG.cleanAttributes(e,SG),r=_G.addUserValidation(t);if(r)throw new Ti(r.message);let n=await Cp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Ti(_d.ROLE_NAME_NOT_FOUND(t.role),oa.NOT_FOUND);if(n.length>1)throw new Ti(_d.DUP_ROLES_FOUND(t.role),oa.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=nN.encrypt(t.password)),t.password=await Np.hash(t.password,tS),t.hash_function=tS,t.role=n[0].id;let s=await EG.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(rN.debug(s),await Ri(),s.skipped_hashes.length===1)throw new Ti(_d.USER_ALREADY_EXISTS(t.username),oa.CONFLICT);return await tN.signalUserChange(new sN(process.pid)),`${t.username} successfully added`}async function oN(e){let t=gG.cleanAttributes(e,SG);if(ro.isEmptyOrZeroLength(t.username))throw new Error(dG);if(ro.isEmptyOrZeroLength(t.password)&&ro.isEmptyOrZeroLength(t.role)&&ro.isEmptyOrZeroLength(t.active))throw new Error(fG);if(!ro.isEmpty(t.password)&&ro.isEmptyOrZeroLength(t.password.trim()))throw new Error(mG);if(!ro.isEmpty(t.active)&&!ro.isBoolean(t.active))throw new Error(hG);if(!ro.isEmpty(t.password)&&!ro.isEmptyOrZeroLength(t.password.trim())&&(aae(t.username)&&(t.hash=nN.encrypt(t.password)),t.password=await Np.hash(t.password,tS),t.hash_function=tS),t.role==="")throw new Error(pG);if(t.role){let n=await Cp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Ti(_d.ALTER_USER_ROLE_NOT_FOUND(t.role),oa.NOT_FOUND);if(n.length>1)throw new Ti(_d.DUP_ROLES_FOUND(t.role),oa.CONFLICT);t.role=n[0].id}let r=await EG.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Ri(),await tN.signalUserChange(new sN(process.pid)),r}function aae(e){let t=!1,r=no.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}async function aN(e){let t=_G.dropUserValidation(e);if(t)throw new Ti(t.message);if(no.get(e.username)===void 0)throw new Ti(_d.USER_NOT_EXIST(e.username),oa.NOT_FOUND);let r=await oae({table:"hdb_user",schema:"system",hash_values:[e.username]});return rN.debug(r),await Ri(),await tN.signalUserChange(new sN(process.pid)),`${e.username} successfully deleted`}async function cN(e){if(!e||!e.hdb_user)return"There was no user info in the body";let t=eN.cloneDeep(e.hdb_user),r=await Cp.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 lN(){let e=await nS();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}async function nS(){let e=await Cp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=eN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Cp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=eN.cloneDeep(s),s.role=t[s.role],cae(s.role),n.set(s.username,s);return n}function cae(e){if(!e){rN.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(nae)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}async function Ri(e=void 0){e?no=e:no=await nS()}async function lae(){return no||await Ri(),no}async function gd(e,t,r=!0){no||await Ri();let n=no.get(e);if(!n){if(!r)return{username:e};throw new Ti(Xw.GENERIC_AUTH_FAIL,oa.UNAUTHORIZED)}if(n&&!n.active)throw new Ti(Xw.USER_INACTIVE,oa.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(uG.get(t)===n.password)return s;{let i=Np.validate(n.password,t,n.hash_function||Np.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)uG.set(t,n.password);else throw new Ti(Xw.GENERIC_AUTH_FAIL,oa.UNAUTHORIZED)}}return s}async function Op(){no||await Ri();for(let[,e]of no)if(e.role.role==="super_user")return e}async function uae(){let e=await nS(),t=tae.getConfigFromFile(Zw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(r==null||r?.role?.role!==Zw.ROLE_TYPES_ENUM.CLUSTER_USER)return;let n=nN.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+lG.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+lG.SERVER_SUFFIX.ADMIN,r}var dG,fG,mG,pG,hG,EG,Zoe,Np,_G,Cp,tN,ro,gG,rN,eae,nN,Zw,lG,tae,rae,nae,sae,Ti,oa,Xw,_d,sN,eN,rS,iae,SG,uG,oae,tS,no,TG,_s=ie(()=>{"use strict";dG="username is required",fG="nothing to update, must supply active, role or password to update",mG="password cannot be an empty string",pG="If role is specified, it cannot be empty.",hG="active must be true or false",EG=qn(),Zoe=ac(),Np=(Pw(),P(Ow)),_G=sH(),Cp=Vn(),tN=jo(),ro=ue(),gG=require("validate.js"),rN=ee(),{promisify:eae}=require("util"),nN=ia(),Zw=(G(),P(j)),lG=Mt(),tae=Nt(),rae=de(),nae=fl(),{hdbErrors:sae,ClientError:Ti}=ge(),{HTTP_STATUS_CODES:oa,AUTHENTICATION_ERROR_MSGS:Xw,HDB_ERROR_MSGS:_d}=sae,{UserEventMsg:sN}=ls(),eN=require("lodash"),{server:rS}=(qr(),P(Um)),iae=ee();rS.getUser=(e,t)=>gd(e,t,t!=null);rS.authenticateUser=(e,t)=>gd(e,t);SG={username:!0,active:!0,role:!0,password:!0},uG=new Map,oae=eae(Zoe.delete),tS=rae.get(Zw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Np.HASH_FUNCTION.SHA256;a(iN,"addUser");a(oN,"alterUser");a(aae,"isClusterUser");a(aN,"dropUser");a(cN,"userInfo");a(lN,"listUsersExternal");a(nS,"listUsers");a(cae,"appendSystemTablesToRole");a(Ri,"setUsersWithRolesCache");a(lae,"getUsersWithRolesCache");a(gd,"findAndValidateUser");a(Op,"getSuperUser");a(uae,"getClusterUser");TG=[];rS.invalidateUser=function(e){for(let t of TG)try{t(e)}catch(r){iae.error("Error invalidating user",r)}};rS.onInvalidatedUser=function(e){TG.push(e)}});var Vm=U((WMe,bG)=>{"use strict";var gs=ee(),Tn=(G(),P(j)),dae=i0(),fae=(_s(),P(so)),{validateEvent:uN}=ls(),Pp=ms(),mae=require("process"),{resetDatabases:pae}=(Oe(),P(Et)),hae={[Tn.ITC_EVENT_TYPES.SCHEMA]:Eae,[Tn.ITC_EVENT_TYPES.USER]:yG,[Tn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:gae};async function Eae(e){let t=uN(e);if(t){gs.error(t);return}gs.trace("ITC schemaHandler received schema event:",e),await dae(e.message),await _ae(e.message)}a(Eae,"schemaHandler");async function _ae(e){try{Pp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Pp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Pp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=pae();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){gs.error(t)}}a(_ae,"syncSchemaMetadata");var RG=[];async function yG(e){try{try{Pp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Pp.resetReadTxn(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){gs.warn(r)}let t=uN(e);if(t){gs.error(t);return}gs.trace(`ITC userHandler ${Tn.HDB_ITC_CLIENT_PREFIX}${mae.pid} received user event:`,e),await fae.setUsersWithRolesCache();for(let r of RG)r()}catch(t){gs.error(t)}}a(yG,"userHandler");yG.addListener=function(e){RG.push(e)};async function gae(e){try{let t=uN(e);if(t){gs.error(t);return}gs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Lp(),P(dN)),{getWorkerIndex:n}=tt(),{sendItcEvent:s}=ls(),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(gae,"componentStatusRequestHandler");bG.exports=hae});var ls=U((zMe,IG)=>{"use strict";var fN=ue(),Sae=(G(),P(j)),{ITC_ERRORS:Dp}=En(),{threadId:Tae,isMainThread:Rae}=require("worker_threads"),{onMessageFromWorkers:yae,broadcastWithAcknowledgement:bae}=tt();IG.exports={sendItcEvent:Aae,validateEvent:AG,SchemaEventMsg:Iae,UserEventMsg:wae};var sS;yae(async(e,t)=>{sS=sS||Vm(),AG(e),sS[e.type]&&await sS[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Aae(e){return!Rae&&e.message&&(e.message.originator=Tae),bae(e)}a(Aae,"sendItcEvent");function AG(e){if(typeof e!="object")return Dp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||fN.isEmpty(e.type))return Dp.MISSING_TYPE;if(!e.hasOwnProperty("message")||fN.isEmpty(e.message))return Dp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||fN.isEmpty(e.message.originator))return Dp.MISSING_ORIGIN;if(Sae.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Dp.INVALID_EVENT(e.type)}a(AG,"validateEvent");function Iae(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(Iae,"SchemaEventMsg");function wae(e){this.originator=e}a(wae,"UserEventMsg")});var Ol,dc,mN,Sd,pN,Td,hN,iS=ie(()=>{Ol=b(En()),dc=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Ol.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},mN=class extends dc{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}.`,Ol.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},Sd=class extends dc{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Ol.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},pN=class extends dc{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Ol.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},Td=class extends dc{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Ol.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},hN=class extends dc{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,Ol.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 wG,Pl,NG,fc,vp,Rd,Nae,oS,EN=ie(()=>{wG=b(ls()),Pl=b(tt());G();NG=b(Er());ju();iS();fc=(0,NG.loggerWithTag)("componentStatus.crossThread"),vp=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,Pl.onMessageByType)($u.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;fc.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&&(fc.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,Pl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,_=a(()=>{let R=this.awaitingResponses.get(r);R&&R.length>=o&&!E&&(E=!0,S(),fc.trace?.(`Collected all ${R.length} expected responses for request ${r}`),p(R))},"checkComplete"),y=setTimeout(()=>{if(!E){E=!0;let R=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),fc.debug?.(`Collection timeout for request ${r}: collected ${R.length}/${o} responses`),p(R)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(y)},"cleanup");this.responseCheckers.set(r,_),(0,wG.sendItcEvent)({type:$u.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{_()}).catch(R=>{E=!0,S(),this.responseCheckers.delete(r),h(new Sd("sendItcEvent",R))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Pl.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 fc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof Sd?fc.error?.(`ITC failure during component status collection: ${r.message}`):fc.warn?.("Failed to collect component status from all threads:",r),fc.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,Pl.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)}},Rd=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 y=parseInt(E.substring(7));isNaN(y)||(n.workers[y]=_)}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}},Nae=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),oS=new vp(Nae)});var mc,aS=ie(()=>{HA();ju();EN();iS();mc=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 Td(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Le).includes(r))throw new Td(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Le).join(", ")}`);this.statusMap.set(t,new zu(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 oS.collect(t);return Rd.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 Sr,cS=ie(()=>{aS();Sr=new mc});function OG(e){let t=CG.get(e);return t||(t=new _N(e),CG.set(e,t)),t}function PG(){Sr.reset()}var _N,CG,io,LG,DG=ie(()=>{cS();ju();_N=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return Sr.setStatus(this.componentName,Le.HEALTHY,t),this}warning(t){return Sr.setStatus(this.componentName,Le.WARNING,t),this}error(t,r){return Sr.setStatus(this.componentName,Le.ERROR,t,r),this}loading(t){return Sr.setStatus(this.componentName,Le.LOADING,t||"Loading..."),this}unknown(t){return Sr.setStatus(this.componentName,Le.UNKNOWN,t),this}get(){return Sr.getStatus(this.componentName)}},CG=new Map;a(OG,"statusForComponent");io={loading(e,t){Sr.initializeLoading(e,t)},loaded(e,t){Sr.markLoaded(e,t)},failed(e,t,r){Sr.markFailed(e,t,r)}};a(PG,"reset");LG=Le});var Mp={};ye(Mp,{AggregationError:()=>pN,COMPONENT_STATUS_LEVELS:()=>Le,ComponentStatus:()=>zu,ComponentStatusError:()=>dc,ComponentStatusOperationError:()=>Td,ComponentStatusRegistry:()=>mc,CrossThreadCollectionError:()=>hN,CrossThreadStatusCollector:()=>vp,CrossThreadTimeoutError:()=>mN,ITCError:()=>Sd,StatusAggregator:()=>Rd,componentStatusRegistry:()=>Sr,crossThreadCollector:()=>oS,query:()=>Cae});var Cae,vG=ie(()=>{cS();aS();HA();aS();EN();cS();iS();ju();Cae={get(e){return Sr.getStatus(e)},all(){return Sr.getAllStatuses()},byStatus(e){return Sr.getComponentsByStatus(e)},summary(){return Sr.getStatusSummary()},async allThreads(){return mc.getAggregatedFromAllThreads(Sr)}}});var dN={};ye(dN,{STATUS:()=>LG,internal:()=>Mp,lifecycle:()=>io,reset:()=>PG,statusForComponent:()=>OG});var Lp=ie(()=>{DG();vG()});var yN={};ye(yN,{DEFAULT_STATUS_ID:()=>xm,STATUS_IDS:()=>J_,Status:()=>aa,clear:()=>SN,get:()=>TN,set:()=>RN});function xp(){return gN||(gN=Qe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),gN}function SN({id:e}){return Up.debug?.("clearStatus",e),xp().delete(e)}async function Pae(){Up.debug?.("getAllStatus");let e=xp().get({}),t=await Mp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=bN();return{systemStatus:e,componentStatus:r,restartRequired:n}}function TN({id:e}){return e?(Up.debug?.("getStatus",e),xp().get(e)):(Up.debug?.("getStatus","all"),Pae())}function RN({status:e,id:t=xm}){let r=kx({status:e,id:t});if(r)throw(0,lS.handleHDBError)(r,r.message,Oae.BAD_REQUEST);return Up.debug?.("setStatus",t,e),xp().put(t,{status:e})}var lS,MG,Oae,gN,aa,Up,Bp=ie(()=>{Oe();lS=b(ge()),MG=b(Er());Hx();X_();Lp();uS();X_();({HTTP_STATUS_CODES:Oae}=lS.hdbErrors);a(xp,"getStatusTable");aa={get primaryStore(){return xp().primaryStore}},Up=(0,MG.loggerWithTag)("status");a(SN,"clearStatus");a(Pae,"getAllStatus");a(TN,"getStatus");a(RN,"setStatus")});var UG={};ye(UG,{requestRestart:()=>wN,resetRestartNeeded:()=>Lae,restartNeeded:()=>bN});function IN(){AN||(AN=aa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),dS=new Uint8Array(AN))}function wN(){IN(),dS[0]=1}function bN(){return IN(),dS[0]===1}function Lae(){IN(),dS[0]=0}var AN,dS,uS=ie(()=>{Bp();a(IN,"ensureInitialized");a(wN,"requestRestart");a(bN,"restartNeeded");a(Lae,"resetRestartNeeded")});var Ll,NN=ie(()=>{Ll=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 CN={};ye(CN,{Resources:()=>yd,keyArrayToString:()=>bd,resetResources:()=>Dae,resources:()=>ks});function Dae(){return ks=new yd,Ue.resources=ks,ks}function bd(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var xG,BG,yd,ks,pc=ie(()=>{Xa();NN();xG=b(ee()),BG=b(ge());qr();yd=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 BG.ServerError(`Conflicting paths for ${t}`);xG.default.error(c),i.Resource=new Ll(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(Dae,"resetResources");a(bd,"keyArrayToString")});var LN={};ye(LN,{loadGQLSchema:()=>Uae,start:()=>PN,startOnMainThread:()=>Mae});function PN({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 R=function(w){if(w.kind==="NonNullType"){let Z=R(w.type);return Z.nullable=!1,Z}if(w.kind==="ListType")return{type:"array",elements:R(w.type)};let H={type:w.name?.value};return Object.defineProperty(H,"location",{value:w.loc.startToken}),H};a(R,"getProperty");let E=h.name.value,_=[],y={table:null,database:null,properties:_};d.set(E,y),i.allTypes.set(E,y);for(let w of h.directives){if(w.name.value==="table"){for(let H of w.arguments)y[H.name.value]=H.value.value;y.schema&&(y.database=y.schema),y.table||(y.table=E),y.audit&&(y.audit=y.audit!=="false"),y.attributes=y.properties,f.push(y)}if(w.name.value==="sealed"&&(y.sealed=!0),w.name.value==="splitSegments"&&(y.splitSegments=!0),w.name.value==="replicate"&&(y.replicate=!0),w.name.value==="export"){y.export=!0;for(let H of w.arguments)typeof y.export!="object"&&(y.export={}),y.export[H.name.value]=H.value.value}}let S=!1,I={};for(let w of h.fields){let L=R(w.type);L.name=w.name.value,_.push(L),I[L.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):(L.isPrimaryKey=!0,S=!0);else if(Z==="indexed"){let X={};for(let J of H.arguments||[])X[J.name.value]=J.value.value;L.indexed=X}else if(Z==="computed"){for(let X of H.arguments||[])if(X.name.value==="from"){let J=X.value.value;L.computed={from:p(J,X,I)},L.version==null&&(L.version=J)}else X.name.value==="version"&&(L.version=X.value.value);L.computed=L.computed||!0}else if(Z==="relationship"){let X={};for(let J of H.arguments)X[J.name.value]=J.value.value;L.relationship=X}else if(Z==="createdTime")L.assignCreatedTime=!0;else if(Z==="updatedTime")L.assignUpdatedTime=!0;else if(Z==="expiresAt")L.expiresAt=!0;else if(Z==="enumerable")L.enumerable=!0;else if(Z==="allow"){let X=L.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)}}y.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):vae.includes(h.type)||(0,kG.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,ON.dirname)(n),h.tableClass):i.set((0,ON.dirname)(n)+"/"+(h.export.name||h.type),h.tableClass,h.export));function p(h,E,_){return new FG.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 ON,FG,kG,vae,Mae,Uae,HG=ie(()=>{ON=require("path"),FG=require("node:vm");Oe();kG=b(tt());pc();vae=["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(PN,"start");Mae=PN,Uae=a(e=>PN({ensureTable:Qe}).handleFile(e,null,null,new yd),"loadGQLSchema")});var MN={};ye(MN,{start:()=>Vae});function xae(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 GG(e){if(typeof e!="object"||e===null)throw new oo("Request body must be an object.");if(!("query"in e))throw new oo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new oo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new oo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new oo("Request body `operationName` field must be a string.")}function vN(e){return parseInt(e.value,10)}function $G(e){return parseFloat(e.value)}function VG(e,t,r){let n=r.get(e.name.value);return KG(n)?YG(n,t):{attribute:t,value:n}}function KG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function YG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],KG(n)?YG(n,t):{attribute:t,value:n}))}function Bae(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:vN(e.value)};case He.Kind.FLOAT:return{attribute:t,value:$G(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return VG(e.value,t,r);case He.Kind.OBJECT:return WG(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 WG(e,t,r){return e.fields.flatMap(n=>Bae(n,t,r))}function Fae(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:vN(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:$G(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return VG(e.value,e.name.value,t);case He.Kind.OBJECT:return WG(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 kae(e,t){return e.flatMap(r=>Fae(r,t))}function fS(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 fS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return fS(r.selectionSet,t)}})}function jG(e,t){return fS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:jG(r.selectionSet,t)}:r.name.value)}async function Hae(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:jG(e.selectionSet,r),conditions:kae(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 zG(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return vN(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]:zG(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.kind}, is not supported.`)}}function Gae(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=zG(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 qae(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=Gae(e.variableDefinitions,t),i=await Promise.all(fS(e.selectionSet,r).map(c=>Hae(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function qG({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(xae(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 qae(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function $ae(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 GG(r),qG(r,e)}case"POST":{let r=await ea(e.headers.get("content-type"),!0)(e._nodeRequest);return GG(r),qG(r,e)}default:throw new oo("Method Not Allowed",405,{Allow:"GET, POST"})}}function Vae(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await $ae(t)}catch(n){DN.default.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof oo)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:DN.default.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof oo)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,DN,Kr,oo,QG=ie(()=>{He=b(require("graphql"));ta();pc();DN=b(ee());a(xae,"assertExecutableDefinitionNode");a(GG,"assertRequestParams");a(vN,"processIntValueNode");a($G,"processFloatValueNode");a(VG,"processVariableNode");a(KG,"isObject");a(YG,"transformObjectIntoQueryCondition");a(Bae,"processObjectFieldNode");a(WG,"processObjectValueNode");a(Fae,"processArgumentNode");a(kae,"buildConditionsQuery");a(fS,"fillInFragments");a(jG,"buildSelectQuery");a(Hae,"processFieldNode");a(zG,"processConstValueNode");a(Gae,"resolveVariables");a(qae,"executeOperation");a(qG,"resolver");Kr=class extends Error{static{a(this,"GraphQLQueryingError")}},oo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a($ae,"graphqlQueryingHandler");a(Vae,"start")});var rq=U((YUe,tq)=>{var Ad=require("validate.js"),XG=ct(),Id=(G(),P(j)),{handleHDBError:Kae,hdbErrors:Yae}=ge(),{HDB_ERROR_MSGS:ur,HTTP_STATUS_CODES:Wae}=Yae,UN=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),jae={STRUCTURE_USER:"structure_user"},JG=Object.values(Id.ROLE_TYPES_ENUM),zae="attribute_permissions",Qae="attribute_name",{PERMS_CRUD_ENUM:wd}=Id,Jae=[zae,...Object.values(wd)],ZG=[wd.READ,wd.INSERT,wd.UPDATE],Xae=[Qae,...ZG];function Zae(e){let t=UN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,eq(e,t)}a(Zae,"addRoleValidation");function ece(e){let t=UN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,eq(e,t)}a(ece,"alterRoleValidation");function tce(e){let t=UN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,XG.validateObject(e,t)}a(tce,"dropRoleValidation");var rce=["operation","role","id","permission","hdb_user","access"];function eq(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)rce.includes(n[o])||s.push(n[o]);s.length>0&&Tr(ur.INVALID_ROLE_JSON_KEYS(s),r);let i=XG.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Tr(o,r)}),e.permission){let o=nce(e);o&&Tr(o,r),JG.forEach(c=>{e.permission[c]&&!Ad.isBoolean(e.permission[c])&&Tr(ur.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(JG.indexOf(o)<0){if(o===jae.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]||Tr(ur.SCHEMA_NOT_FOUND(f),r)}continue}Tr(ur.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Tr(ur.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]){Tr(ur.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{Jae.includes(d)||Tr(ur.INVALID_PERM_KEY(d),r,o,l)}),Object.values(wd).forEach(d=>{Ad.isDefined(u[d])?Ad.isBoolean(u[d])||Tr(ur.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):Tr(ur.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){Tr(ur.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){Tr(ur.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=>{!Xae.includes(E)&&E!==wd.DELETE&&Tr(ur.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Ad.isDefined(p.attribute_name)){Tr(ur.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){Tr(ur.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}ZG.forEach(E=>{Ad.isDefined(p[E])?Ad.isBoolean(p[E])||Tr(ur.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):Tr(ur.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}`;Tr(ur.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return sce(r)}a(eq,"customValidate");tq.exports={addRoleValidation:Zae,alterRoleValidation:ece,dropRoleValidation:tce};function nce(e){let{operation:t,permission:r}=e;if(t===Id.OPERATIONS_ENUM.ADD_ROLE||t===Id.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 ur.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Id.ROLE_TYPES_ENUM.SUPER_USER:Id.ROLE_TYPES_ENUM.CLUSTER_USER;return ur.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(nce,"validateNoSUPerms");function sce(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ur.ROLE_PERMS_ERROR,...e};return Kae(new Error,n,Wae.BAD_REQUEST)}else return null}a(sce,"generateRolePermResponse");function Tr(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(Tr,"addPermError")});var kp=U((jUe,oq)=>{"use strict";var nq=qn(),sq=Vn(),ice=ac(),BN=rq(),FN=jo(),oce=require("util"),mS=(G(),P(j)),ace=ue(),kN=sq.searchByValue,cce=sq.searchByHash,lce=oce.promisify(ice.delete),uce=Wi(),dce=Xm(),{hdbErrors:fce,handleHDBError:Dl}=ge(),{HDB_ERROR_MSGS:iq,HTTP_STATUS_CODES:Fp}=fce,{UserEventMsg:HN}=ls();oq.exports={addRole:mce,alterRole:pce,dropRole:hce,listRoles:Ece};function xN(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(xN,"scrubRoleDetails");async function mce(e){let t=BN.addRoleValidation(e);if(t)throw t;e=xN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await kN(r)||[])}catch(i){throw Dl(i)}if(n&&n.length>0)throw Dl(new Error,iq.ROLE_ALREADY_EXISTS(e.role),Fp.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 nq.insert(s),FN.signalUserChange(new HN(process.pid)),e=xN(e),e}a(mce,"addRole");async function pce(e){let t=BN.alterRoleValidation(e);if(t)throw t;e=xN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await nq.update(r)}catch(s){throw Dl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Dl(new Error,"Invalid role id",Fp.BAD_REQUEST,void 0,void 0,!0);return await FN.signalUserChange(new HN(process.pid)),e}a(pce,"alterRole");async function hce(e){let t=BN.dropRoleValidation(e);if(t)throw Dl(new Error,t,Fp.BAD_REQUEST,void 0,void 0,!0);let r=new dce(mS.SYSTEM_SCHEMA_NAME,mS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await cce(r));if(n.length===0)throw Dl(new Error,iq.ROLE_NOT_FOUND,Fp.NOT_FOUND,void 0,void 0,!0);let s=new uce(mS.SYSTEM_SCHEMA_NAME,mS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await kN(s)),o=!1;if(ace.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Dl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Fp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await lce(c),FN.signalUserChange(new HN(process.pid)),`${n[0].role} successfully deleted`}a(hce,"dropRole");async function Ece(){return kN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Ece,"listRoles")});var GN={};ye(GN,{start:()=>lq,startOnMainThread:()=>Sce});function lq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,aq.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(_ce.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 gce(i)}}}async function gce(e){let t=ft().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,cq.isEqual)(i,e)?void 0:(e.id=r.id,(0,pS.alterRole)(e))}return(0,pS.addRole)(e)}var pS,aq,cq,_ce,Sce,uq=ie(()=>{Oe();pS=b(kp()),aq=require("yaml"),cq=require("lodash"),_ce=["super_user","cluster_user","structure_user"];a(lq,"start");a(gce,"ensureRole");Sce=lq});async function hS(e){let t=(0,mq.pathToFileURL)(e).toString();if(Tce)return Hp||(Hp=Rce(bce)),(await(await Hp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Rce(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Hp=new Compartment({console,Math,Date,fetch:yce,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,fq.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Yt,s.tables=Rn,s.databases=xe}};let n=await(0,dq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Hp}function yce(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 bce(){return{Resource:Yt,tables:Rn}}var dq,fq,mq,Tce,Hp,qN=ie(()=>{ao();Oe();dq=require("fs/promises"),fq=require("path"),mq=require("url"),Tce=!1;a(hS,"secureImport");a(Rce,"getCompartment");a(yce,"secureOnlyFetch");a(bce,"getGlobalVars")});var $N={};ye($N,{ResourceLoadError:()=>ES,handleApplication:()=>Ace,suppressHandleApplicationWarning:()=>Ice});function hq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Ace(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 hS(r.absolutePath),s=(0,pq.dirname)(r.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");hq(n.default)&&(e.resources.set(s,n.default),e.logger.debug(`Registered root resource: ${s}`)),Eq(e,n,s)}catch(n){throw new ES(r.absolutePath,n)}},"handleResourceEntry"))}function Eq(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;hq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&Eq(e,s,i)}}var pq,ES,Ice,_q=ie(()=>{qN();pq=require("path");a(hq,"isResource");ES=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(Ace,"handleApplication");a(Eq,"recurseForResources");Ice=!0});var KN={};ye(KN,{start:()=>wce});function wce({resources:e}){e.set("login",VN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var VN,gq=ie(()=>{ao();a(wce,"start");VN=class extends Yt{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 _S(){return YN||(YN=Qe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),YN}function Cce(e){return e=e.replace(Nce,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 Oce(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 Gp(e){let t=Sq.default.createHash("shake128",{outputLength:4}),r;return(0,Tq.isIPv6)(e)?r=Cce(e):r=e.toLowerCase(),Oce(Uint8Array.from(t.update(r).digest()))}var Sq,Tq,WN,YN,Nce,jN=ie(()=>{Oe();Sq=b(require("crypto")),Tq=require("node:net"),WN=new Map;a(_S,"getAnalyticsHostnameTable");Nce=/(\d{1,3}\.){3}\d{1,3}$/;a(Cce,"normalizeIPv6");a(Oce,"nodeHashToNumber");a(Gp,"stableNodeId")});var ca,zN=ie(()=>{ca={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 wq={};ye(wq,{captureProfile:()=>JN,userCodeFolders:()=>gS});async function JN(e){let r=Iq/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=QN.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){Aq.error?.("analytics profiler error:",u)}finally{e&&setTimeout(()=>{let u=((0,qp.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;JN(u)},e).unref()}function l(u){let d=!1;for(let f of u.locationId){let m=s.get(n.get(f).functionId);if(gS.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(yq.PACKAGE_ROOT)){let p=u.value[0];c+=p,d||(i.set(f,(i.get(f)??0)+p),d=!0)}}}a(l,"getUserHitCount")}var qp,yq,bq,QN,Aq,Rq,gS,Iq,Nq=ie(()=>{Yn();qp=b(de());G();yq=b(Dt()),bq=require("node:fs"),QN=require("@datadog/pprof"),Aq=b(ee()),Rq=(0,qp.getHdbBasePath)(),gS=Rq?[Rq]:[];process.env.RUN_HDB_APP&&gS.push((0,bq.realpathSync)(process.env.RUN_HDB_APP));Iq=5e4;(async()=>{if(gS.length===0)return;QN.time.start({intervalMicros:Iq});let e=((0,qp.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{JN(e)},e).unref()})();a(JN,"captureProfile")});var RS={};ye(RS,{addAnalyticsListener:()=>Yp,analyticsDelay:()=>tC,calculateCPUUtilization:()=>Yq,diffResourceUsage:()=>Wq,onAnalyticsAggregate:()=>sC,recordAction:()=>qe,recordActionBinary:()=>nn,recordHostname:()=>rC,setAnalyticsEnabled:()=>Dce});function Dce(e){Hq=e,clearTimeout(Vp),Vp=null}function vce(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 Mce(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},TS.set(e,o)}function qe(e,t,r,n,s){if(!Hq)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=TS.get(i);o?vce(e,o):Mce(i,e,t,r,n,s),Vp||Uce()}function nn(e,t,r,n,s){qe(!!e,t,r,n,s)}function Yp(e){qq.push(e)}function Uce(){XN||=performance.now(),Vp=setTimeout(async()=>{Vp=null;let e=performance.now()-XN;XN=0;let t=[],r={time:Date.now(),period:e,threadId:vl.threadId,metrics:t};for(let[s,i]of TS){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 Vq){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 jq()}let n=process.memoryUsage();t.push({metric:"memory",threadId:vl.threadId,byThread:!0,...n});for(let s of qq)s(t);TS=new Map,vl.parentPort?vl.parentPort.postMessage({type:Gq,report:r}):Jq({report:r})},tC).unref()}async function rC(){let e=Ue.hostname;rn.trace?.("recordHostname server.hostname:",e);let t=Gp(e);rn.trace?.("recordHostname nodeId:",t);let r=_S();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 Kq(e){let t=WN.get(e);return t?(rn.trace?.("storeMetric cached nodeId:",t),t):(t=Gp(e),rn.trace?.("storeMetric new nodeId:",t),WN.set(e,t),t)}function Nd(e,t){let r=Kq(Ue.hostname),n={id:[(0,eC.getNextMonotonicTime)(),r],...t};rn.trace?.(`storing metric ${JSON.stringify(n)}`),e.put(n.id,n)}function Yq(e,t){let r=e.userCPUTime+e.systemCPUTime;return rn.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function Wq(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 xce(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:ca.TABLE_SIZE,database:t,table:s,size:c};rn.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),Nd(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=kq.statSync(s.primaryStore.env.path).size,c=xce(e,r,n),l=o-c,u={metric:ca.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};Nd(e,u),rn.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){rn.warn?.("Error getting DB size metrics",s)}}function Oq(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:ca.STORAGE_VOLUME,database:r,...i};Nd(e,o),rn.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){rn.warn?.("Error getting DB volume metrics",s)}}async function Bce(e,t=6e4){let r=nC(),n=zq(),s=new Promise(I=>{let w=performance.now();setImmediate(()=>{let L=performance.now();L-w>5e3&&rn.warn?.("Unusually high event queue latency on the main thread of "+Math.round(L-w)+"ms"),w=performance.now()}),n.primaryStore.prefetch([1],()=>{let L=performance.now();L-w>5e3&&rn.warn?.("Unusually high task queue latency on the main thread of "+Math.round(L-w)+"ms"),I(L-w)})}),i,o=Kq(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:L,threadId:H}=w;for(let Z of L||[]){let{path:X,method:J,type:F,metric:fe,count:oe,total:ae,distribution:he,threads:Te,...De}=Z;oe||(oe=1);let Je=fe+(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 ss=$e.count;for(let Pt in De){let Lt=De[Pt];typeof Lt=="number"&&($e[Pt]=($e[Pt]*ss+Lt*oe)/(ss+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 ss=u.get(Je);ss?ss.push(...he):u.set(Je,he)}}await jq()}for(let I of d){let{path:w,method:L,type:H,metric:Z,count:X,total:J,distribution:F,threads:fe,...oe}=I;fe=fe.filter(ae=>ae);for(let ae in oe){if(typeof I[ae]!="number")continue;let he=0;for(let Te of fe){let De=Te[ae];typeof De=="number"&&(he+=De)}I[ae]=he}I.count=fe.length,delete I.threads,delete I.byThread}for(let[I,w]of u){let L=l.get(I);w.sort((Pt,Lt)=>Pt.value>Lt.value?1:-1);let H=L.count-1,Z=[],X=0,J=0,F;for(let Pt of Vq){let Lt=H*Pt;for(;X<Lt;)F=w[J++],X+=F.count,J===1&&X--;let Wa=w[J>1?J-2:0];F||(F=w[0]),Z.push(F.value-(F.value-Wa.value)*(X-Lt)/F.count)}let[fe,oe,ae,he,Te,De,Je,$e,ss]=Z;Object.assign(L,{p1:fe,p10:oe,p25:ae,median:he,p75:Te,p90:De,p95:Je,p99:$e,p999:ss})}let m;for(let[,I]of l)I.time=f,Nd(n,I),m=!0;if(m)for(let I of $q)I(l.values());let p=Date.now(),{idle:h,active:E}=performance.eventLoopUtilization();if(m||E*10>h){let I={metric:ca.MAIN_THREAD_UTILIZATION,idle:h-Pq,active:E-Lq,taskQueueLatency:await s,time:p,...process.memoryUsage()};Nd(n,I)}Pq=h,Lq=E;let _=process.resourceUsage();_.time=p,_.userCPUTime=_.userCPUTime/1e3,_.systemCPUTime=_.systemCPUTime/1e3,rn.trace?.(`process.resourceUsage: ${JSON.stringify(_)}`);let y=Wq(SS,_);rn.trace?.(`diffed resourceUsage: ${JSON.stringify(y)}`),y.time=p,y.period=SS.time?p-SS.time:t,y.cpuUtilization=Yq(y,y.period);let S={metric:ca.RESOURCE_USAGE,...y};Nd(n,S),SS=_;let R=ft();Cq(n,R),Cq(n,{system:R.system}),Oq(n,R),Oq(n,{system:R.system})}async function Dq(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function nC(){return vq||(vq=Qe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function zq(){return Mq||(Mq=Qe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Hce(){Qq=!0;let e=(0,Kp.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Bce(tC,e),await Dq(nC(),Fce),await Dq(zq(),kce)},Math.min(e/2,2147483647)).unref()}function Jq(e,t){let r=e.report;r.threadId=t?.threadId||vl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Uq+=n.mean*n.count);r.totalBytesProcessed=Uq,t&&(r.metrics.push({metric:ca.UTILIZATION,...t.performance.eventLoopUtilization(xq.get(t))}),xq.set(t,t.performance.eventLoopUtilization())),r.id=(0,eC.getNextMonotonicTime)(),nC().primaryStore.put(r.id,r),Qq||Hce(),Gce&&(Xq=$ce(r))}async function $ce(e){if(await Xq,!hc){let r=(0,$p.dirname)(Pce());try{hc=await(0,ZN.open)((0,$p.join)(r,"analytics.log"),"r+")}catch{hc=await(0,ZN.open)((0,$p.join)(r,"analytics.log"),"w+")}}let t=(await hc.stat()).size;if(t>qce){let r=Buffer.alloc(t);await hc.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await hc.write(r,{position:0}),await hc.truncate(r.length),t=r.length}await hc.write(JSON.stringify(e)+`
12
+ `)}}});var wG,Pl,NG,fc,vp,Rd,Nae,oS,EN=ie(()=>{wG=b(ls()),Pl=b(tt());G();NG=b(Er());ju();iS();fc=(0,NG.loggerWithTag)("componentStatus.crossThread"),vp=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,Pl.onMessageByType)($u.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;fc.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&&(fc.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,Pl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,_=a(()=>{let R=this.awaitingResponses.get(r);R&&R.length>=o&&!E&&(E=!0,S(),fc.trace?.(`Collected all ${R.length} expected responses for request ${r}`),p(R))},"checkComplete"),y=setTimeout(()=>{if(!E){E=!0;let R=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),fc.debug?.(`Collection timeout for request ${r}: collected ${R.length}/${o} responses`),p(R)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(y)},"cleanup");this.responseCheckers.set(r,_),(0,wG.sendItcEvent)({type:$u.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{_()}).catch(R=>{E=!0,S(),this.responseCheckers.delete(r),h(new Sd("sendItcEvent",R))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Pl.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 fc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof Sd?fc.error?.(`ITC failure during component status collection: ${r.message}`):fc.warn?.("Failed to collect component status from all threads:",r),fc.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,Pl.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)}},Rd=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 y=parseInt(E.substring(7));isNaN(y)||(n.workers[y]=_)}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}},Nae=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),oS=new vp(Nae)});var mc,aS=ie(()=>{HA();ju();EN();iS();mc=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 Td(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Le).includes(r))throw new Td(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Le).join(", ")}`);this.statusMap.set(t,new zu(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 oS.collect(t);return Rd.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 Sr,cS=ie(()=>{aS();Sr=new mc});function OG(e){let t=CG.get(e);return t||(t=new _N(e),CG.set(e,t)),t}function PG(){Sr.reset()}var _N,CG,io,LG,DG=ie(()=>{cS();ju();_N=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return Sr.setStatus(this.componentName,Le.HEALTHY,t),this}warning(t){return Sr.setStatus(this.componentName,Le.WARNING,t),this}error(t,r){return Sr.setStatus(this.componentName,Le.ERROR,t,r),this}loading(t){return Sr.setStatus(this.componentName,Le.LOADING,t||"Loading..."),this}unknown(t){return Sr.setStatus(this.componentName,Le.UNKNOWN,t),this}get(){return Sr.getStatus(this.componentName)}},CG=new Map;a(OG,"statusForComponent");io={loading(e,t){Sr.initializeLoading(e,t)},loaded(e,t){Sr.markLoaded(e,t)},failed(e,t,r){Sr.markFailed(e,t,r)}};a(PG,"reset");LG=Le});var Mp={};ye(Mp,{AggregationError:()=>pN,COMPONENT_STATUS_LEVELS:()=>Le,ComponentStatus:()=>zu,ComponentStatusError:()=>dc,ComponentStatusOperationError:()=>Td,ComponentStatusRegistry:()=>mc,CrossThreadCollectionError:()=>hN,CrossThreadStatusCollector:()=>vp,CrossThreadTimeoutError:()=>mN,ITCError:()=>Sd,StatusAggregator:()=>Rd,componentStatusRegistry:()=>Sr,crossThreadCollector:()=>oS,query:()=>Cae});var Cae,vG=ie(()=>{cS();aS();HA();aS();EN();cS();iS();ju();Cae={get(e){return Sr.getStatus(e)},all(){return Sr.getAllStatuses()},byStatus(e){return Sr.getComponentsByStatus(e)},summary(){return Sr.getStatusSummary()},async allThreads(){return mc.getAggregatedFromAllThreads(Sr)}}});var dN={};ye(dN,{STATUS:()=>LG,internal:()=>Mp,lifecycle:()=>io,reset:()=>PG,statusForComponent:()=>OG});var Lp=ie(()=>{DG();vG()});var yN={};ye(yN,{DEFAULT_STATUS_ID:()=>xm,STATUS_IDS:()=>J_,Status:()=>aa,clear:()=>SN,get:()=>TN,set:()=>RN});function xp(){return gN||(gN=Qe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),gN}function SN({id:e}){return Up.debug?.("clearStatus",e),xp().delete(e)}async function Pae(){Up.debug?.("getAllStatus");let e=xp().get({}),t=await Mp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=bN();return{systemStatus:e,componentStatus:r,restartRequired:n}}function TN({id:e}){return e?(Up.debug?.("getStatus",e),xp().get(e)):(Up.debug?.("getStatus","all"),Pae())}function RN({status:e,id:t=xm}){let r=kx({status:e,id:t});if(r)throw(0,lS.handleHDBError)(r,r.message,Oae.BAD_REQUEST);return Up.debug?.("setStatus",t,e),xp().put(t,{status:e})}var lS,MG,Oae,gN,aa,Up,Bp=ie(()=>{Oe();lS=b(ge()),MG=b(Er());Hx();X_();Lp();uS();X_();({HTTP_STATUS_CODES:Oae}=lS.hdbErrors);a(xp,"getStatusTable");aa={get primaryStore(){return xp().primaryStore}},Up=(0,MG.loggerWithTag)("status");a(SN,"clearStatus");a(Pae,"getAllStatus");a(TN,"getStatus");a(RN,"setStatus")});var UG={};ye(UG,{requestRestart:()=>wN,resetRestartNeeded:()=>Lae,restartNeeded:()=>bN});function IN(){AN||(AN=aa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),dS=new Uint8Array(AN))}function wN(){IN(),dS[0]=1}function bN(){return IN(),dS[0]===1}function Lae(){IN(),dS[0]=0}var AN,dS,uS=ie(()=>{Bp();a(IN,"ensureInitialized");a(wN,"requestRestart");a(bN,"restartNeeded");a(Lae,"resetRestartNeeded")});var Ll,NN=ie(()=>{Ll=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 CN={};ye(CN,{Resources:()=>yd,keyArrayToString:()=>bd,resetResources:()=>Dae,resources:()=>ks});function Dae(){return ks=new yd,Ue.resources=ks,ks}function bd(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var xG,BG,yd,ks,pc=ie(()=>{Xa();NN();xG=b(ee()),BG=b(ge());qr();yd=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 BG.ServerError(`Conflicting paths for ${t}`);xG.default.error(c),i.Resource=new Ll(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(Dae,"resetResources");a(bd,"keyArrayToString")});var LN={};ye(LN,{loadGQLSchema:()=>Uae,start:()=>PN,startOnMainThread:()=>Mae});function PN({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 R=function(w){if(w.kind==="NonNullType"){let Z=R(w.type);return Z.nullable=!1,Z}if(w.kind==="ListType")return{type:"array",elements:R(w.type)};let H={type:w.name?.value};return Object.defineProperty(H,"location",{value:w.loc.startToken}),H};a(R,"getProperty");let E=h.name.value,_=[],y={table:null,database:null,properties:_};d.set(E,y),i.allTypes.set(E,y);for(let w of h.directives){if(w.name.value==="table"){for(let H of w.arguments)y[H.name.value]=H.value.value;y.schema&&(y.database=y.schema),y.table||(y.table=E),y.audit&&(y.audit=y.audit!=="false"),y.attributes=y.properties,f.push(y)}if(w.name.value==="sealed"&&(y.sealed=!0),w.name.value==="splitSegments"&&(y.splitSegments=!0),w.name.value==="replicate"&&(y.replicate=!0),w.name.value==="export"){y.export=!0;for(let H of w.arguments)typeof y.export!="object"&&(y.export={}),y.export[H.name.value]=H.value.value}}let S=!1,I={};for(let w of h.fields){let L=R(w.type);L.name=w.name.value,_.push(L),I[L.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):(L.isPrimaryKey=!0,S=!0);else if(Z==="indexed"){let X={};for(let J of H.arguments||[])X[J.name.value]=J.value.value;L.indexed=X}else if(Z==="computed"){for(let X of H.arguments||[])if(X.name.value==="from"){let J=X.value.value;L.computed={from:p(J,X,I)},L.version==null&&(L.version=J)}else X.name.value==="version"&&(L.version=X.value.value);L.computed=L.computed||!0}else if(Z==="relationship"){let X={};for(let J of H.arguments)X[J.name.value]=J.value.value;L.relationship=X}else if(Z==="createdTime")L.assignCreatedTime=!0;else if(Z==="updatedTime")L.assignUpdatedTime=!0;else if(Z==="expiresAt")L.expiresAt=!0;else if(Z==="enumerable")L.enumerable=!0;else if(Z==="allow"){let X=L.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)}}y.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):vae.includes(h.type)||(0,kG.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,ON.dirname)(n),h.tableClass):i.set((0,ON.dirname)(n)+"/"+(h.export.name||h.type),h.tableClass,h.export));function p(h,E,_){return new FG.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 ON,FG,kG,vae,Mae,Uae,HG=ie(()=>{ON=require("path"),FG=require("node:vm");Oe();kG=b(tt());pc();vae=["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(PN,"start");Mae=PN,Uae=a(e=>PN({ensureTable:Qe}).handleFile(e,null,null,new yd),"loadGQLSchema")});var MN={};ye(MN,{start:()=>Vae});function xae(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 GG(e){if(typeof e!="object"||e===null)throw new oo("Request body must be an object.");if(!("query"in e))throw new oo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new oo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new oo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new oo("Request body `operationName` field must be a string.")}function vN(e){return parseInt(e.value,10)}function $G(e){return parseFloat(e.value)}function VG(e,t,r){let n=r.get(e.name.value);return KG(n)?YG(n,t):{attribute:t,value:n}}function KG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function YG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],KG(n)?YG(n,t):{attribute:t,value:n}))}function Bae(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:vN(e.value)};case He.Kind.FLOAT:return{attribute:t,value:$G(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return VG(e.value,t,r);case He.Kind.OBJECT:return WG(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 WG(e,t,r){return e.fields.flatMap(n=>Bae(n,t,r))}function Fae(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:vN(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:$G(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return VG(e.value,e.name.value,t);case He.Kind.OBJECT:return WG(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 kae(e,t){return e.flatMap(r=>Fae(r,t))}function fS(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 fS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return fS(r.selectionSet,t)}})}function jG(e,t){return fS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:jG(r.selectionSet,t)}:r.name.value)}async function Hae(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:jG(e.selectionSet,r),conditions:kae(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 zG(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return vN(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]:zG(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.kind}, is not supported.`)}}function Gae(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=zG(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 qae(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=Gae(e.variableDefinitions,t),i=await Promise.all(fS(e.selectionSet,r).map(c=>Hae(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function qG({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(xae(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 qae(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function $ae(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 GG(r),qG(r,e)}case"POST":{let r=await ea(e.headers.get("content-type"),!0)(e._nodeRequest);return GG(r),qG(r,e)}default:throw new oo("Method Not Allowed",405,{Allow:"GET, POST"})}}function Vae(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await $ae(t)}catch(n){DN.default.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof oo)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:DN.default.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof oo)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,DN,Kr,oo,QG=ie(()=>{He=b(require("graphql"));ta();pc();DN=b(ee());a(xae,"assertExecutableDefinitionNode");a(GG,"assertRequestParams");a(vN,"processIntValueNode");a($G,"processFloatValueNode");a(VG,"processVariableNode");a(KG,"isObject");a(YG,"transformObjectIntoQueryCondition");a(Bae,"processObjectFieldNode");a(WG,"processObjectValueNode");a(Fae,"processArgumentNode");a(kae,"buildConditionsQuery");a(fS,"fillInFragments");a(jG,"buildSelectQuery");a(Hae,"processFieldNode");a(zG,"processConstValueNode");a(Gae,"resolveVariables");a(qae,"executeOperation");a(qG,"resolver");Kr=class extends Error{static{a(this,"GraphQLQueryingError")}},oo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a($ae,"graphqlQueryingHandler");a(Vae,"start")});var rq=U((YUe,tq)=>{var Ad=require("validate.js"),XG=ct(),Id=(G(),P(j)),{handleHDBError:Kae,hdbErrors:Yae}=ge(),{HDB_ERROR_MSGS:ur,HTTP_STATUS_CODES:Wae}=Yae,UN=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),jae={STRUCTURE_USER:"structure_user"},JG=Object.values(Id.ROLE_TYPES_ENUM),zae="attribute_permissions",Qae="attribute_name",{PERMS_CRUD_ENUM:wd}=Id,Jae=[zae,...Object.values(wd)],ZG=[wd.READ,wd.INSERT,wd.UPDATE],Xae=[Qae,...ZG];function Zae(e){let t=UN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,eq(e,t)}a(Zae,"addRoleValidation");function ece(e){let t=UN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,eq(e,t)}a(ece,"alterRoleValidation");function tce(e){let t=UN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,XG.validateObject(e,t)}a(tce,"dropRoleValidation");var rce=["operation","role","id","permission","hdb_user","access"];function eq(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)rce.includes(n[o])||s.push(n[o]);s.length>0&&Tr(ur.INVALID_ROLE_JSON_KEYS(s),r);let i=XG.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Tr(o,r)}),e.permission){let o=nce(e);o&&Tr(o,r),JG.forEach(c=>{e.permission[c]&&!Ad.isBoolean(e.permission[c])&&Tr(ur.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(JG.indexOf(o)<0){if(o===jae.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]||Tr(ur.SCHEMA_NOT_FOUND(f),r)}continue}Tr(ur.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Tr(ur.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]){Tr(ur.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{Jae.includes(d)||Tr(ur.INVALID_PERM_KEY(d),r,o,l)}),Object.values(wd).forEach(d=>{Ad.isDefined(u[d])?Ad.isBoolean(u[d])||Tr(ur.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):Tr(ur.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){Tr(ur.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){Tr(ur.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=>{!Xae.includes(E)&&E!==wd.DELETE&&Tr(ur.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Ad.isDefined(p.attribute_name)){Tr(ur.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){Tr(ur.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}ZG.forEach(E=>{Ad.isDefined(p[E])?Ad.isBoolean(p[E])||Tr(ur.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):Tr(ur.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}`;Tr(ur.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return sce(r)}a(eq,"customValidate");tq.exports={addRoleValidation:Zae,alterRoleValidation:ece,dropRoleValidation:tce};function nce(e){let{operation:t,permission:r}=e;if(t===Id.OPERATIONS_ENUM.ADD_ROLE||t===Id.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 ur.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Id.ROLE_TYPES_ENUM.SUPER_USER:Id.ROLE_TYPES_ENUM.CLUSTER_USER;return ur.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(nce,"validateNoSUPerms");function sce(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ur.ROLE_PERMS_ERROR,...e};return Kae(new Error,n,Wae.BAD_REQUEST)}else return null}a(sce,"generateRolePermResponse");function Tr(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(Tr,"addPermError")});var kp=U((jUe,oq)=>{"use strict";var nq=qn(),sq=Vn(),ice=ac(),BN=rq(),FN=jo(),oce=require("util"),mS=(G(),P(j)),ace=ue(),kN=sq.searchByValue,cce=sq.searchByHash,lce=oce.promisify(ice.delete),uce=Wi(),dce=Xm(),{hdbErrors:fce,handleHDBError:Dl}=ge(),{HDB_ERROR_MSGS:iq,HTTP_STATUS_CODES:Fp}=fce,{UserEventMsg:HN}=ls();oq.exports={addRole:mce,alterRole:pce,dropRole:hce,listRoles:Ece};function xN(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(xN,"scrubRoleDetails");async function mce(e){let t=BN.addRoleValidation(e);if(t)throw t;e=xN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await kN(r)||[])}catch(i){throw Dl(i)}if(n&&n.length>0)throw Dl(new Error,iq.ROLE_ALREADY_EXISTS(e.role),Fp.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 nq.insert(s),FN.signalUserChange(new HN(process.pid)),e=xN(e),e}a(mce,"addRole");async function pce(e){let t=BN.alterRoleValidation(e);if(t)throw t;e=xN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await nq.update(r)}catch(s){throw Dl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Dl(new Error,"Invalid role id",Fp.BAD_REQUEST,void 0,void 0,!0);return await FN.signalUserChange(new HN(process.pid)),e}a(pce,"alterRole");async function hce(e){let t=BN.dropRoleValidation(e);if(t)throw Dl(new Error,t,Fp.BAD_REQUEST,void 0,void 0,!0);let r=new dce(mS.SYSTEM_SCHEMA_NAME,mS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await cce(r));if(n.length===0)throw Dl(new Error,iq.ROLE_NOT_FOUND,Fp.NOT_FOUND,void 0,void 0,!0);let s=new uce(mS.SYSTEM_SCHEMA_NAME,mS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await kN(s)),o=!1;if(ace.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Dl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Fp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await lce(c),FN.signalUserChange(new HN(process.pid)),`${n[0].role} successfully deleted`}a(hce,"dropRole");async function Ece(){return kN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Ece,"listRoles")});var GN={};ye(GN,{start:()=>lq,startOnMainThread:()=>Sce});function lq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,aq.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(_ce.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 gce(i)}}}async function gce(e){let t=ft().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,cq.isEqual)(i,e)?void 0:(e.id=r.id,(0,pS.alterRole)(e))}return(0,pS.addRole)(e)}var pS,aq,cq,_ce,Sce,uq=ie(()=>{Oe();pS=b(kp()),aq=require("yaml"),cq=require("lodash"),_ce=["super_user","cluster_user","structure_user"];a(lq,"start");a(gce,"ensureRole");Sce=lq});async function hS(e){let t=(0,mq.pathToFileURL)(e).toString();if(Tce)return Hp||(Hp=Rce(bce)),(await(await Hp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Rce(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Hp=new Compartment({console,Math,Date,fetch:yce,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,fq.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Yt,s.tables=Rn,s.databases=xe}};let n=await(0,dq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Hp}function yce(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 bce(){return{Resource:Yt,tables:Rn}}var dq,fq,mq,Tce,Hp,qN=ie(()=>{ao();Oe();dq=require("fs/promises"),fq=require("path"),mq=require("url"),Tce=!1;a(hS,"secureImport");a(Rce,"getCompartment");a(yce,"secureOnlyFetch");a(bce,"getGlobalVars")});var $N={};ye($N,{ResourceLoadError:()=>ES,handleApplication:()=>Ace,suppressHandleApplicationWarning:()=>Ice});function hq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Ace(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 hS(r.absolutePath),s=(0,pq.dirname)(r.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");hq(n.default)&&(e.resources.set(s,n.default),e.logger.debug(`Registered root resource: ${s}`)),Eq(e,n,s)}catch(n){throw new ES(r.absolutePath,n)}},"handleResourceEntry"))}function Eq(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;hq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&Eq(e,s,i)}}var pq,ES,Ice,_q=ie(()=>{qN();pq=require("path");a(hq,"isResource");ES=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(Ace,"handleApplication");a(Eq,"recurseForResources");Ice=!0});var KN={};ye(KN,{start:()=>wce});function wce({resources:e}){e.set("login",VN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var VN,gq=ie(()=>{ao();a(wce,"start");VN=class extends Yt{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 _S(){return YN||(YN=Qe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),YN}function Cce(e){return e=e.replace(Nce,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 Oce(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 Gp(e){let t=Sq.default.createHash("shake128",{outputLength:4}),r;return(0,Tq.isIPv6)(e)?r=Cce(e):r=e.toLowerCase(),Oce(Uint8Array.from(t.update(r).digest()))}var Sq,Tq,WN,YN,Nce,jN=ie(()=>{Oe();Sq=b(require("crypto")),Tq=require("node:net"),WN=new Map;a(_S,"getAnalyticsHostnameTable");Nce=/(\d{1,3}\.){3}\d{1,3}$/;a(Cce,"normalizeIPv6");a(Oce,"nodeHashToNumber");a(Gp,"stableNodeId")});var ca,zN=ie(()=>{ca={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 wq={};ye(wq,{captureProfile:()=>JN,userCodeFolders:()=>gS});async function JN(e){let r=Iq/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=QN.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){Aq.error?.("analytics profiler error:",u)}finally{e&&setTimeout(()=>{let u=((0,qp.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;JN(u)},e).unref()}function l(u){let d=!1;for(let f of u.locationId){let m=s.get(n.get(f).functionId);if(gS.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(yq.PACKAGE_ROOT)){let p=u.value[0];c+=p,d||(i.set(f,(i.get(f)??0)+p),d=!0)}}}a(l,"getUserHitCount")}var qp,yq,bq,QN,Aq,Rq,gS,Iq,Nq=ie(()=>{Yn();qp=b(de());G();yq=b(Dt()),bq=require("node:fs"),QN=require("@datadog/pprof"),Aq=b(ee()),Rq=(0,qp.getHdbBasePath)(),gS=Rq?[Rq]:[];process.env.RUN_HDB_APP&&gS.push((0,bq.realpathSync)(process.env.RUN_HDB_APP));Iq=5e4;(async()=>{if(gS.length===0)return;QN.time.start({intervalMicros:Iq});let e=((0,qp.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{JN(e)},e).unref()})();a(JN,"captureProfile")});var RS={};ye(RS,{addAnalyticsListener:()=>Yp,analyticsDelay:()=>tC,calculateCPUUtilization:()=>Yq,diffResourceUsage:()=>Wq,onAnalyticsAggregate:()=>sC,recordAction:()=>qe,recordActionBinary:()=>nn,recordHostname:()=>rC,setAnalyticsEnabled:()=>Dce});function Dce(e){Hq=e,clearTimeout(Vp),Vp=null}function vce(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 Mce(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},TS.set(e,o)}function qe(e,t,r,n,s){if(!Hq)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=TS.get(i);o?vce(e,o):Mce(i,e,t,r,n,s),Vp||Uce()}function nn(e,t,r,n,s){qe(!!e,t,r,n,s)}function Yp(e){qq.push(e)}function Uce(){XN||=performance.now(),Vp=setTimeout(async()=>{Vp=null;let e=performance.now()-XN;XN=0;let t=[],r={time:Date.now(),period:e,threadId:vl.threadId,metrics:t};for(let[s,i]of TS){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 Vq){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 jq()}let n=process.memoryUsage();t.push({metric:"memory",threadId:vl.threadId,byThread:!0,...n});for(let s of qq)s(t);TS=new Map,vl.parentPort?vl.parentPort.postMessage({type:Gq,report:r}):Jq({report:r})},tC).unref()}async function rC(){let e=Ue.hostname;rn.trace?.("recordHostname server.hostname:",e);let t=Gp(e);rn.trace?.("recordHostname nodeId:",t);let r=_S(),n={id:t,hostname:e};rn.trace?.(`recordHostname storing hostname: ${JSON.stringify(n)}`),await r.put(n.id,n)}function Kq(e){let t=WN.get(e);return t?(rn.trace?.("storeMetric cached nodeId:",t),t):(t=Gp(e),rn.trace?.("storeMetric new nodeId:",t),WN.set(e,t),t)}function Nd(e,t){let r=Kq(Ue.hostname),n={id:[(0,eC.getNextMonotonicTime)(),r],...t};rn.trace?.(`storing metric ${JSON.stringify(n)}`),e.put(n.id,n)}function Yq(e,t){let r=e.userCPUTime+e.systemCPUTime;return rn.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function Wq(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 xce(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:ca.TABLE_SIZE,database:t,table:s,size:c};rn.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),Nd(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=kq.statSync(s.primaryStore.env.path).size,c=xce(e,r,n),l=o-c,u={metric:ca.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};Nd(e,u),rn.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){rn.warn?.("Error getting DB size metrics",s)}}function Oq(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:ca.STORAGE_VOLUME,database:r,...i};Nd(e,o),rn.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){rn.warn?.("Error getting DB volume metrics",s)}}async function Bce(e,t=6e4){let r=nC(),n=zq(),s=new Promise(I=>{let w=performance.now();setImmediate(()=>{let L=performance.now();L-w>5e3&&rn.warn?.("Unusually high event queue latency on the main thread of "+Math.round(L-w)+"ms"),w=performance.now()}),n.primaryStore.prefetch([1],()=>{let L=performance.now();L-w>5e3&&rn.warn?.("Unusually high task queue latency on the main thread of "+Math.round(L-w)+"ms"),I(L-w)})}),i,o=Kq(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:L,threadId:H}=w;for(let Z of L||[]){let{path:X,method:J,type:F,metric:fe,count:oe,total:ae,distribution:he,threads:Te,...De}=Z;oe||(oe=1);let Je=fe+(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 ss=$e.count;for(let Pt in De){let Lt=De[Pt];typeof Lt=="number"&&($e[Pt]=($e[Pt]*ss+Lt*oe)/(ss+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 ss=u.get(Je);ss?ss.push(...he):u.set(Je,he)}}await jq()}for(let I of d){let{path:w,method:L,type:H,metric:Z,count:X,total:J,distribution:F,threads:fe,...oe}=I;fe=fe.filter(ae=>ae);for(let ae in oe){if(typeof I[ae]!="number")continue;let he=0;for(let Te of fe){let De=Te[ae];typeof De=="number"&&(he+=De)}I[ae]=he}I.count=fe.length,delete I.threads,delete I.byThread}for(let[I,w]of u){let L=l.get(I);w.sort((Pt,Lt)=>Pt.value>Lt.value?1:-1);let H=L.count-1,Z=[],X=0,J=0,F;for(let Pt of Vq){let Lt=H*Pt;for(;X<Lt;)F=w[J++],X+=F.count,J===1&&X--;let Wa=w[J>1?J-2:0];F||(F=w[0]),Z.push(F.value-(F.value-Wa.value)*(X-Lt)/F.count)}let[fe,oe,ae,he,Te,De,Je,$e,ss]=Z;Object.assign(L,{p1:fe,p10:oe,p25:ae,median:he,p75:Te,p90:De,p95:Je,p99:$e,p999:ss})}let m;for(let[,I]of l)I.time=f,Nd(n,I),m=!0;if(m)for(let I of $q)I(l.values());let p=Date.now(),{idle:h,active:E}=performance.eventLoopUtilization();if(m||E*10>h){let I={metric:ca.MAIN_THREAD_UTILIZATION,idle:h-Pq,active:E-Lq,taskQueueLatency:await s,time:p,...process.memoryUsage()};Nd(n,I)}Pq=h,Lq=E;let _=process.resourceUsage();_.time=p,_.userCPUTime=_.userCPUTime/1e3,_.systemCPUTime=_.systemCPUTime/1e3,rn.trace?.(`process.resourceUsage: ${JSON.stringify(_)}`);let y=Wq(SS,_);rn.trace?.(`diffed resourceUsage: ${JSON.stringify(y)}`),y.time=p,y.period=SS.time?p-SS.time:t,y.cpuUtilization=Yq(y,y.period);let S={metric:ca.RESOURCE_USAGE,...y};Nd(n,S),SS=_;let R=ft();Cq(n,R),Cq(n,{system:R.system}),Oq(n,R),Oq(n,{system:R.system})}async function Dq(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function nC(){return vq||(vq=Qe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function zq(){return Mq||(Mq=Qe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Hce(){Qq=!0;let e=(0,Kp.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Bce(tC,e),await Dq(nC(),Fce),await Dq(zq(),kce)},Math.min(e/2,2147483647)).unref()}function Jq(e,t){let r=e.report;r.threadId=t?.threadId||vl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Uq+=n.mean*n.count);r.totalBytesProcessed=Uq,t&&(r.metrics.push({metric:ca.UTILIZATION,...t.performance.eventLoopUtilization(xq.get(t))}),xq.set(t,t.performance.eventLoopUtilization())),r.id=(0,eC.getNextMonotonicTime)(),nC().primaryStore.put(r.id,r),Qq||Hce(),Gce&&(Xq=$ce(r))}async function $ce(e){if(await Xq,!hc){let r=(0,$p.dirname)(Pce());try{hc=await(0,ZN.open)((0,$p.join)(r,"analytics.log"),"r+")}catch{hc=await(0,ZN.open)((0,$p.join)(r,"analytics.log"),"w+")}}let t=(await hc.stat()).size;if(t>qce){let r=Buffer.alloc(t);await hc.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await hc.write(r,{position:0}),await hc.truncate(r.length),t=r.length}await hc.write(JSON.stringify(e)+`
13
13
  `,t)}function sC(e){e&&$q.push(e)}var vl,Bq,Fq,$p,ZN,eC,Kp,kq,Pce,Lce,rn,TS,Hq,Vp,XN,tC,Gq,qq,$q,Vq,Pq,Lq,SS,jq,Fce,kce,vq,Mq,Qq,Uq,xq,Gce,Xq,hc,qce,Yn=ie(()=>{vl=require("worker_threads"),Bq=b(tt());Oe();Fq=b(ee()),$p=require("path"),ZN=require("fs/promises"),eC=b(Ms()),Kp=b(de());G();qr();kq=b(require("node:fs"));jN();zN();({getLogFilePath:Pce,forComponent:Lce}=Fq.default);setTimeout(()=>{Promise.resolve().then(()=>Nq())},1e3);rn=Lce("analytics").conditional;(0,Kp.initSync)();TS=new Map,Hq=(0,Kp.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;a(Dce,"setAnalyticsEnabled");a(vce,"recordExistingAction");a(Mce,"recordNewAction");a(qe,"recordAction");Ue.recordAnalytics=qe;a(nn,"recordActionBinary");XN=0,tC=1e3,Gq="analytics-report",qq=[],$q=[];a(Yp,"addAnalyticsListener");Vq=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Uce,"sendAnalytics");a(rC,"recordHostname");a(Kq,"getHostNodeId");a(Nd,"storeMetric");a(Yq,"calculateCPUUtilization");a(Wq,"diffResourceUsage");a(xce,"storeTableSizeMetrics");a(Cq,"storeDBSizeMetrics");a(Oq,"storeVolumeMetrics");a(Bce,"aggregation");Pq=0,Lq=0,SS={userCPUTime:0,systemCPUTime:0},jq=a(()=>new Promise(setImmediate),"rest");a(Dq,"cleanup");Fce=36e5,kce=31536e6;a(nC,"getRawAnalyticsTable");a(zq,"getAnalyticsTable");(0,Bq.setChildListenerByType)(Gq,Jq);a(Hce,"startScheduledTasks");Uq=0,xq=new Map,Gce=!1;a(Jq,"recordAnalytics");qce=1e6;a($ce,"logAnalytics");a(sC,"onAnalyticsAggregate")});function Wp(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 Zq(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,jp=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(Wp,"appendHeader");a(Zq,"mergeHeaders")});function bS(e,t){let r={openapi:Vce,info:{title:"HarperDB HTTP REST interface",version:i$.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)yS[l.type]?o[l.name]=new oC(yS[l.type],l.type):l.properties?(o[l.name]=new a$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new jce(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new s$(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:fe,definition:oe,nullable:ae}of l){let he=oe??F?.definition;he&&s(he),ae===!1&&h.push(J),fe?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 oC(yS[F.type],F.type)}:X==="Any"?m[J]={format:X}:m[J]=new oC(yS[X],X),p.push(new aC(J,"query",m[J]))}let E=Object.keys(m),_=new aC(f,"path",{type:"string",format:"ID"});_.required=!0,_.description="primary key of record";let y=new aC("property","path",{enum:E});y.required=!0,r.components.schemas[c]=new s$(m,!u,h);let S=d.post!==Yt.prototype.post||d.update,R=typeof d.put=="function",I=typeof d.get=="function",w=typeof d.delete=="function",L=typeof d.patch=="function",H=`/${o}/`;r.paths[H]||(r.paths[H]={}),S&&(r.paths[H].post=new Kce(c,n,{200:new Cd({$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 e$(p,n,{200:new t$},"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 iC(p,n,{200:new Cd({type:"array",items:{$ref:Gs+c}})},"search for records by the specified property name and value pairs")),w&&(r.paths[H].delete=new n$(p,n,"delete all the records that match the provided query",{204:new r$}));let Z="/"+o+"/{"+f+"}";if(r.paths[Z]||(r.paths[Z]={}),r.paths[Z].options=new e$(p,n,{200:new t$},"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 iC([_],n,{200:new Cd({$ref:Gs+c})},"retrieve a record by its primary key")),R&&(r.paths[Z].put=new Yce([_],n,c,{200:new Cd({$ref:Gs+c})},"create or update the record with the URL path that maps to the record's primary key")),L&&(r.paths[Z].patch=new Wce([_],n,c,{200:new Cd({$ref:Gs+c})},"patch the record with the URL path that maps to the record's primary key")),w&&(r.paths[Z].delete=new n$([_],n,"delete a record with the given primary key",{204:new r$})),I&&y.schema.enum.length>0){let X=`/${o}/{${f}}.{property}`;r.paths[X]||(r.paths[X]={}),r.paths[X].get=new iC([_,y],n,{200:new Cd({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 Kce(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Gs+e}}}},this.security=t,this.responses=r}function iC(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function e$(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function t$(){this.description=o$,this.headers={},this.content={}}function Cd(e,t){this.description=o$,this.content={"application/json":{schema:e}},this.headers=t}function r$(){this.description="successfully processed request, no content returned to client"}function Yce(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 Wce(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 n$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function s$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function oC(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function a$(e){this.$ref=`#/components/schemas/${e}`}function jce(e){this.type="array",this.items=new a$(e)}function aC(e,t,r){this.name=e,this.in=t,this.schema=r}var i$,Vce,yS,Gs,o$,cC=ie(()=>{i$=b(Dt());ao();Vce="3.0.3",yS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Gs="#/components/schemas/",o$="successful operation";a(bS,"generateJsonApi");a(Kce,"Post");a(iC,"Get");a(e$,"Options");a(t$,"ResponseOptions200");a(Cd,"Response200");a(r$,"Response204");a(Yce,"Put");a(Wce,"Patch");a(n$,"Delete");a(s$,"ResourceSchema");a(oC,"Type");a(a$,"Ref");a(jce,"ArrayRef");a(aC,"Parameter")});var l$={};ye(l$,{Request:()=>Ec,createReuseportFd:()=>AS});var c$,Ec,lC,uC,AS,zp=ie(()=>{c$=require("os"),Ec=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 uC(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 lC(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)}},lC=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)}},uC=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,c$.platform)()!="win32"&&(AS=require("node-unix-socket").createReuseportFd)});var u$,qs,IS=ie(()=>{u$=b(mi());ao();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,u$._assignPackageExport)("Resource",Yt)});var NS={};ye(NS,{parseHeaderValue:()=>fC,start:()=>Jce});async function Qce(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&CS(e);let i=new Hs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==d$){let _=wS.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 y=fC(_);for(let S of y)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 _=fC(u).map(y=>(y.next?.name==="confirm"&&y.next.value>=0&&(e.replicatedConfirmation=+y.next.value),y.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=ea(r["content-type"],!0)(e.body,e.headers)}catch(_){throw new Od.ClientError(_,400)}if(e.authorize=!0,o===d$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return bS(wS,`${e.protocol}://${e.hostname}`);throw new Od.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 Od.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Od.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,dC.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let _=Zq(f.headers,i);return f.headers!==_&&(f.headers=_),f.data!==void 0&&(f.body=cp(f.data,e,f)),f}else if(isFinite(p)){zce[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),y=r["if-none-match"];y&&_==y?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",_),dC.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=cp(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?yi.warn(o):yi.info(o):yi.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=cp(o instanceof Error?p$(o):o,e,c),c}}function Jce(e){dC=e,e.includeExpensiveRecordCountEstimates&&(Ec.prototype.includeExpensiveRecordCountEstimates=!0),!f$&&(f$=!0,wS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Qce(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Qp++;let s=new os;m$||(m$=!0,Yp(l=>{Qp>0&&l.push({metric:"ws-connections",connections:Qp,byThread:!0})}));let i;t.on("error",l=>{i=!0,yi.warn(l)});let o;t.on("message",a(function(u){o||(o=ea(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",()=>{Qp--,nn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=wS.getMatch(l,"ws");if(nn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,qe(h=>({count:h.count,total:Qp}),"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 Zo(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?yi.warn(l):yi.info(l):yi.error(l),t.close(Xce[l.statusCode]||1011,p$(l))}t.close()},e))}function fC(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 yi,Od,p$,sn,zce,dC,d$,f$,wS,m$,Qp,Xce,h$=ie(()=>{ta();Yn();yi=b(ee()),Od=b(ge());OS();Wu();Xa();jp();cC();zp();IS();({errorToString:p$}=yi),sn=new Uint8Array(8),zce=new Float64Array(sn.buffer,0,1),dC={},d$="openapi";a(Qce,"http");Qp=0;a(Jce,"start");Xce={401:3e3,403:3003};a(fC,"parseHeaderValue")});var mC=U((Fxe,_$)=>{var{recordAction:PS,recordActionBinary:E$}=(Yn(),P(RS)),Zce=require("fastify-plugin"),ele=200;_$.exports=Zce(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),PS(o,"duration",u,f,d),E$(s.raw.statusCode<400,"success",u,f,d),E$(1,"response_"+s.raw.statusCode,u,f,d);let m=ele;i?.pipe?(i.on("data",_=>{m+=_.length}),i.on("end",()=>{PS(performance.now()-c,"transfer",u,f,d),PS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,PS(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 S$=U((kxe,g$)=>{var tle=ct(),rle={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};g$.exports=function(e){return tle.validateObject(e,rle)}});var Jp=U((Hxe,T$)=>{"use strict";var nle=(G(),P(j)).OPERATIONS_ENUM,pC=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=nle.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};T$.exports=pC});var eh={};ye(eh,{createTokens:()=>EC,getJWTRSAKeys:()=>US,refreshOperationToken:()=>_C,validateOperationToken:()=>gC,validateRefreshToken:()=>xS});async function US(){if(LS)return LS;try{let e=Xp.default.join(Zp.default.getHdbBasePath(),AA),t=await DS.default.readFile(Xp.default.join(e,Am.JWT_PASSPHRASE_NAME),"utf8"),r=await DS.default.readFile(Xp.default.join(e,Am.JWT_PRIVATE_KEY_NAME),"utf8");return LS={publicKey:await DS.default.readFile(Xp.default.join(e,Am.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},LS}catch(e){throw MS.default.error(e),new bi.ClientError(Ld.NO_ENCRYPTION_KEYS,Pd.INTERNAL_SERVER_ERROR)}}async function EC(e){let t=(0,hC.validateBySchema)(e,co.default.object({username:co.default.string().optional(),password:co.default.string().optional(),role:co.default.string().optional(),expires_in:co.default.alternatives(co.default.string(),co.default.number()).optional()}));if(t)throw new bi.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 gd(e.username,e.password,f)}catch(f){throw MS.default.error(f),new bi.ClientError(Ld.INVALID_CREDENTIALS,Pd.UNAUTHORIZED)}if(!r)throw new bi.ClientError(Ld.INVALID_CREDENTIALS,Pd.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 US(),c=await Dd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??I$,algorithm:vS,subject:vd.OPERATION}),l=await Dd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:sle,algorithm:vS,subject:vd.REFRESH}),u=Nw(l,Vr.SHA256);if((await(0,R$.update)(new y$.default(ym,qu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new bi.ClientError(Ld.REFRESH_TOKEN_SAVE_FAILED,Pd.INTERNAL_SERVER_ERROR);return b$.default.signalUserChange(new A$.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function _C(e){let t=(0,hC.validateBySchema)(e,co.default.object({refresh_token:co.default.string().required()}).required());if(t)throw new bi.ClientError(t.message);let{refresh_token:r}=e;await xS(r);let n=await US(),s=await Dd.default.decode(r);return{operation_token:await Dd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:I$,algorithm:vS,subject:vd.OPERATION})}}async function gC(e){return w$(e,vd.OPERATION)}async function xS(e){return w$(e,vd.REFRESH)}async function w$(e,t){try{let r=await US(),n=await Dd.default.verify(e,r.publicKey,{algorithms:vS,subject:t});if(n.role)throw new Error("Invalid token");let s=await gd(n.username,void 0,!1);if(t===vd.REFRESH&&!Cw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw MS.default.warn(r),r?.name==="TokenExpiredError"?new bi.ClientError(Ld.TOKEN_EXPIRED,Pd.FORBIDDEN):new bi.ClientError(Ld.INVALID_TOKEN,Pd.UNAUTHORIZED)}}var Dd,DS,Xp,co,hC,bi,MS,R$,y$,b$,A$,Zp,Pd,Ld,I$,sle,vS,vd,LS,Md=ie(()=>{Dd=b(require("jsonwebtoken")),DS=b(require("fs-extra")),Xp=b(require("node:path")),co=b(require("joi")),hC=b(ct());G();bi=b(ge()),MS=b(ee());Pw();_s();R$=b(qn()),y$=b(Jp()),b$=b(jo()),A$=b(ls()),Zp=b(de()),{HTTP_STATUS_CODES:Pd,AUTHENTICATION_ERROR_MSGS:Ld}=bi.hdbErrors;Zp.default.initSync();I$=Zp.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",sle=Zp.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",vS="RS256",vd={OPERATION:"operation",REFRESH:"refresh"};a(US,"getJWTRSAKeys");a(EC,"createTokens");a(_C,"refreshOperationToken");a(gC,"validateOperationToken");a(xS,"validateRefreshToken");a(w$,"validateToken")});var P$=U((Kxe,O$)=>{"use strict";var ile=S$(),Ud=require("passport"),ole=require("passport-local").Strategy,ale=require("passport-http").BasicStrategy,cle=require("util"),lle=(_s(),P(so)),C$=cle.callbackify(lle.findAndValidateUser),ule=(G(),P(j)),N$=(Md(),P(eh)),{AccessViolation:dle}=ge();Ud.use(new ole(function(e,t,r){C$(e,t,r)}));Ud.use(new ale(function(e,t,r){C$(e,t,r)}));Ud.serializeUser(function(e,t){t(null,e)});Ud.deserializeUser(function(e,t){t(null,e)});function fle(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 dle)}switch(a(i,"handleResponse"),n){case"Basic":Ud.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===ule.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?N$.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):N$.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ud.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(fle,"authorize");function mle(e,t){let r=ile(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(mle,"checkPermissions");O$.exports={authorize:fle,checkPermissions:mle}});var AC=U((Wxe,M$)=>{var HS=require("clone"),GS=ct(),ple=ue(),FS=(G(),P(j)),SC=require("fs"),RC=require("joi"),{string:kS}=RC.types(),{hdbErrors:hle,handleHDBError:BS}=ge(),{HTTP_STATUS_CODES:TC}=hle,{commonValidators:xd}=Ko(),L$=" is required",Ele=["insert","update","upsert"],yC={database:{presence:!1,format:xd.schema_format,length:xd.schema_length},schema:{presence:!1,format:xd.schema_format,length:xd.schema_length},table:{presence:!0,format:xd.schema_format,length:xd.schema_length},action:{inclusion:{within:Ele,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},_le={schema:kS.required(),table:kS.required(),action:kS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:gle,AWS_SECRET:Sle,AWS_BUCKET:Tle,AWS_FILE_KEY:Rle,REGION:yle}=FS.S3_BUCKET_AUTH_KEYS,ble={s3:{presence:!0},[`s3.${gle}`]:{presence:!0,type:"String"},[`s3.${Sle}`]:{presence:!0,type:"String"},[`s3.${Tle}`]:{presence:!0,type:"String"},[`s3.${Rle}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${yle}`]:{presence:!0,type:"String"}},D$=HS(yC);D$.data.presence={message:L$};var v$=HS(yC);v$.file_path.presence={message:L$};var Ale=Object.assign(HS(yC),ble),bC=HS(_le);bC.csv_url=kS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();bC.passthrough_headers=RC.object();function Ile(e){let t=GS.validateObject(e,D$);return qS(e,t)}a(Ile,"dataObject");function wle(e){let t=GS.validateBySchema(e,RC.object(bC));return qS(e,t)}a(wle,"urlObject");function Nle(e){let t=GS.validateObject(e,v$);return qS(e,t)}a(Nle,"fileObject");function Cle(e){let t=GS.validateObject(e,Ale);return qS(e,t)}a(Cle,"s3FileObject");function qS(e,t){if(!t){let r=ple.checkGlobalSchemaTable(e.schema,e.table);if(r)return BS(new Error,r,TC.BAD_REQUEST);if(e.operation===FS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{SC.accessSync(e.file_path,SC.constants.R_OK|SC.constants.F_OK)}catch(n){return n.code===FS.NODE_ERROR_CODES.ENOENT?BS(n,`No such file or directory ${n.path}`,TC.BAD_REQUEST):n.code===FS.NODE_ERROR_CODES.EACCES?BS(n,`Permission denied ${n.path}`,TC.BAD_REQUEST):BS(n)}}return t}a(qS,"postValidateChecks");M$.exports={dataObject:Ile,urlObject:wle,fileObject:Nle,s3FileObject:Cle}});var IC=U((zxe,U$)=>{"use strict";var th=ee(),$S=(G(),P(j));async function Ole(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===$S.OPERATIONS_ENUM.INSERT||t.operation===$S.OPERATIONS_ENUM.UPDATE||t.operation===$S.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===$S.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(th.info(i.message),i):i.http_resp_msg?(th.error(`Error calling operation: ${e.name}`),th.error(i.http_resp_msg),i):(th.error(`Error calling operation: ${e.name}`),th.error(i),i)}}a(Ole,"callOperationFunctionAsAwait");U$.exports={callOperationFunctionAsAwait:Ole}});var wC=U((Jxe,B$)=>{"use strict";var{S3:Ple,GetObjectCommand:Lle}=require("@aws-sdk/client-s3");B$.exports={getFileStreamFromS3:Dle,getS3AuthObj:x$};async function Dle(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await x$(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Lle(r))).Body}a(Dle,"getFileStreamFromS3");function x$(e,t,r){return new Ple({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(x$,"getS3AuthObj")});var k$=U((Zxe,F$)=>{"use strict";var NC=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}},CC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};F$.exports={BulkLoadFileObject:NC,BulkLoadDataObject:CC}});var G$=U((t0e,H$)=>{"use strict";var OC=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}};H$.exports=OC});var $$=U((n0e,q$)=>{"use strict";var PC=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};q$.exports=PC});var DC=U((i0e,K$)=>{"use strict";var V$=G$(),vle=$$(),{HDB_ERROR_MSGS:Mle}=En(),LC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Mle.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 V$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new vle(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 V$(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}};K$.exports=LC});var Ml=U((a0e,z$)=>{"use strict";var rh=ee(),{validateBySchema:Y$}=ct(),la=require("joi"),Ule=ia(),VS=ue(),{handleHDBError:KS,hdbErrors:xle,ClientError:W$}=ge(),{HDB_ERROR_MSGS:YS,HTTP_STATUS_CODES:vC}=xle,j$=de();j$.initSync();var{getDatabases:MC}=(Oe(),P(Et)),Ble=require("fs-extra"),Fle=(G(),P(j));z$.exports={describeAll:kle,describeTable:WS,describeSchema:Hle};async function kle(e={}){try{let t=VS.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=MC(),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 WS({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 WS({schema:m,table:h,exact_count:u,include_computed:d},_)}E&&l.push(E)}catch(E){rh.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 rh.error("Got an error in describeAll"),rh.error(t),KS(new Error,YS.DESCRIBE_ALL_ERR)}}a(kle,"describeAll");async function WS(e,t){VS.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=Y$(e,la.object({database:la.string(),table:la.string().required(),exact_count:la.boolean().strict(),include_computed:la.boolean().strict()}));if(i)throw new W$(i.message);let c=MC()[r];if(!c)throw KS(new Error,YS.SCHEMA_NOT_FOUND(e.schema),vC.NOT_FOUND);let l=c[n];if(!l)throw KS(new Error,YS.TABLE_NOT_FOUND(e.schema,e.table),vC.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 Ble.stat(l.primaryStore.env.path)).size}catch(p){rh.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")),j$.get(Fle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Ule.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){rh.warn(`unable to stat table dbi due to ${p}`)}return m}a(WS,"descTable");async function Hle(e){VS.transformReq(e);let t=Y$(e,la.object({database:la.string(),exact_count:la.boolean().strict(),include_computed:la.boolean().strict()}));if(t)throw new W$(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=MC()[n];if(!i)throw KS(new Error,YS.SCHEMA_NOT_FOUND(e.schema),vC.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),VS.isEmpty(l)||l.describe){let u=await WS({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(Hle,"describeSchema")});var eV=U((l0e,Z$)=>{"use strict";var Gle=Ml(),{hdbErrors:Q$}=ge(),{getDatabases:J$}=(Oe(),P(Et));Z$.exports={checkSchemaExists:X$,checkSchemaTableExists:qle,schemaDescribe:Gle};async function X$(e){if(!J$()[e])return Q$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(X$,"checkSchemaExists");async function qle(e,t){let r=await X$(e);if(r)return r;if(!J$()[e][t])return Q$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(qle,"checkSchemaTableExists")});var rV=U((d0e,tV)=>{"use strict";var $le=ms();tV.exports={writeTransaction:Vle};function Vle(e,t,r){return $le.writeTransaction(e,t,r)}a(Vle,"writeTransaction")});var kC=U((m0e,pV)=>{"use strict";var{decode:Kle}=require("msgpackr"),QS=nr(),Bd=Mt(),BC=(G(),P(j)),yn=ee(),xC=de(),Yle=(G(),P(j)),{onMessageByType:Wle}=tt(),oV=ia(),{recordAction:nV,recordActionBinary:jle}=(Yn(),P(RS)),{publishToStream:zle}=QS,{ConsumerEvents:sV}=require("nats"),Qle=Vn(),{promisify:Jle}=require("util"),{decodeBlobsWithWrites:Xle}=(ds(),P(Dg)),aV=Jle(setTimeout),JS=1e4,XS,zS,cV,nh=new Map,Fd=new Map;pV.exports={initialize:lV,ingestConsumer:FC,setSubscription:Zle,setIgnoreOrigin:rue,getDatabaseSubscriptions:tue,updateConsumer:uV};async function lV(){Wle(BC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async t=>{await uV(t)}),cV=!0,yn.notify("Initializing clustering ingest service.");let{connection:e}=await QS.getNATSReferences();XS=e,zS=e.info.server_name}a(lV,"initialize");async function uV(e){if(e.status==="start"){let{js:t,jsm:r}=await dV(e.node_domain_name);FC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=nh.get(e.stream_name+e.node_domain_name);t&&(yn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),nh.set(e.stream_name+e.node_domain_name,"close")),Fd.get(e.node_domain_name)==="failed"&&Fd.set(e.node_domain_name,"close")}}a(uV,"updateConsumer");var ZS=new Map;function Zle(e,t,r){let n=ZS.get(e);n||ZS.set(e,n=new Map),n.set(t,r),cV||lV().then(eue)}a(Zle,"setSubscription");async function eue(){let e=await Qle.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Bd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await dV(r),!n))break;let{schema:o,table:c}=i,l=oV.createNatsTableStreamName(o,c);FC(l,n,s,r)}}}a(eue,"accessConsumers");async function dV(e){let t,r,n=1;for(;!r;)try{t=await XS.jetstream({domain:e}),r=await XS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Fd.get(e)==="close")break;Fd.set(e,"failed"),n%10===1&&yn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<JS?n++*100:JS;await aV(i)}return{js:t,jsm:r}}a(dV,"connectToRemoteJS");function tue(){return ZS}a(tue,"getDatabaseSubscriptions");var fV;function rue(e){fV=e}a(rue,"setIgnoreOrigin");var mV=100,iV=new Array(mV),jS=0;async function FC(e,t,r,n){let{connection:s}=await QS.getNATSReferences();XS=s,zS=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,zS),yn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Fd.get(n)==="close")break;o%10===1&&yn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(yn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await QS.createConsumer(r,e,zS,new Date(Date.now()).toISOString()));let d=o++*100<JS?o++*100:JS;await aV(d)}let c=!1,l;for(;!c;){if(nh.get(e+n)==="close"||Fd.get(n)==="close"){nh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:xC.get(BC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),nh.set(e+n,l);let u=(async()=>{for await(let d of await l.status())if(d.type===sV.ConsumerDeleted&&(await l.close(),c=!0),d.type===sV.HeartbeatsMissed){let f=d.data;yn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(yn.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 iV[jS],iV[jS]=nue(d).catch(f=>{yn.error(f)}),++jS>=mV&&(jS=0)}catch(d){d.message==="consumer deleted"?(yn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):yn.error("Error consuming clustering ingest, restarting consumer",d)}}}a(FC,"ingestConsumer");async function nue(e){let t;await Xle(()=>{t=Kle(e.data)}),nV(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),yn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=xC.get(BC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Bd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Bd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Bd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!fV),jle(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Bd.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;yn.trace("processing message:",o,c,u,(d?"records: "+d.map(w=>w?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),yn.trace(`messageProcessor nats msg id: ${e.headers.get(Bd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(w=>h=w),{timestamp:_,user:y,node_name:S}=m||{},R=ZS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,R.send(t);else if(d.length===1&&!l)R.send({type:UC(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:_,table:u,onCommit:h,user:y,nodeName:S});else{let w=d.map((L,H)=>({type:UC(o),value:L,expiresAt:p,id:f?.[H],table:u}));for(;l;)w.push({type:UC(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:w,table:u,timestamp:_,onCommit:h,user:y,nodeName:S})}xC.get(Yle.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&zle(e.subject.split(".").slice(0,-1).join("."),oV.createNatsTableStreamName(c,u),e.headers,e.data),await E;let I=Date.now()-_;_&&nV(I,"replication-latency",e.subject,o,"ingest")}catch(o){yn.error(o)}e.ack()}a(nue,"messageProcessor");function UC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(UC,"convertOperation")});var nr=U((h0e,LV)=>{"use strict";var Yr=de();Yr.initSync();var sue=require("fs-extra"),iue=require("semver"),oh=require("path"),{monotonicFactory:oue}=require("ulidx"),EV=oue(),aue=require("util"),_V=require("child_process"),cue=aue.promisify(_V.exec),lue=_V.spawn,on=Mt(),nt=(G(),P(j)),{packageJson:uue,PACKAGE_ROOT:due}=Dt(),eT=ue(),Ai=ee(),tT=ia(),fue=rV(),sh=Nt(),{broadcast:mue,onMessageByType:pue,getWorkerIndex:hue}=tt(),{isMainThread:gV}=require("worker_threads"),{Encoder:Eue,decode:$C}=require("msgpackr"),SV=new Eue,{isEmpty:Fl}=eT,TV=(_s(),P(so));gV&&pue(nt.ITC_EVENT_TYPES.RESTART,()=>{bn=void 0,Bl=void 0});var{connect:_ue,StorageType:gue,RetentionPolicy:Sue,AckPolicy:VC,DeliverPolicy:KC,DiscardPolicy:Tue,JSONCodec:Rue,createInbox:YC,headers:yue,ErrorCode:hV}=require("nats"),{recordAction:bue}=(Yn(),P(RS)),{encodeBlobsAsBuffers:Aue}=(ds(),P(Dg)),RV=Rue(),Iue="clustering",wue=uue.engines[on.NATS_SERVER_NAME],Nue=oh.join(due,"dependencies"),qC=oh.join(Nue,`${process.platform}-${process.arch}`,on.NATS_BINARY_NAME),HC,GC,ih,Ul,xl;LV.exports={runCommand:yV,checkNATSServerInstalled:Cue,createConnection:WC,getConnection:ah,getJetStreamManager:ch,getJetStream:AV,getNATSReferences:lo,getServerList:Pue,createLocalStream:jC,listStreams:IV,deleteLocalStream:Lue,getServerConfig:kd,listRemoteStreams:Due,viewStream:vue,viewStreamIterator:Mue,publishToStream:Uue,request:Fue,reloadNATS:zC,reloadNATSHub:kue,reloadNATSLeaf:Hue,extractServerName:Bue,requestErrorHandler:Gue,createLocalTableStream:OV,createTableStreams:Vue,purgeTableStream:PV,purgeSchemaTableStreams:Kue,getStreamInfo:Yue,updateLocalStreams:jue,closeConnection:Oue,getJsmServerName:rT,addNatsMsgHeader:wV,clearClientCache:bV,updateRemoteConsumer:que,createConsumer:NV,updateConsumerIterator:$ue};async function yV(e,t=void 0){let{stdout:r,stderr:n}=await cue(e,{cwd:t});if(n)throw new Error(n.replace(`
14
14
  `,""));return r.replace(`
15
15
  `,"")}a(yV,"runCommand");async function Cue(){try{await sue.access(qC)}catch{return!1}let e=await yV(`${qC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return iue.eq(t,wue)}a(Cue,"checkNATSServerInstalled");async function WC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await TV.getClusterUser();if(Fl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ai.trace("create nats connection called");let i=await _ue({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Yr.get(nt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Yr.get(nt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Yr.get(nt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ai.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ai.error("Error with Nats client connection, connection closed",o),i===bn&&bV()}),i}a(WC,"createConnection");function bV(){bn=void 0,Ul=void 0,xl=void 0,Bl=void 0}a(bV,"clearClientCache");async function Oue(){bn&&(await bn.drain(),bn=void 0,Ul=void 0,xl=void 0,Bl=void 0)}a(Oue,"closeConnection");var bn,Bl;async function ah(){return Bl||(Bl=WC(Yr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),bn=await Bl),bn||Bl}a(ah,"getConnection");async function ch(){if(Ul)return Ul;Fl(bn)&&await ah();let{domain:e}=kd(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Fl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ul=await bn.jetstreamManager({domain:e,timeout:6e4}),Ul}a(ch,"getJetStreamManager");async function AV(){if(xl)return xl;Fl(bn)&&await ah();let{domain:e}=kd(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Fl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return xl=bn.jetstream({domain:e,timeout:6e4}),xl}a(AV,"getJetStream");async function lo(){let e=bn||await ah(),t=Ul||await ch(),r=xl||await AV();return{connection:e,jsm:t,js:r}}a(lo,"getNATSReferences");async function Pue(e){let t=Yr.get(nt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await TV.getClusterUser(),s=await WC(t,r,n),i=YC(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=RV.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 eT.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(Pue,"getServerList");async function jC(e,t){let{jsm:r}=await lo(),n=Yr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Yr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Yr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:gue.File,retention:Sue.Limits,subjects:t,discard:Tue.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(jC,"createLocalStream");async function IV(){let{jsm:e}=await lo(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(IV,"listStreams");async function Lue(e){let{jsm:t}=await lo();await t.streams.delete(e)}a(Lue,"deleteLocalStream");async function Due(e){let{connection:t}=await lo(),r=[],n=YC(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(RV.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(Due,"listRemoteStreams");async function vue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await lo(),i=EV(),o={durable_name:i,ack_policy:VC.Explicit};t&&(o.deliver_policy=KC.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=$C(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(vue,"viewStream");async function*Mue(e,t=void 0,r=void 0){let{jsm:n,js:s}=await lo(),i=EV(),o={durable_name:i,ack_policy:VC.Explicit};t&&(o.deliver_policy=KC.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=$C(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(Mue,"viewStreamIterator");async function Uue(e,t,r,n){Ai.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=wV(n,r);let{js:s}=await lo(),i=await rT(),o=`${e}.${i}`,c=await Aue(()=>n instanceof Uint8Array?n:SV.encode(n));try{Ai.trace(`publishToStream publishing to subject: ${o}`),bue(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"){Ai.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await jC(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Uue,"publishToStream");function wV(e,t){t===void 0&&(t=yue());let r=Yr.get(nt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(on.MSG_HEADERS.ORIGIN)&&r&&t.append(on.MSG_HEADERS.ORIGIN,r),t}a(wV,"addNatsMsgHeader");function kd(e){e=e.toLowerCase();let t=oh.join(Yr.get(nt.CONFIG_PARAMS.ROOTPATH),Iue);if(e===nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Fl(GC)&&(GC={port:sh.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:sh.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.HUB,config_file:on.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:oh.join(t,on.PID_FILES.HUB),hdbNatsPath:t}),GC;if(e===nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Fl(HC)&&(HC={port:sh.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:sh.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,config_file:on.NATS_CONFIG_FILES.LEAF_SERVER,domain:sh.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,pid_file_path:oh.join(t,on.PID_FILES.LEAF),hdbNatsPath:t}),HC;Ai.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(kd,"getServerConfig");async function NV(e,t,r,n){try{await e.consumers.add(t,{ack_policy:VC.Explicit,durable_name:r,deliver_policy:KC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(NV,"createConsumer");async function xue(e,t,r){await e.consumers.delete(t,r)}a(xue,"removeConsumer");function Bue(e){return e.split(".")[1]}a(Bue,"extractServerName");async function Fue(e,t,r=6e4,n=YC()){if(!eT.isObject(t))throw new Error("data param must be an object");let s=SV.encode(t),{connection:i}=await lo(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return $C(c.data)}a(Fue,"request");function zC(e){return new Promise(async(t,r)=>{let n=lue(qC,["--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(zC,"reloadNATS");async function kue(){let{pid_file_path:e}=kd(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await zC(e)}a(kue,"reloadNATSHub");async function Hue(){let{pid_file_path:e}=kd(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await zC(e)}a(Hue,"reloadNATSLeaf");function Gue(e,t,r){let n;switch(e.code){case hV.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case hV.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Gue,"requestErrorHandler");async function que(e,t){let r=t+on.SERVER_SUFFIX.LEAF,{connection:n}=await lo(),{jsm:s}=await Que(r),{schema:i,table:o}=e,c=tT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await CV(async()=>{if(e.subscribe===!0)await NV(s,c,n.info.server_name,l);else try{await xue(s,c,n.info.server_name)}catch(u){Ai.trace(u)}})}a(que,"updateRemoteConsumer");async function $ue(e,t,r,n){let s=tT.createNatsTableStreamName(e,t),i=r+on.SERVER_SUFFIX.LEAF,o={type:nt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!gV&&hue()<Yr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=kC();await c(o)}await mue(o),n==="stop"&&await eT.asyncSetTimeout(1e3)}a($ue,"updateConsumerIterator");function CV(e){return fue.writeTransaction(nt.SYSTEM_SCHEMA_NAME,nt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(CV,"exclusiveLock");async function OV(e,t){let r=tT.createNatsTableStreamName(e,t),n=await rT(),s=Wue(e,t,n);await jC(r,[s])}a(OV,"createLocalTableStream");async function Vue(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await OV(n,s)}}a(Vue,"createTableStreams");async function PV(e,t,r=void 0){if(Yr.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=tT.createNatsTableStreamName(e,t),{domain:s}=kd(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await ah()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ai.warn(n);else throw n}}a(PV,"purgeTableStream");async function Kue(e,t){if(Yr.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await PV(e,t[r])}a(Kue,"purgeSchemaTableStreams");async function Yue(e){return(await ch()).streams.info(e)}a(Yue,"getStreamInfo");function Wue(e,t,r){return`${on.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Wue,"createSubjectName");async function rT(){if(ih)return ih;if(ih=(await ch())?.nc?.info?.server_name,ih===void 0)throw new Error("Unable to get jetstream manager server name");return ih}a(rT,"getJsmServerName");async function jue(){let e=await ch(),t=await rT(),r=await IV();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=zue(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(".");Ai.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(jue,"updateLocalStreams");function zue(e){let{config:t}=e,r=!1,n=Yr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Yr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Yr.get(nt.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(zue,"updateStreamLimits");async function Que(e){let t,r;try{t=await bn.jetstream({domain:e}),r=await bn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ai.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Que,"connectToRemoteJS")});function QC(e){let t=e.get(nT),r=t?(0,Hd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=st();r.nodeName=st();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:uh(e)??1,nodes:[]})})}s[n]=0,e.putSync(nT,(0,Hd.pack)(r))}return r}function lh(e){return QC(e).remoteNameToId}function vV(e,t){let r=QC(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(nT,(0,Hd.pack)(r)),s}function sT(e,t){let r=QC(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(nT,(0,Hd.pack)(r))}return DV.trace?.("The remote node name map",e,n,s),s}var DV,Hd,nT,JC=ie(()=>{DV=b(Er());Ss();Hd=require("msgpackr"),nT=Symbol.for("remote-ids");a(QC,"getIdMappingRecord");a(lh,"exportIdMapping");a(vV,"remoteToLocalNodeId");a(sT,"getIdOfRemoteNode")});function eO(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=UV,Jue(e.primaryStore,e.auditStore)):(c=MV,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{xV(MV[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=bd(t);let d=new ZC(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 xV(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),BV(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=bd(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,XC.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,XC.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 Jue(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",()=>{let i=UV[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{xV(i)}finally{r.threadLocalWrites[0]=i.lastTxnTime,r.unlock("thread-local-writes",0)}},"acquiredLock");r.attemptLock("thread-local-writes",0,o)&&o()})}}function BV(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function FV(e){return e.nextTransaction||(eO({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),BV(e)),e.nextTransaction}var XC,MV,UV,ZC,tO=ie(()=>{XC=b(ee());Wu();pc();zi();MV=Object.create(null),UV=Object.create(null);a(eO,"addSubscription");ZC=class extends os{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(xV,"notifyFromTransactionData");a(Jue,"listenToCommits");a(BV,"nextTransaction");a(FV,"whenNextTransaction")});var VV={};ye(VV,{commitsAwaitingReplication:()=>Gd,getHDBNodeTable:()=>Wt,getReplicationSharedStatus:()=>qd,iterateRoutes:()=>fh,shouldReplicateToNode:()=>dh,subscribeToNodeUpdates:()=>$d});function Wt(){return kV||(kV=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 qd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function $d(e){Wt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;$V.debug?.("adding node",n,"on node",st()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==st()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Wt().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 dh(e,t){let r=_c.default.get(x.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===_c.default.get(x.REPLICATION_SHARD))))&&Wt().primaryStore.get(st())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function Xue(){$d(e=>{gc({},(t,r)=>{let n=e.name,s=HV.get(n);if(s||HV.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=qd(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of Gd.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*fh(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=_c.default.get(x.REPLICATION_SECUREPORT)??(!_c.default.get(x.REPLICATION_PORT)&&_c.default.get(x.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||_c.default.get(x.REPLICATION_PORT)||_c.default.get(x.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){GV.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 GV,qV,_c,$V,kV,HV,Gd,Vd=ie(()=>{Oe();Ss();Mm();GV=require("worker_threads"),qV=b(ge()),_c=b(de());G();$V=b(Er());server.nodes=[];a(Wt,"getHDBNodeTable");a(qd,"getReplicationSharedStatus");a($d,"subscribeToNodeUpdates");a(dh,"shouldReplicateToNode");HV=new Map;vx((e,t,r)=>{if(r>server.nodes.length)throw new qV.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Gd||(Gd=new Map,Xue());let n=Gd.get(e);return n||(n=[],Gd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Xue,"startSubscriptionToReplications");a(fh,"iterateRoutes")});var JV={};ye(JV,{connectedToNode:()=>kl,disconnectedFromNode:()=>Yd,ensureNode:()=>ua,requestClusterStatus:()=>QV,startOnMainThread:()=>rO});async function rO(e){let t=0,r=ft();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){iT.set(o,uh(u.auditStore));break}}}Ii.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=st();function l(){let u=Wt().primaryStore.get(c);if(u!==null){let d=e.url??Sc();if(u===void 0||u.url!==d||u.shard!==e.shard)return ua(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Wt().primaryStore.get(c)&&l();for(let u of fh(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),KV.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}$d(s)});let n;function s(o,c=o?.name){let l=st()&&c===st()||Sc()&&o?.url===Sc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Wt().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 uo){let h;for(let[E,{nodes:_}]of p){let y=_[0];if(y&&y.name==c){h=!0;for(let[S,{worker:R}]of p)p.delete(S),at.warn("Node was deleted, unsubscribing from node",c,S,m),R?.postMessage({type:"unsubscribe-from-node",node:c,nodes:_,database:S,url:m});break}}if(h){uo.get(m).iterator.remove(),uo.delete(m);return}}return}if(l)return;if(!o.url){at.info(`Node ${o.name} is missing url`);return}let u=uo.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 ${st()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of Kd)if(o.url===p.url){Kd.delete(m);break}Kd.set(o.name,o)}let d=ft();if(u||(u=new Map,uo.set(o.url,u)),u.iterator=gc(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}];iT.has(m)&&mh.default.get(x.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:p,name:st(),startTime:iT.get(m),endTime:Date.now(),replicates:!0}),iT.delete(m));let y=dh(o,m),S=Ii.workers.filter(R=>R.name==="http");if(h){if(E=h.worker,h.nodes=_,y)return}else y&&(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(y){let R=Zue.HDB_LEADER_URL??process.env.HDB_LEADER_URL??KV[0]?.url,I=R?new URL(R).hostname:Array.from(Wt().primaryStore.getKeys({}).filter(L=>L!==st()))[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 L={..._[0],type:"subscribe-to-node",database:m,nodes:_};E?E.postMessage(L):ph(L)},ede)}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:Wt().primaryStore.get(st())?.replicates}),Wt().primaryStore.get(st())?.replicates||(n=!1,at.info("Disabling replication, this node name",st(),Wt().primaryStore.get(st()),m));let R={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:_};E?E.postMessage(R):aT(R)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),Yd=a(function(o){try{at.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(Kd.keys()),l=c.sort(),u=l.indexOf(o.name||wi(o.url));if(u===-1){at.warn("Disconnected node not found in node map",o.name,c);return}let d=uo.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||!mh.default.get(x.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],_=Kd.get(E);d=uo.get(_.url);let y=d?.get(o.database);if(!y||y.connected===!1||y.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=y,R=!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,y.nodes[0]),R=!0)}f.nodes=[f.nodes[0]],R||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"),kl=a(function(o){let c=uo.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(mh.default.get(x.REPLICATION_FAILOVER)){l.nodes=[u];for(let d of uo.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=Ii.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]}):ph({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,Ii.onMessageByType)("disconnected-from-node",Yd),(0,Ii.onMessageByType)("connected-to-node",kl),(0,Ii.onMessageByType)("request-cluster-status",QV)}function QV(e,t){let r=[];for(let[n,s]of Kd)try{let i=uo.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=WV(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 ua(e,t){let r=Wt();e=e??wi(t.url),t.name=e;try{if(t.ca){let s=new jV.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&&!mh.default.get(x.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=WV(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 Ii,oT,at,YV,mh,jV,zV,WV,Zue,ede,uo,Yd,kl,Kd,iT,KV,hh=ie(()=>{Oe();Ii=b(tt());Ss();oT=require("worker_threads");Vd();at=b(ee()),YV=b(require("lodash")),mh=b(de());G();jV=require("crypto"),zV=b(require("minimist")),{cloneDeep:WV}=YV.default,Zue=(0,zV.default)(process.argv),ede=200,uo=new Map,Kd=new Map,iT=new Map,KV=[];a(rO,"startOnMainThread");a(QV,"requestClusterStatus");oT.parentPort&&(Yd=a(e=>{oT.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),kl=a(e=>{oT.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Ii.onMessageByType)("subscribe-to-node",e=>{ph(e)}),(0,Ii.onMessageByType)("unsubscribe-from-node",e=>{aT(e)}));a(ua,"ensureNode")});var XV=U(An=>{"use strict";var tde={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