harperdb 4.7.27 → 4.7.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +246 -246
- package/package.json +2 -2
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadServer.js +1 -1
- package/studio/web/assets/{index-BKH0o6vZ.js → index-BLrHW_4X.js} +5 -5
- package/studio/web/assets/{index-BKH0o6vZ.js.map → index-BLrHW_4X.js.map} +1 -1
- package/studio/web/assets/{index.lazy-D5vviOl1.js → index.lazy-B3bMWbNh.js} +2 -2
- package/studio/web/assets/{index.lazy-D5vviOl1.js.map → index.lazy-B3bMWbNh.js.map} +1 -1
- package/studio/web/assets/{profile-V6JtmyCF.js → profile-BLeDamUk.js} +2 -2
- package/studio/web/assets/{profile-V6JtmyCF.js.map → profile-BLeDamUk.js.map} +1 -1
- package/studio/web/assets/{status-9_1gEAyL.js → status-CdZyfe1S.js} +2 -2
- package/studio/web/assets/{status-9_1gEAyL.js.map → status-CdZyfe1S.js.map} +1 -1
- package/studio/web/index.html +1 -1
- package/utility/scripts/restartHdb.js +1 -1
package/bin/harperdb.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
`},"serialize"),compressible:!1,q:.8});An.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()}});XF={type:"application/json",serializeStream:Up,serialize:xp,deserialize:Wse,q:.5};An.set("*/*",XF);An.set("",XF);a(Wse,"tryJSONParse");a(kp,"registerContentHandlers");Yse=(0,JF.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=nS(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(nS,"findBestSerializer");WF=rS.default.get(x.HTTP_COMPRESSIONTHRESHOLD);a(Fp,"serialize");a(Ea,"serializeMessage");a(Ww,"asyncSerialization");a(Yw,"hasAsyncSerialization");a(jse,"streamToBuffer");zse=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(Jse,"isBufferEncoding");a(Qse,"parseContentType");a(_a,"getDeserializer");a(Xse,"deserializerUnknownType");a(Zse,"transformIterable");a(tS,"toCsvStream")});var dS={};Re(dS,{Blob:()=>js,blobsWereEncoded:()=>Vl,cleanupOrphans:()=>mie,databasePaths:()=>zw,decodeBlobsWithWrites:()=>uS,decodeFromDatabase:()=>Ta,decodeWithBlobCallback:()=>$p,deleteBlob:()=>aS,deleteBlobsInObject:()=>Rc,deleteRootBlobPathsForDB:()=>Xw,encodeBlobsAsBuffers:()=>uie,encodeBlobsWithFilePath:()=>lS,findBlobsInObject:()=>$l,getFileId:()=>cS,getFilePathForBlob:()=>lH,getRootBlobPathsForDB:()=>xd,isSaving:()=>sie,saveBlob:()=>qp,setDeletionDelay:()=>nie,startPreCommitBlobsForRecord:()=>Zw});function aH(){}function aS(e){let t=lH(e);t&&setTimeout(()=>{(0,Ve.unlink)(t,r=>{r&&Mt.default.debug?.("Error trying to remove blob file",r)})},cH)}function nie(e){cH=e}function qp(e,t=!1){let r=Yr.get(e);if(!r)r={storageIndex:0,fileId:null,store:Yn},Yr.set(e,r);else{if(r.fileId)return r;r.store=Yn}return r.deleteOnFailure=t,oie(r),r.source?jw(e,r.source,r):r.contentBuffer?iie(e,r):jw(e,yc.Readable.from(e.stream()),r),r}function jw(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(tie),p=(0,oS.createDeflate)(),(0,yc.pipeline)(t,p,f,E)):(m||f.write(eie),(0,yc.pipeline)(t,f,E));function h(_){let R=BigInt(_),S=new Uint8Array(Mr),y=new DataView(S.buffer);return R|=BigInt(o?Qw:oH)<<48n,y.setBigInt64(0,R),S}a(h,"createHeader");function E(_){let R=f.fd;if(_){if(i.unlock(d,0),R&&((0,Ve.close)(R),f.fd=null),r.deleteOnFailure)(0,Ve.unlink)(n,S=>{S&&Mt.default.debug?.("Error while deleting aborted blob file",S)});else try{if((0,Ve.statSync)(n).size===0){let S=Buffer.from(_.toString());(0,Ve.writeFile)(n,Buffer.concat([h(BigInt(S.length)+0xff000000000000n),S]),y=>{y&&Mt.default.debug?.("Error write error message to blob file",y)})}}catch(S){Mt.default.debug?.("Error checking blob file after abort",S)}u(_)}else{if(!m){m=!0;let S=p?p.bytesWritten:f.bytesWritten-Mr;e.size=S,(0,Ve.write)(R,h(S),0,Mr,0,E);return}i.unlock(d,0),c?(0,Ve.fdatasync)(R,S=>{S&&u(S),l(),(0,Ve.close)(R),f.fd=null}):(l(),(0,Ve.close)(R),f.fd=null)}}a(E,"finished")}),e}function cS(e){return Yr.get(e)?.fileId}function sie(e){return Yr.get(e)?.saving}function lH(e){let t=Yr.get(e);return t?.fileId&&Ud(t)}function xd(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=zw.get(e);if(!t){if(!e.databaseName)return Mt.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,Gp.get)(x.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,po.join)(n,e.databaseName)):t=[(0,po.join)((0,Gp.getHdbBasePath)(),"blobs",e.databaseName)],zw.set(e,t)}return t}async function Xw(e){let t=xd(e);t&&await Promise.all(t.map(r=>uH(r)))}async function uH(e){if((0,Ve.existsSync)(e)){for(let t of await(0,jn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await uH((0,po.join)(e,t.name));else try{await(0,jn.unlink)((0,po.join)(e,t.name))}catch(r){Mt.default.warn?.("Error deleting file",r)}try{await(0,jn.rmdir)(e)}catch(t){Mt.default.warn?.("Error deleting directory",t)}}}function Ud({storageIndex:e,fileId:t,store:r}){let n=xd(r);return(0,po.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 iie(e,t){let r=t.contentBuffer,n=r.length;if(!(n<iH))return e.size=n,jw(e,yc.Readable.from([r]),t)}function oie(e){let t=xd(e.store),r=aie(),n=t?.length>1?cie(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Ud(e),o=(0,po.dirname)(i);(0,Ve.existsSync)(o)||(0,Jw.ensureDirSync)(o),e.filePath=i}function aie(){let e=nH.get(Yn);if(!e){let t=0,r=xd(Yn);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,po.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Yn.getUserSharedBuffer("blob-file-id",e.buffer)),nH.set(Yn,e)}return Number(Atomics.add(e,0,1n))}function cie(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(iS);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,lie(e)),e.frequencyTable[t%iS]}async function lie(e){if(!jn.statfs)return;let t=await Promise.all(e.map(async s=>{let i;try{i=await(0,jn.statfs)(s)}catch(c){if(c.code!=="ENOENT")throw c;(0,Jw.ensureDirSync)(s),i=await(0,jn.statfs)(s)}let o=i.bavail*i.bsize;return Math.pow(o,.8)})),r=new Array(iS),n=t.map(s=>1/s);for(let s=0;s<iS;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 lS(e,t,r){Dd=t,Yn=r,Vl=!1;try{return e()}finally{Dd=void 0,Yn=void 0}}function uie(e){nn=[];let t;try{t=e()}catch(n){throw nn=void 0,n}let r=nn.length<2?nn[0]:Promise.all(nn);return nn=void 0,r?r.then(()=>e()):t}function uS(e,t,r){try{nn=[],Sa=r,Yn=t,e()}catch(s){throw Sa=void 0,nn=void 0,s}Sa=void 0;let n=nn.length<2?nn[0]:Promise.all(nn);return nn=void 0,n}function $p(e,t,r){Yn=r;try{return Sa=t,e()}finally{Sa=void 0}}function Ta(e,t){return Yn=t,e()}function Rc(e){$l(e,t=>{aS(t)})}function $l(e,t){if(e instanceof js)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 Zw(e,t){let r=[];for(let n in e){let s=e[n];s instanceof Md&&s.saveBeforeCommit&&r.push(s)}if(r.length>0)return()=>(Yn=t,Promise.all(r.map(n=>qp(n,!0).saving??Promise.resolve())))}function fie(){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 mie(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=xd(r);if(o)for(let d of o)await c(d);return await l(),Mt.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,jn.readdir)(d,{withFileTypes:!0})){let m=(0,po.join)(d,f.name);if(f.isDirectory())await c(m);else if(i.size%1e6===0&&Mt.default.info?.("Finding all blobs for orphan check, paths accumulated",i.size),i.add(m),i.size%2e3===0){let p=(0,sH.getHeapStatistics)();p.used_heap_size>p.heap_size_limit*(.8-i.size/16e6)&&await l()}}}catch(f){Mt.default.error?.("Error searching path for blobs",d,f)}}a(c,"searchPath");async function l(){let d=0,f=Math.floor(((0,Gp.get)(x.STORAGE_BLOBCLEANUPSPEED)??1e4)/1e3+1);for(let m in e){Mt.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&sn&&h.value&&u(h.value),d++%f===0?await(0,vd.setTimeout)(1):await(0,vd.setImmediate)()}catch(E){Mt.default.error?.("Error searching table",m," for references to potential orphaned blobs failed",E)}}Mt.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=Ot(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,vd.setTimeout)(1):await(0,vd.setImmediate)()}catch(p){Mt.default.error?.("Error searching audit log for references to potential orphaned blobs failed",p)}Mt.default.warn?.("Deleting",i.size,"orphaned blobs"),s+=i.size;for(let m of i)try{await(0,jn.unlink)(m)}catch(p){Mt.default.warn?.("Error deleting file",p)}Mt.default.warn?.("Finished deleting",i.size,"orphaned blobs"),i.clear()}a(l,"removePathsThatAreNotReferenced");function u(d){$l(d,f=>{if(f instanceof Md){let m=Yr.get(f);if(m.fileId!=null){let p=Ud(m);i.has(p)&&i.delete(p)}}})}a(u,"checkObjectForReferences")}var mo,jn,Ve,oS,yc,Jw,Gp,po,Mt,sH,vd,iH,Mr,oH,Qw,eH,eie,tie,tH,Yr,Sa,js,Dd,nn,Yn,Vl,Hp,sS,rie,rH,Md,cH,zw,nH,iS,die,Rs=ie(()=>{mo=require("msgpackr"),jn=require("node:fs/promises"),Ve=require("node:fs"),oS=require("node:zlib"),yc=require("node:stream"),Jw=require("fs-extra"),Gp=b(de());$();po=require("path"),Mt=b(Sr());ga();uo();sH=require("node:v8"),vd=require("node:timers/promises"),iH=8192,Mr=8,oH=0,Qw=1,eH=255,eie=new Uint8Array([0,oH,255,255,255,255,255,255]),tie=new Uint8Array([0,Qw,255,255,255,255,255,255]),tH=0xffffffffffff,Yr=new WeakMap,js=global.Blob||fie(),Vl=!1,Hp=new Uint8Array(8),sS=new DataView(Hp.buffer),rie=6e4;a(aH,"InstanceOfBlobWithNoConstructor");aH.prototype=js.prototype;rH=!1,Md=class e extends aH{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=Yr.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):(Yw()&&Ww(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=Yr.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=Ud(t),o,c=a(async()=>{let l,u=Mr;try{if(l=await(0,jn.readFile)(i),l.length>=Mr){l.copy(Hp,0,0,Mr);let f=sS.getBigUint64(0);if(Number(f>>48n)===eH)throw new Error("Error in blob: "+l.subarray(Mr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<tH&&(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]===Qw?new Promise((f,m)=>{(0,oS.deflate)(l.subarray(Mr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Mr))},"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=Yr.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=Ud(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,_=a((R,S)=>{(0,Ve.open)(i,"r",(y,I)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Mt.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),_(R,S)},20).unref();S(y),p.#e?.forEach(w=>w(y))}else o=I,R(I)})},"openFile");return new Promise(_)},pull:a(E=>{let _=0,R=100;return new Promise(a(function S(y,I){function w(H){(0,Ve.close)(o),clearTimeout(d),u&&u.close(),I(H),p.#e?.forEach(ee=>ee(H))}a(w,"onError");let L=Buffer.allocUnsafe(262144);(0,Ve.read)(o,L,0,L.length,c,(H,ee,X)=>{if(l+=ee,H)return w(H);if(c===0){if(ee<Mr){R-- >0&&f!==!1?(h(),Mt.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,I),20).unref()):(Mt.default.debug?.("File was empty, throwing error",i,R),w(new Error(`Blob ${t.fileId} was empty`)));return}X.copy(Hp,0,0,Mr);let Q=sS.getBigUint64(0);if(Number(Q>>48n)===eH)return w(new Error("Error in blob: "+X.subarray(Mr,ee)));if(_=Number(Q&0xffffffffffffn),_<tH&&p.size!==_&&(p.size=_,p.#t))for(let k of p.#t)k(_);X=X.subarray(Mr,ee),l-=Mr}else if(ee===0){let Q=Buffer.allocUnsafe(8);return(0,Ve.read)(o,Q,0,Mr,0,k=>{if(k)return w(k);if(Hp.set(Q),_=Number(sS.getBigUint64(0)&0xffffffffffffn),_>l){h()?(u=(0,Ve.watch)(i,{persistent:!1},()=>{u.close(),u=null,clearTimeout(d),S(y,I)}),(0,Ve.readSync)(o,Q,0,Q.length,c)>0?(u.close(),u=null,S(y,I)):d=setTimeout(()=>{w(new Error(`File read timed out reading from ${i}`))},rie).unref()):m?w(new Error("Blob is incomplete")):(m=!0,S(y,I));return}(0,Ve.close)(o),E.close(),y()})}else X=X.subarray(0,ee);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=ee,S(y,I);s&&l>=s&&(l>s&&(X=X.subarray(0,s-c)),l=_=s),n&&n>c&&(X=X.subarray(n-c))}c+=ee;try{E.enqueue(X)}catch(Q){return Mt.default.debug?.("Error enqueuing chunk",Q),y()}l===_&&((0,Ve.close)(o),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,Ve.close)(o),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,_=t.fileId+":blob";f=!E.attemptLock(_,0,()=>{f=!1}),f||E.unlock(_,0)}return f}}slice(t,r,n){let s=Yr.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Yr.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)};Yr.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 rH||(rH=!0,Mt.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 Yr.get(this)?.saving??Promise.resolve()}},cH=500;a(aS,"deleteBlob");a(nie,"setDeletionDelay");global.createBlob=function(e,t){let r=new Md(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Yr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof yc.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=yc.Readable.from(e);else throw new Error("Invalid source type");return r};a(qp,"saveBlob");a(jw,"writeBlobWithStream");a(cS,"getFileId");a(sie,"isSaving");a(lH,"getFilePathForBlob");zw=new Map;a(xd,"getRootBlobPathsForDB");a(Xw,"deleteRootBlobPathsForDB");a(uH,"rimrafSteadily");a(Ud,"getFilePath");a(iie,"writeBlobWithBuffer");a(oie,"generateFilePath");nH=new Map;a(aie,"getNextFileId");iS=128;a(cie,"getNextStorageIndex");a(lie,"createFrequencyTableForStoragePaths");a(lS,"encodeBlobsWithFilePath");a(uie,"encodeBlobsAsBuffers");a(uS,"decodeBlobsWithWrites");a($p,"decodeWithBlobCallback");a(Ta,"decodeFromDatabase");a(Rc,"deleteBlobsInObject");a($l,"findBlobsInObject");a(Zw,"startPreCommitBlobsForRecord");die=new mo.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,mo.addExtension)({Class:js,type:11,unpack:a(function(e){let t=die.unpack(e),r=new Md;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Yr.set(r,{storageIndex:t[1],fileId:t[2],store:Yn}),Sa)return Sa(r)??r;if(!Yn)throw new Error("No store specified, cannot load blob from storage")}else Yr.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=Yr.get(e);if(Dd!==void 0&&(Vl=!0,t?.recordId!==void 0&&t.recordId!==Dd))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<iH)return r.size=t.contentBuffer.length,(0,mo.pack)([r,t.contentBuffer])}if(Dd!==void 0){if(t=qp(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Dd,(0,mo.pack)([r,t.storageIndex,t.fileId])}if(t){if(Sa)return Sa(e),(0,mo.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,Ve.readFileSync)(Ud(t));if(n.length>=Mr&&(n.copy(Hp,0,0,Mr),Number(sS.getBigUint64(0)&0xffffffffffffn)===n.length-Mr))return Buffer.concat([(0,mo.pack)([r]),n]);if(nn)nn.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&nn)return nn.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,mo.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(fie,"polyfillBlob");a(mie,"cleanupOrphans")});function zn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Kp(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 bs.ClientError(`${u} must be a string, attempt to assign ${m}`);zn(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 bs.ClientError(`${u} must be a string, attempt to assign ${m}`);zn(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 bs.ClientError(`${u} must be a number, attempt to assign ${p}`);zn(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 bs.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);zn(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 bs.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);zn(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 bs.ClientError(`${u} must be a number, attempt to assign ${m}`);zn(this)[u]=m},"set");break;case"Boolean":d=a(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new bs.ClientError(`${u} must be a boolean, attempt to assign ${m}`);zn(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 bs.ClientError(`${u} must be a Date, attempt to assign ${m}`);zn(this)[u]=m},"set");break;case"Bytes":d=a(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new bs.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);zn(this)[u]=m},"set");break;case"Blob":d=a(function(m){if(!(m instanceof js||m==null&&l.nullable!==!1))throw new bs.ClientError(`${u} must be a Blob, attempt to assign ${m}`);zn(this)[u]=m},"set");break;case"Any":case void 0:d=a(function(m){zn(this)[u]=m},"set");break;default:d=a(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new bs.ClientError(`${u} must be an object, attempt to assign ${m}`);zn(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=eN(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 bs.ClientError("Can not add a property to a sealed table schema");zn(this)[l]=u}),o("deleteProperty",function(l){zn(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?mH:fH);break}c=l}while(c&&c!==fH&&c!==mH)}function pH(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(dH[t])return dH[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=eN(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function pie(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 eN(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends Wl{static{a(this,"TrackedObject")}},Kp(r,t)),new r(e)):new Wl(e);case Array:let n=new mS(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=eN(o,t?.elements)),n[s]=o}return n;default:return e}}function pS(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=pS(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 Yl(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=Yl(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=Bw[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Yl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)hie.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function fS(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Kl]||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(fS(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(fS(s))return!0}else return!0}else return!0}}return!1}var bs,dH,fH,mH,Wl,hie,Kl,mS,Vp,tN=ie(()=>{bs=b(ge());eS();Rs();a(zn,"getChanges");a(Kp,"assignTrackedAccessors");dH=Object.prototype,fH=new Proxy({},{get:pH}),mH=new Proxy({},{get:pH,set:pie});a(pH,"getProxiedProperty");a(pie,"setProxiedProperty");a(eN,"trackObject");Wl=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}};Kp(Wl,{},!0);a(pS,"collapseData");hie=Object.prototype.hasOwnProperty;a(Yl,"updateAndFreeze");a(fS,"hasChanges");Kl=Symbol.for("has-array-changes"),mS=class extends Array{static{a(this,"TrackedArray")}#e;[Kl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Kl]=!0,super.splice(...t)}push(...t){return this[Kl]=!0,super.push(...t)}pop(){return this[Kl]=!0,super.pop()}unshift(...t){return this[Kl]=!0,super.unshift(...t)}shift(){return this[Kl]=!0,super.shift()}};mS.prototype.constructor=Array;Vp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var RH={};Re(RH,{ResourceBridge:()=>sN});function iN({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 hH(e,t){let r=ho(e),n=iN(e,r);if(!r)throw new Oi.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;Ct(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&&pS(d)}catch(f){d={message:(0,yH.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 ho(e){let t=e.database||e.schema||_ie,r=mt()[t];if(!r)throw(0,Oi.handleHDBError)(new Error,Eie.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function EH(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*_H(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 gH,hS,Oi,SH,rN,nN,TH,yH,Eie,_ie,gie,Sie,sN,bH=ie(()=>{gH=b(UF()),hS=b(Pd()),Oi=b(ge());Ce();SH=b(Tp());$();rN=b(da()),nN=b(Ts()),TH=b(ue());Ec();tN();yH=b(Z()),{HDB_ERROR_MSGS:Eie}=Oi.hdbErrors,_ie="data",gie=1e4,Sie=10,sN=class extends gH.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=ho(t);if(!r)throw new Oi.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,hS.default)(t,"conditions");if(s)throw(0,Oi.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:iN(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 Oi.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}]}Je({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await ho(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ho(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 ho(t).dropTable()}createSchema(t){return Bd({database:t.schema,table:null}),rN.signalSchemaChange(new nN.SchemaEventMsg(process.pid,W.CREATE_SCHEMA,t.schema))}async dropSchema(t){await oN(t.schema),rN.signalSchemaChange(new nN.SchemaEventMsg(process.pid,W.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,SH.default)(t),n,s=mt()[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),Ct(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=pS(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=mt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Ct(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 EH(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=mt()[t.schema][t.table];if(!r.createdTimeProperty)throw new Oi.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:fg.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,TH.asyncSetTimeout)(Sie),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%gie===0&&await u();return l.length>0&&await u(),s?EH(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,hS.default)(t,"hashes");if(r)throw r;return hH(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of hH(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&SI[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,hS.default)(t,"value");if(n)throw n;let s=ho(t);if(!s)throw new Oi.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===fg.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:iN(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=ho(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){ho({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ho(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=ho(t),n={};switch(t.search_type){case mg.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 mg.USERNAME:{let s=t.search_values;for await(let i of _H(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return _H(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(iN,"getSelect");a(hH,"getRecords");a(ho,"getTable");a(EH,"createDeleteResponse");a(_H,"groupRecordsInHistory")});var As=U((DUe,AH)=>{"use strict";var{ResourceBridge:Tie}=(bH(),O(RH)),yie=de();yie.initSync();var ES;function Rie(){return ES||(ES=new Tie,ES)}a(Rie,"getBridge");AH.exports=Rie()});var Pi=U((MUe,NH)=>{var bie=kl(),{promisify:Aie}=require("util"),{getDatabases:wH}=(Ce(),O(lt));NH.exports={setSchemaDataToGlobal:IH,getTableSchema:Iie,getSystemSchema:wie,setSchemaDataToGlobalAsync:Aie(IH)};function IH(e){global.hdb_schema=wH(),e&&e()}a(IH,"setSchemaDataToGlobal");function Iie(e,t,r){let n=wH()[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(Iie,"getTableSchema");function wie(){return bie}a(wie,"getSystemSchema")});var Is=U((xUe,LH)=>{"use strict";var gS=tB(),on=ue(),Nie=require("util"),SS=As(),Cie=Pi(),CH=Z(),{handleHDBError:jl,hdbErrors:Oie}=ge(),{HTTP_STATUS_CODES:zl}=Oie,Pie=Nie.promisify(Cie.getTableSchema),Lie="updated",OH="inserted",PH="upserted";LH.exports={insert:vie,update:Mie,upsert:Uie,validation:Die,flush:xie};async function Die(e){if(on.isEmpty(e))throw new Error("invalid update parameters defined.");if(on.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(on.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Pie(e.schema,e.table),r=gS(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&&on.isEmptyOrZeroLength(c[n]))throw CH.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(!on.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw CH.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!on.isEmpty(c[n])&&c[n]!==""&&s.has(on.autoCast(c[n]))&&(c.skip=!0),s.add(on.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(Die,"validation");async function vie(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=gS(e);if(t)throw jl(new Error,t.message,zl.BAD_REQUEST);on.transformReq(e);let r=on.checkSchemaTableExist(e.schema,e.table);if(r)throw jl(new Error,r,zl.BAD_REQUEST);let n=await SS.createRecords(e);return _S(OH,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(vie,"insertData");async function Mie(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=gS(e);if(t)throw jl(new Error,t.message,zl.BAD_REQUEST);on.transformReq(e);let r=on.checkSchemaTableExist(e.schema,e.table);if(r)throw jl(new Error,r,zl.BAD_REQUEST);let n=await SS.updateRecords(e);return on.isEmpty(n.existing_rows)?_S(Lie,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):_S(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Mie,"updateData");async function Uie(e){if(e.operation!=="upsert")throw jl(new Error,"invalid operation, must be upsert",zl.INTERNAL_SERVER_ERROR);let t=gS(e);if(t)throw jl(new Error,t.message,zl.BAD_REQUEST);on.transformReq(e);let r=on.checkSchemaTableExist(e.schema,e.table);if(r)throw jl(new Error,r,zl.BAD_REQUEST);let n=await SS.upsertRecords(e);return _S(PH,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Uie,"upsertData");function _S(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===OH?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===PH?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(_S,"returnObject");function xie(e){return on.transformReq(e),SS.flush(e.schema,e.table)}a(xie,"flush")});var cN=U((kUe,MH)=>{var Bie=_t(),aN=require("joi"),{hdbTable:kie,hdbDatabase:DH}=ca(),vH={schema:DH,database:DH,table:kie},Fie={date:aN.date().iso().required()},Hie={timestamp:aN.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};MH.exports=function(e,t){let r=t==="timestamp"?{...vH,...Hie}:{...vH,...Fie},n=aN.object(r);return Bie.validateBySchema(e,n)}});var BH=U((FUe,xH)=>{var Gie=_t(),lN=require("joi"),{hdbTable:qie,hdbDatabase:UH}=ca(),$ie=lN.object({schema:UH,database:UH,table:qie,hash_values:lN.array().required(),ids:lN.array()});xH.exports=function(e){return Gie.validateBySchema(e,$ie)}});var mN=U((HUe,kH)=>{"use strict";var uN=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}},dN=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}},fN=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};kH.exports={InsertObject:uN,NoSQLSeachObject:dN,DeleteResponseObject:fN}});var Xl=U((qUe,$H)=>{"use strict";var HH=cN(),Vie=BH(),Jl=ue(),FH=require("moment"),GH=Z(),{promisify:Kie,callbackify:Wie}=require("util"),Ql=($(),O(z)),Yie=Pi(),pN=Kie(Yie.getTableSchema),hN=As(),{DeleteResponseObject:jie}=mN(),{handleHDBError:bc,hdbErrors:zie}=ge(),{HDB_ERROR_MSGS:TS,HTTP_STATUS_CODES:Ac}=zie,Jie="records successfully deleted",Qie=Wie(qH);$H.exports={delete:Qie,deleteRecord:qH,deleteFilesBefore:Xie,deleteAuditLogsBefore:Zie};async function Xie(e){let t=HH(e,"date");if(t)throw bc(t,t.message,Ac.BAD_REQUEST,void 0,void 0,!0);if(Jl.transformReq(e),!FH(e.date,FH.ISO_8601).isValid())throw bc(new Error,TS.INVALID_DATE,Ac.BAD_REQUEST,Ql.LOG_LEVELS.ERROR,TS.INVALID_DATE,!0);let n=Jl.checkSchemaTableExist(e.schema,e.table);if(n)throw bc(new Error,n,Ac.NOT_FOUND,Ql.LOG_LEVELS.ERROR,n,!0);let s=await hN.deleteRecordsBefore(e);if(await pN(e.schema,e.table),GH.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(Xie,"deleteFilesBefore");async function Zie(e){let t=HH(e,"timestamp");if(t)throw bc(t,t.message,Ac.BAD_REQUEST,void 0,void 0,!0);if(Jl.transformReq(e),isNaN(e.timestamp))throw bc(new Error,TS.INVALID_VALUE("Timestamp"),Ac.BAD_REQUEST,Ql.LOG_LEVELS.ERROR,TS.INVALID_VALUE("Timestamp"),!0);let r=Jl.checkSchemaTableExist(e.schema,e.table);if(r)throw bc(new Error,r,Ac.NOT_FOUND,Ql.LOG_LEVELS.ERROR,r,!0);let n=await hN.deleteAuditLogsBefore(e);return await pN(e.schema,e.table),GH.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Zie,"deleteAuditLogsBefore");async function qH(e){e.ids&&(e.hash_values=e.ids);let t=Vie(e);if(t)throw bc(t,t.message,Ac.BAD_REQUEST,void 0,void 0,!0);Jl.transformReq(e);let r=Jl.checkSchemaTableExist(e.schema,e.table);if(r)throw bc(new Error,r,Ac.NOT_FOUND,Ql.LOG_LEVELS.ERROR,r,!0);try{await pN(e.schema,e.table);let n=await hN.deleteRecords(e);return Jl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Jie}`),n}catch(n){if(n.message===Ql.SEARCH_NOT_FOUND_MESSAGE){let s=new jie;return s.message=Ql.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(qH,"deleteRecord")});var TN={};Re(TN,{HASH_FUNCTION:()=>jr,hash:()=>gN,validate:()=>SN});function EN(e=Yp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Wp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function gN(e,t=jr[KH?.toUpperCase()]??jr.SHA256){return _N[t](e)}function SN(e,t,r=jr[KH?.toUpperCase()]??jr.SHA256){return e?eoe[r](e,t):!1}var Wp,kd,VH,KH,Yp,WH,jr,_N,eoe,yN=ie(()=>{Wp=b(require("node:crypto")),kd=b(require("argon2")),VH=b(de());$();KH=(0,VH.get)(x.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Yp=16,WH=9,jr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(EN,"generateSalt");_N={[jr.MD5]:(e,t=void 0)=>{t=t??EN(WH);let r=Wp.createHash(jr.MD5).update(e+t).digest("hex");return t+r},[jr.SHA256]:(e,t=void 0)=>{t=t??EN(Yp);let r=Wp.createHash(jr.SHA256).update(e+t).digest("hex");return t+r},[jr.ARGON2ID]:async e=>{let t=EN(Yp),r=await kd.hash(e,{type:kd.argon2id,salt:Buffer.from(t)});return t+r}},eoe={[jr.MD5]:(e,t)=>{let r=e.slice(0,WH);return e===_N[jr.MD5](t,r)},[jr.SHA256]:(e,t)=>{let r=e.slice(0,Yp);return e===_N[jr.SHA256](t,r)},[jr.ARGON2ID]:async(e,t)=>await kd.verify(e.slice(Yp),t)};a(gN,"hash");a(SN,"validate")});var jH=U((WUe,YH)=>{var RN=_t(),In={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 toe(e){return In.password.presence=!0,In.username.presence=!0,In.role.presence=!0,In.active.presence=!0,RN.validateObject(e,In)}a(toe,"addUserValidation");function roe(e){return In.password.presence=!1,In.username.presence=!0,In.role.presence=!1,In.active.presence=!1,RN.validateObject(e,In)}a(roe,"alterUserValidation");function noe(e){return In.password.presence=!1,In.username.presence=!0,In.role.presence=!1,In.active.presence=!1,RN.validateObject(e,In)}a(noe,"dropUserValidation");YH.exports={addUserValidation:toe,alterUserValidation:roe,dropUserValidation:noe}});var aG=U((jUe,oG)=>{"use strict";var bN=require("recursive-iterator"),soe=require("alasql"),AN=require("clone"),zH=ue(),{handleHDBError:JH,hdbErrors:ioe}=ge(),{HDB_ERROR_MSGS:QH,HTTP_STATUS_CODES:XH}=ioe,{getDatabases:ooe}=(Ce(),O(lt)),aoe=["DISTINCT_ARRAY"],ZH=Symbol("validateTables"),IN=Symbol("validateTable"),eG=Symbol("validateAllColumns"),yS=Symbol("findColumn"),tG=Symbol("validateOrderBy"),jp=Symbol("validateSegment"),wN=Symbol("validateColumn"),rG=Symbol("setColumnsForTable"),nG=Symbol("checkColumnsForAsterisk"),sG=Symbol("validateGroupBy"),iG=Symbol("hasColumns"),NN=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[ZH](),this[nG](),this[eG]()}[ZH](){if(this[iG]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[IN](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[IN](t.table)})}}[iG](){let t=!1,r=new bN(this.statement);for(let{node:n}of r)if(n&&n.columnid){t=!0;break}return t}[IN](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ooe();if(!r[t.databaseid])throw JH(new Error,QH.SCHEMA_NOT_FOUND(t.databaseid),XH.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw JH(new Error,QH.TABLE_NOT_FOUND(t.databaseid,t.tableid),XH.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=AN(s);i.table=AN(t),this.attributes.push(i)})}[yS](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)}[nG](){let t=new bN(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[rG](r.tableid)}[rG](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new soe.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[eG](){this[jp](this.statement.columns,!1),this[jp](this.statement.joins,!1),this[jp](this.statement.where,!1),this[sG](this.statement.group,!1),this[jp](this.statement.order,!0)}[jp](t,r){if(!t)return;let n=new bN(t),s=[];for(let{node:i}of n)!zH.isEmpty(i)&&!zH.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[tG](i):s.push(this[wN](i)));return s}[sG](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&aoe.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=AN(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[yS](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[yS](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`}[tG](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[wN](t)}[wN](t){let r=this[yS](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]}};oG.exports=NN});var dG=U((JUe,uG)=>{"use strict";var cG=require("lodash"),zp=require("mathjs"),coe=require("jsonata"),lG=ue();uG.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?cG.uniqWith(e,cG.isEqual):e,"distinct_array"),searchJSON:loe,mad:Jp.bind(null,zp.mad),mean:Jp.bind(null,zp.mean),mode:Jp.bind(null,zp.mode),prod:Jp.bind(null,zp.prod),median:Jp.bind(null,zp.median)};function Jp(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(Jp,"aggregateFunction");function loe(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(lG.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),lG.isEmpty(this.__ala__.res[r])){let n=coe(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(loe,"searchJSON")});var mG=U((XUe,fG)=>{"use strict";var Tr=require("moment"),CN="YYYY-MM-DDTHH:mm:ss.SSSZZ";Tr.suppressDeprecationWarnings=!0;fG.exports={current_date:a(()=>Tr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>Tr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return Tr(e).utc().format("YYYY");case"month":return Tr(e).utc().format("MM");case"day":return Tr(e).utc().format("DD");case"hour":return Tr(e).utc().format("HH");case"minute":return Tr(e).utc().format("mm");case"second":return Tr(e).utc().format("ss");case"millisecond":return Tr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>Tr(e).utc().format(CN),"date"),date_format:a((e,t)=>Tr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>Tr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>Tr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=Tr(e).utc(),s=Tr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>Tr().utc().valueOf(),"now"),get_server_time:a(()=>Tr().format(CN),"get_server_time"),offset_utc:a((e,t)=>Tr(e).utc().utcOffset(t).format(CN),"offset_utc")}});var _G=U((exe,EG)=>{"use strict";var uoe=require("@turf/area"),doe=require("@turf/length"),foe=require("@turf/circle"),moe=require("@turf/difference"),poe=require("@turf/distance"),hoe=require("@turf/boolean-contains"),Eoe=require("@turf/boolean-equal"),_oe=require("@turf/boolean-disjoint"),goe=require("@turf/helpers"),pG=($(),O(z)),Ze=ue(),ya=Z();EG.exports={geoArea:Soe,geoLength:Toe,geoCircle:yoe,geoDifference:Roe,geoDistance:hG,geoNear:boe,geoContains:Aoe,geoEqual:Ioe,geoCrosses:woe,geoConvert:Noe};function Soe(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return uoe.default(e)}catch(t){return ya.trace(t,e),NaN}}a(Soe,"geoArea");function Toe(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return doe.default(e,{units:t||"kilometers"})}catch(r){return ya.trace(r,e),NaN}}a(Toe,"geoLength");function yoe(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return foe.default(e,t,{units:r||"kilometers"})}catch(n){return ya.trace(n,e,t),NaN}}a(yoe,"geoCircle");function Roe(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 moe(e,t)}catch(r){return ya.trace(r,e,t),NaN}}a(Roe,"geoDifference");function hG(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 poe.default(e,t,{units:r||"kilometers"})}catch(n){return ya.trace(n,e,t),NaN}}a(hG,"geoDistance");function boe(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 hG(e,t,n)<=r}catch(s){return ya.trace(s,e,t),!1}}a(boe,"geoNear");function Aoe(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 hoe.default(e,t)}catch(r){return ya.trace(r,e,t),!1}}a(Aoe,"geoContains");function Ioe(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 Eoe.default(e,t)}catch(r){return ya.trace(r,e,t),!1}}a(Ioe,"geoEqual");function woe(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!_oe.default(e,t)}catch(r){return ya.trace(r,e,t),!1}}a(woe,"geoCrosses");function Noe(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(pG.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(pG.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),goe[t](e,r)}a(Noe,"geoConvert")});var RS=U((rxe,gG)=>{var Zl=dG(),ws=mG(),Eo=_G();gG.exports=e=>{e.aggr.mad=e.aggr.MAD=Zl.mad,e.aggr.mean=e.aggr.MEAN=Zl.mean,e.aggr.mode=e.aggr.MODE=Zl.mode,e.aggr.prod=e.aggr.PROD=Zl.prod,e.aggr.median=e.aggr.MEDIAN=Zl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Zl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Zl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ws.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ws.current_time,e.fn.extract=e.fn.EXTRACT=ws.extract,e.fn.date=e.fn.DATE=ws.date,e.fn.date_format=e.fn.DATE_FORMAT=ws.date_format,e.fn.date_add=e.fn.DATE_ADD=ws.date_add,e.fn.date_sub=e.fn.DATE_SUB=ws.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ws.date_diff,e.fn.now=e.fn.NOW=ws.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ws.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ws.get_server_time,e.fn.getdate=e.fn.GETDATE=ws.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ws.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 RG=U((nxe,yG)=>{"use strict";var Qp=require("lodash"),Jn=require("alasql");Jn.options.cache=!1;var Coe=RS(),SG=require("clone"),bS=require("recursive-iterator"),Ke=Z(),at=ue(),Fd=As(),Ooe=($(),O(z)),{hdbErrors:Poe}=ge(),{getDatabases:TG}=(Ce(),O(lt)),Loe="IS NULL",Li="There was a problem performing this search. Please check the logs and try again.";Coe(Jn);var ON=class{static{a(this,"SQLSearch")}constructor(t,r){if(at.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(),at.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!at.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(Li)}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(Li)}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(Li)}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(Li)}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(Li)}}_getColumns(){let t=new bS(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(SG(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Qp.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=TG()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(at.isEmpty(this.statement.where)){Ke.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new bS(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!at.isEmpty(r)&&r.right)if(at.isNotEmptyAndHasValue(r.right.value)){let n=at.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Jn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=at.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Jn.yy.LogicValue({value:i}):n instanceof Jn.yy.StringValue&&at.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Jn.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 bS(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(!at.isEmpty(Ooe.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(at.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(at.isEmptyOrZeroLength(r.left.columnid)||at.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(at.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"=":!at.isEmpty(r.right.value)||!at.isEmpty(r.left.value)?n.add(at.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(at.isEmptyOrZeroLength(this.all_table_attributes)&&at.isEmptyOrZeroLength(this.statement.from)&&at.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&&Qp.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(at.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);at.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(at.isEmptyOrZeroLength(this.all_table_attributes)&&!at.isEmptyOrZeroLength(this.columns.columns))return t;if(at.isEmptyOrZeroLength(this.all_table_attributes)&&at.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Jn.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(SG(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(at.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(Loe)>-1&&this.tables.forEach(s=>{let i={columnid:TG()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Qp.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),!at.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!at.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(Li)}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(Li)}else if(!at.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!at.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(Li)}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(Li)}}}_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 Jn.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 Jn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Jn.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 Jn.yy.FuncValue:new Jn.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 Jn.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=Qp.difference(h,[...p.keys].map(_=>_.toString()));for(let _=0,R=E.length;_<R;_++){let S=E[_];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new bS(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=Qp.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(Li)}}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 Jn.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(Poe.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(Li)}}return Object.values(Object.values(this.data)[0].__mergedData)}};yG.exports=ON});var Qn=U((ixe,bG)=>{"use strict";bG.exports={searchByConditions:Doe,searchByHash:voe,searchByValue:Moe,search:Uoe};var PN=As(),{transformReq:LN}=ue();async function Doe(e){return LN(e),PN.searchByConditions(e)}a(Doe,"searchByConditions");async function voe(e){LN(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of PN.searchByHash(e))r&&t.push(r);return t}a(voe,"searchByHash");async function Moe(e){LN(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of PN.searchByValue(e))t.push(r);return t}a(Moe,"searchByValue");function Uoe(e,t){try{let r=aG(),n=RG(),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(Uoe,"search")});var Ra=U((axe,NG)=>{"use strict";var Xp=require("crypto"),xoe=de(),{CONFIG_PARAMS:Boe}=($(),O(z)),IG="aes-256-cbc",koe=32,Foe=16,DN=64,wG=32,Hoe=DN+wG,AG=new Map;NG.exports={encrypt:Goe,decrypt:qoe,createNatsTableStreamName:$oe};function Goe(e){let t=Xp.randomBytes(koe),r=Xp.randomBytes(Foe),n=Xp.createCipheriv(IG,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(Goe,"encrypt");function qoe(e){let t=e.substr(0,DN),r=e.substr(DN,wG),n=e.substr(Hoe,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Xp.createDecipheriv(IG,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(qoe,"decrypt");function $oe(e,t){let r=xoe.get(Boe.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=AG.get(r);return n||(n=Xp.createHash("md5").update(r).digest("hex"),AG.set(r,n)),n}a($oe,"createNatsTableStreamName")});var ur=U((lxe,OG)=>{"use strict";var Voe="nats-server.zip",vN="nats-server",Koe=process.platform==="win32"?`${vN}.exe`:vN,Woe=/^[^\s.,*>]+$/,CG="__request__",Yoe=a(e=>`${e}.${CG}`,"REQUEST_SUBJECT"),joe={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},zoe={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Joe={HUB:"hub.pid",LEAF:"leaf.pid"},Qoe={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Xoe={SUCCESS:"success",ERROR:"error"},Zoe={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},eae={TXN:"txn",MSGID:"msgid"},Hd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},tae={[Hd.ERR]:1,[Hd.WRN]:2,[Hd.INF]:3,[Hd.DBG]:4,[Hd.TRC]:5},rae={debug:"-D",trace:"-DVV"};OG.exports={NATS_SERVER_ZIP:Voe,NATS_SERVER_NAME:vN,NATS_BINARY_NAME:Koe,PID_FILES:Joe,NATS_CONFIG_FILES:zoe,SERVER_SUFFIX:Qoe,NATS_TERM_CONSTRAINTS_RX:Woe,REQUEST_SUFFIX:CG,UPDATE_REMOTE_RESPONSE_STATUSES:Xoe,CLUSTER_STATUS_STATUSES:Zoe,REQUEST_SUBJECT:Yoe,SUBJECT_PREFIXES:eae,MSG_HEADERS:joe,LOG_LEVELS:Hd,LOG_LEVEL_FLAGS:rae,LOG_LEVEL_HIERARCHY:tae}});var UN=U((dxe,UG)=>{"use strict";var vG=require("fs-extra"),be=require("joi"),nae=require("os"),{boolean:Ye,string:yt,number:yr,array:Ic}=be.types(),{totalmem:PG}=require("os"),eu=require("path"),sae=Z(),MN=ue(),LG=($(),O(z)),iae=_t(),DG="log",oae="components",aae="Invalid logging.rotation.maxSize unit. Available units are G, M or K",cae="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",lae="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",uae="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",dae="rootPath config parameter is undefined",Xn=be.alternatives([yr.min(0),yt]).optional().empty(null),AS=be.alternatives([Ic.items(yt,{host:yt.required(),port:Xn},{hostname:yt.required(),port:Xn}).empty(null),Ic.items(yt)]),_o,MG=!1;UG.exports={configValidator:fae,routesValidator:gae,routeConstraints:AS};function fae(e,t=!1){if(MG=t,_o=e.rootPath,MN.isEmpty(_o))throw dae;let r=Ye.optional(),n=yr.min(0).max(1e3).empty(null).default(_ae),s=yt.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/,"directory path").empty(null).default(Zp),i=yt.optional().empty(null),o=yt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=be.string().empty(null).default(Zp),l=be.custom(pae).empty(null).default(Zp),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:Xn,routes:AS}).required()}).required(),leafNodes:be.object({network:be.object({port:Xn}).required()}).required(),network:be.object({port:Xn}).required()}).required(),leafServer:be.object({network:be.object({port:Xn,routes:AS}).required(),streams:be.object({maxAge:yr.min(120).allow(null).optional(),maxBytes:yr.min(1).allow(null).optional(),maxMsgs:yr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:be.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Ye.optional(),databaseLevel:Ye.optional(),tls:be.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ye.required(),verify:Ye.optional()}),user:yt.optional().empty(null)}).optional():f=be.object({enabled:r,tls:be.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ye.optional()})}).optional(),be.object({authentication:be.alternatives(be.object({authorizeLocal:Ye,cacheTTL:yr.required(),cookie:be.object({domains:Ic.items(yt).optional(),expires:yt.optional()}),enableSessions:Ye,hashFunction:yt.valid("md5","sha256","argon2id").optional().empty(null)}),Ye).optional(),analytics:be.object({aggregatePeriod:yr,replicate:Ye.optional()}),replication:be.object({hostname:be.alternatives(yt,yr).optional().empty(null),url:yt.optional().empty(null),port:Xn,securePort:Xn,routes:Ic.optional().empty(null),databases:be.alternatives(yt,Ic),enableRootCAs:Ye.optional(),copyTablesToCatchUp:Ye.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:be.object({enabled:r}).required(),logging:be.object({auditAuthEvents:be.object({logFailed:Ye,logSuccessful:Ye}),file:Ye.required(),level:be.valid("notify","fatal","error","warn","info","debug","trace"),rotation:be.object({enabled:Ye.optional(),compress:Ye.optional(),interval:yt.custom(Eae).optional().empty(null),maxSize:yt.custom(hae).optional().empty(null),path:yt.optional().empty(null).default(Zp)}).required(),root:s,stdStreams:Ye.required(),auditLog:Ye.required()}).required(),operationsApi:be.object({network:be.object({cors:Ye.optional(),corsAccessList:Ic.optional(),headersTimeout:yr.min(1).optional(),keepAliveTimeout:yr.min(1).optional(),port:Xn,domainSocket:be.optional().empty("hdb/operations-server").default(Zp),securePort:Xn,timeout:yr.min(1).optional()}).optional(),tls:be.alternatives([be.array().items(d),d])}).required(),rootPath:yt.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/,"directory path").required(),mqtt:be.object({network:be.object({port:Xn,securePort:Xn,mtls:be.alternatives([Ye.optional(),be.object({user:yt.optional(),certificateAuthority:i,required:Ye.optional()})])}).required(),webSocket:Ye.optional(),requireAuthentication:Ye.optional()}),http:be.object({compressionThreshold:yr.optional(),cors:Ye.optional(),corsAccessList:Ic.optional(),headersTimeout:yr.min(1).optional(),port:Xn,securePort:Xn,maxHeaderSize:yr.optional(),mtls:be.alternatives([Ye.optional(),be.object({user:yt.optional(),certificateAuthority:i,required:Ye.optional()})]),threadRange:be.alternatives([Ic.optional(),yt.optional()])}).required(),threads:be.alternatives(n.optional(),be.object({count:n.optional(),debug:be.alternatives(Ye.optional(),be.object({startingPort:yr.min(1).optional(),host:yt.optional(),waitForDebugger:Ye.optional()})),maxHeapMemory:yr.min(0).optional()})),storage:be.object({writeAsync:Ye.required(),overlappingSync:Ye.optional(),caching:Ye.optional(),compression:be.alternatives([Ye.optional(),be.object({dictionary:yt.optional(),threshold:yr.optional()})]),compactOnStart:Ye.optional(),compactOnStartKeepBackup:Ye.optional(),noReadAhead:Ye.optional(),path:l,prefetchWrites:Ye.optional(),maxFreeSpaceToLoad:yr.optional(),maxFreeSpaceToRetain:yr.optional()}).required(),ignoreScripts:Ye.optional(),tls:be.alternatives([be.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(fae,"configValidator");function mae(e){return MG||vG.existsSync(e)?null:`Specified path ${e} does not exist.`}a(mae,"doesPathExist");function pae(e,t){be.assert(e,yt.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/,"directory path"));let r=mae(e);if(r)return t.message(r)}a(pae,"validatePath");function hae(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(aae);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(lae):e}a(hae,"validateRotationMaxSize");function Eae(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(cae);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(uae):e}a(Eae,"validateRotationInterval");function _ae(e,t){let r=t.state.path.join("."),n=nae.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||PG();return i=Math.round(Math.min(i,PG())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),sae.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(_ae,"setDefaultThreads");function Zp(e,t){let r=t.state.path.join(".");if(!MN.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(MN.isEmpty(_o))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return eu.join(_o,oae);case"logging.root":return eu.join(_o,DG);case"clustering.leafServer.streams.path":return eu.join(_o,"clustering","leaf");case"storage.path":let n=eu.join(_o,LG.LEGACY_DATABASES_DIR_NAME);return vG.existsSync(n)?n:eu.join(_o,LG.DATABASES_DIR_NAME);case"logging.rotation.path":return eu.join(_o,DG);case"operationsApi.network.domainSocket":return r==null?null:eu.join(_o,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Zp,"setDefaultRoot");function gae(e){let t=be.object({routes:AS});return iae.validateBySchema({routes:e},t)}a(gae,"routesValidator")});var BG={};Re(BG,{getBackupDirPath:()=>IS});function IS(e){return xG.join(e,EI)}var xG,xN=ie(()=>{xG=b(require("node:path"));$();a(IS,"getBackupDirPath")});var CS={};Re(CS,{ConfigEnvVarError:()=>Gd,applyRuntimeEnvConfig:()=>Cae,filterArgsAgainstRuntimeConfig:()=>Sae});function wS(){let{loggerWithTag:e}=Sr();return e("env-config")}function NS(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&Object.prototype.toString.call(e)==="[object Object]"}function Sae(e){if(!process.env.HARPER_SET_CONFIG)return e;let t;try{t=JSON.parse(process.env.HARPER_SET_CONFIG)}catch(i){return wS().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 eh(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;NS(s)?Object.assign(r,eh(s,i)):r[i]=s}return r}function th(e,t){let r=t.split("."),n=e;for(let s of r){if(n==null)return;n=n[s]}return n}function rh(e,t,r){let n=t.split("."),s=e;for(let i=0;i<n.length-1;i++){let o=n[i];NS(s[o])||(s[o]={}),s=s[o]}s[n[n.length-1]]=r}function kN(e,t){let r=t.split("."),n=e;for(let s=0;s<r.length-1;s++){let i=r[s];if(!NS(n[i]))return;n=n[i]}delete n[r[r.length-1]]}function Tae(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 GG.createHash("sha256").update(r).digest("hex")}function yae(e,t){if(!e||e.trim()==="")return null;try{let r=JSON.parse(e.trim());if(!NS(r))throw new Gd(`${t} must be a JSON object, got: ${typeof r}`,t);return r}catch(r){throw r instanceof Gd?r:new Gd(`Invalid JSON syntax in ${t}: ${r.message}`,t,r)}}function Rae(e){let t=BN.join(IS(e),qG);if(!wc.existsSync(t))return{version:"1.0",sources:{},originalValues:{},snapshots:{}};try{let r=wc.readJsonSync(t);return r.originalValues||(r.originalValues={}),r}catch(r){return wS().warn(`Failed to load config state file, starting fresh: ${r.message}`),{version:"1.0",sources:{},originalValues:{},snapshots:{}}}}function bae(e,t){let r=IS(e),n=BN.join(r,qG);wc.ensureDirSync(r),wc.writeJsonSync(n,t,{spaces:2})}function Aae(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=th(e,n),c=th(i.config,n);JSON.stringify(o)!==JSON.stringify(c)&&r.push(n)}return r}function kG(e,t,r,n,s={}){let{respectSources:i=[],storeOriginals:o=!1}=s,c=eh(r);for(let[l,u]of Object.entries(c)){let d=t.sources[l],f=th(e,l);d&&i.includes(d)||(o&&!d&&f!==void 0&&f!==null&&(l in t.originalValues||(t.originalValues[l]=f)),rh(e,l,u),t.sources[l]=n)}}function Iae(e,t,r,n,s){let i=Object.keys(eh(r)),o=Object.keys(eh(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?(rh(e,l,t.originalValues[l]),delete t.originalValues[l]):kN(e,l),delete t.sources[l])}function wae(e,t,r){let n=Object.keys(t.sources).filter(s=>t.sources[s]===r);for(let s of n)kN(e,s),delete t.sources[s]}function Nae(e,t,r){let n={};for(let s in t.sources)if(t.sources[s]===r){let i=th(e,s);i!==void 0&&rh(n,s,i)}return n}function FG(e,t,r,n,s={}){let i=process.env[r];if(!i)return;let o=wS(),c=yae(i,r);if(!c)return;let l=Tae(c),u=t.snapshots[n];if(n==="HARPER_SET_CONFIG")kG(e,t,c,n,{respectSources:[],storeOriginals:!0});else if(n==="HARPER_DEFAULT_CONFIG")if(s.isInstall)kG(e,t,c,n,{respectSources:["HARPER_SET_CONFIG","user"],storeOriginals:!0});else{let m=eh(c);for(let[p,h]of Object.entries(m)){let E=t.sources[p],_=th(e,p);if(!(E&&E!=="HARPER_DEFAULT_CONFIG")){if(!E&&_!=null){p in t.originalValues||(t.originalValues[p]=_);continue}rh(e,p,h),t.sources[p]=n}}}u&&u.hash!==l&&Iae(e,t,u.config,c,n);let d=Nae(e,t,n);t.snapshots[n]={hash:l,config:d};let f=s.isInstall?"installation":"runtime";o.debug?.(`Applied ${r} at ${f}`)}function HG(e,t,r,n){if(!t.snapshots[n])return;let s=wS();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?(rh(e,o,t.originalValues[o]),delete t.originalValues[o]):kN(e,o),delete t.sources[o]}else wae(e,t,n);delete t.snapshots[n],s.debug?.(`${r} removed, cleaned up values`)}function Cae(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG,i=Rae(t);if(!n&&!s&&Object.keys(i.snapshots).length===0)return e;if(!r.isInstall){let o=Aae(e,i);for(let c of o)i.sources[c]="user"}return FG(e,i,"HARPER_DEFAULT_CONFIG","HARPER_DEFAULT_CONFIG",r),n||HG(e,i,"HARPER_DEFAULT_CONFIG","HARPER_DEFAULT_CONFIG"),FG(e,i,"HARPER_SET_CONFIG","HARPER_SET_CONFIG",r),s||HG(e,i,"HARPER_SET_CONFIG","HARPER_SET_CONFIG"),bae(t,i),e}var wc,BN,GG,qG,Gd,OS=ie(()=>{wc=b(require("fs-extra")),BN=b(require("node:path")),GG=b(require("node:crypto"));xN();qG=".harper-config-state.json";a(wS,"getLogger");Gd=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(NS,"isPlainObject");a(Sae,"filterArgsAgainstRuntimeConfig");a(eh,"flattenObject");a(th,"getNestedValue");a(rh,"setNestedValue");a(kN,"deleteNestedValue");a(Tae,"hashConfig");a(yae,"parseConfigEnvVar");a(Rae,"loadConfigState");a(bae,"saveConfigState");a(Aae,"detectConfigDrift");a(kG,"applyConfigLayer");a(Iae,"handleDeletions");a(wae,"removeValuesWithSource");a(Nae,"buildSnapshot");a(FG,"processEnvVar");a(HG,"cleanupRemovedEnvVar");a(Cae,"applyRuntimeEnvConfig")});var St=U(dr=>{"use strict";var zs=($(),O(z)),Ur=ue(),Ut=Z(),{configValidator:Oae,routesValidator:$G}=UN(),an=require("fs-extra"),DS=require("yaml"),Cs=require("path"),Pae=require("is-number"),KG=require("properties-reader"),Lae=require("lodash"),{handleHDBError:Dae}=ge(),{HTTP_STATUS_CODES:vae,HDB_ERROR_MSGS:qd}=rn(),{server:Mae}=(Wr(),O(fp)),{PACKAGE_ROOT:WG}=gt(),{getBackupDirPath:Uae}=(xN(),O(BG)),{DATABASES_PARAM_CONFIG:nh,CONFIG_PARAMS:Ns,CONFIG_PARAM_MAP:Di}=zs,xae="Unable to get config value because config is uninitialized",Bae="Config successfully initialized",kae="Error backing up config file",Fae="Empty parameter sent to getConfigValue",YG=Cs.join(WG,"config","yaml",zs.HDB_DEFAULT_CONFIG_FILE),Hae=Cs.join(WG,"config","yaml","defaultNatsConfig.yaml"),Gae="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",VG={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"},PS,Kt,LS;dr.createConfigFile=qae;dr.getDefaultConfig=$ae;dr.getConfigValue=zG;dr.initConfig=vS;dr.flattenConfig=$d;dr.updateConfigValue=JG;dr.updateConfigObject=Kae;dr.getConfiguration=jae;dr.setConfiguration=zae;dr.readConfigFile=qN;dr.getClusteringRoutes=Jae;dr.initOldConfig=XG;dr.getConfigFromFile=Qae;dr.getConfigFilePath=tu;dr.addConfig=Xae;dr.deleteConfigFromFile=Zae;dr.getConfigObj=ece;dr.resolvePath=FN;dr.getFlatConfigObj=tce;function FN(e){if(e?.startsWith("~/"))return Cs.join(Ur.getHomeDir(),e.slice(1));let t=de();try{return Cs.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(FN,"resolvePath");function qae(e,t=!1){let r=Nc(YG);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=DS.parseDocument(an.readFileSync(Hae,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}PS=$d(r.toJSON());let n;for(let c in e){let l=Di[c.toLowerCase()];if(l===Ns.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=HN(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&&jG(r,n),QG(r,null,{isInstall:!0}),GN(r,t);let s=r.toJSON();Kt=$d(s);let i=r.getIn(["rootPath"]),o=Cs.join(i,zs.HDB_CONFIG_FILE);if(an.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);an.writeFileSync(o,String(r)),Ut.trace(`Config file written to ${o}`)}a(qae,"createConfigFile");function jG(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ur.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(nh.TABLES))for(let i in n[s][nh.TABLES])for(let o in n[s][nh.TABLES][i]){let c=n[s][nh.TABLES][i][o],l=[Ns.DATABASES,s,nh.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=[Ns.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(jG,"setSchemasConfig");function $ae(e){if(PS===void 0){let r=Nc(YG);PS=$d(r.toJSON())}let t=Di[e.toLowerCase()];if(t!==void 0)return PS[t.toLowerCase()]}a($ae,"getDefaultConfig");function zG(e){if(e==null){Ut.info(Fae);return}if(Kt===void 0){Ut.trace(xae);return}let t=Di[e.toLowerCase()];if(t!==void 0)return Kt[t.toLowerCase()]}a(zG,"getConfigValue");function tu(e=Ur.getPropsFilePath()){let t=Ur.getEnvCliRootPath();if(t)return FN(Cs.join(t,zs.HDB_CONFIG_FILE));let r=KG(e);return FN(r.get(zs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(tu,"getConfigFilePath");function vS(e=!1){if(Kt===void 0||e){let t;if(!Ur.noBootFile()){t=Ur.getPropsFilePath();try{an.accessSync(t,an.constants.F_OK|an.constants.R_OK)}catch(i){throw Ut.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=tu(t),n;if(r.includes("config/settings.js"))try{XG(r);return}catch(i){if(i.code!==zs.NODE_ERROR_CODES.ENOENT)throw i}try{n=Nc(r)}catch(i){if(i.code===zs.NODE_ERROR_CODES.ENOENT){Ut.trace(`HarperDB config file not found at ${r}.
|
|
12
12
|
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}`)}Vae(n,r),QG(n,r),GN(n);let s=n.toJSON();if(Mae.config=s,Kt=$d(s),Kt.logging_rotation_rotate)for(let i in VG)Kt[i]&&Ut.error(`Config ${VG[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ut.trace(Bae)}}a(vS,"initConfig");function Vae(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Cs.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Cs.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}`);an.writeFileSync(t,String(e))}}a(Vae,"checkForUpdatedConfig");function GN(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 qd.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 qd.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=Oae(r,t);if(n.error)throw qd.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(GN,"validateConfig");function Kae(e,t){Kt===void 0&&(Kt={});let r=Di[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(Kae,"updateConfigObject");function JG(e,t,r=void 0,n=!1,s=!1,i=!1){Kt===void 0&&vS();let o=zG(Di.hdb_root),c=Cs.join(o,zs.HDB_CONFIG_FILE),l=Nc(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()===Ns.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=Di[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=HN(m,t);l.setIn([...p],h)}else for(let m in r){let p=Di[m.toLowerCase()];if(p===Ns.HTTP_SECUREPORT&&r[m]===Kt[Ns.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===Ns.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Kt[Ns.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===Ns.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=zs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let _=HN(p,r[m]);p==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],_)}catch(R){Ut.error(R)}}}u&&jG(l,u),GN(l);let d=l.getIn(["rootPath"]),f=Cs.join(d,zs.HDB_CONFIG_FILE);if(n===!0&&Wae(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);an.writeFileSync(f,String(l)),s&&(Kt=$d(l.toJSON())),Ut.trace(`Config parameter: ${e} updated with value: ${t}`)}a(JG,"updateConfigValue");function Wae(e,t){try{let r=Cs.join(Uae(t),`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${zs.HDB_CONFIG_FILE}.bak`);an.copySync(e,r),Ut.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ut.error(kae),Ut.error(r)}}a(Wae,"backupConfigFile");var Yae=["databases"];function $d(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}),LS=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])&&!Yae.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;!Ns[l.toUpperCase()]&&Di[l]&&(s[Di[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a($d,"flattenConfig");function HN(e,t){if(e===Ns.CLUSTERING_NODENAME||e===Ns.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(Pae(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ur.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 Ur.autoCast(t)}a(HN,"castConfigValue");function jae(){let e=Ur.getPropsFilePath(),t=tu(e);return Nc(t).toJSON()}a(jae,"getConfiguration");async function zae(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return JG(void 0,void 0,s,!0),Gae}catch(i){throw typeof i=="string"||i instanceof String?Dae(i,i,vae.BAD_REQUEST,void 0,void 0,!0):i}}a(zae,"setConfiguration");function qN(){let e=Ur.getPropsFilePath();try{an.accessSync(e,an.constants.F_OK|an.constants.R_OK)}catch(n){if(!Ur.noBootFile())throw Ut.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=tu(e);return Nc(t).toJSON()}a(qN,"readConfigFile");function Nc(e){return DS.parseDocument(an.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Nc,"parseYamlDoc");function QG(e,t,r={}){let n=process.env.HARPER_DEFAULT_CONFIG,s=process.env.HARPER_SET_CONFIG;if(!n&&!s)return;let{applyRuntimeEnvConfig:i}=(OS(),O(CS)),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=DS.parseDocument(DS.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}`);an.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(QG,"applyRuntimeEnvVarConfig");function Jae(){let e=qN(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ur.isEmptyOrZeroLength(t)?[]:t;let r=$G(t);if(r)throw qd.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ur.isEmptyOrZeroLength(n)?[]:n;let s=$G(n);if(s)throw qd.CONFIG_VALIDATION(s.message);if(!Ur.isEmptyOrZeroLength(n)&&!Ur.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Ur.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw qd.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(Jae,"getClusteringRoutes");function XG(e){let t=KG(e);Kt={};for(let r in Di){let n=t.get(r.toUpperCase());if(Ur.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Di[r].toLowerCase();s===Ns.LOGGING_ROOT?Kt[s]=Cs.dirname(n):Kt[s]=n}return Kt}a(XG,"initOldConfig");function Qae(e){let t=qN();return Lae.get(t,e.replaceAll("_","."))}a(Qae,"getConfigFromFile");async function Xae(e,t){let r=Nc(tu());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 an.writeFile(tu(),String(r))}a(Xae,"addConfig");function Zae(e){let t=tu(Ur.getPropsFilePath()),r=Nc(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Cs.join(n,zs.HDB_CONFIG_FILE);an.writeFileSync(s,String(r))}a(Zae,"deleteConfigFromFile");function ece(){return LS||(vS(),LS)}a(ece,"getConfigObj");function tce(){return Kt||vS(),Kt}a(tce,"getFlatConfigObj")});var Ui={};Re(Ui,{ACTIVE_BOOLEAN:()=>iq,ALTERUSER_NOTHING_TO_UPDATE:()=>rq,EMPTY_PASSWORD:()=>nq,EMPTY_ROLE:()=>sq,USERNAME_REQUIRED:()=>tq,addUser:()=>JN,alterUser:()=>QN,dropUser:()=>XN,findAndValidateUser:()=>Kd,getClusterUser:()=>mce,getSuperUser:()=>oh,getUsersWithRolesCache:()=>fce,listUsers:()=>xS,listUsersExternal:()=>eC,setUsersWithRolesCache:()=>Mi,userInfo:()=>ZN});async function JN(e){let t=cq.cleanAttributes(e,lq),r=aq.addUserValidation(t);if(r)throw new vi(r.message);let n=await ih.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new vi(Vd.ROLE_NAME_NOT_FOUND(t.role),ba.NOT_FOUND);if(n.length>1)throw new vi(Vd.DUP_ROLES_FOUND(t.role),ba.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=jN.encrypt(t.password)),t.password=await sh.hash(t.password,MS),t.hash_function=MS,t.role=n[0].id;let s=await oq.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(YN.debug(s),await Mi(),s.skipped_hashes.length===1)throw new vi(Vd.USER_ALREADY_EXISTS(t.username),ba.CONFLICT);return await WN.signalUserChange(new zN(process.pid)),`${t.username} successfully added`}async function QN(e){let t=cq.cleanAttributes(e,lq);if(go.isEmptyOrZeroLength(t.username))throw new Error(tq);if(go.isEmptyOrZeroLength(t.password)&&go.isEmptyOrZeroLength(t.role)&&go.isEmptyOrZeroLength(t.active))throw new Error(rq);if(!go.isEmpty(t.password)&&go.isEmptyOrZeroLength(t.password.trim()))throw new Error(nq);if(!go.isEmpty(t.active)&&!go.isBoolean(t.active))throw new Error(iq);if(!go.isEmpty(t.password)&&!go.isEmptyOrZeroLength(t.password.trim())&&(uce(t.username)&&(t.hash=jN.encrypt(t.password)),t.password=await sh.hash(t.password,MS),t.hash_function=MS),t.role==="")throw new Error(sq);if(t.role){let n=await ih.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new vi(Vd.ALTER_USER_ROLE_NOT_FOUND(t.role),ba.NOT_FOUND);if(n.length>1)throw new vi(Vd.DUP_ROLES_FOUND(t.role),ba.CONFLICT);t.role=n[0].id}let r=await oq.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Mi(),await WN.signalUserChange(new zN(process.pid)),r}function uce(e){let t=!1,r=So.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}async function XN(e){let t=aq.dropUserValidation(e);if(t)throw new vi(t.message);if(So.get(e.username)===void 0)throw new vi(Vd.USER_NOT_EXIST(e.username),ba.NOT_FOUND);let r=await lce({table:"hdb_user",schema:"system",hash_values:[e.username]});return YN.debug(r),await Mi(),await WN.signalUserChange(new zN(process.pid)),`${e.username} successfully deleted`}async function ZN(e){if(!e||!e.hdb_user)return"There was no user info in the body";let t=KN.cloneDeep(e.hdb_user),r=await ih.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 eC(){let e=await xS();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}async function xS(){let e=await ih.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=KN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await ih.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=KN.cloneDeep(s),s.role=t[s.role],dce(s.role),n.set(s.username,s);return n}function dce(e){if(!e){YN.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(oce)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}async function Mi(e=void 0){e?So=e:So=await xS()}async function fce(){return So||await Mi(),So}async function Kd(e,t,r=!0){So||await Mi();let n=So.get(e);if(!n){if(!r)return{username:e};throw new vi($N.GENERIC_AUTH_FAIL,ba.UNAUTHORIZED)}if(n&&!n.active)throw new vi($N.USER_INACTIVE,ba.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(eq.get(t)===n.password)return s;{let i=sh.validate(n.password,t,n.hash_function||sh.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)eq.set(t,n.password);else throw new vi($N.GENERIC_AUTH_FAIL,ba.UNAUTHORIZED)}}return s}async function oh(){So||await Mi();for(let[,e]of So)if(e.role.role==="super_user")return e}async function mce(){let e=await xS(),t=sce.getConfigFromFile(VN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(r==null||r?.role?.role!==VN.ROLE_TYPES_ENUM.CLUSTER_USER)return;let n=jN.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+ZG.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+ZG.SERVER_SUFFIX.ADMIN,r}var tq,rq,nq,sq,iq,oq,rce,sh,aq,ih,WN,go,cq,YN,nce,jN,VN,ZG,sce,ice,oce,ace,vi,ba,$N,Vd,zN,KN,US,cce,lq,eq,lce,MS,So,uq,Zn=ie(()=>{"use strict";tq="username is required",rq="nothing to update, must supply active, role or password to update",nq="password cannot be an empty string",sq="If role is specified, it cannot be empty.",iq="active must be true or false",oq=Is(),rce=Xl(),sh=(yN(),O(TN)),aq=jH(),ih=Qn(),WN=da(),go=ue(),cq=require("validate.js"),YN=Z(),{promisify:nce}=require("util"),jN=Ra(),VN=($(),O(z)),ZG=ur(),sce=St(),ice=de(),oce=kl(),{hdbErrors:ace,ClientError:vi}=ge(),{HTTP_STATUS_CODES:ba,AUTHENTICATION_ERROR_MSGS:$N,HDB_ERROR_MSGS:Vd}=ace,{UserEventMsg:zN}=Ts(),KN=require("lodash"),{server:US}=(Wr(),O(fp)),cce=Z();US.getUser=(e,t)=>Kd(e,t,t!=null);US.authenticateUser=(e,t)=>Kd(e,t);lq={username:!0,active:!0,role:!0,password:!0},eq=new Map,lce=nce(rce.delete),MS=ice.get(VN.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??sh.HASH_FUNCTION.SHA256;a(JN,"addUser");a(QN,"alterUser");a(uce,"isClusterUser");a(XN,"dropUser");a(ZN,"userInfo");a(eC,"listUsersExternal");a(xS,"listUsers");a(dce,"appendSystemTablesToRole");a(Mi,"setUsersWithRolesCache");a(fce,"getUsersWithRolesCache");a(Kd,"findAndValidateUser");a(oh,"getSuperUser");a(mce,"getClusterUser");uq=[];US.invalidateUser=function(e){for(let t of uq)try{t(e)}catch(r){cce.error("Error invalidating user",r)}};US.onInvalidatedUser=function(e){uq.push(e)}});var yp=U((Sxe,mq)=>{"use strict";var Os=Z(),wn=($(),O(z)),pce=z0(),hce=(Zn(),O(Ui)),{validateEvent:tC}=Ts(),ah=As(),Ece=require("process"),{resetDatabases:_ce}=(Ce(),O(lt)),gce={[wn.ITC_EVENT_TYPES.SCHEMA]:Sce,[wn.ITC_EVENT_TYPES.USER]:fq,[wn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:yce};async function Sce(e){let t=tC(e);if(t){Os.error(t);return}Os.trace("ITC schemaHandler received schema event:",e),await pce(e.message),await Tce(e.message)}a(Sce,"schemaHandler");async function Tce(e){try{ah.resetReadTxn(wn.SYSTEM_SCHEMA_NAME,wn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ah.resetReadTxn(wn.SYSTEM_SCHEMA_NAME,wn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ah.resetReadTxn(wn.SYSTEM_SCHEMA_NAME,wn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=_ce();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Os.error(t)}}a(Tce,"syncSchemaMetadata");var dq=[];async function fq(e){try{try{ah.resetReadTxn(wn.SYSTEM_SCHEMA_NAME,wn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ah.resetReadTxn(wn.SYSTEM_SCHEMA_NAME,wn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Os.warn(r)}let t=tC(e);if(t){Os.error(t);return}Os.trace(`ITC userHandler ${wn.HDB_ITC_CLIENT_PREFIX}${Ece.pid} received user event:`,e),await hce.setUsersWithRolesCache();for(let r of dq)r()}catch(t){Os.error(t)}}a(fq,"userHandler");fq.addListener=function(e){dq.push(e)};async function yce(e){try{let t=tC(e);if(t){Os.error(t);return}Os.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(ch(),O(rC)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=Ts(),i=r.componentStatusRegistry.getAllStatuses(),o=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:wn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:o,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?Os.trace(`Sent component status response directly to thread ${u}`):(u===void 0?Os.debug("No originator threadId, falling back to broadcast"):Os.debug(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){Os.error("Error handling component status request:",t)}}a(yce,"componentStatusRequestHandler");mq.exports=gce});var Ts=U((yxe,hq)=>{"use strict";var nC=ue(),Rce=($(),O(z)),{ITC_ERRORS:lh}=rn(),{threadId:bce,isMainThread:Ace}=require("worker_threads"),{onMessageFromWorkers:Ice,broadcastWithAcknowledgement:wce}=nt();hq.exports={sendItcEvent:Nce,validateEvent:pq,SchemaEventMsg:Cce,UserEventMsg:Oce};var BS;Ice(async(e,t)=>{BS=BS||yp(),pq(e),BS[e.type]&&await BS[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Nce(e){return!Ace&&e.message&&(e.message.originator=bce),wce(e)}a(Nce,"sendItcEvent");function pq(e){if(typeof e!="object")return lh.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||nC.isEmpty(e.type))return lh.MISSING_TYPE;if(!e.hasOwnProperty("message")||nC.isEmpty(e.message))return lh.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||nC.isEmpty(e.message.originator))return lh.MISSING_ORIGIN;if(Rce.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return lh.INVALID_EVENT(e.type)}a(pq,"validateEvent");function Cce(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(Cce,"SchemaEventMsg");function Oce(e){this.originator=e}a(Oce,"UserEventMsg")});var ru,Cc,sC,Wd,iC,Yd,oC,kS=ie(()=>{ru=b(rn()),Cc=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=ru.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},sC=class extends Cc{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}.`,ru.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},Wd=class extends Cc{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,ru.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},iC=class extends Cc{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,ru.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},Yd=class extends Cc{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,ru.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},oC=class extends Cc{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,ru.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(`
|
|
13
|
-
`)}}});var Eq,nu,_q,Oc,uh,jd,Pce,FS,aC=ie(()=>{Eq=b(Ts()),nu=b(nt());$();_q=b(Sr());Rd();kS();Oc=(0,_q.loggerWithTag)("componentStatus.crossThread"),uh=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,nu.onMessageByType)(gd.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;Oc.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&&(Oc.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,nu.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,_=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),Oc.trace?.(`Collected all ${y.length} expected responses for request ${r}`),p(y))},"checkComplete"),R=setTimeout(()=>{if(!E){E=!0;let y=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),Oc.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${o} responses`),p(y)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,_),(0,Eq.sendItcEvent)({type:gd.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{_()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new Wd("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,nu.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 Oc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof Wd?Oc.error?.(`ITC failure during component status collection: ${r.message}`):Oc.warn?.("Failed to collect component status from all threads:",r),Oc.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,nu.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)}},jd=class{static{a(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let o=s.indexOf("@"),c=o!==-1?s.substring(0,o):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let o=this.aggregateComponentGroup(s,i);r.set(s,o)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,o,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",_=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=_;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=_)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Le.HEALTHY&&p.message&&(!i||_>s)&&(s=_,i=p.message),p.error&&!o&&(o=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:o};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Le.ERROR,Le.WARNING,Le.LOADING,Le.UNKNOWN,Le.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Le.UNKNOWN}},Pce=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),FS=new uh(Pce)});var Pc,HS=ie(()=>{LI();Rd();aC();kS();Pc=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 Yd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Le).includes(r))throw new Yd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Le).join(", ")}`);this.statusMap.set(t,new bd(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 FS.collect(t);return jd.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 Rr,GS=ie(()=>{HS();Rr=new Pc});function Sq(e){let t=gq.get(e);return t||(t=new cC(e),gq.set(e,t)),t}function Tq(){Rr.reset()}var cC,gq,To,yq,Rq=ie(()=>{GS();Rd();cC=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return Rr.setStatus(this.componentName,Le.HEALTHY,t),this}warning(t){return Rr.setStatus(this.componentName,Le.WARNING,t),this}error(t,r){return Rr.setStatus(this.componentName,Le.ERROR,t,r),this}loading(t){return Rr.setStatus(this.componentName,Le.LOADING,t||"Loading..."),this}unknown(t){return Rr.setStatus(this.componentName,Le.UNKNOWN,t),this}get(){return Rr.getStatus(this.componentName)}},gq=new Map;a(Sq,"statusForComponent");To={loading(e,t){Rr.initializeLoading(e,t)},loaded(e,t){Rr.markLoaded(e,t)},failed(e,t,r){Rr.markFailed(e,t,r)}};a(Tq,"reset");yq=Le});var dh={};Re(dh,{AggregationError:()=>iC,COMPONENT_STATUS_LEVELS:()=>Le,ComponentStatus:()=>bd,ComponentStatusError:()=>Cc,ComponentStatusOperationError:()=>Yd,ComponentStatusRegistry:()=>Pc,CrossThreadCollectionError:()=>oC,CrossThreadStatusCollector:()=>uh,CrossThreadTimeoutError:()=>sC,ITCError:()=>Wd,StatusAggregator:()=>jd,componentStatusRegistry:()=>Rr,crossThreadCollector:()=>FS,query:()=>Lce});var Lce,bq=ie(()=>{GS();HS();LI();HS();aC();GS();kS();Rd();Lce={get(e){return Rr.getStatus(e)},all(){return Rr.getAllStatuses()},byStatus(e){return Rr.getComponentsByStatus(e)},summary(){return Rr.getStatusSummary()},async allThreads(){return Pc.getAggregatedFromAllThreads(Rr)}}});var rC={};Re(rC,{STATUS:()=>yq,internal:()=>dh,lifecycle:()=>To,reset:()=>Tq,statusForComponent:()=>Sq});var ch=ie(()=>{Rq();bq()});var $S={};Re($S,{DEFAULT_STATUS_ID:()=>mp,STATUS_IDS:()=>Og,Status:()=>Aa,clear:()=>uC,get:()=>dC,set:()=>fC});function mh(){return lC||(lC=Je({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),lC}function uC({id:e}){return fh.debug?.("clearStatus",e),mh().delete(e)}async function vce(){fh.debug?.("getAllStatus");let e=mh().get({}),t=await dh.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=mC();return{systemStatus:e,componentStatus:r,restartRequired:n}}function dC({id:e}){return e?(fh.debug?.("getStatus",e),mh().get(e)):(fh.debug?.("getStatus","all"),vce())}function fC({status:e,id:t=mp}){let r=O0({status:e,id:t});if(r)throw(0,qS.handleHDBError)(r,r.message,Dce.BAD_REQUEST);return fh.debug?.("setStatus",t,e),mh().put(t,{status:e})}var qS,Aq,Dce,lC,Aa,fh,zd=ie(()=>{Ce();qS=b(ge()),Aq=b(Sr());P0();Pg();ch();VS();Pg();({HTTP_STATUS_CODES:Dce}=qS.hdbErrors);a(mh,"getStatusTable");Aa={get primaryStore(){return mh().primaryStore}},fh=(0,Aq.loggerWithTag)("status");a(uC,"clearStatus");a(vce,"getAllStatus");a(dC,"getStatus");a(fC,"setStatus")});var Iq={};Re(Iq,{requestRestart:()=>EC,resetRestartNeeded:()=>Mce,restartNeeded:()=>mC});function hC(){pC||(pC=Aa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),KS=new Uint8Array(pC))}function EC(){hC(),KS[0]=1}function mC(){return hC(),KS[0]===1}function Mce(){hC(),KS[0]=0}var pC,KS,VS=ie(()=>{zd();a(hC,"ensureInitialized");a(EC,"requestRestart");a(mC,"restartNeeded");a(Mce,"resetRestartNeeded")});var su,_C=ie(()=>{su=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 gC={};Re(gC,{Resources:()=>Jd,keyArrayToString:()=>Qd,resetResources:()=>Uce,resources:()=>Js});function Uce(){return Js=new Jd,Ue.resources=Js,Js}function Qd(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var wq,Nq,Jd,Js,Lc=ie(()=>{Ec();_C();wq=b(Z()),Nq=b(ge());Wr();Jd=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 Nq.ServerError(`Conflicting paths for ${t}`);wq.default.error(c),i.Resource=new su(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 Ct(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(Uce,"resetResources");a(Qd,"keyArrayToString")});var yC={};Re(yC,{loadGQLSchema:()=>kce,start:()=>TC,startOnMainThread:()=>Bce});function TC({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l}=await import("graphql"),u=o(new c(r.toString(),s)),d=new Map,f=[];for(let h of u.definitions)switch(h.kind){case l.OBJECT_TYPE_DEFINITION:let y=function(w){if(w.kind==="NonNullType"){let ee=y(w.type);return ee.nullable=!1,ee}if(w.kind==="ListType")return{type:"array",elements:y(w.type)};let H={type:w.name?.value};return Object.defineProperty(H,"location",{value:w.loc.startToken}),H};a(y,"getProperty");let E=h.name.value,_=[],R={table:null,database:null,properties:_};d.set(E,R),i.allTypes.set(E,R);for(let w of h.directives){if(w.name.value==="table"){for(let H of w.arguments)R[H.name.value]=H.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=E),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,f.push(R)}if(w.name.value==="sealed"&&(R.sealed=!0),w.name.value==="splitSegments"&&(R.splitSegments=!0),w.name.value==="replicate"&&(R.replicate=!0),w.name.value==="export"){R.export=!0;for(let H of w.arguments)typeof R.export!="object"&&(R.export={}),R.export[H.name.value]=H.value.value}}let S=!1,I={};for(let w of h.fields){let L=y(w.type);L.name=w.name.value,_.push(L),I[L.name]=void 0;for(let H of w.directives){let ee=H.name.value;if(ee==="primaryKey")S?console.warn("Can not define two attributes as a primary key at",H.loc):(L.isPrimaryKey=!0,S=!0);else if(ee==="indexed"){let X={};for(let Q of H.arguments||[])X[Q.name.value]=Q.value.value;L.indexed=X}else if(ee==="computed"){for(let X of H.arguments||[])if(X.name.value==="from"){let Q=X.value.value;L.computed={from:p(Q,X,I)},L.version==null&&(L.version=Q)}else X.name.value==="version"&&(L.version=X.value.value);L.computed=L.computed||!0}else if(ee==="relationship"){let X={};for(let Q of H.arguments)X[Q.name.value]=Q.value.value;L.relationship=X}else if(ee==="createdTime")L.assignCreatedTime=!0;else if(ee==="updatedTime")L.assignUpdatedTime=!0;else if(ee==="expiresAt")L.expiresAt=!0;else if(ee==="enumerable")L.enumerable=!0;else if(ee==="allow"){let X=L.authorizedRoles=[];for(let Q of H.arguments)Q.name.value==="role"&&X.push(Q.value.value)}else server.knownGraphQLDirectives.includes(ee)&&console.warn(`@${ee} is an unknown directive, at`,H.loc)}}R.type=E}function m(h){let E=d.get(h.type);E?(Object.defineProperty(h,"properties",{value:E.properties}),Object.defineProperty(h,"definition",{value:E})):h.type==="array"?m(h.elements):xce.includes(h.type)||(0,Oq.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,SC.dirname)(n),h.tableClass):i.set((0,SC.dirname)(n)+"/"+(h.export.name||h.type),h.tableClass,h.export));function p(h,E,_){return new Cq.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 SC,Cq,Oq,xce,Bce,kce,Pq=ie(()=>{SC=require("path"),Cq=require("node:vm");Ce();Oq=b(nt());Lc();xce=["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(TC,"start");Bce=TC,kce=a(e=>TC({ensureTable:Je}).handleFile(e,null,null,new Jd),"loadGQLSchema")});var AC={};Re(AC,{start:()=>Yce});function Fce(e){if(e.kind!==He.Kind.OPERATION_DEFINITION&&e.kind!==He.Kind.FRAGMENT_DEFINITION)throw new zr(`Unexpected non-executable definition type ${e.kind}.`)}function Lq(e){if(typeof e!="object"||e===null)throw new yo("Request body must be an object.");if(!("query"in e))throw new yo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new yo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new yo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new yo("Request body `operationName` field must be a string.")}function bC(e){return parseInt(e.value,10)}function vq(e){return parseFloat(e.value)}function Mq(e,t,r){let n=r.get(e.name.value);return Uq(n)?xq(n,t):{attribute:t,value:n}}function Uq(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function xq(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],Uq(n)?xq(n,t):{attribute:t,value:n}))}function Hce(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:bC(e.value)};case He.Kind.FLOAT:return{attribute:t,value:vq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return Mq(e.value,t,r);case He.Kind.OBJECT:return Bq(e.value,t,r);case He.Kind.LIST:case He.Kind.ENUM:default:throw new zr(`Value type, ${e.value.kind}, is not supported.`)}}function Bq(e,t,r){return e.fields.flatMap(n=>Hce(n,t,r))}function Gce(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:bC(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:vq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return Mq(e.value,e.name.value,t);case He.Kind.OBJECT:return Bq(e.value,[e.name.value],t);case He.Kind.LIST:case He.Kind.ENUM:default:throw new zr(`Argument type, ${e.value.kind}, is not supported.`)}}function qce(e,t){return e.flatMap(r=>Gce(r,t))}function WS(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 zr(`Fragment \`${n}\` not found.`);return WS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return WS(r.selectionSet,t)}})}function kq(e,t){return WS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:kq(r.selectionSet,t)}:r.name.value)}async function $ce(e,t,r,n){let s=Js.getMatch(e.name.value,"graphql");if(s===void 0)throw new zr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:kq(e.selectionSet,r),conditions:qce(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 Fq(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return bC(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]:Fq(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new zr(`Value type, ${e.kind}, is not supported.`)}}function Vce(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=Fq(n.defaultValue)),n.type.kind===He.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new zr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Kce(e,t,r,n){if(e.operation===He.OperationTypeNode.SUBSCRIPTION)throw new zr("Subscriptions are not supported.");if(e.operation===He.OperationTypeNode.MUTATION)throw new zr("Mutations are not supported yet.");let s=Vce(e.variableDefinitions,t),i=await Promise.all(WS(e.selectionSet,r).map(c=>$ce(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function Dq({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(Fce(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 zr("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 zr(`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 zr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new zr(`Operation \`${r}\` not found.`);let l=await Kce(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Wce(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 Lq(r),Dq(r,e)}case"POST":{let r=await _a(e.headers.get("content-type"),!0)(e._nodeRequest);return Lq(r),Dq(r,e)}default:throw new yo("Method Not Allowed",405,{Allow:"GET, POST"})}}function Yce(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Wce(t)}catch(n){RC.default.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof yo)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 zr)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:RC.default.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof yo)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 zr)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,RC,zr,yo,Hq=ie(()=>{He=b(require("graphql"));ga();Lc();RC=b(Z());a(Fce,"assertExecutableDefinitionNode");a(Lq,"assertRequestParams");a(bC,"processIntValueNode");a(vq,"processFloatValueNode");a(Mq,"processVariableNode");a(Uq,"isObject");a(xq,"transformObjectIntoQueryCondition");a(Hce,"processObjectFieldNode");a(Bq,"processObjectValueNode");a(Gce,"processArgumentNode");a(qce,"buildConditionsQuery");a(WS,"fillInFragments");a(kq,"buildSelectQuery");a($ce,"processFieldNode");a(Fq,"processConstValueNode");a(Vce,"resolveVariables");a(Kce,"executeOperation");a(Dq,"resolver");zr=class extends Error{static{a(this,"GraphQLQueryingError")}},yo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(Wce,"graphqlQueryingHandler");a(Yce,"start")});var Wq=U((g0e,Kq)=>{var Xd=require("validate.js"),qq=_t(),Zd=($(),O(z)),{handleHDBError:jce,hdbErrors:zce}=ge(),{HDB_ERROR_MSGS:fr,HTTP_STATUS_CODES:Jce}=zce,IC=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Qce={STRUCTURE_USER:"structure_user"},Gq=Object.values(Zd.ROLE_TYPES_ENUM),Xce="attribute_permissions",Zce="attribute_name",{PERMS_CRUD_ENUM:ef}=Zd,ele=[Xce,...Object.values(ef)],$q=[ef.READ,ef.INSERT,ef.UPDATE],tle=[Zce,...$q];function rle(e){let t=IC();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Vq(e,t)}a(rle,"addRoleValidation");function nle(e){let t=IC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Vq(e,t)}a(nle,"alterRoleValidation");function sle(e){let t=IC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,qq.validateObject(e,t)}a(sle,"dropRoleValidation");var ile=["operation","role","id","permission","hdb_user","access"];function Vq(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)ile.includes(n[o])||s.push(n[o]);s.length>0&&br(fr.INVALID_ROLE_JSON_KEYS(s),r);let i=qq.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{br(o,r)}),e.permission){let o=ole(e);o&&br(o,r),Gq.forEach(c=>{e.permission[c]&&!Xd.isBoolean(e.permission[c])&&br(fr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Gq.indexOf(o)<0){if(o===Qce.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]||br(fr.SCHEMA_NOT_FOUND(f),r)}continue}br(fr.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){br(fr.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]){br(fr.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{ele.includes(d)||br(fr.INVALID_PERM_KEY(d),r,o,l)}),Object.values(ef).forEach(d=>{Xd.isDefined(u[d])?Xd.isBoolean(u[d])||br(fr.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):br(fr.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){br(fr.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){br(fr.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=>{!tle.includes(E)&&E!==ef.DELETE&&br(fr.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Xd.isDefined(p.attribute_name)){br(fr.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){br(fr.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}$q.forEach(E=>{Xd.isDefined(p[E])?Xd.isBoolean(p[E])||br(fr.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):br(fr.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}`;br(fr.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return ale(r)}a(Vq,"customValidate");Kq.exports={addRoleValidation:rle,alterRoleValidation:nle,dropRoleValidation:sle};function ole(e){let{operation:t,permission:r}=e;if(t===Zd.OPERATIONS_ENUM.ADD_ROLE||t===Zd.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 fr.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Zd.ROLE_TYPES_ENUM.SUPER_USER:Zd.ROLE_TYPES_ENUM.CLUSTER_USER;return fr.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(ole,"validateNoSUPerms");function ale(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:fr.ROLE_PERMS_ERROR,...e};return jce(new Error,n,Jce.BAD_REQUEST)}else return null}a(ale,"generateRolePermResponse");function br(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(br,"addPermError")});var hh=U((T0e,Jq)=>{"use strict";var Yq=Is(),jq=Qn(),cle=Xl(),NC=Wq(),CC=da(),lle=require("util"),YS=($(),O(z)),ule=ue(),OC=jq.searchByValue,dle=jq.searchByHash,fle=lle.promisify(cle.delete),mle=co(),ple=Op(),{hdbErrors:hle,handleHDBError:iu}=ge(),{HDB_ERROR_MSGS:zq,HTTP_STATUS_CODES:ph}=hle,{UserEventMsg:PC}=Ts();Jq.exports={addRole:Ele,alterRole:_le,dropRole:gle,listRoles:Sle};function wC(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(wC,"scrubRoleDetails");async function Ele(e){let t=NC.addRoleValidation(e);if(t)throw t;e=wC(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await OC(r)||[])}catch(i){throw iu(i)}if(n&&n.length>0)throw iu(new Error,zq.ROLE_ALREADY_EXISTS(e.role),ph.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 Yq.insert(s),CC.signalUserChange(new PC(process.pid)),e=wC(e),e}a(Ele,"addRole");async function _le(e){let t=NC.alterRoleValidation(e);if(t)throw t;e=wC(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Yq.update(r)}catch(s){throw iu(s)}if(n&&n?.message==="updated 0 of 1 records")throw iu(new Error,"Invalid role id",ph.BAD_REQUEST,void 0,void 0,!0);return await CC.signalUserChange(new PC(process.pid)),e}a(_le,"alterRole");async function gle(e){let t=NC.dropRoleValidation(e);if(t)throw iu(new Error,t,ph.BAD_REQUEST,void 0,void 0,!0);let r=new ple(YS.SYSTEM_SCHEMA_NAME,YS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await dle(r));if(n.length===0)throw iu(new Error,zq.ROLE_NOT_FOUND,ph.NOT_FOUND,void 0,void 0,!0);let s=new mle(YS.SYSTEM_SCHEMA_NAME,YS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await OC(s)),o=!1;if(ule.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw iu(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,ph.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await fle(c),CC.signalUserChange(new PC(process.pid)),`${n[0].role} successfully deleted`}a(gle,"dropRole");async function Sle(){return OC({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Sle,"listRoles")});var LC={};Re(LC,{start:()=>Zq,startOnMainThread:()=>Rle});function Zq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Qq.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(Tle.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 yle(i)}}}async function yle(e){let t=mt().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Xq.isEqual)(i,e)?void 0:(e.id=r.id,(0,jS.alterRole)(e))}return(0,jS.addRole)(e)}var jS,Qq,Xq,Tle,Rle,e$=ie(()=>{Ce();jS=b(hh()),Qq=require("yaml"),Xq=require("lodash"),Tle=["super_user","cluster_user","structure_user"];a(Zq,"start");a(yle,"ensureRole");Rle=Zq});async function zS(e){let t=(0,n$.pathToFileURL)(e).toString();if(ble)return Eh||(Eh=Ale(wle)),(await(await Eh).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Ale(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Eh=new Compartment({console,Math,Date,fetch:Ile,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,r$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Wt,s.tables=Nn,s.databases=xe}};let n=await(0,t$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Eh}function Ile(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 wle(){return{Resource:Wt,tables:Nn}}var t$,r$,n$,ble,Eh,DC=ie(()=>{Ro();Ce();t$=require("fs/promises"),r$=require("path"),n$=require("url"),ble=!1;a(zS,"secureImport");a(Ale,"getCompartment");a(Ile,"secureOnlyFetch");a(wle,"getGlobalVars")});var vC={};Re(vC,{ResourceLoadError:()=>JS,handleApplication:()=>Nle,suppressHandleApplicationWarning:()=>Cle});function i$(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Nle(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 zS(r.absolutePath),s=(0,s$.dirname)(r.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");i$(n.default)&&(e.resources.set(s,n.default),e.logger.debug(`Registered root resource: ${s}`)),o$(e,n,s)}catch(n){throw new JS(r.absolutePath,n)}},"handleResourceEntry"))}function o$(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;i$(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&o$(e,s,i)}}var s$,JS,Cle,a$=ie(()=>{DC();s$=require("path");a(i$,"isResource");JS=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(Nle,"handleApplication");a(o$,"recurseForResources");Cle=!0});var UC={};Re(UC,{start:()=>Ole});function Ole({resources:e}){e.set("login",MC),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var MC,c$=ie(()=>{Ro();a(Ole,"start");MC=class extends Wt{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 QS(){return xC||(xC=Je({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),xC}function Lle(e){return e=e.replace(Ple,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 Dle(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 _h(e){let t=l$.default.createHash("shake128",{outputLength:4}),r;return(0,u$.isIPv6)(e)?r=Lle(e):r=e.toLowerCase(),Dle(Uint8Array.from(t.update(r).digest()))}var l$,u$,BC,xC,Ple,kC=ie(()=>{Ce();l$=b(require("crypto")),u$=require("node:net"),BC=new Map;a(QS,"getAnalyticsHostnameTable");Ple=/(\d{1,3}\.){3}\d{1,3}$/;a(Lle,"normalizeIPv6");a(Dle,"nodeHashToNumber");a(_h,"stableNodeId")});var Ia,FC=ie(()=>{Ia={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 E$={};Re(E$,{captureProfile:()=>GC,userCodeFolders:()=>XS});async function GC(e){let r=h$/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=HC.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){p$.error?.("analytics profiler error:",u)}finally{e&&setTimeout(()=>{let u=((0,gh.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;GC(u)},e).unref()}function l(u){let d=!1;for(let f of u.locationId){let m=s.get(n.get(f).functionId);if(XS.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(f$.PACKAGE_ROOT)){let p=u.value[0];c+=p,d||(i.set(f,(i.get(f)??0)+p),d=!0)}}}a(l,"getUserHitCount")}var gh,f$,m$,HC,p$,d$,XS,h$,_$=ie(()=>{es();gh=b(de());$();f$=b(gt()),m$=require("node:fs"),HC=require("@datadog/pprof"),p$=b(Z()),d$=(0,gh.getHdbBasePath)(),XS=d$?[d$]:[];process.env.RUN_HDB_APP&&XS.push((0,m$.realpathSync)(process.env.RUN_HDB_APP));h$=5e4;(async()=>{if(XS.length===0)return;HC.time.start({intervalMicros:h$});let e=((0,gh.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{GC(e)},e).unref()})();a(GC,"captureProfile")});var tT={};Re(tT,{addAnalyticsListener:()=>Rh,analyticsDelay:()=>KC,calculateCPUUtilization:()=>x$,diffResourceUsage:()=>B$,onAnalyticsAggregate:()=>jC,recordAction:()=>qe,recordActionBinary:()=>ln,recordHostname:()=>WC,setAnalyticsEnabled:()=>Ule});function Ule(e){P$=e,clearTimeout(Th),Th=null}function xle(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 Ble(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},eT.set(e,o)}function qe(e,t,r,n,s){if(!P$)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=eT.get(i);o?xle(e,o):Ble(i,e,t,r,n,s),Th||kle()}function ln(e,t,r,n,s){qe(!!e,t,r,n,s)}function Rh(e){D$.push(e)}function kle(){qC||=performance.now(),Th=setTimeout(async()=>{Th=null;let e=performance.now()-qC;qC=0;let t=[],r={time:Date.now(),period:e,threadId:ou.threadId,metrics:t};for(let[s,i]of eT){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 M$){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 k$()}let n=process.memoryUsage();t.push({metric:"memory",threadId:ou.threadId,byThread:!0,...n});for(let s of D$)s(t);eT=new Map,ou.parentPort?ou.parentPort.postMessage({type:L$,report:r}):G$({report:r})},KC).unref()}async function WC(){let e=Ue.hostname;cn.trace?.("recordHostname server.hostname:",e);let t=_h(e);cn.trace?.("recordHostname nodeId:",t);let r=QS();if(!await r.get(t)){let s={id:t,hostname:e};cn.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),await r.put(s.id,s)}}function U$(e){let t=BC.get(e);return t?(cn.trace?.("storeMetric cached nodeId:",t),t):(t=_h(e),cn.trace?.("storeMetric new nodeId:",t),BC.set(e,t),t)}function tf(e,t){let r=U$(Ue.hostname),n={id:[(0,VC.getNextMonotonicTime)(),r],...t};cn.trace?.(`storing metric ${JSON.stringify(n)}`),e.put(n.id,n)}function x$(e,t){let r=e.userCPUTime+e.systemCPUTime;return cn.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function B$(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 Fle(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:Ia.TABLE_SIZE,database:t,table:s,size:c};cn.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),tf(e,l),n+=c}return n}function g$(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=O$.statSync(s.primaryStore.env.path).size,c=Fle(e,r,n),l=o-c,u={metric:Ia.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};tf(e,u),cn.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){cn.warn?.("Error getting DB size metrics",s)}}function S$(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:Ia.STORAGE_VOLUME,database:r,...i};tf(e,o),cn.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){cn.warn?.("Error getting DB volume metrics",s)}}async function Hle(e,t=6e4){let r=YC(),n=F$(),s=new Promise(I=>{let w=performance.now();setImmediate(()=>{let L=performance.now();L-w>5e3&&cn.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&&cn.warn?.("Unusually high task queue latency on the main thread of "+Math.round(L-w)+"ms"),I(L-w)})}),i,o=U$(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 ee of L||[]){let{path:X,method:Q,type:k,metric:fe,count:oe,total:ae,distribution:he,threads:Te,...De}=ee;oe||(oe=1);let Qe=fe+(X?"-"+X:"");Q!==void 0&&(Qe+="-"+Q),k!==void 0&&(Qe+="-"+k);let $e=l.get(Qe);if($e){if($e.threads){let Dt=$e.threads[H];if(Dt)$e=Dt;else{$e.threads[H]={...De};continue}}$e.count||($e.count=1);let hs=$e.count;for(let Dt in De){let vt=De[Dt];typeof vt=="number"&&($e[Dt]=($e[Dt]*hs+vt*oe)/(hs+oe))}$e.count+=oe,ae>=0&&($e.total+=ae,$e.ratio=$e.total/$e.count)}else $e={period:t,...ee},delete $e.distribution,l.set(Qe,$e),$e.byThread&&($e.threads=[],$e.threads[H]={...De},d.push($e));if(he){he=he.map(Dt=>typeof Dt=="number"?{value:Dt,count:1}:Dt);let hs=u.get(Qe);hs?hs.push(...he):u.set(Qe,he)}}await k$()}for(let I of d){let{path:w,method:L,type:H,metric:ee,count:X,total:Q,distribution:k,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((Dt,vt)=>Dt.value>vt.value?1:-1);let H=L.count-1,ee=[],X=0,Q=0,k;for(let Dt of M$){let vt=H*Dt;for(;X<vt;)k=w[Q++],X+=k.count,Q===1&&X--;let dc=w[Q>1?Q-2:0];k||(k=w[0]),ee.push(k.value-(k.value-dc.value)*(X-vt)/k.count)}let[fe,oe,ae,he,Te,De,Qe,$e,hs]=ee;Object.assign(L,{p1:fe,p10:oe,p25:ae,median:he,p75:Te,p90:De,p95:Qe,p99:$e,p999:hs})}let m;for(let[,I]of l)I.time=f,tf(n,I),m=!0;if(m)for(let I of v$)I(l.values());let p=Date.now(),{idle:h,active:E}=performance.eventLoopUtilization();if(m||E*10>h){let I={metric:Ia.MAIN_THREAD_UTILIZATION,idle:h-T$,active:E-y$,taskQueueLatency:await s,time:p,...process.memoryUsage()};tf(n,I)}T$=h,y$=E;let _=process.resourceUsage();_.time=p,_.userCPUTime=_.userCPUTime/1e3,_.systemCPUTime=_.systemCPUTime/1e3,cn.trace?.(`process.resourceUsage: ${JSON.stringify(_)}`);let R=B$(ZS,_);cn.trace?.(`diffed resourceUsage: ${JSON.stringify(R)}`),R.time=p,R.period=ZS.time?p-ZS.time:t,R.cpuUtilization=x$(R,R.period);let S={metric:Ia.RESOURCE_USAGE,...R};tf(n,S),ZS=_;let y=mt();g$(n,y),g$(n,{system:y.system}),S$(n,y),S$(n,{system:y.system})}async function R$(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function YC(){return b$||(b$=Je({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function F$(){return A$||(A$=Je({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function $le(){H$=!0;let e=(0,yh.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Hle(KC,e),await R$(YC(),Gle),await R$(F$(),qle)},Math.min(e/2,2147483647)).unref()}function G$(e,t){let r=e.report;r.threadId=t?.threadId||ou.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(I$+=n.mean*n.count);r.totalBytesProcessed=I$,t&&(r.metrics.push({metric:Ia.UTILIZATION,...t.performance.eventLoopUtilization(w$.get(t))}),w$.set(t,t.performance.eventLoopUtilization())),r.id=(0,VC.getNextMonotonicTime)(),YC().primaryStore.put(r.id,r),H$||$le(),Vle&&(q$=Wle(r))}async function Wle(e){if(await q$,!Dc){let r=(0,Sh.dirname)(vle());try{Dc=await(0,$C.open)((0,Sh.join)(r,"analytics.log"),"r+")}catch{Dc=await(0,$C.open)((0,Sh.join)(r,"analytics.log"),"w+")}}let t=(await Dc.stat()).size;if(t>Kle){let r=Buffer.alloc(t);await Dc.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Dc.write(r,{position:0}),await Dc.truncate(r.length),t=r.length}await Dc.write(JSON.stringify(e)+`
|
|
13
|
+
`)}}});var Eq,nu,_q,Oc,uh,jd,Pce,FS,aC=ie(()=>{Eq=b(Ts()),nu=b(nt());$();_q=b(Sr());Rd();kS();Oc=(0,_q.loggerWithTag)("componentStatus.crossThread"),uh=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,nu.onMessageByType)(gd.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;Oc.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&&(Oc.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,nu.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,_=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),Oc.trace?.(`Collected all ${y.length} expected responses for request ${r}`),p(y))},"checkComplete"),R=setTimeout(()=>{if(!E){E=!0;let y=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),Oc.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${o} responses`),p(y)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,_),(0,Eq.sendItcEvent)({type:gd.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{_()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new Wd("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,nu.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 Oc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof Wd?Oc.error?.(`ITC failure during component status collection: ${r.message}`):Oc.warn?.("Failed to collect component status from all threads:",r),Oc.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,nu.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)}},jd=class{static{a(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let o=s.indexOf("@"),c=o!==-1?s.substring(0,o):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let o=this.aggregateComponentGroup(s,i);r.set(s,o)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,o,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",_=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=_;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=_)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Le.HEALTHY&&p.message&&(!i||_>s)&&(s=_,i=p.message),p.error&&!o&&(o=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:o};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Le.ERROR,Le.WARNING,Le.LOADING,Le.UNKNOWN,Le.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Le.UNKNOWN}},Pce=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),FS=new uh(Pce)});var Pc,HS=ie(()=>{LI();Rd();aC();kS();Pc=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 Yd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Le).includes(r))throw new Yd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Le).join(", ")}`);this.statusMap.set(t,new bd(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 FS.collect(t);return jd.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 Rr,GS=ie(()=>{HS();Rr=new Pc});function Sq(e){let t=gq.get(e);return t||(t=new cC(e),gq.set(e,t)),t}function Tq(){Rr.reset()}var cC,gq,To,yq,Rq=ie(()=>{GS();Rd();cC=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return Rr.setStatus(this.componentName,Le.HEALTHY,t),this}warning(t){return Rr.setStatus(this.componentName,Le.WARNING,t),this}error(t,r){return Rr.setStatus(this.componentName,Le.ERROR,t,r),this}loading(t){return Rr.setStatus(this.componentName,Le.LOADING,t||"Loading..."),this}unknown(t){return Rr.setStatus(this.componentName,Le.UNKNOWN,t),this}get(){return Rr.getStatus(this.componentName)}},gq=new Map;a(Sq,"statusForComponent");To={loading(e,t){Rr.initializeLoading(e,t)},loaded(e,t){Rr.markLoaded(e,t)},failed(e,t,r){Rr.markFailed(e,t,r)}};a(Tq,"reset");yq=Le});var dh={};Re(dh,{AggregationError:()=>iC,COMPONENT_STATUS_LEVELS:()=>Le,ComponentStatus:()=>bd,ComponentStatusError:()=>Cc,ComponentStatusOperationError:()=>Yd,ComponentStatusRegistry:()=>Pc,CrossThreadCollectionError:()=>oC,CrossThreadStatusCollector:()=>uh,CrossThreadTimeoutError:()=>sC,ITCError:()=>Wd,StatusAggregator:()=>jd,componentStatusRegistry:()=>Rr,crossThreadCollector:()=>FS,query:()=>Lce});var Lce,bq=ie(()=>{GS();HS();LI();HS();aC();GS();kS();Rd();Lce={get(e){return Rr.getStatus(e)},all(){return Rr.getAllStatuses()},byStatus(e){return Rr.getComponentsByStatus(e)},summary(){return Rr.getStatusSummary()},async allThreads(){return Pc.getAggregatedFromAllThreads(Rr)}}});var rC={};Re(rC,{STATUS:()=>yq,internal:()=>dh,lifecycle:()=>To,reset:()=>Tq,statusForComponent:()=>Sq});var ch=ie(()=>{Rq();bq()});var $S={};Re($S,{DEFAULT_STATUS_ID:()=>mp,STATUS_IDS:()=>Og,Status:()=>Aa,clear:()=>uC,get:()=>dC,set:()=>fC});function mh(){return lC||(lC=Je({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),lC}function uC({id:e}){return fh.debug?.("clearStatus",e),mh().delete(e)}async function vce(){fh.debug?.("getAllStatus");let e=mh().get({}),t=await dh.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=mC();return{systemStatus:e,componentStatus:r,restartRequired:n}}function dC({id:e}){return e?(fh.debug?.("getStatus",e),mh().get(e)):(fh.debug?.("getStatus","all"),vce())}function fC({status:e,id:t=mp}){let r=O0({status:e,id:t});if(r)throw(0,qS.handleHDBError)(r,r.message,Dce.BAD_REQUEST);return fh.debug?.("setStatus",t,e),mh().put(t,{status:e})}var qS,Aq,Dce,lC,Aa,fh,zd=ie(()=>{Ce();qS=b(ge()),Aq=b(Sr());P0();Pg();ch();VS();Pg();({HTTP_STATUS_CODES:Dce}=qS.hdbErrors);a(mh,"getStatusTable");Aa={get primaryStore(){return mh().primaryStore}},fh=(0,Aq.loggerWithTag)("status");a(uC,"clearStatus");a(vce,"getAllStatus");a(dC,"getStatus");a(fC,"setStatus")});var Iq={};Re(Iq,{requestRestart:()=>EC,resetRestartNeeded:()=>Mce,restartNeeded:()=>mC});function hC(){pC||(pC=Aa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),KS=new Uint8Array(pC))}function EC(){hC(),KS[0]=1}function mC(){return hC(),KS[0]===1}function Mce(){hC(),KS[0]=0}var pC,KS,VS=ie(()=>{zd();a(hC,"ensureInitialized");a(EC,"requestRestart");a(mC,"restartNeeded");a(Mce,"resetRestartNeeded")});var su,_C=ie(()=>{su=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 gC={};Re(gC,{Resources:()=>Jd,keyArrayToString:()=>Qd,resetResources:()=>Uce,resources:()=>Js});function Uce(){return Js=new Jd,Ue.resources=Js,Js}function Qd(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var wq,Nq,Jd,Js,Lc=ie(()=>{Ec();_C();wq=b(Z()),Nq=b(ge());Wr();Jd=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 Nq.ServerError(`Conflicting paths for ${t}`);wq.default.error(c),i.Resource=new su(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 Ct(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(Uce,"resetResources");a(Qd,"keyArrayToString")});var yC={};Re(yC,{loadGQLSchema:()=>kce,start:()=>TC,startOnMainThread:()=>Bce});function TC({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l}=await import("graphql"),u=o(new c(r.toString(),s)),d=new Map,f=[];for(let h of u.definitions)switch(h.kind){case l.OBJECT_TYPE_DEFINITION:let y=function(w){if(w.kind==="NonNullType"){let ee=y(w.type);return ee.nullable=!1,ee}if(w.kind==="ListType")return{type:"array",elements:y(w.type)};let H={type:w.name?.value};return Object.defineProperty(H,"location",{value:w.loc.startToken}),H};a(y,"getProperty");let E=h.name.value,_=[],R={table:null,database:null,properties:_};d.set(E,R),i.allTypes.set(E,R);for(let w of h.directives){if(w.name.value==="table"){for(let H of w.arguments)R[H.name.value]=H.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=E),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,f.push(R)}if(w.name.value==="sealed"&&(R.sealed=!0),w.name.value==="splitSegments"&&(R.splitSegments=!0),w.name.value==="replicate"&&(R.replicate=!0),w.name.value==="export"){R.export=!0;for(let H of w.arguments)typeof R.export!="object"&&(R.export={}),R.export[H.name.value]=H.value.value}}let S=!1,I={};for(let w of h.fields){let L=y(w.type);L.name=w.name.value,_.push(L),I[L.name]=void 0;for(let H of w.directives){let ee=H.name.value;if(ee==="primaryKey")S?console.warn("Can not define two attributes as a primary key at",H.loc):(L.isPrimaryKey=!0,S=!0);else if(ee==="indexed"){let X={};for(let Q of H.arguments||[])X[Q.name.value]=Q.value.value;L.indexed=X}else if(ee==="computed"){for(let X of H.arguments||[])if(X.name.value==="from"){let Q=X.value.value;L.computed={from:p(Q,X,I)},L.version==null&&(L.version=Q)}else X.name.value==="version"&&(L.version=X.value.value);L.computed=L.computed||!0}else if(ee==="relationship"){let X={};for(let Q of H.arguments)X[Q.name.value]=Q.value.value;L.relationship=X}else if(ee==="createdTime")L.assignCreatedTime=!0;else if(ee==="updatedTime")L.assignUpdatedTime=!0;else if(ee==="expiresAt")L.expiresAt=!0;else if(ee==="enumerable")L.enumerable=!0;else if(ee==="allow"){let X=L.authorizedRoles=[];for(let Q of H.arguments)Q.name.value==="role"&&X.push(Q.value.value)}else server.knownGraphQLDirectives.includes(ee)&&console.warn(`@${ee} is an unknown directive, at`,H.loc)}}R.type=E}function m(h){let E=d.get(h.type);E?(Object.defineProperty(h,"properties",{value:E.properties}),Object.defineProperty(h,"definition",{value:E})):h.type==="array"?m(h.elements):xce.includes(h.type)||(0,Oq.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,SC.dirname)(n),h.tableClass):i.set((0,SC.dirname)(n)+"/"+(h.export.name||h.type),h.tableClass,h.export));function p(h,E,_){return new Cq.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 SC,Cq,Oq,xce,Bce,kce,Pq=ie(()=>{SC=require("path"),Cq=require("node:vm");Ce();Oq=b(nt());Lc();xce=["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(TC,"start");Bce=TC,kce=a(e=>TC({ensureTable:Je}).handleFile(e,null,null,new Jd),"loadGQLSchema")});var AC={};Re(AC,{start:()=>Yce});function Fce(e){if(e.kind!==He.Kind.OPERATION_DEFINITION&&e.kind!==He.Kind.FRAGMENT_DEFINITION)throw new zr(`Unexpected non-executable definition type ${e.kind}.`)}function Lq(e){if(typeof e!="object"||e===null)throw new yo("Request body must be an object.");if(!("query"in e))throw new yo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new yo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new yo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new yo("Request body `operationName` field must be a string.")}function bC(e){return parseInt(e.value,10)}function vq(e){return parseFloat(e.value)}function Mq(e,t,r){let n=r.get(e.name.value);return Uq(n)?xq(n,t):{attribute:t,value:n}}function Uq(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function xq(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],Uq(n)?xq(n,t):{attribute:t,value:n}))}function Hce(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:bC(e.value)};case He.Kind.FLOAT:return{attribute:t,value:vq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return Mq(e.value,t,r);case He.Kind.OBJECT:return Bq(e.value,t,r);case He.Kind.LIST:case He.Kind.ENUM:default:throw new zr(`Value type, ${e.value.kind}, is not supported.`)}}function Bq(e,t,r){return e.fields.flatMap(n=>Hce(n,t,r))}function Gce(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:bC(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:vq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return Mq(e.value,e.name.value,t);case He.Kind.OBJECT:return Bq(e.value,[e.name.value],t);case He.Kind.LIST:case He.Kind.ENUM:default:throw new zr(`Argument type, ${e.value.kind}, is not supported.`)}}function qce(e,t){return e.flatMap(r=>Gce(r,t))}function WS(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 zr(`Fragment \`${n}\` not found.`);return WS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return WS(r.selectionSet,t)}})}function kq(e,t){return WS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:kq(r.selectionSet,t)}:r.name.value)}async function $ce(e,t,r,n){let s=Js.getMatch(e.name.value,"graphql");if(s===void 0)throw new zr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:kq(e.selectionSet,r),conditions:qce(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 Fq(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return bC(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]:Fq(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new zr(`Value type, ${e.kind}, is not supported.`)}}function Vce(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=Fq(n.defaultValue)),n.type.kind===He.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new zr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Kce(e,t,r,n){if(e.operation===He.OperationTypeNode.SUBSCRIPTION)throw new zr("Subscriptions are not supported.");if(e.operation===He.OperationTypeNode.MUTATION)throw new zr("Mutations are not supported yet.");let s=Vce(e.variableDefinitions,t),i=await Promise.all(WS(e.selectionSet,r).map(c=>$ce(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function Dq({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(Fce(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 zr("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 zr(`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 zr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new zr(`Operation \`${r}\` not found.`);let l=await Kce(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Wce(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 Lq(r),Dq(r,e)}case"POST":{let r=await _a(e.headers.get("content-type"),!0)(e._nodeRequest);return Lq(r),Dq(r,e)}default:throw new yo("Method Not Allowed",405,{Allow:"GET, POST"})}}function Yce(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Wce(t)}catch(n){RC.default.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof yo)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 zr)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:RC.default.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof yo)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 zr)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,RC,zr,yo,Hq=ie(()=>{He=b(require("graphql"));ga();Lc();RC=b(Z());a(Fce,"assertExecutableDefinitionNode");a(Lq,"assertRequestParams");a(bC,"processIntValueNode");a(vq,"processFloatValueNode");a(Mq,"processVariableNode");a(Uq,"isObject");a(xq,"transformObjectIntoQueryCondition");a(Hce,"processObjectFieldNode");a(Bq,"processObjectValueNode");a(Gce,"processArgumentNode");a(qce,"buildConditionsQuery");a(WS,"fillInFragments");a(kq,"buildSelectQuery");a($ce,"processFieldNode");a(Fq,"processConstValueNode");a(Vce,"resolveVariables");a(Kce,"executeOperation");a(Dq,"resolver");zr=class extends Error{static{a(this,"GraphQLQueryingError")}},yo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(Wce,"graphqlQueryingHandler");a(Yce,"start")});var Wq=U((g0e,Kq)=>{var Xd=require("validate.js"),qq=_t(),Zd=($(),O(z)),{handleHDBError:jce,hdbErrors:zce}=ge(),{HDB_ERROR_MSGS:fr,HTTP_STATUS_CODES:Jce}=zce,IC=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Qce={STRUCTURE_USER:"structure_user"},Gq=Object.values(Zd.ROLE_TYPES_ENUM),Xce="attribute_permissions",Zce="attribute_name",{PERMS_CRUD_ENUM:ef}=Zd,ele=[Xce,...Object.values(ef)],$q=[ef.READ,ef.INSERT,ef.UPDATE],tle=[Zce,...$q];function rle(e){let t=IC();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Vq(e,t)}a(rle,"addRoleValidation");function nle(e){let t=IC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Vq(e,t)}a(nle,"alterRoleValidation");function sle(e){let t=IC();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,qq.validateObject(e,t)}a(sle,"dropRoleValidation");var ile=["operation","role","id","permission","hdb_user","access"];function Vq(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)ile.includes(n[o])||s.push(n[o]);s.length>0&&br(fr.INVALID_ROLE_JSON_KEYS(s),r);let i=qq.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{br(o,r)}),e.permission){let o=ole(e);o&&br(o,r),Gq.forEach(c=>{e.permission[c]&&!Xd.isBoolean(e.permission[c])&&br(fr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Gq.indexOf(o)<0){if(o===Qce.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]||br(fr.SCHEMA_NOT_FOUND(f),r)}continue}br(fr.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){br(fr.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]){br(fr.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{ele.includes(d)||br(fr.INVALID_PERM_KEY(d),r,o,l)}),Object.values(ef).forEach(d=>{Xd.isDefined(u[d])?Xd.isBoolean(u[d])||br(fr.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):br(fr.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){br(fr.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){br(fr.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=>{!tle.includes(E)&&E!==ef.DELETE&&br(fr.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Xd.isDefined(p.attribute_name)){br(fr.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){br(fr.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}$q.forEach(E=>{Xd.isDefined(p[E])?Xd.isBoolean(p[E])||br(fr.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):br(fr.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}`;br(fr.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return ale(r)}a(Vq,"customValidate");Kq.exports={addRoleValidation:rle,alterRoleValidation:nle,dropRoleValidation:sle};function ole(e){let{operation:t,permission:r}=e;if(t===Zd.OPERATIONS_ENUM.ADD_ROLE||t===Zd.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 fr.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Zd.ROLE_TYPES_ENUM.SUPER_USER:Zd.ROLE_TYPES_ENUM.CLUSTER_USER;return fr.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(ole,"validateNoSUPerms");function ale(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:fr.ROLE_PERMS_ERROR,...e};return jce(new Error,n,Jce.BAD_REQUEST)}else return null}a(ale,"generateRolePermResponse");function br(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(br,"addPermError")});var hh=U((T0e,Jq)=>{"use strict";var Yq=Is(),jq=Qn(),cle=Xl(),NC=Wq(),CC=da(),lle=require("util"),YS=($(),O(z)),ule=ue(),OC=jq.searchByValue,dle=jq.searchByHash,fle=lle.promisify(cle.delete),mle=co(),ple=Op(),{hdbErrors:hle,handleHDBError:iu}=ge(),{HDB_ERROR_MSGS:zq,HTTP_STATUS_CODES:ph}=hle,{UserEventMsg:PC}=Ts();Jq.exports={addRole:Ele,alterRole:_le,dropRole:gle,listRoles:Sle};function wC(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(wC,"scrubRoleDetails");async function Ele(e){let t=NC.addRoleValidation(e);if(t)throw t;e=wC(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await OC(r)||[])}catch(i){throw iu(i)}if(n&&n.length>0)throw iu(new Error,zq.ROLE_ALREADY_EXISTS(e.role),ph.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 Yq.insert(s),CC.signalUserChange(new PC(process.pid)),e=wC(e),e}a(Ele,"addRole");async function _le(e){let t=NC.alterRoleValidation(e);if(t)throw t;e=wC(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Yq.update(r)}catch(s){throw iu(s)}if(n&&n?.message==="updated 0 of 1 records")throw iu(new Error,"Invalid role id",ph.BAD_REQUEST,void 0,void 0,!0);return await CC.signalUserChange(new PC(process.pid)),e}a(_le,"alterRole");async function gle(e){let t=NC.dropRoleValidation(e);if(t)throw iu(new Error,t,ph.BAD_REQUEST,void 0,void 0,!0);let r=new ple(YS.SYSTEM_SCHEMA_NAME,YS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await dle(r));if(n.length===0)throw iu(new Error,zq.ROLE_NOT_FOUND,ph.NOT_FOUND,void 0,void 0,!0);let s=new mle(YS.SYSTEM_SCHEMA_NAME,YS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await OC(s)),o=!1;if(ule.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw iu(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,ph.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await fle(c),CC.signalUserChange(new PC(process.pid)),`${n[0].role} successfully deleted`}a(gle,"dropRole");async function Sle(){return OC({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Sle,"listRoles")});var LC={};Re(LC,{start:()=>Zq,startOnMainThread:()=>Rle});function Zq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Qq.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(Tle.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 yle(i)}}}async function yle(e){let t=mt().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Xq.isEqual)(i,e)?void 0:(e.id=r.id,(0,jS.alterRole)(e))}return(0,jS.addRole)(e)}var jS,Qq,Xq,Tle,Rle,e$=ie(()=>{Ce();jS=b(hh()),Qq=require("yaml"),Xq=require("lodash"),Tle=["super_user","cluster_user","structure_user"];a(Zq,"start");a(yle,"ensureRole");Rle=Zq});async function zS(e){let t=(0,n$.pathToFileURL)(e).toString();if(ble)return Eh||(Eh=Ale(wle)),(await(await Eh).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Ale(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Eh=new Compartment({console,Math,Date,fetch:Ile,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,r$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Wt,s.tables=Nn,s.databases=xe}};let n=await(0,t$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Eh}function Ile(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 wle(){return{Resource:Wt,tables:Nn}}var t$,r$,n$,ble,Eh,DC=ie(()=>{Ro();Ce();t$=require("fs/promises"),r$=require("path"),n$=require("url"),ble=!1;a(zS,"secureImport");a(Ale,"getCompartment");a(Ile,"secureOnlyFetch");a(wle,"getGlobalVars")});var vC={};Re(vC,{ResourceLoadError:()=>JS,handleApplication:()=>Nle,suppressHandleApplicationWarning:()=>Cle});function i$(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Nle(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 zS(r.absolutePath),s=(0,s$.dirname)(r.urlPath).replace(/\\/g,"/").replace(/^\/$/,"");i$(n.default)&&(e.resources.set(s,n.default),e.logger.debug(`Registered root resource: ${s}`)),o$(e,n,s)}catch(n){throw new JS(r.absolutePath,n)}},"handleResourceEntry"))}function o$(e,t,r){for(let n in t){let s=t[n],i=`${r}/${n}`;i$(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&o$(e,s,i)}}var s$,JS,Cle,a$=ie(()=>{DC();s$=require("path");a(i$,"isResource");JS=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(Nle,"handleApplication");a(o$,"recurseForResources");Cle=!0});var UC={};Re(UC,{start:()=>Ole});function Ole({resources:e}){e.set("login",MC),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var MC,c$=ie(()=>{Ro();a(Ole,"start");MC=class extends Wt{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 QS(){return xC||(xC=Je({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),xC}function Lle(e){return e=e.replace(Ple,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 Dle(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 _h(e){let t=l$.default.createHash("shake128",{outputLength:4}),r;return(0,u$.isIPv6)(e)?r=Lle(e):r=e.toLowerCase(),Dle(Uint8Array.from(t.update(r).digest()))}var l$,u$,BC,xC,Ple,kC=ie(()=>{Ce();l$=b(require("crypto")),u$=require("node:net"),BC=new Map;a(QS,"getAnalyticsHostnameTable");Ple=/(\d{1,3}\.){3}\d{1,3}$/;a(Lle,"normalizeIPv6");a(Dle,"nodeHashToNumber");a(_h,"stableNodeId")});var Ia,FC=ie(()=>{Ia={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 E$={};Re(E$,{captureProfile:()=>GC,userCodeFolders:()=>XS});async function GC(e){let r=h$/1e6,n=new Map,s=new Map,i=new Map,o=0,c=0;try{let u=HC.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){p$.error?.("analytics profiler error:",u)}finally{e&&setTimeout(()=>{let u=((0,gh.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;GC(u)},e).unref()}function l(u){let d=!1;for(let f of u.locationId){let m=s.get(n.get(f).functionId);if(XS.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(f$.PACKAGE_ROOT)){let p=u.value[0];c+=p,d||(i.set(f,(i.get(f)??0)+p),d=!0)}}}a(l,"getUserHitCount")}var gh,f$,m$,HC,p$,d$,XS,h$,_$=ie(()=>{es();gh=b(de());$();f$=b(gt()),m$=require("node:fs"),HC=require("@datadog/pprof"),p$=b(Z()),d$=(0,gh.getHdbBasePath)(),XS=d$?[d$]:[];process.env.RUN_HDB_APP&&XS.push((0,m$.realpathSync)(process.env.RUN_HDB_APP));h$=5e4;(async()=>{if(XS.length===0)return;HC.time.start({intervalMicros:h$});let e=((0,gh.get)(x.ANALYTICS_AGGREGATEPERIOD)||60)*1e3;setTimeout(()=>{GC(e)},e).unref()})();a(GC,"captureProfile")});var tT={};Re(tT,{addAnalyticsListener:()=>Rh,analyticsDelay:()=>KC,calculateCPUUtilization:()=>x$,diffResourceUsage:()=>B$,onAnalyticsAggregate:()=>jC,recordAction:()=>qe,recordActionBinary:()=>ln,recordHostname:()=>WC,setAnalyticsEnabled:()=>Ule});function Ule(e){P$=e,clearTimeout(Th),Th=null}function xle(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 Ble(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},eT.set(e,o)}function qe(e,t,r,n,s){if(!P$)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=eT.get(i);o?xle(e,o):Ble(i,e,t,r,n,s),Th||kle()}function ln(e,t,r,n,s){qe(!!e,t,r,n,s)}function Rh(e){D$.push(e)}function kle(){qC||=performance.now(),Th=setTimeout(async()=>{Th=null;let e=performance.now()-qC;qC=0;let t=[],r={time:Date.now(),period:e,threadId:ou.threadId,metrics:t};for(let[s,i]of eT){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 M$){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 k$()}let n=process.memoryUsage();t.push({metric:"memory",threadId:ou.threadId,byThread:!0,...n});for(let s of D$)s(t);eT=new Map,ou.parentPort?ou.parentPort.postMessage({type:L$,report:r}):G$({report:r})},KC).unref()}async function WC(){let e=Ue.hostname;cn.trace?.("recordHostname server.hostname:",e);let t=_h(e);cn.trace?.("recordHostname nodeId:",t);let r=QS(),n={id:t,hostname:e};cn.trace?.(`recordHostname storing hostname: ${JSON.stringify(n)}`),await r.put(n.id,n)}function U$(e){let t=BC.get(e);return t?(cn.trace?.("storeMetric cached nodeId:",t),t):(t=_h(e),cn.trace?.("storeMetric new nodeId:",t),BC.set(e,t),t)}function tf(e,t){let r=U$(Ue.hostname),n={id:[(0,VC.getNextMonotonicTime)(),r],...t};cn.trace?.(`storing metric ${JSON.stringify(n)}`),e.put(n.id,n)}function x$(e,t){let r=e.userCPUTime+e.systemCPUTime;return cn.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function B$(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 Fle(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:Ia.TABLE_SIZE,database:t,table:s,size:c};cn.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),tf(e,l),n+=c}return n}function g$(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=O$.statSync(s.primaryStore.env.path).size,c=Fle(e,r,n),l=o-c,u={metric:Ia.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};tf(e,u),cn.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){cn.warn?.("Error getting DB size metrics",s)}}function S$(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:Ia.STORAGE_VOLUME,database:r,...i};tf(e,o),cn.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){cn.warn?.("Error getting DB volume metrics",s)}}async function Hle(e,t=6e4){let r=YC(),n=F$(),s=new Promise(I=>{let w=performance.now();setImmediate(()=>{let L=performance.now();L-w>5e3&&cn.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&&cn.warn?.("Unusually high task queue latency on the main thread of "+Math.round(L-w)+"ms"),I(L-w)})}),i,o=U$(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 ee of L||[]){let{path:X,method:Q,type:k,metric:fe,count:oe,total:ae,distribution:he,threads:Te,...De}=ee;oe||(oe=1);let Qe=fe+(X?"-"+X:"");Q!==void 0&&(Qe+="-"+Q),k!==void 0&&(Qe+="-"+k);let $e=l.get(Qe);if($e){if($e.threads){let Dt=$e.threads[H];if(Dt)$e=Dt;else{$e.threads[H]={...De};continue}}$e.count||($e.count=1);let hs=$e.count;for(let Dt in De){let vt=De[Dt];typeof vt=="number"&&($e[Dt]=($e[Dt]*hs+vt*oe)/(hs+oe))}$e.count+=oe,ae>=0&&($e.total+=ae,$e.ratio=$e.total/$e.count)}else $e={period:t,...ee},delete $e.distribution,l.set(Qe,$e),$e.byThread&&($e.threads=[],$e.threads[H]={...De},d.push($e));if(he){he=he.map(Dt=>typeof Dt=="number"?{value:Dt,count:1}:Dt);let hs=u.get(Qe);hs?hs.push(...he):u.set(Qe,he)}}await k$()}for(let I of d){let{path:w,method:L,type:H,metric:ee,count:X,total:Q,distribution:k,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((Dt,vt)=>Dt.value>vt.value?1:-1);let H=L.count-1,ee=[],X=0,Q=0,k;for(let Dt of M$){let vt=H*Dt;for(;X<vt;)k=w[Q++],X+=k.count,Q===1&&X--;let dc=w[Q>1?Q-2:0];k||(k=w[0]),ee.push(k.value-(k.value-dc.value)*(X-vt)/k.count)}let[fe,oe,ae,he,Te,De,Qe,$e,hs]=ee;Object.assign(L,{p1:fe,p10:oe,p25:ae,median:he,p75:Te,p90:De,p95:Qe,p99:$e,p999:hs})}let m;for(let[,I]of l)I.time=f,tf(n,I),m=!0;if(m)for(let I of v$)I(l.values());let p=Date.now(),{idle:h,active:E}=performance.eventLoopUtilization();if(m||E*10>h){let I={metric:Ia.MAIN_THREAD_UTILIZATION,idle:h-T$,active:E-y$,taskQueueLatency:await s,time:p,...process.memoryUsage()};tf(n,I)}T$=h,y$=E;let _=process.resourceUsage();_.time=p,_.userCPUTime=_.userCPUTime/1e3,_.systemCPUTime=_.systemCPUTime/1e3,cn.trace?.(`process.resourceUsage: ${JSON.stringify(_)}`);let R=B$(ZS,_);cn.trace?.(`diffed resourceUsage: ${JSON.stringify(R)}`),R.time=p,R.period=ZS.time?p-ZS.time:t,R.cpuUtilization=x$(R,R.period);let S={metric:Ia.RESOURCE_USAGE,...R};tf(n,S),ZS=_;let y=mt();g$(n,y),g$(n,{system:y.system}),S$(n,y),S$(n,{system:y.system})}async function R$(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function YC(){return b$||(b$=Je({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function F$(){return A$||(A$=Je({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function $le(){H$=!0;let e=(0,yh.get)(x.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Hle(KC,e),await R$(YC(),Gle),await R$(F$(),qle)},Math.min(e/2,2147483647)).unref()}function G$(e,t){let r=e.report;r.threadId=t?.threadId||ou.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(I$+=n.mean*n.count);r.totalBytesProcessed=I$,t&&(r.metrics.push({metric:Ia.UTILIZATION,...t.performance.eventLoopUtilization(w$.get(t))}),w$.set(t,t.performance.eventLoopUtilization())),r.id=(0,VC.getNextMonotonicTime)(),YC().primaryStore.put(r.id,r),H$||$le(),Vle&&(q$=Wle(r))}async function Wle(e){if(await q$,!Dc){let r=(0,Sh.dirname)(vle());try{Dc=await(0,$C.open)((0,Sh.join)(r,"analytics.log"),"r+")}catch{Dc=await(0,$C.open)((0,Sh.join)(r,"analytics.log"),"w+")}}let t=(await Dc.stat()).size;if(t>Kle){let r=Buffer.alloc(t);await Dc.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Dc.write(r,{position:0}),await Dc.truncate(r.length),t=r.length}await Dc.write(JSON.stringify(e)+`
|
|
14
14
|
`,t)}function jC(e){e&&v$.push(e)}var ou,N$,C$,Sh,$C,VC,yh,O$,vle,Mle,cn,eT,P$,Th,qC,KC,L$,D$,v$,M$,T$,y$,ZS,k$,Gle,qle,b$,A$,H$,I$,w$,Vle,q$,Dc,Kle,es=ie(()=>{ou=require("worker_threads"),N$=b(nt());Ce();C$=b(Z()),Sh=require("path"),$C=require("fs/promises"),VC=b(Ks()),yh=b(de());$();Wr();O$=b(require("node:fs"));kC();FC();({getLogFilePath:vle,forComponent:Mle}=C$.default);setTimeout(()=>{Promise.resolve().then(()=>_$())},1e3);cn=Mle("analytics").conditional;(0,yh.initSync)();eT=new Map,P$=(0,yh.get)(x.ANALYTICS_AGGREGATEPERIOD)>-1;a(Ule,"setAnalyticsEnabled");a(xle,"recordExistingAction");a(Ble,"recordNewAction");a(qe,"recordAction");Ue.recordAnalytics=qe;a(ln,"recordActionBinary");qC=0,KC=1e3,L$="analytics-report",D$=[],v$=[];a(Rh,"addAnalyticsListener");M$=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(kle,"sendAnalytics");a(WC,"recordHostname");a(U$,"getHostNodeId");a(tf,"storeMetric");a(x$,"calculateCPUUtilization");a(B$,"diffResourceUsage");a(Fle,"storeTableSizeMetrics");a(g$,"storeDBSizeMetrics");a(S$,"storeVolumeMetrics");a(Hle,"aggregation");T$=0,y$=0,ZS={userCPUTime:0,systemCPUTime:0},k$=a(()=>new Promise(setImmediate),"rest");a(R$,"cleanup");Gle=36e5,qle=31536e6;a(YC,"getRawAnalyticsTable");a(F$,"getAnalyticsTable");(0,N$.setChildListenerByType)(L$,G$);a($le,"startScheduledTasks");I$=0,w$=new Map,Vle=!1;a(G$,"recordAnalytics");Kle=1e6;a(Wle,"logAnalytics");a(jC,"onAnalyticsAggregate")});function bh(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 $$(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Qs(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 Qs,Ah=ie(()=>{Qs=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(bh,"appendHeader");a($$,"mergeHeaders")});function nT(e,t){let r={openapi:Yle,info:{title:"HarperDB HTTP REST interface",version:z$.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)rT[l.type]?o[l.name]=new JC(rT[l.type],l.type):l.properties?(o[l.name]=new Q$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new Qle(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new j$(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:Q,elements:k,relationship:fe,definition:oe,nullable:ae}of l){let he=oe??k?.definition;he&&s(he),ae===!1&&h.push(Q),fe?X==="array"?m[Q]={type:"array",items:{$ref:Xs+k.type}}:m[Q]={$ref:Xs+X}:he?X==="array"?m[Q]={type:"array",items:{$ref:Xs+he.type}}:m[Q]={$ref:Xs+he.type}:X==="array"?k.type==="Any"?m[Q]={type:"array",items:{format:k.type}}:m[Q]={type:"array",items:new JC(rT[k.type],k.type)}:X==="Any"?m[Q]={format:X}:m[Q]=new JC(rT[X],X),p.push(new QC(Q,"query",m[Q]))}let E=Object.keys(m),_=new QC(f,"path",{type:"string",format:"ID"});_.required=!0,_.description="primary key of record";let R=new QC("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new j$(m,!u,h);let S=d.post!==Wt.prototype.post||d.update,y=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 jle(c,n,{200:new rf({$ref:Xs+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 V$(p,n,{200:new K$},"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 zC(p,n,{200:new rf({type:"array",items:{$ref:Xs+c}})},"search for records by the specified property name and value pairs")),w&&(r.paths[H].delete=new Y$(p,n,"delete all the records that match the provided query",{204:new W$}));let ee="/"+o+"/{"+f+"}";if(r.paths[ee]||(r.paths[ee]={}),r.paths[ee].options=new V$(p,n,{200:new K$},"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[ee].get=new zC([_],n,{200:new rf({$ref:Xs+c})},"retrieve a record by its primary key")),y&&(r.paths[ee].put=new zle([_],n,c,{200:new rf({$ref:Xs+c})},"create or update the record with the URL path that maps to the record's primary key")),L&&(r.paths[ee].patch=new Jle([_],n,c,{200:new rf({$ref:Xs+c})},"patch the record with the URL path that maps to the record's primary key")),w&&(r.paths[ee].delete=new Y$([_],n,"delete a record with the given primary key",{204:new W$})),I&&R.schema.enum.length>0){let X=`/${o}/{${f}}.{property}`;r.paths[X]||(r.paths[X]={}),r.paths[X].get=new zC([_,R],n,{200:new rf({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 jle(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Xs+e}}}},this.security=t,this.responses=r}function zC(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function V$(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function K$(){this.description=J$,this.headers={},this.content={}}function rf(e,t){this.description=J$,this.content={"application/json":{schema:e}},this.headers=t}function W$(){this.description="successfully processed request, no content returned to client"}function zle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Xs+r}}}},this.responses=n}function Jle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Xs+r}}}},this.responses=n}function Y$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function j$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function JC(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function Q$(e){this.$ref=`#/components/schemas/${e}`}function Qle(e){this.type="array",this.items=new Q$(e)}function QC(e,t,r){this.name=e,this.in=t,this.schema=r}var z$,Yle,rT,Xs,J$,XC=ie(()=>{z$=b(gt());Ro();Yle="3.0.3",rT={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Xs="#/components/schemas/",J$="successful operation";a(nT,"generateJsonApi");a(jle,"Post");a(zC,"Get");a(V$,"Options");a(K$,"ResponseOptions200");a(rf,"Response200");a(W$,"Response204");a(zle,"Put");a(Jle,"Patch");a(Y$,"Delete");a(j$,"ResourceSchema");a(JC,"Type");a(Q$,"Ref");a(Qle,"ArrayRef");a(QC,"Parameter")});var Z$={};Re(Z$,{Request:()=>vc,createReuseportFd:()=>sT});var X$,vc,ZC,eO,sT,Ih=ie(()=>{X$=require("os"),vc=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 eO(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 ZC(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)}},ZC=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)}},eO=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,X$.platform)()!="win32"&&(sT=require("node-unix-socket").createReuseportFd)});var eV,Zs,iT=ie(()=>{eV=b(wi());Ro();Zs=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,eV._assignPackageExport)("Resource",Wt)});var aT={};Re(aT,{parseHeaderValue:()=>rO,start:()=>eue});async function Zle(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&cT(e);let i=new Qs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==tV){let _=oT.getMatch(o,n?"sse":"rest");if(!_)return t(e);e.handlerPath=_.path,c=new Zs(_.relativeURL),c.async=!0,l=_.Resource}if(l?.isCaching){let _=r["cache-control"];if(_){let R=rO(_);for(let S of R)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let _=rO(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=_.length===1&&+_[0]>=0?+_[0]:_[0]==="*"?void 0:_}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await Ct(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=_a(r["content-type"],!0)(e.body,e.headers)}catch(_){throw new nf.ClientError(_,400)}if(e.authorize=!0,o===tV&&s==="GET"){if(e?.user?.role?.permission?.super_user)return nT(oT,`${e.protocol}://${e.hostname}`);throw new nf.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 nf.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new nf.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,tO.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let _=$$(f.headers,i);return f.headers!==_&&(f.headers=_),f.data!==void 0&&(f.body=Fp(f.data,e,f)),f}else if(isFinite(p)){Xle[0]=p;let _=String.fromCharCode(34,(un[0]&63)+62,(un[0]>>6)+(un[1]<<2&63)+62,(un[1]>>4)+(un[2]<<4&63)+62,(un[2]>>2)+62,(un[3]&63)+62,(un[3]>>6)+(un[4]<<2&63)+62,(un[4]>>4)+(un[5]<<4&63)+62,(un[5]>>2)+62,(un[6]&63)+62,(un[6]>>6)+(un[7]<<2&63)+62,34),R=r["if-none-match"];R&&_==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",_),tO.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=Fp(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?xi.warn(o):xi.info(o):xi.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=Fp(o instanceof Error?sV(o):o,e,c),c}}function eue(e){tO=e,e.includeExpensiveRecordCountEstimates&&(vc.prototype.includeExpensiveRecordCountEstimates=!0),!rV&&(rV=!0,oT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Zle(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{wh++;let s=new _s;nV||(nV=!0,Rh(l=>{wh>0&&l.push({metric:"ws-connections",connections:wh,byThread:!0})}));let i;t.on("error",l=>{i=!0,xi.warn(l)});let o;t.on("message",a(function(u){o||(o=_a(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",()=>{wh--,ln(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=oT.getMatch(l,"ws");if(ln(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,qe(h=>({count:h.count,total:wh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new Zs(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await Ct(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Ea(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?xi.warn(l):xi.info(l):xi.error(l),t.close(tue[l.statusCode]||1011,sV(l))}t.close()},e))}function rO(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 xi,nf,sV,un,Xle,tO,tV,rV,oT,nV,wh,tue,iV=ie(()=>{ga();es();xi=b(Z()),nf=b(ge());lT();yd();Ec();Ah();XC();Ih();iT();({errorToString:sV}=xi),un=new Uint8Array(8),Xle=new Float64Array(un.buffer,0,1),tO={},tV="openapi";a(Zle,"http");wh=0;a(eue,"start");tue={401:3e3,403:3003};a(rO,"parseHeaderValue")});var nO=U((uBe,aV)=>{var{recordAction:uT,recordActionBinary:oV}=(es(),O(tT)),rue=require("fastify-plugin"),nue=200;aV.exports=rue(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),uT(o,"duration",u,f,d),oV(s.raw.statusCode<400,"success",u,f,d),oV(1,"response_"+s.raw.statusCode,u,f,d);let m=nue;i?.pipe?(i.on("data",_=>{m+=_.length}),i.on("end",()=>{uT(performance.now()-c,"transfer",u,f,d),uT(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,uT(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 lV=U((dBe,cV)=>{var sue=_t(),iue={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};cV.exports=function(e){return sue.validateObject(e,iue)}});var dT=U((fBe,uV)=>{"use strict";var oue=($(),O(z)).OPERATIONS_ENUM,sO=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=oue.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uV.exports=sO});var Oh={};Re(Oh,{createTokens:()=>oO,getJWTRSAKeys:()=>ET,refreshOperationToken:()=>aO,validateOperationToken:()=>cO,validateRefreshToken:()=>_T});async function ET(){if(fT)return fT;try{let e=Nh.default.join(Ch.default.getHdbBasePath(),hI),t=await mT.default.readFile(Nh.default.join(e,tp.JWT_PASSPHRASE_NAME),"utf8"),r=await mT.default.readFile(Nh.default.join(e,tp.JWT_PRIVATE_KEY_NAME),"utf8");return fT={publicKey:await mT.default.readFile(Nh.default.join(e,tp.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},fT}catch(e){throw hT.default.error(e),new Bi.ClientError(of.NO_ENCRYPTION_KEYS,sf.INTERNAL_SERVER_ERROR)}}async function oO(e){let t=(0,iO.validateBySchema)(e,bo.default.object({username:bo.default.string().optional(),password:bo.default.string().optional(),role:bo.default.string().optional(),expires_in:bo.default.alternatives(bo.default.string(),bo.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 Kd(e.username,e.password,f)}catch(f){throw hT.default.error(f),new Bi.ClientError(of.INVALID_CREDENTIALS,sf.UNAUTHORIZED)}if(!r)throw new Bi.ClientError(of.INVALID_CREDENTIALS,sf.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 ET(),c=await af.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??hV,algorithm:pT,subject:cf.OPERATION}),l=await af.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:aue,algorithm:pT,subject:cf.REFRESH}),u=gN(l,jr.SHA256);if((await(0,dV.update)(new fV.default(Zm,_d.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Bi.ClientError(of.REFRESH_TOKEN_SAVE_FAILED,sf.INTERNAL_SERVER_ERROR);return mV.default.signalUserChange(new pV.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function aO(e){let t=(0,iO.validateBySchema)(e,bo.default.object({refresh_token:bo.default.string().required()}).required());if(t)throw new Bi.ClientError(t.message);let{refresh_token:r}=e;await _T(r);let n=await ET(),s=await af.default.decode(r);return{operation_token:await af.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:hV,algorithm:pT,subject:cf.OPERATION})}}async function cO(e){return EV(e,cf.OPERATION)}async function _T(e){return EV(e,cf.REFRESH)}async function EV(e,t){try{let r=await ET(),n=await af.default.verify(e,r.publicKey,{algorithms:pT,subject:t});if(n.role)throw new Error("Invalid token");let s=await Kd(n.username,void 0,!1);if(t===cf.REFRESH&&!SN(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw hT.default.warn(r),r?.name==="TokenExpiredError"?new Bi.ClientError(of.TOKEN_EXPIRED,sf.FORBIDDEN):new Bi.ClientError(of.INVALID_TOKEN,sf.UNAUTHORIZED)}}var af,mT,Nh,bo,iO,Bi,hT,dV,fV,mV,pV,Ch,sf,of,hV,aue,pT,cf,fT,lf=ie(()=>{af=b(require("jsonwebtoken")),mT=b(require("fs-extra")),Nh=b(require("node:path")),bo=b(require("joi")),iO=b(_t());$();Bi=b(ge()),hT=b(Z());yN();Zn();dV=b(Is()),fV=b(dT()),mV=b(da()),pV=b(Ts()),Ch=b(de()),{HTTP_STATUS_CODES:sf,AUTHENTICATION_ERROR_MSGS:of}=Bi.hdbErrors;Ch.default.initSync();hV=Ch.default.get(x.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",aue=Ch.default.get(x.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",pT="RS256",cf={OPERATION:"operation",REFRESH:"refresh"};a(ET,"getJWTRSAKeys");a(oO,"createTokens");a(aO,"refreshOperationToken");a(cO,"validateOperationToken");a(_T,"validateRefreshToken");a(EV,"validateToken")});var TV=U((_Be,SV)=>{"use strict";var cue=lV(),uf=require("passport"),lue=require("passport-local").Strategy,uue=require("passport-http").BasicStrategy,due=require("util"),fue=(Zn(),O(Ui)),gV=due.callbackify(fue.findAndValidateUser),mue=($(),O(z)),_V=(lf(),O(Oh)),{AccessViolation:pue}=ge();uf.use(new lue(function(e,t,r){gV(e,t,r)}));uf.use(new uue(function(e,t,r){gV(e,t,r)}));uf.serializeUser(function(e,t){t(null,e)});uf.deserializeUser(function(e,t){t(null,e)});function hue(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 pue)}switch(a(i,"handleResponse"),n){case"Basic":uf.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===mue.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?_V.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):_V.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:uf.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(hue,"authorize");function Eue(e,t){let r=cue(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(Eue,"checkPermissions");SV.exports={authorize:hue,checkPermissions:Eue}});var pO=U((SBe,AV)=>{var yT=require("clone"),RT=_t(),_ue=ue(),ST=($(),O(z)),lO=require("fs"),dO=require("joi"),{string:TT}=dO.types(),{hdbErrors:gue,handleHDBError:gT}=ge(),{HTTP_STATUS_CODES:uO}=gue,{commonValidators:df}=ca(),yV=" is required",Sue=["insert","update","upsert"],fO={database:{presence:!1,format:df.schema_format,length:df.schema_length},schema:{presence:!1,format:df.schema_format,length:df.schema_length},table:{presence:!0,format:df.schema_format,length:df.schema_length},action:{inclusion:{within:Sue,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Tue={schema:TT.required(),table:TT.required(),action:TT.valid("insert","update","upsert")},{AWS_ACCESS_KEY:yue,AWS_SECRET:Rue,AWS_BUCKET:bue,AWS_FILE_KEY:Aue,REGION:Iue}=ST.S3_BUCKET_AUTH_KEYS,wue={s3:{presence:!0},[`s3.${yue}`]:{presence:!0,type:"String"},[`s3.${Rue}`]:{presence:!0,type:"String"},[`s3.${bue}`]:{presence:!0,type:"String"},[`s3.${Aue}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Iue}`]:{presence:!0,type:"String"}},RV=yT(fO);RV.data.presence={message:yV};var bV=yT(fO);bV.file_path.presence={message:yV};var Nue=Object.assign(yT(fO),wue),mO=yT(Tue);mO.csv_url=TT.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();mO.passthrough_headers=dO.object();function Cue(e){let t=RT.validateObject(e,RV);return bT(e,t)}a(Cue,"dataObject");function Oue(e){let t=RT.validateBySchema(e,dO.object(mO));return bT(e,t)}a(Oue,"urlObject");function Pue(e){let t=RT.validateObject(e,bV);return bT(e,t)}a(Pue,"fileObject");function Lue(e){let t=RT.validateObject(e,Nue);return bT(e,t)}a(Lue,"s3FileObject");function bT(e,t){if(!t){let r=_ue.checkGlobalSchemaTable(e.schema,e.table);if(r)return gT(new Error,r,uO.BAD_REQUEST);if(e.operation===ST.OPERATIONS_ENUM.CSV_FILE_LOAD)try{lO.accessSync(e.file_path,lO.constants.R_OK|lO.constants.F_OK)}catch(n){return n.code===ST.NODE_ERROR_CODES.ENOENT?gT(n,`No such file or directory ${n.path}`,uO.BAD_REQUEST):n.code===ST.NODE_ERROR_CODES.EACCES?gT(n,`Permission denied ${n.path}`,uO.BAD_REQUEST):gT(n)}}return t}a(bT,"postValidateChecks");AV.exports={dataObject:Cue,urlObject:Oue,fileObject:Pue,s3FileObject:Lue}});var hO=U((yBe,IV)=>{"use strict";var Ph=Z(),AT=($(),O(z));async function Due(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===AT.OPERATIONS_ENUM.INSERT||t.operation===AT.OPERATIONS_ENUM.UPDATE||t.operation===AT.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===AT.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Ph.info(i.message),i):i.http_resp_msg?(Ph.error(`Error calling operation: ${e.name}`),Ph.error(i.http_resp_msg),i):(Ph.error(`Error calling operation: ${e.name}`),Ph.error(i),i)}}a(Due,"callOperationFunctionAsAwait");IV.exports={callOperationFunctionAsAwait:Due}});var EO=U((bBe,NV)=>{"use strict";var{S3:vue,GetObjectCommand:Mue}=require("@aws-sdk/client-s3");NV.exports={getFileStreamFromS3:Uue,getS3AuthObj:wV};async function Uue(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await wV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Mue(r))).Body}a(Uue,"getFileStreamFromS3");function wV(e,t,r){return new vue({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(wV,"getS3AuthObj")});var OV=U((IBe,CV)=>{"use strict";var _O=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}},gO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};CV.exports={BulkLoadFileObject:_O,BulkLoadDataObject:gO}});var LV=U((NBe,PV)=>{"use strict";var SO=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}};PV.exports=SO});var vV=U((OBe,DV)=>{"use strict";var TO=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};DV.exports=TO});var RO=U((LBe,UV)=>{"use strict";var MV=LV(),xue=vV(),{HDB_ERROR_MSGS:Bue}=rn(),yO=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Bue.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 MV(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new xue(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 MV(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}};UV.exports=yO});var ff=U((vBe,FV)=>{"use strict";var Lh=Z(),{validateBySchema:xV}=_t(),wa=require("joi"),kue=Ra(),IT=ue(),{handleHDBError:wT,hdbErrors:Fue,ClientError:BV}=ge(),{HDB_ERROR_MSGS:NT,HTTP_STATUS_CODES:bO}=Fue,kV=de();kV.initSync();var{getDatabases:AO}=(Ce(),O(lt)),Hue=require("fs-extra"),Gue=($(),O(z));FV.exports={describeAll:que,describeTable:CT,describeSchema:$ue};async function que(e={}){try{let t=IT.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=AO(),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 CT({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 CT({schema:m,table:h,exact_count:u,include_computed:d},_)}E&&l.push(E)}catch(E){Lh.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 Lh.error("Got an error in describeAll"),Lh.error(t),wT(new Error,NT.DESCRIBE_ALL_ERR)}}a(que,"describeAll");async function CT(e,t){IT.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=xV(e,wa.object({database:wa.string(),table:wa.string().required(),exact_count:wa.boolean().strict(),include_computed:wa.boolean().strict()}));if(i)throw new BV(i.message);let c=AO()[r];if(!c)throw wT(new Error,NT.SCHEMA_NOT_FOUND(e.schema),bO.NOT_FOUND);let l=c[n];if(!l)throw wT(new Error,NT.TABLE_NOT_FOUND(e.schema,e.table),bO.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 Hue.stat(l.primaryStore.env.path)).size}catch(p){Lh.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")),kV.get(Gue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=kue.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){Lh.warn(`unable to stat table dbi due to ${p}`)}return m}a(CT,"descTable");async function $ue(e){IT.transformReq(e);let t=xV(e,wa.object({database:wa.string(),exact_count:wa.boolean().strict(),include_computed:wa.boolean().strict()}));if(t)throw new BV(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=AO()[n];if(!i)throw wT(new Error,NT.SCHEMA_NOT_FOUND(e.schema),bO.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),IT.isEmpty(l)||l.describe){let u=await CT({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($ue,"describeSchema")});var VV=U((UBe,$V)=>{"use strict";var Vue=ff(),{hdbErrors:HV}=ge(),{getDatabases:GV}=(Ce(),O(lt));$V.exports={checkSchemaExists:qV,checkSchemaTableExists:Kue,schemaDescribe:Vue};async function qV(e){if(!GV()[e])return HV.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(qV,"checkSchemaExists");async function Kue(e,t){let r=await qV(e);if(r)return r;if(!GV()[e][t])return HV.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Kue,"checkSchemaTableExists")});var WV=U((BBe,KV)=>{"use strict";var Wue=As();KV.exports={writeTransaction:Yue};function Yue(e,t,r){return Wue.writeTransaction(e,t,r)}a(Yue,"writeTransaction")});var OO=U((FBe,s1)=>{"use strict";var{decode:jue}=require("msgpackr"),LT=Ar(),mf=ur(),NO=($(),O(z)),Cn=Z(),wO=de(),zue=($(),O(z)),{onMessageByType:Jue}=nt(),JV=Ra(),{recordAction:YV,recordActionBinary:Que}=(es(),O(tT)),{publishToStream:Xue}=LT,{ConsumerEvents:jV}=require("nats"),Zue=Qn(),{promisify:ede}=require("util"),{decodeBlobsWithWrites:tde}=(Rs(),O(dS)),QV=ede(setTimeout),DT=1e4,vT,PT,XV,Dh=new Map,pf=new Map;s1.exports={initialize:ZV,ingestConsumer:CO,setSubscription:rde,setIgnoreOrigin:ide,getDatabaseSubscriptions:sde,updateConsumer:e1};async function ZV(){Jue(NO.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async t=>{await e1(t)}),XV=!0,Cn.notify("Initializing clustering ingest service.");let{connection:e}=await LT.getNATSReferences();vT=e,PT=e.info.server_name}a(ZV,"initialize");async function e1(e){if(e.status==="start"){let{js:t,jsm:r}=await t1(e.node_domain_name);CO(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Dh.get(e.stream_name+e.node_domain_name);t&&(Cn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Dh.set(e.stream_name+e.node_domain_name,"close")),pf.get(e.node_domain_name)==="failed"&&pf.set(e.node_domain_name,"close")}}a(e1,"updateConsumer");var MT=new Map;function rde(e,t,r){let n=MT.get(e);n||MT.set(e,n=new Map),n.set(t,r),XV||ZV().then(nde)}a(rde,"setSubscription");async function nde(){let e=await Zue.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+mf.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await t1(r),!n))break;let{schema:o,table:c}=i,l=JV.createNatsTableStreamName(o,c);CO(l,n,s,r)}}}a(nde,"accessConsumers");async function t1(e){let t,r,n=1;for(;!r;)try{t=await vT.jetstream({domain:e}),r=await vT.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(pf.get(e)==="close")break;pf.set(e,"failed"),n%10===1&&Cn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<DT?n++*100:DT;await QV(i)}return{js:t,jsm:r}}a(t1,"connectToRemoteJS");function sde(){return MT}a(sde,"getDatabaseSubscriptions");var r1;function ide(e){r1=e}a(ide,"setIgnoreOrigin");var n1=100,zV=new Array(n1),OT=0;async function CO(e,t,r,n){let{connection:s}=await LT.getNATSReferences();vT=s,PT=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,PT),Cn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(pf.get(n)==="close")break;o%10===1&&Cn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Cn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await LT.createConsumer(r,e,PT,new Date(Date.now()).toISOString()));let d=o++*100<DT?o++*100:DT;await QV(d)}let c=!1,l;for(;!c;){if(Dh.get(e+n)==="close"||pf.get(n)==="close"){Dh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:wO.get(NO.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Dh.set(e+n,l);let u=(async()=>{for await(let d of await l.status())if(d.type===jV.ConsumerDeleted&&(await l.close(),c=!0),d.type===jV.HeartbeatsMissed){let f=d.data;Cn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(Cn.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 zV[OT],zV[OT]=ode(d).catch(f=>{Cn.error(f)}),++OT>=n1&&(OT=0)}catch(d){d.message==="consumer deleted"?(Cn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Cn.error("Error consuming clustering ingest, restarting consumer",d)}}}a(CO,"ingestConsumer");async function ode(e){let t;await tde(()=>{t=jue(e.data)}),YV(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Cn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=wO.get(NO.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(mf.MSG_HEADERS.TRANSACTED_NODES)&&r.values(mf.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(mf.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!r1),Que(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(mf.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;Cn.trace("processing message:",o,c,u,(d?"records: "+d.map(w=>w?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),Cn.trace(`messageProcessor nats msg id: ${e.headers.get(mf.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(w=>h=w),{timestamp:_,user:R,node_name:S}=m||{},y=MT.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:IO(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:_,table:u,onCommit:h,user:R,nodeName:S});else{let w=d.map((L,H)=>({type:IO(o),value:L,expiresAt:p,id:f?.[H],table:u}));for(;l;)w.push({type:IO(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:w,table:u,timestamp:_,onCommit:h,user:R,nodeName:S})}wO.get(zue.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Xue(e.subject.split(".").slice(0,-1).join("."),JV.createNatsTableStreamName(c,u),e.headers,e.data),await E;let I=Date.now()-_;_&&YV(I,"replication-latency",e.subject,o,"ingest")}catch(o){Cn.error(o)}e.ack()}a(ode,"messageProcessor");function IO(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(IO,"convertOperation")});var Ar=U((GBe,y1)=>{"use strict";var Jr=de();Jr.initSync();var ade=require("fs-extra"),cde=require("semver"),Uh=require("path"),{monotonicFactory:lde}=require("ulidx"),o1=lde(),ude=require("util"),a1=require("child_process"),dde=ude.promisify(a1.exec),fde=a1.spawn,dn=ur(),st=($(),O(z)),{packageJson:mde,PACKAGE_ROOT:pde}=gt(),UT=ue(),ki=Z(),xT=Ra(),hde=WV(),vh=St(),{broadcast:Ede,onMessageByType:_de,getWorkerIndex:gde}=nt(),{isMainThread:c1}=require("worker_threads"),{Encoder:Sde,decode:vO}=require("msgpackr"),l1=new Sde,{isEmpty:uu}=UT,u1=(Zn(),O(Ui));c1&&_de(st.ITC_EVENT_TYPES.RESTART,()=>{On=void 0,lu=void 0});var{connect:Tde,StorageType:yde,RetentionPolicy:Rde,AckPolicy:MO,DeliverPolicy:UO,DiscardPolicy:bde,JSONCodec:Ade,createInbox:xO,headers:Ide,ErrorCode:i1}=require("nats"),{recordAction:wde}=(es(),O(tT)),{encodeBlobsAsBuffers:Nde}=(Rs(),O(dS)),d1=Ade(),Cde="clustering",Ode=mde.engines[dn.NATS_SERVER_NAME],Pde=Uh.join(pde,"dependencies"),DO=Uh.join(Pde,`${process.platform}-${process.arch}`,dn.NATS_BINARY_NAME),PO,LO,Mh,au,cu;y1.exports={runCommand:f1,checkNATSServerInstalled:Lde,createConnection:BO,getConnection:xh,getJetStreamManager:Bh,getJetStream:p1,getNATSReferences:Ao,getServerList:vde,createLocalStream:kO,listStreams:h1,deleteLocalStream:Mde,getServerConfig:hf,listRemoteStreams:Ude,viewStream:xde,viewStreamIterator:Bde,publishToStream:kde,request:Gde,reloadNATS:FO,reloadNATSHub:qde,reloadNATSLeaf:$de,extractServerName:Hde,requestErrorHandler:Vde,createLocalTableStream:S1,createTableStreams:Yde,purgeTableStream:T1,purgeSchemaTableStreams:jde,getStreamInfo:zde,updateLocalStreams:Qde,closeConnection:Dde,getJsmServerName:BT,addNatsMsgHeader:E1,clearClientCache:m1,updateRemoteConsumer:Kde,createConsumer:_1,updateConsumerIterator:Wde};async function f1(e,t=void 0){let{stdout:r,stderr:n}=await dde(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
15
15
|
`,""));return r.replace(`
|
|
16
16
|
`,"")}a(f1,"runCommand");async function Lde(){try{await ade.access(DO)}catch{return!1}let e=await f1(`${DO} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return cde.eq(t,Ode)}a(Lde,"checkNATSServerInstalled");async function BO(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await u1.getClusterUser();if(uu(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}ki.trace("create nats connection called");let i=await Tde({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Jr.get(st.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Jr.get(st.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Jr.get(st.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),ki.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&ki.error("Error with Nats client connection, connection closed",o),i===On&&m1()}),i}a(BO,"createConnection");function m1(){On=void 0,au=void 0,cu=void 0,lu=void 0}a(m1,"clearClientCache");async function Dde(){On&&(await On.drain(),On=void 0,au=void 0,cu=void 0,lu=void 0)}a(Dde,"closeConnection");var On,lu;async function xh(){return lu||(lu=BO(Jr.get(st.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),On=await lu),On||lu}a(xh,"getConnection");async function Bh(){if(au)return au;uu(On)&&await xh();let{domain:e}=hf(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(uu(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return au=await On.jetstreamManager({domain:e,timeout:6e4}),au}a(Bh,"getJetStreamManager");async function p1(){if(cu)return cu;uu(On)&&await xh();let{domain:e}=hf(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(uu(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return cu=On.jetstream({domain:e,timeout:6e4}),cu}a(p1,"getJetStream");async function Ao(){let e=On||await xh(),t=au||await Bh(),r=cu||await p1();return{connection:e,jsm:t,js:r}}a(Ao,"getNATSReferences");async function vde(e){let t=Jr.get(st.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await u1.getClusterUser(),s=await BO(t,r,n),i=xO(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=d1.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 UT.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(vde,"getServerList");async function kO(e,t){let{jsm:r}=await Ao(),n=Jr.get(st.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Jr.get(st.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Jr.get(st.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:yde.File,retention:Rde.Limits,subjects:t,discard:bde.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(kO,"createLocalStream");async function h1(){let{jsm:e}=await Ao(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(h1,"listStreams");async function Mde(e){let{jsm:t}=await Ao();await t.streams.delete(e)}a(Mde,"deleteLocalStream");async function Ude(e){let{connection:t}=await Ao(),r=[],n=xO(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(d1.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(Ude,"listRemoteStreams");async function xde(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ao(),i=o1(),o={durable_name:i,ack_policy:MO.Explicit};t&&(o.deliver_policy=UO.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=vO(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(dn.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(xde,"viewStream");async function*Bde(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ao(),i=o1(),o={durable_name:i,ack_policy:MO.Explicit};t&&(o.deliver_policy=UO.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=vO(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(dn.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Bde,"viewStreamIterator");async function kde(e,t,r,n){ki.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=E1(n,r);let{js:s}=await Ao(),i=await BT(),o=`${e}.${i}`,c=await Nde(()=>n instanceof Uint8Array?n:l1.encode(n));try{ki.trace(`publishToStream publishing to subject: ${o}`),wde(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 g1(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){ki.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await kO(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(kde,"publishToStream");function E1(e,t){t===void 0&&(t=Ide());let r=Jr.get(st.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(dn.MSG_HEADERS.ORIGIN)&&r&&t.append(dn.MSG_HEADERS.ORIGIN,r),t}a(E1,"addNatsMsgHeader");function hf(e){e=e.toLowerCase();let t=Uh.join(Jr.get(st.CONFIG_PARAMS.ROOTPATH),Cde);if(e===st.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return uu(LO)&&(LO={port:vh.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:vh.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_NODENAME)+dn.SERVER_SUFFIX.HUB,config_file:dn.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Uh.join(t,dn.PID_FILES.HUB),hdbNatsPath:t}),LO;if(e===st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return uu(PO)&&(PO={port:vh.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:vh.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_NODENAME)+dn.SERVER_SUFFIX.LEAF,config_file:dn.NATS_CONFIG_FILES.LEAF_SERVER,domain:vh.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_NODENAME)+dn.SERVER_SUFFIX.LEAF,pid_file_path:Uh.join(t,dn.PID_FILES.LEAF),hdbNatsPath:t}),PO;ki.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(hf,"getServerConfig");async function _1(e,t,r,n){try{await e.consumers.add(t,{ack_policy:MO.Explicit,durable_name:r,deliver_policy:UO.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(_1,"createConsumer");async function Fde(e,t,r){await e.consumers.delete(t,r)}a(Fde,"removeConsumer");function Hde(e){return e.split(".")[1]}a(Hde,"extractServerName");async function Gde(e,t,r=6e4,n=xO()){if(!UT.isObject(t))throw new Error("data param must be an object");let s=l1.encode(t),{connection:i}=await Ao(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return vO(c.data)}a(Gde,"request");function FO(e){return new Promise(async(t,r)=>{let n=fde(DO,["--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(FO,"reloadNATS");async function qde(){let{pid_file_path:e}=hf(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await FO(e)}a(qde,"reloadNATSHub");async function $de(){let{pid_file_path:e}=hf(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await FO(e)}a($de,"reloadNATSLeaf");function Vde(e,t,r){let n;switch(e.code){case i1.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case i1.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Vde,"requestErrorHandler");async function Kde(e,t){let r=t+dn.SERVER_SUFFIX.LEAF,{connection:n}=await Ao(),{jsm:s}=await Zde(r),{schema:i,table:o}=e,c=xT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await g1(async()=>{if(e.subscribe===!0)await _1(s,c,n.info.server_name,l);else try{await Fde(s,c,n.info.server_name)}catch(u){ki.trace(u)}})}a(Kde,"updateRemoteConsumer");async function Wde(e,t,r,n){let s=xT.createNatsTableStreamName(e,t),i=r+dn.SERVER_SUFFIX.LEAF,o={type:st.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!c1&&gde()<Jr.get(st.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=OO();await c(o)}await Ede(o),n==="stop"&&await UT.asyncSetTimeout(1e3)}a(Wde,"updateConsumerIterator");function g1(e){return hde.writeTransaction(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(g1,"exclusiveLock");async function S1(e,t){let r=xT.createNatsTableStreamName(e,t),n=await BT(),s=Jde(e,t,n);await kO(r,[s])}a(S1,"createLocalTableStream");async function Yde(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await S1(n,s)}}a(Yde,"createTableStreams");async function T1(e,t,r=void 0){if(Jr.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=xT.createNatsTableStreamName(e,t),{domain:s}=hf(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await xh()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")ki.warn(n);else throw n}}a(T1,"purgeTableStream");async function jde(e,t){if(Jr.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await T1(e,t[r])}a(jde,"purgeSchemaTableStreams");async function zde(e){return(await Bh()).streams.info(e)}a(zde,"getStreamInfo");function Jde(e,t,r){return`${dn.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Jde,"createSubjectName");async function BT(){if(Mh)return Mh;if(Mh=(await Bh())?.nc?.info?.server_name,Mh===void 0)throw new Error("Unable to get jetstream manager server name");return Mh}a(BT,"getJsmServerName");async function Qde(){let e=await Bh(),t=await BT(),r=await h1();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Xde(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(".");ki.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(Qde,"updateLocalStreams");function Xde(e){let{config:t}=e,r=!1,n=Jr.get(st.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Jr.get(st.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Jr.get(st.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(Xde,"updateStreamLimits");async function Zde(e){let t,r;try{t=await On.jetstream({domain:e}),r=await On.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw ki.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Zde,"connectToRemoteJS")});function HO(e){let t=e.get(kT),r=t?(0,Ef.unpack)(t):null;r||(r={remoteNameToId:{}});let n=it();r.nodeName=it();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:Fh(e)??1,nodes:[]})})}s[n]=0,e.putSync(kT,(0,Ef.pack)(r))}return r}function kh(e){return HO(e).remoteNameToId}function b1(e,t){let r=HO(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(kT,(0,Ef.pack)(r)),s}function FT(e,t){let r=HO(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(kT,(0,Ef.pack)(r))}return R1.trace?.("The remote node name map",e,n,s),s}var R1,Ef,kT,GO=ie(()=>{R1=b(Sr());ts();Ef=require("msgpackr"),kT=Symbol.for("remote-ids");a(HO,"getIdMappingRecord");a(kh,"exportIdMapping");a(b1,"remoteToLocalNodeId");a(FT,"getIdOfRemoteNode")});function VO(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=I1,efe(e.primaryStore,e.auditStore)):(c=A1,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{w1(A1[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=Qd(t);let d=new $O(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 w1(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),N1(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Ot(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=Qd(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,qO.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,qO.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 efe(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",()=>{let i=I1[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{w1(i)}finally{r.threadLocalWrites[0]=i.lastTxnTime,r.unlock("thread-local-writes",0)}},"acquiredLock");r.attemptLock("thread-local-writes",0,o)&&o()})}}function N1(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function C1(e){return e.nextTransaction||(VO({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),N1(e)),e.nextTransaction}var qO,A1,I1,$O,KO=ie(()=>{qO=b(Z());yd();Lc();uo();A1=Object.create(null),I1=Object.create(null);a(VO,"addSubscription");$O=class extends _s{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(w1,"notifyFromTransactionData");a(efe,"listenToCommits");a(N1,"nextTransaction");a(C1,"whenNextTransaction")});var M1={};Re(M1,{commitsAwaitingReplication:()=>_f,getHDBNodeTable:()=>Yt,getReplicationSharedStatus:()=>gf,iterateRoutes:()=>Gh,shouldReplicateToNode:()=>Hh,subscribeToNodeUpdates:()=>Sf});function Yt(){return O1||(O1=Je({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 gf(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function Sf(e){Yt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;v1.debug?.("adding node",n,"on node",it()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==it()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Yt().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Hh(e,t){let r=Mc.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===Mc.default.get(x.REPLICATION_SHARD))))&&Yt().primaryStore.get(it())?.replicates||e.subscriptions?.some(n=>(n.database||n.schema)===t&&n.subscribe)}function tfe(){Sf(e=>{Uc({},(t,r)=>{let n=e.name,s=P1.get(n);if(s||P1.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=gf(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of _f.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*Gh(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=Mc.default.get(x.REPLICATION_SECUREPORT)??(!Mc.default.get(x.REPLICATION_PORT)&&Mc.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||Mc.default.get(x.REPLICATION_PORT)||Mc.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){L1.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 L1,D1,Mc,v1,O1,P1,_f,Tf=ie(()=>{Ce();ts();dp();L1=require("worker_threads"),D1=b(ge()),Mc=b(de());$();v1=b(Sr());server.nodes=[];a(Yt,"getHDBNodeTable");a(gf,"getReplicationSharedStatus");a(Sf,"subscribeToNodeUpdates");a(Hh,"shouldReplicateToNode");P1=new Map;b0((e,t,r)=>{if(r>server.nodes.length)throw new D1.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);_f||(_f=new Map,tfe());let n=_f.get(e);return n||(n=[],_f.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(tfe,"startSubscriptionToReplications");a(Gh,"iterateRoutes")});var G1={};Re(G1,{connectedToNode:()=>du,disconnectedFromNode:()=>Rf,ensureNode:()=>Na,requestClusterStatus:()=>H1,startOnMainThread:()=>WO});async function WO(e){let t=0,r=mt();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){HT.set(o,Fh(u.auditStore));break}}}Fi.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=it();function l(){let u=Yt().primaryStore.get(c);if(u!==null){let d=e.url??xc();if(u===void 0||u.url!==d||u.shard!==e.shard)return Na(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Yt().primaryStore.get(c)&&l();for(let u of Gh(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),U1.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}Sf(s)});let n;function s(o,c=o?.name){let l=it()&&c===it()||xc()&&o?.url===xc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Yt().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(ct.trace("Setting up node replication for",o),!o){for(let[m,p]of Io){let h;for(let[E,{nodes:_}]of p){let R=_[0];if(R&&R.name==c){h=!0;for(let[S,{worker:y}]of p)p.delete(S),ct.warn("Node was deleted, unsubscribing from node",c,S,m),y?.postMessage({type:"unsubscribe-from-node",node:c,nodes:_,database:S,url:m});break}}if(h){Io.get(m).iterator.remove(),Io.delete(m);return}}return}if(l)return;if(!o.url){ct.info(`Node ${o.name} is missing url`);return}let u=Io.get(o.url);if(u&&u.iterator.remove(),!(o.replicates===!0||o.replicates?.sends)&&!o.subscriptions?.length&&!u)return;if(ct.info(`Added node ${o.name} at ${o.url} for process ${it()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of yf)if(o.url===p.url){yf.delete(m);break}yf.set(o.name,o)}let d=mt();if(u||(u=new Map,Io.set(o.url,u)),u.iterator=Uc(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]||(ct.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){ct.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,_=[{replicateByDefault:p,...o}];HT.has(m)&&qh.default.get(x.REPLICATION_FAILOVER)&&(_.push({replicateByDefault:p,name:it(),startTime:HT.get(m),endTime:Date.now(),replicates:!0}),HT.delete(m));let R=Hh(o,m),S=Fi.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=_,R)return}else R&&(t=t%S.length,E=S[t++],E||ct.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:_,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=rfe.HDB_LEADER_URL??process.env.HDB_LEADER_URL??U1[0]?.url,I=y?new URL(y).hostname:Array.from(Yt().primaryStore.getKeys({}).filter(L=>L!==it()))[0],w=_[0].name??(_[0].url&&new URL(_[0].url).hostname);ct.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):$h(L)},nfe)}else{ct.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:Yt().primaryStore.get(it())?.replicates}),Yt().primaryStore.get(it())?.replicates||(n=!1,ct.info("Disabling replication, this node name",it(),Yt().primaryStore.get(it()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:_};E?E.postMessage(y):qT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),Rf=a(function(o){try{ct.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(yf.keys()),l=c.sort(),u=l.indexOf(o.name||Hi(o.url));if(u===-1){ct.warn("Disconnected node not found in node map",o.name,c);return}let d=Io.get(o.url),f=d?.get(o.database);if(!f){ct.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!qh.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],_=yf.get(E);d=Io.get(_.url);let R=d?.get(o.database);if(!R||R.connected===!1||R.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=R,y=!1;for(let I of f.nodes){if(S.some(w=>w.name===I.name)){ct.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}I.endTime<Date.now()||(S.push(I),ct.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(I,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||ct.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}ct.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){ct.error("Error failing over node",c)}},"disconnectedFromNode"),du=a(function(o){let c=Io.get(o.url),l=c?.get(o.database);if(!l){ct.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){ct.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){ct.debug("Connected node is not named yet",o.database,l);return}if(qh.default.get(x.REPLICATION_FAILOVER)){l.nodes=[u];for(let d of Io.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=Fi.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]}):$h({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,Fi.onMessageByType)("disconnected-from-node",Rf),(0,Fi.onMessageByType)("connected-to-node",du),(0,Fi.onMessageByType)("request-cluster-status",H1)}function H1(e,t){let r=[];for(let[n,s]of yf)try{let i=Io.get(s.url);ct.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=B1(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ct.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Na(e,t){let r=Yt();e=e??Hi(t.url),t.name=e;try{if(t.ca){let s=new k1.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){ct.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ct.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!qh.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=B1(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])]}ct.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Fi,GT,ct,x1,qh,k1,F1,B1,rfe,nfe,Io,Rf,du,yf,HT,U1,Vh=ie(()=>{Ce();Fi=b(nt());ts();GT=require("worker_threads");Tf();ct=b(Z()),x1=b(require("lodash")),qh=b(de());$();k1=require("crypto"),F1=b(require("minimist")),{cloneDeep:B1}=x1.default,rfe=(0,F1.default)(process.argv),nfe=200,Io=new Map,yf=new Map,HT=new Map,U1=[];a(WO,"startOnMainThread");a(H1,"requestClusterStatus");GT.parentPort&&(Rf=a(e=>{GT.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),du=a(e=>{GT.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Fi.onMessageByType)("subscribe-to-node",e=>{$h(e)}),(0,Fi.onMessageByType)("unsubscribe-from-node",e=>{qT(e)}));a(Na,"ensureNode")});var q1=U(Pn=>{"use strict";var sfe={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
|