harperdb 4.7.0-beta.2 → 4.7.0-beta.3
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 +31 -31
- package/bin/lite.js +3 -3
- package/launchServiceScripts/launchNatsIngestService.js +3 -3
- package/launchServiceScripts/launchNatsReplyService.js +3 -3
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +3 -3
- package/npm-shrinkwrap.json +5 -5
- package/package.json +1 -1
- package/resources/RequestTarget.d.ts +2 -0
- package/resources/analytics/hostnames.d.ts +5 -477
- package/resources/databases.d.ts +1 -478
- package/server/jobs/jobProcess.js +3 -3
- package/server/threads/threadServer.js +3 -3
- package/studio/web/assets/{index-CXaPu3wc.js → index-BqOgGOeU.js} +2 -2
- package/studio/web/assets/{index-B797owPM.js → index-C4VX60Fd.js} +1 -1
- package/studio/web/assets/{profiler-CgmzpljF.js → profiler-OUXA1uul.js} +1 -1
- package/studio/web/assets/{startRecording-DiD-ht9H.js → startRecording-D8PRkhto.js} +1 -1
- package/studio/web/index.html +1 -1
- package/utility/scripts/restartHdb.js +3 -3
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
`},"serialize"),compressible:!1,q:.8});pn.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()}});vU={type:"application/json",serializeStream:Am,serialize:Im,deserialize:b8,q:.5};pn.set("*/*",vU);pn.set("",vU);o(b8,"tryJSONParse");o(Nm,"registerContentHandlers");A8=(0,DU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=I_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.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=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(I_,"findBestSerializer");NU=Wb.default.get(F.HTTP_COMPRESSIONTHRESHOLD);o(Cm,"serialize");o(Mo,"serializeMessage");o(Jb,"asyncSerialization");o(Xb,"hasAsyncSerialization");o(I8,"streamToBuffer");w8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(N8,"isBufferEncoding");o(C8,"parseContentType");o(vo,"getDeserializer");o(O8,"deserializerUnknownType");o(P8,"transformIterable");o(A_,"toCsvStream")});var v_={};Re(v_,{Blob:()=>Ds,blobsWereEncoded:()=>Xc,cleanupOrphans:()=>V8,databasePaths:()=>eA,decodeBlobsWithWrites:()=>M_,decodeFromDatabase:()=>Bo,decodeWithBlobCallback:()=>Dm,deleteBlob:()=>P_,deleteBlobsInObject:()=>Ba,deleteRootBlobPathsForDB:()=>nA,encodeBlobsAsBuffers:()=>G8,encodeBlobsWithFilePath:()=>D_,findBlobsInObject:()=>Jc,getFileId:()=>L_,getFilePathForBlob:()=>KU,getRootBlobPathsForDB:()=>vu,isSaving:()=>U8,saveBlob:()=>Lm,setDeletionDelay:()=>v8,startPreCommitBlobsForRecord:()=>sA});function $U(){}function P_(e){let t=KU(e);t&&setTimeout(()=>{(0,tt.unlink)(t,r=>{r&&dr.default.debug?.("Error trying to remove blob file",r)})},VU)}function v8(e){VU=e}function Lm(e){let t=jr.get(e);if(!t)t={storageIndex:0,fileId:null,store:vn},jr.set(e,t);else{if(t.fileId)return t;t.store=vn}return B8(t),t.source?Zb(e,t.source,t):t.contentBuffer?x8(e,t):Zb(e,Pm.Readable.from(e.stream()),t),t}function Zb(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,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,tt.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.write(Buffer.concat([h(BigInt(g.length)+0xff000000000000n),g])),E(t.errored);return}let m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;a?(m||f.write(D8),p=(0,C_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(L8),t.pipe(f)),t.on("error",E);function h(g){let R=BigInt(g),S=new Uint8Array(wr),y=new DataView(S.buffer);return R|=BigInt(a?rA:qU)<<48n,y.setBigInt64(0,R),S}o(h,"createHeader");function E(g){i.unlock(d,0);let R=f.fd;g?(R&&(0,tt.close)(R),u(g)):c?(0,tt.fdatasync)(R,S=>{S&&u(S),l(),(0,tt.close)(R)}):(l(),(0,tt.close)(R))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-wr;e.size=g,(0,tt.write)(f.fd,h(g),0,wr,0,E)}})}),e}function L_(e){return jr.get(e)?.fileId}function U8(e){return jr.get(e)?.saving}function KU(e){let t=jr.get(e);return t?.fileId&&Mu(t)}function vu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=eA.get(e);if(!t){if(!e.databaseName)return dr.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,O_.get)(F.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,$i.join)(n,e.databaseName)):t=[(0,$i.join)((0,O_.getHdbBasePath)(),"blobs",e.databaseName)],eA.set(e,t)}return t}async function nA(e){let t=vu(e);t&&await Promise.all(t.map(r=>YU(r)))}async function YU(e){if((0,tt.existsSync)(e)){for(let t of await(0,Un.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await YU((0,$i.join)(e,t.name));else try{await(0,Un.unlink)((0,$i.join)(e,t.name))}catch(r){dr.default.warn?.("Error deleting file",r)}try{await(0,Un.rmdir)(e)}catch(t){dr.default.warn?.("Error deleting directory",t)}}}function Mu({storageIndex:e,fileId:t,store:r}){let n=vu(r);return(0,$i.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 x8(e,t){let r=t.contentBuffer,n=r.length;if(!(n<GU))return e.size=n,Zb(e,Pm.Readable.from([r]),t)}function B8(e){let t=vu(e.store),r=F8(),n=t?.length>1?k8(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Mu(e),a=(0,$i.dirname)(i);(0,tt.existsSync)(a)||(0,tA.ensureDirSync)(a),e.filePath=i}function F8(){let e=kU.get(vn);if(!e){let t=0,r=vu(vn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,tt.existsSync)(n))for(let c of(0,tt.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>a&&(a=l)}s+=a,n=(0,$i.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(vn.getUserSharedBuffer("blob-file-id",e.buffer)),kU.set(vn,e)}return Number(Atomics.add(e,0,1n))}function k8(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(N_);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,H8(e)),e.frequencyTable[t%N_]}async function H8(e){if(!Un.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,Un.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,tA.ensureDirSync)(s),a=await(0,Un.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(N_),n=t.map(s=>1/s);for(let s=0;s<N_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function D_(e,t,r){Lu=t,vn=r,Xc=!1;try{return e()}finally{Lu=void 0,vn=void 0}}function G8(e){Qr=[];let t;try{t=e()}catch(n){throw Qr=void 0,n}let r=Qr.length<2?Qr[0]:Promise.all(Qr);return Qr=void 0,r?r.then(()=>e()):t}function M_(e,t,r){try{Qr=[],xo=r,vn=t,e()}catch(s){throw xo=void 0,Qr=void 0,s}xo=void 0;let n=Qr.length<2?Qr[0]:Promise.all(Qr);return Qr=void 0,n}function Dm(e,t,r){vn=r;try{return xo=t,e()}finally{xo=void 0}}function Bo(e,t){return vn=t,e()}function Ba(e){Jc(e,t=>{P_(t)})}function Jc(e,t){if(e instanceof Ds)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Jc(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Jc(e[r],t)}}function sA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Du&&s.saveBeforeCommit){vn=t;let i=Lm(s).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function $8(){return class{static{o(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 V8(e){let t,r,n=0;for(let u in e){let d=e[u];if(t=d.primaryStore.rootStore,r=d.auditStore,r)break}let s=new Set,i=vu(t);if(i)for(let u of i)await a(u);return await c(),n;async function a(u){try{if(!(0,tt.existsSync)(u))return;for(let d of await(0,Un.readdir)(u,{withFileTypes:!0})){let f=(0,$i.join)(u,d.name);if(d.isDirectory())await a(f);else if(s.size%1e6===0&&dr.default.info?.("Finding all blobs for orphan check, paths accumulated",s.size),s.add(f),s.size%2===0){let m=(0,HU.getHeapStatistics)();m.used_heap_size>m.heap_size_limit*.8&&await c()}}}catch(d){dr.default.error?.("Error searching path for blobs",u,d)}}o(a,"searchPath");async function c(){for(let u in e){dr.default.warn?.("Checking for references to potential orphaned blobs in table",u);let d=e[u];for(let f of d.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{f.metadataFlags&Jr&&f.value&&l(f.value),await new Promise(setImmediate)}catch(m){dr.default.error?.("Error searching table",u," for references to potential orphaned blobs failed",m)}}dr.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:u}of r.getRange({start:1,snapshot:!1,lazy:!0}))try{let d=At(u),f=r.tableStores[d.tableId],m=f?.getEntry(d.recordId);(!m||m.version!==d.version||!m.value)&&l(d.getValue(f))}catch(d){dr.default.error?.("Error searching audit log for references to potential orphaned blobs failed",d)}dr.default.warn?.("Deleting",s.size,"orphaned blobs"),n+=s.size;for(let u of s)try{await(0,Un.unlink)(u)}catch(d){dr.default.warn?.("Error deleting file",d)}dr.default.warn?.("Finished deleting",s.size,"orphaned blobs"),s.clear()}o(c,"removePathsThatAreNotReferenced");function l(u){Jc(u,d=>{if(d instanceof Du){let f=jr.get(d);if(f.fileId!=null){let m=Mu(f);s.has(m)&&s.delete(m)}}})}o(l,"checkObjectForReferences")}var qi,Un,tt,C_,Pm,tA,O_,$i,dr,HU,GU,wr,qU,rA,xU,L8,D8,BU,jr,xo,Ds,Lu,Qr,vn,Xc,Om,w_,M8,FU,Du,VU,eA,kU,N_,q8,ts=se(()=>{qi=require("msgpackr"),Un=require("node:fs/promises"),tt=require("node:fs"),C_=require("node:zlib"),Pm=require("node:stream"),tA=require("fs-extra"),O_=b(me());q();$i=require("path"),dr=b(es());Uo();Hi();HU=require("node:v8"),GU=8192,wr=8,qU=0,rA=1,xU=255,L8=new Uint8Array([0,qU,255,255,255,255,255,255]),D8=new Uint8Array([0,rA,255,255,255,255,255,255]),BU=0xffffffffffff,jr=new WeakMap,Ds=global.Blob||$8(),Xc=!1,Om=new Uint8Array(8),w_=new DataView(Om.buffer),M8=6e4;o($U,"InstanceOfBlobWithNoConstructor");$U.prototype=Ds.prototype;FU=!1,Du=class e extends $U{static{o(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=jr.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):(Xb()&&Jb(this.bytes().then(a=>t.contentBuffer=a)),`[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=jr.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=Mu(t),a,c=o(async()=>{let l,u=wr;try{if(l=await(0,Un.readFile)(i),l.length>=wr){l.copy(Om,0,0,wr);let f=w_.getBigUint64(0);if(Number(f>>48n)===xU)throw new Error("Error in blob: "+buffer.subarray(wr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<BU&&(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(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(a=!0,h(c()))))return a=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===rA?new Promise((f,m)=>{(0,C_.deflate)(l.subarray(wr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(wr))},"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=jr.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=Mu(t),a,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=o((R,S)=>{(0,tt.open)(i,"r",(y,C)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(dr.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(R,S)},20).unref();S(y),p.#e?.forEach(I=>I(y))}else a=C,R(C)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,R=100;return new Promise(o(function S(y,C){function I(J){(0,tt.close)(a),clearTimeout(d),u&&u.close(),C(J),p.#e?.forEach(G=>G(J))}o(I,"onError");let k=Buffer.allocUnsafe(262144);(0,tt.read)(a,k,0,k.length,c,(J,G,H)=>{if(l+=G,J)return I(J);if(c===0){if(G<wr){R-- >0&&f!==!1?(h(),dr.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,C),20).unref()):(dr.default.debug?.("File was empty, throwing error",i,R),C(new Error(`Blob ${t.fileId} was empty`)));return}H.copy(Om,0,0,wr);let X=w_.getBigUint64(0);if(Number(X>>48n)===xU)return I(new Error("Error in blob: "+H.subarray(wr)));if(g=Number(X&0xffffffffffffn),g<BU&&p.size!==g&&(p.size=g,p.#t))for(let W of p.#t)W(g);H=H.subarray(wr,G),l-=wr}else if(G===0){let X=Buffer.allocUnsafe(8);return(0,tt.read)(a,X,0,wr,0,W=>{if(W)return I(W);if(Om.set(X),g=Number(w_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{I(new Error(`File read timed out reading from ${i}`))},M8).unref():(u=(0,tt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(y,C))}),S(y,C)):m?I(new Error("Blob is incomplete")):(m=!0,S(y,C));return}(0,tt.close)(a),E.close(),y()})}else H=H.subarray(0,G);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=G,S(y,C);s&&l>=s&&(l>s&&(H=H.subarray(0,s-c)),l=g=s),n&&n>c&&(H=H.subarray(n-c))}c+=G;try{E.enqueue(H)}catch(X){return dr.default.debug?.("Error enqueuing chunk",X),y()}l===g&&((0,tt.close)(a),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,tt.close)(a),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=jr.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};jr.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};jr.set(i,a),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 FU||(FU=!0,dr.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}},VU=500;o(P_,"deleteBlob");o(v8,"setDeletionDelay");global.createBlob=function(e,t){let r=new Du(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(jr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Pm.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Pm.Readable.from(e);else throw new Error("Invalid source type");return r};o(Lm,"saveBlob");o(Zb,"writeBlobWithStream");o(L_,"getFileId");o(U8,"isSaving");o(KU,"getFilePathForBlob");eA=new Map;o(vu,"getRootBlobPathsForDB");o(nA,"deleteRootBlobPathsForDB");o(YU,"rimrafSteadily");o(Mu,"getFilePath");o(x8,"writeBlobWithBuffer");o(B8,"generateFilePath");kU=new Map;o(F8,"getNextFileId");N_=128;o(k8,"getNextStorageIndex");o(H8,"createFrequencyTableForStoragePaths");o(D_,"encodeBlobsWithFilePath");o(G8,"encodeBlobsAsBuffers");o(M_,"decodeBlobsWithWrites");o(Dm,"decodeWithBlobCallback");o(Bo,"decodeFromDatabase");o(Ba,"deleteBlobsInObject");o(Jc,"findBlobsInObject");o(sA,"startPreCommitBlobsForRecord");q8=new qi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,qi.addExtension)({Class:Ds,type:11,unpack:o(function(e){let t=q8.unpack(e),r=new Du;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(jr.set(r,{storageIndex:t[1],fileId:t[2],store:vn}),xo)return xo(r)??r;if(!vn)throw new Error("No store specified, cannot load blob from storage")}else jr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=jr.get(e);if(Lu!==void 0&&(Xc=!0,t?.recordId!==void 0&&t.recordId!==Lu))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<GU)return r.size=t.contentBuffer.length,(0,qi.pack)([r,t.contentBuffer])}if(Lu!==void 0){if(t=Lm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Lu,(0,qi.pack)([r,t.storageIndex,t.fileId])}if(t){if(xo)return xo(e),(0,qi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,tt.readFileSync)(Mu(t));if(n.length>=wr&&(n.copy(Om,0,0,wr),Number(w_.getBigUint64(0)&0xffffffffffffn)===n.length-wr))return Buffer.concat([(0,qi.pack)([r]),n]);if(Qr)Qr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Qr)return Qr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,qi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o($8,"polyfillBlob");o(V8,"cleanupOrphans")});var JU={};Re(JU,{onStorageReclamation:()=>Mm,runReclamationHandlers:()=>cA,setAvailableSpaceRatioGetter:()=>Y8});function Mm(e,t,r){(r||(0,x_.getWorkerIndex)()===(0,x_.getWorkerCount)()-1)&&(U_.has(e)||U_.set(e,[]),U_.get(e).push({priority:0,handler:t}),aA||(aA=setTimeout(cA,zU).unref()))}async function cA(){for(let[e,t]of U_)try{let r=await QU(e),n=K8/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(oA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){oA.default.error?.("Error running storage reclamation handlers",r)}aA=setTimeout(cA,zU).unref()}function Y8(e){QU=e??jU}var iA,x_,oA,B_,WU,U_,K8,zU,aA,jU,QU,F_=se(()=>{iA=require("node:fs/promises"),x_=b(nt()),oA=b(es());q();B_=b(me()),WU=b(oe());B_.default.initSync();U_=new Map,K8=B_.default.get(F.STORAGE_RECLAMATION_THRESHOLD)??.4,zU=(0,WU.convertToMS)(B_.default.get(F.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Mm,"onStorageReclamation");jU=o(async e=>{if(iA.statfs){let t=await(0,iA.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),QU=jU;o(cA,"runReclamationHandlers");o(Y8,"setAvailableSpaceRatioGetter")});var u0={};Re(u0,{ACTION_32_BIT:()=>$_,ACTION_64_BIT:()=>Q8,AUDIT_STORE_OPTIONS:()=>xm,Decoder:()=>el,HAS_BLOBS:()=>Jr,HAS_CURRENT_RESIDENCY_ID:()=>tl,HAS_EXPIRATION_EXTENDED_TYPE:()=>km,HAS_ORIGINATING_OPERATION:()=>Fm,HAS_PREVIOUS_RESIDENCY_ID:()=>rl,REMOTE_SEQUENCE_UPDATE:()=>V_,createAuditEntry:()=>nl,getLastRemoved:()=>z8,openAuditStore:()=>G_,readAuditEntry:()=>At,removeAuditEntry:()=>q_,setAuditRetention:()=>j8,transactionKeyEncoder:()=>o0});function G_(e){let t=e.auditStore=e.openDB(lA.AUDIT_STORE_NAME,{create:!1,...xm});t||(t=e.auditStore=e.openDB(lA.AUDIT_STORE_NAME,xm),ZU(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=dA;Mm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-uA/(1+i*i)})){try{m=q_(t,h,E)}catch(g){Uu.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=W8){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,uA/10):(ZU(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Um.getWorkerIndex)()===(0,Um.getWorkerCount)()-1&&c(),(0,Um.getWorkerIndex)()===0&&!XU)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(XU=!0,Uu.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function q_(e,t,r){let n=J8(r),s;if(n&Jr){s=At(r);let i=e.tableStores[s.tableId];if(i){let a=i.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Bo(()=>Ba(s.getValue(i)),i.rootStore)}}if((n&15)===fA){s=s||At(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function ZU(e,t){mA[0]=t,e.put(Symbol.for("last-removed"),a0)}function z8(e){let t=e.get(Symbol.for("last-removed"));if(t)return a0.set(t),mA[0]}function j8(e,t=dA){uA=e,dA=t}function nl(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=c0[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Fa.setFloat64(0,n):Ms.set(pA),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),g(r),Fa.setFloat64(h,e),h+=8,l&tl&&R(u),l&rl&&R(d),l&km&&(Fa.setFloat64(h,f),h+=8),l&Fm&&R(l0[m]),i?g(i):Ms[h++]=0,l?Fa.setUint32(n?8:0,p|l|3221225472):Ms[n?8:0]=p;let E=Ms.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let y=h;h+=1,h=(0,Zc.writeKey)(S,Ms,h);let C=h-y-1;C>127?C>16383?(Uu.error("Key or username was too large for audit entry",S),h=y+1,Ms[y]=0):(Ms.copyWithin(y+2,y+1,h),Fa.setUint16(y,C|32768),h++):Ms[y]=C}function R(S){S<128?Ms[h++]=S:S<16384?(Fa.setUint16(h,S|32768),h+=2):S<1056964608?(Fa.setUint32(h,S|3221225472),h+=4):(Ms[h]=255,Fa.setUint32(h+1,S),h+=5)}}function J8(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new el(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function At(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new el(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&tl&&(m=n.readInt()),i&rl&&(p=n.readInt()),i&km&&(h=n.readFloat64()),i&Fm){let y=n.readInt();E=l0[y]}l=n.readInt();let g=n.position,R=n.position+=l,S;return{type:c0[i&7],tableId:c,nodeId:a,get recordId(){return(0,Zc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>g?(0,Zc.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(y,C,I){if(i&k_||i&vm&&!C)return S||(S=Bo(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&vm&&I)return Gb(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(k_|vm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Uu.error("Reading audit entry error",n,e),{}}}var Zc,H_,lA,Um,i0,Uu,Ms,Fa,o0,xm,uA,W8,mA,a0,dA,XU,k_,vm,e0,fA,t0,r0,n0,s0,$_,Q8,V_,tl,rl,Fm,km,Jr,c0,l0,el,Hi=se(()=>{Zc=require("ordered-binary"),H_=b(me()),lA=b(Yt());q();Um=b(nt()),i0=b(oe());sl();Uu=b(Q());y_();ts();F_();(0,H_.initSync)();Ms=Buffer.alloc(2816),Fa=new DataView(Ms.buffer,Ms.byteOffset,2816),o0={writeKey(e,t,r){return e===Bm?(t.set(Bm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Zc.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,Zc.readKey)(e,t,r)}},xm={encoding:"binary",keyEncoder:o0},uA=(0,i0.convertToMS)((0,H_.get)(F.LOGGING_AUDITRETENTION))||86400*3,W8=1e3,mA=new Float64Array(1),a0=new Uint8Array(mA.buffer),dA=1e4,XU=!1;o(G_,"openAuditStore");o(q_,"removeAuditEntry");o(ZU,"updateLastRemoved");o(z8,"getLastRemoved");o(j8,"setAuditRetention");k_=16,vm=32,e0=1,fA=2,t0=3,r0=4,n0=5,s0=6,$_=14,Q8=15,V_=11,tl=512,rl=1024,Fm=2048,km=4096,Jr=8192,c0={put:e0|k_,[e0]:"put",delete:fA,[fA]:"delete",message:t0|k_,[t0]:"message",invalidate:r0|vm,[r0]:"invalidate",patch:n0|vm,[n0]:"patch",relocate:s0,[s0]:"relocate"},l0={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(nl,"createAuditEntry");o(J8,"readAction");o(At,"readAuditEntry");el=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function K_(){return hA||(hA=Ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),hA}function Z8(e){return e=e.replace(X8,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));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 eZ(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 _A(e){let t=d0.default.createHash("shake128",{outputLength:4}),r;return(0,f0.isIPv6)(e)?r=Z8(e):r=e.toLowerCase(),eZ(Uint8Array.from(t.update(r).digest()))}var d0,f0,EA,hA,X8,gA=se(()=>{we();d0=b(require("crypto")),f0=require("node:net"),EA=new Map;o(K_,"getAnalyticsHostnameTable");X8=/(\d{1,3}\.){3}\d{1,3}$/;o(Z8,"normalizeIPv6");o(eZ,"nodeHashToNumber");o(_A,"stableNodeId")});var Fo,SA=se(()=>{Fo={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 S0={};Re(S0,{profile:()=>g0,userCodeFolders:()=>z_});async function g0(){let e=(0,W_.pathToFileURL)(h0.PACKAGE_ROOT).toString(),t=new Map,r=100,n=_0/1e6,s=0,i=0;try{let{profile:u}=await xu.post("Profiler.stop");for(let d of u.nodes)t.set(d.id,d);for(let d of u.nodes)a(d);Ve(i*n,"cpu-usage","harper"),Ve(s*n,"cpu-usage","user")}catch(u){E0.error?.("analytics profiler error:",u)}finally{await xu.post("Profiler.start")}function a(u){if(u.unassignedCount!==void 0)return u.unassignedCount;let d=u.hitCount;if(u.children)for(let f of u.children)d+=a(t.get(f));return l(u)?(s+=d,d>r&&Ve(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):c(u)?(i+=d,d>r&&Ve(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):(u.unassignedCount=d,d)}o(a,"getUserHitCount");function c(u){return u.callFrame?.url.startsWith(e)}o(c,"isHarperCode");function l(u){if(z_.some(d=>u.callFrame?.url.startsWith(d)))return!0}o(l,"isUserCode")}var p0,Y_,h0,W_,E0,m0,z_,_0,xu,T0=se(()=>{p0=require("node:inspector/promises");rs();Y_=b(me());q();h0=b(Ct()),W_=require("node:url"),E0=b(Q()),m0=(0,Y_.getHdbBasePath)(),z_=m0?[(0,W_.pathToFileURL)(m0).toString()]:[];process.env.RUN_HDB_APP&&z_.push((0,W_.pathToFileURL)(process.env.RUN_HDB_APP).toString());_0=1e3,xu=new p0.Session;xu.connect();(async()=>{if(z_.length===0)return;await xu.post("Profiler.enable"),await xu.post("Profiler.setSamplingInterval",{interval:_0}),await xu.post("Profiler.start");let e=(0,Y_.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;setInterval(()=>{g0()},e).unref()})();o(g0,"profile")});var J_={};Re(J_,{addAnalyticsListener:()=>$m,analyticsDelay:()=>bA,calculateCPUUtilization:()=>F0,diffResourceUsage:()=>k0,onAnalyticsAggregate:()=>wA,recordAction:()=>Ve,recordActionBinary:()=>Zr,recordHostname:()=>AA,setAnalyticsEnabled:()=>nZ});function nZ(e){M0=e,clearTimeout(Gm),Gm=null}function sZ(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 iZ(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},Q_.set(e,a)}function Ve(e,t,r,n,s){if(!M0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=Q_.get(i);a?sZ(e,a):iZ(i,e,t,r,n,s),Gm||oZ()}function Zr(e,t,r,n,s){Ve(!!e,t,r,n,s)}function $m(e){U0.push(e)}function oZ(){TA||=performance.now(),Gm=setTimeout(async()=>{Gm=null;let e=performance.now()-TA;TA=0;let t=[],r={time:Date.now(),period:e,threadId:il.threadId,metrics:t};for(let[s,i]of Q_){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of B0){let m=Math.floor(c*f),p=a[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 H0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:il.threadId,byThread:!0,...n});for(let s of U0)s(t);Q_=new Map,il.parentPort?il.parentPort.postMessage({type:v0,report:r}):$0({report:r})},bA).unref()}async function AA(){let e=ve.hostname;Xr.trace?.("recordHostname server.hostname:",e);let t=_A(e);Xr.trace?.("recordHostname nodeId:",t);let r=K_();if(!await r.get(t)){let s={id:t,hostname:e};Xr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Bu(e,t){let r=ve.hostname,n=EA.get(r);n?Xr.trace?.("storeMetric cached nodeId:",n):(n=_A(r),Xr.trace?.("storeMetric new nodeId:",n),EA.set(r,n));let s={id:[(0,RA.getNextMonotonicTime)(),n],...t};Xr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function F0(e,t){let r=e.userCPUTime+e.systemCPUTime;return Xr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function k0(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 aZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:Fo.TABLE_SIZE,database:t,table:s,size:c};Xr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),Bu(e,l),n+=c}return n}function y0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=D0.statSync(s.primaryStore.env.path).size,c=aZ(e,r,n),l=a-c,u={metric:Fo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};Bu(e,u),Xr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Xr.warn?.("Error getting DB size metrics",s)}}function R0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:Fo.STORAGE_VOLUME,database:r,...i};Bu(e,a),Xr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Xr.warn?.("Error getting DB volume metrics",s)}}async function cZ(e,t=6e4){let r=IA(),n=G0(),s=new Promise(y=>{let C=performance.now();setImmediate(()=>{let I=performance.now();I-C>5e3&&Xr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(I-C)+"ms"),C=performance.now()}),n.primaryStore.prefetch([1],()=>{let I=performance.now();I-C>5e3&&Xr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(I-C)+"ms"),y(I-C)})}),i;for(let y of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(y.value?.time){i=y.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:y,value:C}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!C)continue;if(a){if(y>a+t)break}else a=y;d=y;let{metrics:I,threadId:k}=C;for(let J of I||[]){let{path:G,method:H,type:X,metric:W,count:ue,total:ce,distribution:te,threads:ye,...Ae}=J;ue||(ue=1);let Ye=W+(G?"-"+G:"");H!==void 0&&(Ye+="-"+H),X!==void 0&&(Ye+="-"+X);let qe=c.get(Ye);if(qe){if(qe.threads){let tr=qe.threads[k];if(tr)qe=tr;else{qe.threads[k]={...Ae};continue}}qe.count||(qe.count=1);let Ar=qe.count;for(let tr in Ae){let Wr=Ae[tr];typeof Wr=="number"&&(qe[tr]=(qe[tr]*Ar+Wr*ue)/(Ar+ue))}qe.count+=ue,ce>=0&&(qe.total+=ce,qe.ratio=qe.total/qe.count)}else qe={period:t,...J},delete qe.distribution,c.set(Ye,qe),qe.byThread&&(qe.threads=[],qe.threads[k]={...Ae},u.push(qe));if(te){te=te.map(tr=>typeof tr=="number"?{value:tr,count:1}:tr);let Ar=l.get(Ye);Ar?Ar.push(...te):l.set(Ye,te)}}await H0()}for(let y of u){let{path:C,method:I,type:k,metric:J,count:G,total:H,distribution:X,threads:W,...ue}=y;W=W.filter(ce=>ce);for(let ce in ue){if(typeof y[ce]!="number")continue;let te=0;for(let ye of W){let Ae=ye[ce];typeof Ae=="number"&&(te+=Ae)}y[ce]=te}y.count=W.length,delete y.threads,delete y.byThread}for(let[y,C]of l){let I=c.get(y);C.sort((tr,Wr)=>tr.value>Wr.value?1:-1);let k=I.count-1,J=[],G=0,H=0,X;for(let tr of B0){let Wr=k*tr;for(;G<Wr;)X=C[H++],G+=X.count,H===1&&G--;let vr=C[H>1?H-2:0];X||(X=C[0]),J.push(X.value-(X.value-vr.value)*(G-Wr)/X.count)}let[W,ue,ce,te,ye,Ae,Ye,qe,Ar]=J;Object.assign(I,{p1:W,p10:ue,p25:ce,median:te,p75:ye,p90:Ae,p95:Ye,p99:qe,p999:Ar})}let f;for(let[,y]of c)y.time=d,Bu(n,y),f=!0;if(f)for(let y of x0)y(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let y={metric:Fo.MAIN_THREAD_UTILIZATION,idle:p-b0,active:h-A0,taskQueueLatency:await s,time:m,...process.memoryUsage()};Bu(n,y)}b0=p,A0=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Xr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=k0(j_,E);Xr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=j_.time?m-j_.time:t,g.cpuUtilization=F0(g,g.period);let R={metric:Fo.RESOURCE_USAGE,...g};Bu(n,R),j_=E;let S=at();y0(n,S),y0(n,{system:S.system}),R0(n,S),R0(n,{system:S.system})}async function I0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function IA(){return w0||(w0=Ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function G0(){return N0||(N0=Ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function dZ(){q0=!0;let e=(0,qm.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await cZ(bA,e),await I0(IA(),lZ),await I0(G0(),uZ)},Math.min(e/2,2147483647)).unref()}function $0(e,t){let r=e.report;r.threadId=t?.threadId||il.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(C0+=n.mean*n.count);r.totalBytesProcessed=C0,t&&(r.metrics.push({metric:Fo.UTILIZATION,...t.performance.eventLoopUtilization(O0.get(t))}),O0.set(t,t.performance.eventLoopUtilization())),r.id=(0,RA.getNextMonotonicTime)(),IA().primaryStore.put(r.id,r),q0||dZ(),fZ&&(V0=pZ(r))}async function pZ(e){if(await V0,!ka){let r=(0,Hm.dirname)(tZ());try{ka=await(0,yA.open)((0,Hm.join)(r,"analytics.log"),"r+")}catch{ka=await(0,yA.open)((0,Hm.join)(r,"analytics.log"),"w+")}}let t=(await ka.stat()).size;if(t>mZ){let r=Buffer.alloc(t);await ka.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ka.write(r,{position:0}),await ka.truncate(r.length),t=r.length}await ka.write(JSON.stringify(e)+`
|
|
14
14
|
`,t)}function wA(e){e&&x0.push(e)}var il,P0,L0,Hm,yA,RA,qm,D0,tZ,rZ,Xr,Q_,M0,Gm,TA,bA,v0,U0,x0,B0,b0,A0,j_,H0,lZ,uZ,w0,N0,q0,C0,O0,fZ,V0,ka,mZ,rs=se(()=>{il=require("worker_threads"),P0=b(nt());we();L0=b(Q()),Hm=require("path"),yA=require("fs/promises"),RA=b(Mn()),qm=b(me());q();Fr();D0=b(require("node:fs"));gA();SA();({getLogFilePath:tZ,forComponent:rZ}=L0.default);setTimeout(()=>{Promise.resolve().then(()=>T0())},1e3);Xr=rZ("analytics").conditional;(0,qm.initSync)();Q_=new Map,M0=(0,qm.get)(F.ANALYTICS_AGGREGATEPERIOD)>-1;o(nZ,"setAnalyticsEnabled");o(sZ,"recordExistingAction");o(iZ,"recordNewAction");o(Ve,"recordAction");ve.recordAnalytics=Ve;o(Zr,"recordActionBinary");TA=0,bA=1e3,v0="analytics-report",U0=[],x0=[];o($m,"addAnalyticsListener");B0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(oZ,"sendAnalytics");o(AA,"recordHostname");o(Bu,"storeMetric");o(F0,"calculateCPUUtilization");o(k0,"diffResourceUsage");o(aZ,"storeTableSizeMetrics");o(y0,"storeDBSizeMetrics");o(R0,"storeVolumeMetrics");o(cZ,"aggregation");b0=0,A0=0,j_={userCPUTime:0,systemCPUTime:0},H0=o(()=>new Promise(setImmediate),"rest");o(I0,"cleanup");lZ=36e5,uZ=31536e6;o(IA,"getRawAnalyticsTable");o(G0,"getAnalyticsTable");(0,P0.setChildListenerByType)(v0,$0);o(dZ,"startScheduledTasks");C0=0,O0=new Map,fZ=!1;o($0,"recordAnalytics");mZ=1e6;o(pZ,"logAnalytics");o(wA,"onAnalyticsAggregate")});var j0={};Re(j0,{ENTRY:()=>EZ,HAS_EXPIRATION:()=>eg,HAS_RESIDENCY_ID:()=>DA,HAS_STRUCTURE_UPDATE:()=>tg,LAST_TIMESTAMP_PLACEHOLDER:()=>Bm,LOCAL_TIMESTAMP:()=>hZ,METADATA:()=>Hu,NEW_TIMESTAMP_PLACEHOLDER:()=>Y0,NO_TIMESTAMP:()=>NA,PENDING_LOCAL_TIME:()=>MA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>pA,RecordEncoder:()=>LA,TIMESTAMP_ASSIGN_LAST:()=>gZ,TIMESTAMP_ASSIGN_NEW:()=>W0,TIMESTAMP_ASSIGN_PREVIOUS:()=>z0,TIMESTAMP_PLACEHOLDER:()=>X_,TIMESTAMP_RECORD_PREVIOUS:()=>CA,entryMap:()=>Ha,handleLocalTimeForGets:()=>rg,lastMetadata:()=>ct,recordUpdater:()=>vA,removeEntry:()=>al});function yZ(){return Km[0]=Km[0]^64,_Z.getFloat64(0)}function rg(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,ct=null;let l=r.call(this,a,c);return l&&(ct&&(l.metadataFlags=ct[Hu],l.localTime=ct.localTime,l.residencyId=ct.residencyId,l.size=ct.size,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l.value&&Ha.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){ct=null;let l=n.call(this,a,c);return ct&&l&&(Ha.set(l,ct),ct=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(ct&&(l.metadataFlags=ct[Hu],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,ol.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<ol.length;u++){let d=ol[u].deref();(!d||d.isDone||d.isCommitted)&&ol.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function vA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?ku=i?.localTime?CA|z0:NA:ku=l?i?.localTime?CA|16384:W0|16384:NA;let p=u?.expiresAt;if(p>=0&&(c|=eg),Vm=c,OA=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:ku>0},E,g=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(PA=S,Vm|=DA,g|=tl),R!==S&&(g|=rl,R||(R=0)),c&eg&&(g|=km),u?.originatingOperation&&(g|=Fm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Jr&&(r.getBinaryFast(i.localTime)||Ba(i.value));let y;if(s!==void 0&&(y=D_(()=>e.put(n,s,h),n,e.rootStore),Xc&&(g|=Jr)),l){let C=u?.user?.username;if(m&&(D_(()=>e.encoder.encode(m),n,e.rootStore),Xc&&(g|=Jr)),e.encoder.hasStructureUpdate&&(g|=tg,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,k=r.get(I);if(k){let J=At(k).previousLocalTime;return y=r.put(I,nl(a,t,n,J,u?.nodeId??server.replication.getThisNodeId(r)??0,C,d,Fu,g,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?Y0:Bm,nl(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,C,d,Fu,g,S,R,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&SZ.has(d)&&Ve(Fu?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function al(e,t,r){if(t)return t.value&&t.metadataFlags&Jr&&!e.auditStore.getBinaryFast(t.localTime)&&Ba(t.value),e.remove(t.key,r)}var K0,Z_,X_,Bm,pA,Y0,hZ,Hu,EZ,Km,_Z,NA,W0,gZ,z0,CA,eg,DA,MA,tg,SZ,Ha,TZ,Fu,ku,Vm,OA,PA,ct,LA,ol,sl=se(()=>{K0=require("msgpackr");Hi();Z_=b(Q());ts();ts();rs();X_=new Uint8Array([1,1,1,1,4,64,0,0]),Bm=new Uint8Array([1,1,1,1,1,0,0,0]),pA=new Uint8Array([1,1,1,1,3,64,0,0]),Y0=new Uint8Array([1,1,1,1,0,64,0,0]),hZ=Symbol("local-timestamp"),Hu=Symbol("metadata"),EZ=Symbol("entry"),Km=new Uint8Array(8),_Z=new DataView(Km.buffer,0,8),NA=0,W0=0,gZ=1,z0=3,CA=4,eg=16,DA=32,MA=1,tg=256,SZ=new Set(["put","patch","delete","message","publish"]),Ha=new WeakMap,ku=0,Vm=-1,OA=-1,PA=0,ct=null,LA=class extends K0.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Ha.get(this)?.version}getExpiresAt(){return Ha.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(ku||Vm>=0){let c=0,l=ku;l&&(c+=8,ku=0);let u=Vm,d=OA,f=PA;u>=0&&(c+=4,Vm=-1,d>=0&&(c+=8,OA=-1),f&&(c+=4,PA=0));let m=TZ=n.call(this,i,a|2048|c);Fu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(X_[4]=l,X_[5]=l>>8,m.set(X_,p),p+=8),Xc&&(u|=Jr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|$_<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Fu=n.call(this,i,a),Fu};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){ct=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Km,0,c),c+=8;else for(let m=0;m<8;m++)Km[m]=t[c++];l=yZ(),i=t[c]}let u,d;i<32&&(i===$_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&eg&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&DA&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Bo(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ct={localTime:l,[Hu]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Bo(()=>super.decode(t,r),this.rootStore)}catch(c){return Z_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(yZ,"getTimestamp");o(rg,"handleLocalTimeForGets");ol=[];setInterval(()=>{for(let e=0;e<ol.length;e++){let t=ol[e].deref();!t||t.isDone||t.isCommitted?ol.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Z_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Z_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(vA,"recordUpdater");o(al,"removeEntry")});function BA(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?BA(f.conditions,f.operator,r,n,s,i,a,c):Vu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,p);return S?(C,I)=>y.some(k=>k(C,I)):(C,I)=>y.every(k=>k(C,I))}let g=(h.attribute||h[0])===r.primaryKey,R=Wm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=PZ(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Vu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new en.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],C=Ki(n.attributes,y);if(C.relationship){if(c.length<2)throw new en.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=C.definition?.tableClass||C.elements?.definition?.tableClass,k=new Map,J=Vu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,k);if(C.relationship.to){i[c[0]]=k;let G=!!Ki(I.attributes,C.relationship.to)?.elements;J=wZ(J,C,I.primaryStore,G,k)}if(C.relationship.from){let G=o(H=>(H?.key!==void 0&&(H=H.key),Vu({attribute:C.relationship.from,value:H},t,r,n,s,k)),"searchEntry");C.elements?(i[c[0]]=k,J=NZ(J,C,I.primaryStore,k,G)):J=J.flatMap(G)}return J}else if(c.length===1)c=c[0];else throw new en.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(FA[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=Vi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new en.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>vs.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,vs.MAX_SEARCH_KEY_LENGTH)+vs.OVERFLOW_MARKER,E=!1,R=Wm(e,n,null,i,d)),typeof p=="string"&&p.length>vs.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,vs.MAX_SEARCH_KEY_LENGTH)+vs.OVERFLOW_MARKER,h=!0,R=R??Wm(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new en.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new en.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new en.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new en.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??Wm(e,n,null,i,d),!R)throw new en.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(S).map(R?function({key:C,value:I}){return this?.isSync?I&&R(I)?C:Ga.SKIP:new Promise((k,J)=>setImmediate(()=>{try{k(I&&R(I)?C:Ga.SKIP)}catch(G){J(G)}}))}:C=>C.value==null&&!(C.metadataFlags&(xn|qa))?Ga.SKIP:(a?._freezeRecords&&Object.freeze(C.value),C));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,a).map(y=>{if(typeof y=="object"&&y){let{key:C,...I}=y,k=n.primaryStore.getEntry(C);return a?._freezeRecords&&Object.freeze(k?.value),{...I,...k}}return y}):f.getRange(S).map(R?function({key:y,value:C}){let I;return typeof y=="string"&&y.length>vs.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(C):I={[c]:y},this.isSync?R(I)?C:Ga.SKIP:new Promise((k,J)=>setImmediate(()=>{try{k(R(I)?C:Ga.SKIP)}catch(G){J(G)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:C}){return this.isSync?C&&R(C)?y:Ga.SKIP:new Promise((I,k)=>setImmediate(()=>{try{I(C&&R(C)?y:Ga.SKIP)}catch(J){k(J)}}))})}function Ki(e,t){if(Array.isArray(t))if(t.length>1){let r=Ki(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Ki(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function wZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function NZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function Wm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=Ki(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=Wm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,R=o((y,C)=>{let I,k;return E?E.returnDirect?(I=E(y,r,C),k=ct):(k=E(y,r,C,!0),Array.isArray(k)?(I=k.map(J=>J.value),k=null):I=k?.value):I=y[d],{subObject:I,subEntry:k}},"getSubObject"),S=o((y,C)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let H of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:H};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let G=g(y);return g.idFilter&&(S.idFilter=g.idFilter),G}let{subObject:I,subEntry:k}=R(y,C);return I?Array.isArray(I)?(!n?.[d]&&n&&(n[d]={fromRecord(G){let H=R(G).subObject;return Array.isArray(H)?H.filter(h).map(X=>X[m.primaryKey]):H}}),I.some(h)):h(I,k):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),FA[a]||a){case vs.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Vi.compareKeys)(d,l[0])>=0&&(0,Vi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Vi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Vi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Vi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Vi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Vi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new en.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&sg(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function R(S){let y=S[d],C;if(typeof y!="object"||!y||p?C=f(y):Array.isArray(y)?C=y.some(f):y instanceof Date&&(C=f(y.getTime())),m&&(g++,!C&&!R.idFilter&&++E/g*i>h)){let I=Vu(e,r.transaction.getReadTxn(),!1,t),k;R.to?k=I.flatMap(G=>t.primaryStore.get(G)[R.to]):k=I.map(Ku);let J=new Set(k);R.idFilter=G=>J.has(Ku(G)),R.idFilter.idSet=J}return C}return o(R,"recordFilter"),s&&(R.idFilter=f),R}o(u,"attributeComparator")}function sg(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/ko(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=FA[n]||n,n===vs.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Ki(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=sg(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*ko(e.indices[i.relationship.from])/(ko(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=ko(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=AZ*ko(e.primaryStore)+1;else if(n==="between")r.estimated_count=bZ*ko(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=ko(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=RZ*ko(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function ig(e,t){if(e)if(Ho=e,Gu.lastIndex=0,CZ.test(e))try{if(t&&(t.conditions=[]),ai=t??new $u,Ym(ai,""),kr!==Ho.length&&Wt("Unable to parse query, unexpected end of query"),ai.parseErrorMessage&&(ai.parseError=new UA(t.parseErrorMessage),!t))throw ai.parseError;return ai}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${kr} in '${Ho}'`,ai.parseErrorMessage&&(r.message+=", "+ai.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Wt(e){let t=`${e} at position ${kr}`;ai.parseErrorMessage=ai.parseErrorMessage?ai.parseErrorMessage+", "+t:t}function Ym(e,t){let r=Gu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Ho);){kr=r.lastIndex;let[,d,f]=n;a?(d&&Wt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Wt(`invalid FIQL operator ${d}`),l=Q0):(l=decodeURIComponent,i="equals",d||Wt("attribute must be specified before equality comparator"),s=qu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=IZ[f],l=xA[i]?Q0:decodeURIComponent,d||Wt(`attribute must be specified before comparator ${f}`),s=qu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Wt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Wt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Wt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&J0(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else ng(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Wt("conditions/comparisons are not allowed in a property list"):e.push(qu(d)),s=void 0;break;case"(":Gu.lastIndex=kr;let p=Ym(d?[]:new $u,")");switch(d){case"":ng(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Wt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Wt("group by is not implemented yet");case"sort":e.sort=X0(p);break;default:Wt(`unknown query function call ${d}`)}Ho[kr]===","?r.lastIndex=++kr:a=!0,s=null;break;case"{":e.conditions&&Wt("property sets are not allowed in a queries"),d||Wt("property sets must have a defined parent property name"),Gu.lastIndex=kr,m=Ym([],"}"),m.name=d,e.push(m),Ho[kr]===","?r.lastIndex=++kr:a=!0;break;case"[":if(Gu.lastIndex=kr,d?(m=Ym(new $u,"]"),m.name=d):m=Ym(e.conditions?new $u:[],"]"),e.conditions)if(ng(e,u),Ho[kr]==="="){l=decodeURIComponent,i="equals",s=qu(d),r.lastIndex=++kr;break}else e.conditions.push(m),s=null;else e.push(m);Ho[kr]===","?r.lastIndex=++kr:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&J0(h,d),ng(e,u),e.conditions.push(h)}else d&&Wt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(qu(d));return e}else Wt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Wt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?OZ:Gu,r.lastIndex=kr),kr===Ho.length)return e}t&&Wt(`expected '${t}', but encountered end of string`)}function ng(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Wt("Can not mix operators within a condition grouping"):e.operator=t)}function qu(e){return e.indexOf(".")>-1?e.split(".").map(qu):decodeURIComponent(e)}function Q0(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new en.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function J0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new en.ClientError("wildcard can only be used at the end of a string")}function X0(e){let t=Z0(e[0]);return e.length>1&&(t.next=X0(e.slice(1))),t}function Z0(e){if(Array.isArray(e)){let t=Z0(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}Wt(`Unknown sort type ${e}`)}function Ku(e){return Array.isArray(e)?e.join("\0"):e}function ko(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function PZ(e,t,r){return t*r/ko(e)}var en,vs,Vi,Ga,RZ,bZ,AZ,IZ,xA,FA,UA,CZ,Gu,OZ,kr,ai,Ho,$u,og=se(()=>{en=b(_e()),vs=b(Yt()),Vi=require("ordered-binary"),Ga=require("lmdb");ag();sl();RZ=.3,bZ=.1,AZ=.05,IZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},xA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(BA,"executeConditions");o(Vu,"searchByIndex");o(Ki,"findAttribute");o(wZ,"joinTo");o(NZ,"joinFrom");FA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(Wm,"filterByType");o(sg,"estimateCondition");UA=class extends en.Violation{static{o(this,"SyntaxViolation")}},CZ=/[()[\]|!<>.]|(=\w*=)/,Gu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,OZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(ig,"parseQuery");o(Wt,"recordError");o(Ym,"parseBlock");o(ng,"assignOperator");o(qu,"decodeProperty");o(Q0,"typedDecoding");o(J0,"wildcardDecoding");o(X0,"toSortObject");o(Z0,"toSortEntry");$u=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Ku,"flattenKey");o(ko,"estimatedEntryCount");o(PZ,"intersectionEstimate")});var ex,ci,cg=se(()=>{ex=b(ii()),ci=class extends URLSearchParams{static{o(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,ex._assignPackageExport)("Resource",Resource)});var ix={};Re(ix,{MultiPartId:()=>lg,Resource:()=>Hr,contextStorage:()=>Wu,snakeCase:()=>DZ,transformForSelect:()=>zu});function DZ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function tx(e,t){if(cl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(cl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new lg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){cl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return cl=!0,null;e[e.length-1]==="/"&&(cl=!0)}return t.coerceId(decodeURIComponent(e))}function Bn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof Po?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Yu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new ci,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ci,l.id=c,c==null&&(u=!0);l||(l=new ci,l.id=c),u&&(l.isCollection=!0);let f;a||(a=Wu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=o(E=>Wu.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return bt(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(R=>{if(!R)throw new Yu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new Yu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function ns(e,t){let r=new Yu.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function kA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function zu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):kA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(kA(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(kA(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=zu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var rx,nx,Yu,sx,Wu,LZ,Hr,cl,lg,$a=se(()=>{rx=require("crypto");Rm();Pu();nx=b(ii()),Yu=b(_e());xa();og();sx=require("async_hooks");cg();Wu=new sx.AsyncLocalStorage,LZ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Hr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Bn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=zu(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Bn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):ns(t,"put")},{hasContent:!0,type:"update"});static patch=Bn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):ns(t,"patch")},{hasContent:!0,type:"update"});static delete=Bn(function(t,r,n,s){return t.delete?t.delete(r):ns(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,rx.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Wu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),bt(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):ns(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Bn(function(t,r,n,s){return t.invalidate?t.invalidate(r):ns(t,"delete")},{hasContent:!1,type:"update"});static post=Bn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Bn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Bn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):ns(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Bn(function(t,r,n,s){return t.subscribe?t.subscribe(r):ns(t,"subscribe")},{type:"read"});static publish=Bn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):ns(t,"publish")},{hasContent:!0,type:"create"});static search=Bn(function(t,r,n){let s=t.search?t.search(r):ns(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=zu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Bn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):ns(t,"search")},{hasContent:!0,type:"read"});static copy=Bn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):ns(t,"copy")},{hasContent:!0,type:"create"});static move=Bn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):ns(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;ns(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return ig(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&LZ[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:tx(t,this),isCollection:cl}}let i=tx(t,this);return cl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Zn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Zn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,nx._assignPackageExport)("Resource",Hr);o(DZ,"snakeCase");o(tx,"pathToId");lg=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Bn,"transactional");o(ns,"missingMethod");o(kA,"selectFromObject");o(zu,"transformForSelect")});var ll,HA=se(()=>{ll=class{static{o(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 GA={};Re(GA,{Resources:()=>ju,keyArrayToString:()=>Qu,resetResources:()=>MZ,resources:()=>Us});function MZ(){return Us=new ju,ve.resources=Us,Us}function Qu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var ox,ax,ju,Us,Va=se(()=>{xa();HA();ox=b(Q()),ax=b(_e());Fr();ju=class extends Map{static{o(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:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new ax.ServerError(`Conflicting paths for ${t}`);ox.default.error(c),i.Resource=new ll(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(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 bt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(MZ,"resetResources");o(Qu,"keyArrayToString")});function VA(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=lx,vZ(e.primaryStore,e.auditStore)):(c=cx,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{ux(cx[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[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=Qu(t);let d=new $A(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 ux(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),dx(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=At(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Qu(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,qA.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,qA.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 vZ(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=lx[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{ux(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function dx(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function fx(e){return e.nextTransaction||(VA({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),dx(e)),e.nextTransaction}var qA,cx,lx,$A,KA=se(()=>{qA=b(Q());Pu();Va();Hi();cx=Object.create(null),lx=Object.create(null);o(VA,"addSubscription");$A=class extends Zn{static{o(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"}}};o(ux,"notifyFromTransactionData");o(vZ,"listenToCommits");o(dx,"nextTransaction");o(fx,"whenNextTransaction")});var px=v((zCe,mx)=>{"use strict";var YA=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};mx.exports=YA});var Ex=v((QCe,hx)=>{"use strict";var WA=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};hx.exports=WA});var zm=v(gx=>{"use strict";var _x=me(),UZ=(q(),M(z)),{RecordEncoder:xZ}=(sl(),M(j0));_x.initSync();var BZ=_x.get(UZ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,zA=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=BZ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:xZ})}};gx.OpenDBIObject=zA});var jm=v((eOe,Sx)=>{"use strict";var ss=me(),xs=(q(),M(z));ss.initSync();var ug=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=ss.get(xs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ss.get(xs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ss.get(xs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",ss.get(xs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=ss.get(xs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),ss.get(xs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=ss.get(xs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),ss.get(xs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=ss.get(xs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),ss.get(xs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=ss.get(xs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=ss.get(xs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};Sx.exports=ug;ug.MAX_DBS=1e4});var St=v((rOe,Ox)=>{"use strict";var QA=require("lmdb"),li=require("fs-extra"),is=require("path"),dg=Mn(),Rx=Q(),Fn=zr().LMDB_ERRORS_ENUM,fg=Ex(),{OpenDBIObject:JA}=zm(),bx=jm(),Ka=Yt(),Tx=(q(),M(z)),{table:FZ,resetDatabases:kZ}=(we(),M(mt)),yx=me(),ui=Ka.INTERNAL_DBIS_NAME,Ax=Ka.DBI_DEFINITION_NAME,HZ="data.mdb",GZ="lock.mdb",Qm=".mdb",qZ="-lock",jA=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Bs(t,r),this.key_type=this.dbi[Ka.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ka.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new QA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function mg(e,t){if(e===void 0)throw new Error(Fn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Fn.ENV_NAME_REQUIRED)}o(mg,"pathEnvNameValidation");async function XA(e,t,r=!0){try{await li.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Fn.INVALID_BASE_PATH):n}try{let n=is.join(e,t+Qm);return await li.access(n,li.constants.R_OK|li.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await li.access(is.join(e,t,HZ),li.constants.R_OK|li.constants.F_OK),is.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Fn.INVALID_ENVIRONMENT)}else throw new Error(Fn.INVALID_ENVIRONMENT);throw n}}o(XA,"validateEnvironmentPath");function pg(e,t){if(dg.validateEnv(e),t===void 0)throw new Error(Fn.DBI_NAME_REQUIRED)}o(pg,"validateEnvDBIName");async function $Z(e,t,r=!1,n=!1){mg(e,t);let s=is.basename(e);t=t.toString();let i=yx.get(Tx.CONFIG_PARAMS.DATABASES);i||yx.setProperty(Tx.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await XA(e,t,n),Ix(e,t,r)}catch(a){if(a.message===Fn.INVALID_ENVIRONMENT){let c=is.join(e,t);await li.mkdirp(n?c:e);let l=new bx(n?c:c+Qm,!1),u=QA.open(l);u.dbis=Object.create(null);let d=new JA(!1);u.openDB(ui,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=ZA(e,t,r);return u[Ka.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o($Z,"createEnvironment");async function VZ(e,t,r,n=!0){mg(e,t),t=t.toString();let s=is.join(e,t);return FZ({table:t,database:is.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(VZ,"copyEnvironment");async function Ix(e,t,r=!1){mg(e,t),t=t.toString();let n=ZA(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await XA(e,t),i=is.join(e,t+Qm),a=s!=i,c=new bx(s,a),l=QA.open(c);l.dbis=Object.create(null);let u=Nx(l);for(let d=0;d<u.length;d++)Bs(l,u[d]);return l[Ka.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(Ix,"openEnvironment");async function KZ(e,t,r=!1){mg(e,t),t=t.toString();let n=is.join(e,t+Qm),s=await XA(e,t);if(global.lmdb_map!==void 0){let i=ZA(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await wx(a),delete global.lmdb_map[i]}}await li.remove(s),await li.remove(s===n?s+qZ:is.join(is.dirname(s),GZ))}o(KZ,"deleteEnvironment");async function wx(e){dg.validateEnv(e);let t=e[Ka.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(wx,"closeEnvironment");function ZA(e,t,r=!1){let s=`${is.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(ZA,"getCachedEnvironmentName");function YZ(e){dg.validateEnv(e);let t=Object.create(null),r=Bs(e,ui);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ui)try{t[n]=Object.assign(new fg,s)}catch{Rx.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(YZ,"listDBIDefinitions");function Nx(e){dg.validateEnv(e);let t=[],r=Bs(e,ui);for(let{key:n}of r.getRange({start:!1}))n!==ui&&t.push(n);return t}o(Nx,"listDBIs");function WZ(e,t){let n=Bs(e,ui).getEntry(t),s=new fg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Rx.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(WZ,"getDBIDefinition");function Cx(e,t,r,n=!r){if(pg(e,t),t=t.toString(),t===ui)throw new Error(Fn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Bs(e,t)}catch(s){if(s.message===Fn.DBI_DOES_NOT_EXIST){let i=new JA(r,n===!0),a=e.openDB(t,i),c=new fg(r===!0,n);return a[Ax]=c,Bs(e,ui).putSync(t,c),e.dbis[t]=a,a}throw s}}o(Cx,"createDBI");function Bs(e,t){if(pg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ui?r=WZ(e,t):r=new fg,r===void 0)throw new Error(Fn.DBI_DOES_NOT_EXIST);let n;try{let s=new JA(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Fn.DBI_DOES_NOT_EXIST):s}return n[Ax]=r,e.dbis[t]=n,n}o(Bs,"openDBI");function zZ(e,t){pg(e,t),t=t.toString();let r=Bs(e,t),n=r.getStats();return r[Ka.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(zZ,"statDBI");async function jZ(e,t){try{let r=is.join(e,t+Qm);return(await li.stat(r)).size}catch{throw new Error(Fn.INVALID_ENVIRONMENT)}}o(jZ,"environmentDataSize");function QZ(e,t){if(pg(e,t),t=t.toString(),t===ui)throw new Error(Fn.CANNOT_DROP_INTERNAL_DBIS_NAME);Bs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Bs(e,ui).removeSync(t)}o(QZ,"dropDBI");function JZ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Bs(e,i)}catch(a){if(a.message===Fn.DBI_DOES_NOT_EXIST)Cx(e,i,i!==t,i===t),n=!0;else throw a}}n&&kZ()}o(JZ,"initializeDBIs");Ox.exports={openDBI:Bs,openEnvironment:Ix,createEnvironment:$Z,listDBIs:Nx,listDBIDefinitions:YZ,createDBI:Cx,dropDBI:QZ,statDBI:zZ,deleteEnvironment:KZ,initializeDBIs:JZ,TransactionCursor:jA,environmentDataSize:jZ,copyEnvironment:VZ,closeEnvironment:wx}});var Dx=v((sOe,Lx)=>{"use strict";var eI=St(),XZ=Q(),Px=zr().LMDB_ERRORS_ENUM;Lx.exports=ZZ;async function ZZ(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await eI.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==Px.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await eI.closeEnvironment(global.lmdb_map[n]),await eI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Px.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){XZ.error(t)}}o(ZZ,"cleanLMDBMap")});var Wi=v((oOe,vx)=>{"use strict";var Mx=oe(),e9=(q(),M(z)),Ju=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Yi=require("joi"),Ya={schema_format:{pattern:Ju,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},t9=Yi.alternatives(Yi.string().min(1).max(Ya.schema_length.maximum).pattern(Ju).messages({"string.pattern.base":"{:#label} "+Ya.schema_format.message}),Yi.number(),Yi.array()).required(),r9=Yi.alternatives(Yi.string().min(1).max(Ya.schema_length.maximum).pattern(Ju).messages({"string.pattern.base":"{:#label} "+Ya.schema_format.message}),Yi.number()),n9=Yi.alternatives(Yi.string().min(1).max(Ya.schema_length.maximum).pattern(Ju).messages({"string.pattern.base":"{:#label} "+Ya.schema_format.message}),Yi.number()).required();function s9(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Ya.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Ju.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(s9,"checkValidTable");function i9(e,t){return Mx.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(i9,"validateSchemaExists");function o9(e,t){let r=t.state.ancestors[0].schema;return Mx.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(o9,"validateTableExists");function a9(e,t){return e.toLowerCase()===e9.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(a9,"validateSchemaName");vx.exports={commonValidators:Ya,schemaRegex:Ju,hdbSchemaTable:t9,validateSchemaExists:i9,validateTableExists:o9,validateSchemaName:a9,checkValidTable:s9,hdbDatabase:r9,hdbTable:n9}});var rI=v((cOe,xx)=>{var{hdbTable:c9,hdbDatabase:Ux}=Wi(),l9=ft(),tI=require("joi"),u9={undefined:"undefined",null:"null"},d9=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||u9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),f9=tI.object({database:Ux,schema:Ux,table:c9,records:tI.array().items(tI.object().custom(d9)).required()});xx.exports=function(e){return l9.validateBySchema(e,f9)}});var Fx=v((uOe,Bx)=>{"use strict";var nI=class{static{o(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};Bx.exports=nI});var Hx=v((fOe,kx)=>{"use strict";var sI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};kx.exports=sI});var qx=v((pOe,Gx)=>{"use strict";var iI=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};Gx.exports=iI});var Vx=v((EOe,$x)=>{"use strict";var oI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};$x.exports=oI});var dl=v((yOe,Wx)=>{"use strict";var m9=St(),p9=Hx(),h9=qx(),E9=Vx(),zi=Mn(),Jm=zr().LMDB_ERRORS_ENUM,_9=Yt(),Go=(q(),M(z)),g9=oe(),S9=require("uuid"),gOe=require("lmdb"),{handleHDBError:T9,hdbErrors:y9}=_e(),{OVERFLOW_MARKER:SOe,MAX_SEARCH_KEY_LENGTH:TOe}=_9,Kx=me();Kx.initSync();var hg=Kx.get(Go.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),aI=Go.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ul=Go.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function R9(e,t,r,n,s=zi.getNextMonotonicTime()){dI(e,t,r,n),cI(e,t,r);let i=new p9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];Yx(u,!0,s);let d=b9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return lI(a,c,n,i,s)}o(R9,"insertRecords");function b9(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Go.FUNC_VAL],n[a]=c)}let l=zi.getIndexedValues(c),u=e.dbis[a];if(l){hg&&u.prefetch(l.map(d=>({key:d,value:s})),Eg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}hg&&e.dbis[t].prefetch([s],Eg),e.dbis[t].put(s,n,n[ul])})}o(b9,"insertRecord");function A9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(A9,"removeSkippedRecords");function Yx(e,t,r){let n=r>0;(n||!Number.isInteger(e[ul]))&&(e[ul]=r||(r=zi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[aI]))&&(e[aI]=r||zi.getNextMonotonicTime()):delete e[aI]}o(Yx,"setTimestamps");function cI(e,t,r){r.indexOf(Go.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Go.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Go.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Go.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),m9.initializeDBIs(e,t,r)}o(cI,"initializeTransaction");async function I9(e,t,r,n,s=zi.getNextMonotonicTime()){dI(e,t,r,n),cI(e,t,r);let i=new h9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=uI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return lI(c,l,n,i,s,a)}o(I9,"updateRecords");async function w9(e,t,r,n,s=zi.getNextMonotonicTime()){try{dI(e,t,r,n)}catch(l){throw T9(l,l.message,y9.HTTP_STATUS_CODES.BAD_REQUEST)}cI(e,t,r);let i=new E9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;g9.isEmpty(u[t])?(d=S9.v4(),u[t]=d):d=u[t];let f=uI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return lI(a,c,n,i,s)}o(w9,"upsertRecords");async function lI(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||zi.getNextMonotonicTime(),A9(r,i),n}o(lI,"finalizeWrite");function uI(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(Yx(r,!d,a),Number.isInteger(r[ul])&&u[ul]>r[ul])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let R=u[h];if(typeof E=="function"){let y=E([[u]]);Array.isArray(y)&&(E=y[0][Go.FUNC_VAL],r[h]=E)}if(E===R)continue;let S=zi.getIndexedValues(R);if(S){hg&&g.prefetch(S.map(y=>({key:y,value:n})),Eg);for(let y=0,C=S.length;y<C;y++)g.remove(S[y],n)}if(S=zi.getIndexedValues(E),S){hg&&g.prefetch(S.map(y=>({key:y,value:n})),Eg);for(let y=0,C=S.length;y<C;y++)g.put(S[y],n)}}let p={...u,...r};c.put(n,p,p[ul])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:uI(e,t,r,n,s,i,a))}o(uI,"updateUpsertRecord");function N9(e,t,r){if(zi.validateEnv(e),t===void 0)throw new Error(Jm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Jm.WRITE_ATTRIBUTES_REQUIRED):new Error(Jm.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(N9,"validateBasic");function dI(e,t,r,n){if(N9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Jm.RECORDS_REQUIRED):new Error(Jm.RECORDS_MUST_BE_ARRAY)}o(dI,"validateWrite");function Eg(){}o(Eg,"noop");Wx.exports={insertRecords:R9,updateRecords:I9,upsertRecords:w9}});var ji=v((bOe,C9)=>{C9.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var jx=v((AOe,zx)=>{"use strict";var O9=require("uuid"),fI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||O9.v4(),this.schema_table=`${this.schema}.${this.table}`}};zx.exports=fI});var _g=v((wOe,Qx)=>{"use strict";var P9=jx(),mI=class extends P9{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};Qx.exports=mI});var Xx=v((COe,Jx)=>{"use strict";Jx.exports=D9;var L9="inserted";function D9(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===L9?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(D9,"returnObject")});var gg=v((LOe,eB)=>{"use strict";var M9=(q(),M(z)),pI=St(),v9=dl(),{getSystemSchemaPath:U9,getSchemaPath:x9}=Rt(),POe=ji(),{validateBySchema:B9}=ft(),Xm=require("joi"),F9=_g(),k9=Xx(),{handleHDBError:H9,hdbErrors:G9,ClientError:q9}=_e(),Zx=oe(),{HTTP_STATUS_CODES:$9}=G9,V9="inserted";eB.exports=K9;async function K9(e){let t=B9(e,Xm.object({database:Xm.string(),schema:Xm.string(),table:Xm.string().required(),attribute:Xm.string().required()}));if(t)throw new q9(t.message);let r=!e.skip_table_check&&Zx.checkGlobalSchemaTable(e.schema,e.table);if(r)throw H9(new Error,r,$9.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Zx.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new F9(e.schema,e.table,e.attribute,e.id);try{let i=await pI.openEnvironment(x9(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);pI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await pI.openEnvironment(U9(),M9.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await v9.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return k9(V9,c,{records:[s]},l)}catch(i){throw i}}o(K9,"lmdbCreateAttribute")});var Zm=v((vOe,rB)=>{"use strict";var qo=oe(),tB=Q(),MOe=rI(),{getDatabases:Y9}=(we(),M(mt)),{ClientError:fl}=_e();rB.exports=W9;function W9(e){if(qo.isEmpty(e))throw new fl("invalid update parameters defined.");if(qo.isEmptyOrZeroLength(e.schema))throw new fl("invalid schema specified.");if(qo.isEmptyOrZeroLength(e.table))throw new fl("invalid table specified.");if(!Array.isArray(e.records))throw new fl("records must be an array");let t=Y9()[e.schema]?.[e.table];if(qo.isEmpty(t))throw new fl(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&qo.isEmptyOrZeroLength(a[r]))throw tB.error("a valid hash attribute must be provided with update record:",a),new fl("a valid hash attribute must be provided with update record, check log for more info");if(!qo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw tB.error(`a valid hash value must be provided with ${e.operation} record:`,a),new fl(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!qo.isEmpty(a[r])&&a[r]!==""&&n.has(qo.autoCast(a[r]))&&(a.skip=!0),n.add(qo.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(W9,"insertUpdateValidate")});var Sg=v((xOe,sB)=>{"use strict";var nB=oe(),z9=(q(),M(z)),j9=Q(),Q9=gg(),J9=_g(),X9=$o(),{SchemaEventMsg:Z9}=os(),e7="already exists in";sB.exports=t7;async function t7(e,t,r){if(nB.isEmptyOrZeroLength(r))return r;let n=[];nB.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await r7(e,t.schema,t.name,i)})),s}o(t7,"lmdbCheckForNewAttributes");async function r7(e,t,r,n){let s=new J9(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await n7(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(e7))j9.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(r7,"createNewAttribute");async function n7(e){let t;return t=await Q9(e),X9.signalSchemaChange(new Z9(process.pid,z9.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(n7,"createAttribute")});var Xu=v((FOe,iB)=>{"use strict";var hI=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};iB.exports=hI});var aB=v((HOe,oB)=>{"use strict";var s7=Xu(),i7=(q(),M(z)).OPERATIONS_ENUM,EI=class extends s7{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(i7.INSERT,r,n,s,i),this.records=t}};oB.exports=EI});var lB=v((qOe,cB)=>{"use strict";var o7=Xu(),a7=(q(),M(z)).OPERATIONS_ENUM,_I=class extends o7{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(a7.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};cB.exports=_I});var dB=v((VOe,uB)=>{"use strict";var c7=Xu(),l7=(q(),M(z)).OPERATIONS_ENUM,gI=class extends c7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(l7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};uB.exports=gI});var mB=v((YOe,fB)=>{"use strict";var u7=Xu(),d7=(q(),M(z)).OPERATIONS_ENUM,SI=class extends u7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(d7.DELETE,n,s,t,i),this.original_records=r}};fB.exports=SI});var ep=v((jOe,_B)=>{"use strict";var zOe=require("path"),pB=St(),f7=aB(),m7=lB(),p7=dB(),h7=mB(),Zu=Yt(),hB=oe(),{CONFIG_PARAMS:E7}=(q(),M(z)),EB=me();EB.initSync();var Tg=(q(),M(z)).OPERATIONS_ENUM,{getTransactionAuditStorePath:_7}=Rt();_B.exports=g7;async function g7(e,t){if(EB.get(E7.LOGGING_AUDITLOG)===!1)return;let r=_7(e.schema,e.table),n=await pB.openEnvironment(r,e.table,!0),s=S7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){pB.initializeDBIs(n,Zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),hB.isEmpty(s.user_name)||n.dbis[Zu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Zu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(g7,"writeTransaction");function S7(e,t){let r=hB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Tg.INSERT)return new f7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Tg.UPDATE)return new m7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Tg.UPSERT)return new p7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Tg.DELETE)return new h7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(S7,"createTransactionObject")});var TI=v((XOe,gB)=>{"use strict";var T7=Zm(),JOe=Sm(),tp=(q(),M(z)),y7=Tm(),R7=dl().insertRecords,b7=St(),A7=Q(),I7=Sg(),{getSchemaPath:w7}=Rt(),N7=ep();gB.exports=C7;async function C7(e){try{let{schemaTable:t,attributes:r}=T7(e);y7(e,r,t.hash_attribute),e.schema!==tp.SYSTEM_SCHEMA_NAME&&(r.includes(tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await I7(e.hdb_auth_header,t,r),s=w7(e.schema,e.table),i=await b7.openEnvironment(s,e.table),a=await R7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await N7(e,a)}catch(c){A7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(C7,"lmdbCreateRecords")});var yB=v((ePe,TB)=>{"use strict";var SB=(q(),M(z)),O7=TI(),P7=Sm(),L7=require("fs-extra"),{getSchemaPath:D7}=Rt();TB.exports=M7;async function M7(e){let t=[{name:e.schema,createddate:Date.now()}],r=new P7(SB.SYSTEM_SCHEMA_NAME,SB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await O7(r),await L7.mkdirp(D7(e.schema))}o(M7,"lmdbCreateSchema")});var bB=v((rPe,RB)=>{"use strict";var yI=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};RB.exports=yI});var NB=v((aPe,wB)=>{"use strict";var AB=St(),RI=Mn(),bI=zr().LMDB_ERRORS_ENUM,v7=Yt(),IB=Q(),sPe=oe(),U7=require("lmdb"),x7=bB(),B7=(q(),M(z)),{OVERFLOW_MARKER:iPe,MAX_SEARCH_KEY_LENGTH:oPe}=v7,F7=B7.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function k7(e,t,r,n){if(RI.validateEnv(e),t===void 0)throw new Error(bI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(bI.IDS_REQUIRED):new Error(bI.IDS_MUST_BE_ITERABLE);try{let s=AB.listDBIs(e);AB.initializeDBIs(e,t,s);let i=new x7,a,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{a=r[m];let h=e.dbis[t].get(a);if(!h||n&&h[F7]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,U7.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let R=s[g];if(!h.hasOwnProperty(R)||R===t)continue;let S=e.dbis[R],y=h[R];if(y!=null)try{let C=RI.getIndexedValues(y);if(C)for(let I=0,k=C.length;I<k;I++)S.remove(C[I],a)}catch{IB.warn(`cannot delete from attribute: ${R}, ${y}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){IB.warn(h),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=RI.getNextMonotonicTime(),i}catch(s){throw s}}o(k7,"deleteRecords");wB.exports={deleteRecords:k7}});var rp=v((lPe,OB)=>{"use strict";var ed=oe(),H7=NB(),G7=St(),{getSchemaPath:q7}=Rt(),$7=ep(),V7=Q();OB.exports=K7;async function K7(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(ed.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(ed.isEmptyOrZeroLength(e.hash_values)&&!ed.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];ed.isEmpty(l)||e.hash_values.push(l)}}if(ed.isEmptyOrZeroLength(e.hash_values))return CB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(ed.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=q7(e.schema,e.table),i=await G7.openEnvironment(s,e.table),a=await H7.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await $7(e,a)}catch(c){V7.error(`unable to write transaction due to ${c.message}`)}return CB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(K7,"lmdbDeleteRecords");function CB(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}}o(CB,"createDeleteResponse")});var II=v((fPe,PB)=>{"use strict";var Y7=(q(),M(z)),dPe=Mn();function AI(e,t){let r=Object.create(null);if(t.length===1&&Y7.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(AI,"parseRow");function W7(e,t,r,n){let s=AI(r,e);n.push(s)}o(W7,"searchAll");function z7(e,t,r,n){let s=AI(r,e);n[t]=s}o(z7,"searchAllToMap");function j7(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(j7,"iterateDBI");function ml(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(ml,"pushResults");function Q7(e,t,r,n,s,i){t.toString().endsWith(e)&&ml(t,r,n,s,i)}o(Q7,"endsWith");function J7(e,t,r,n,s,i){t.toString().includes(e)&&ml(t,r,n,s,i)}o(J7,"contains");function X7(e,t,r,n,s,i){t>e&&ml(t,r,n,s,i)}o(X7,"greaterThanCompare");function Z7(e,t,r,n,s,i){t>=e&&ml(t,r,n,s,i)}o(Z7,"greaterThanEqualCompare");function eee(e,t,r,n,s,i){t<e&&ml(t,r,n,s,i)}o(eee,"lessThanCompare");function tee(e,t,r,n,s,i){t<=e&&ml(t,r,n,s,i)}o(tee,"lessThanEqualCompare");PB.exports={parseRow:AI,searchAll:W7,searchAllToMap:z7,iterateDBI:j7,endsWith:Q7,contains:J7,greaterThanCompare:X7,greaterThanEqualCompare:Z7,lessThanCompare:eee,lessThanEqualCompare:tee,pushResults:ml}});var td=v((_Pe,BB)=>{"use strict";var Wa=St(),pPe=Q(),as=Mn(),yg=Yt(),nr=zr().LMDB_ERRORS_ENUM,hPe=oe(),ree=(q(),M(z)),Rg=II(),{parseRow:nee}=Rg,EPe=require("lmdb"),{OVERFLOW_MARKER:LB,MAX_SEARCH_KEY_LENGTH:see}=yg;function DB(e,t,r,n=!1,s=void 0,i=void 0){return pl(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(DB,"iterateFullIndex");function np(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return pl(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(y=>({value:y}))):f.getRange(S)})}o(np,"iterateRangeBetween");function pl(e,t,r,n){let s=e.database||e,i=Wa.openDBI(s,r);i[yg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Wa.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(pl,"setupTransaction");function MB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(LB)){if(!s)if(r)s=Wa.openDBI(e,r);else{let l=Wa.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Wa.openDBI(e,l[u]),!s[yg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(MB,"getOverflowCheck");function iee(e,t,r,n=!1,s=void 0,i=void 0){if(as.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return pl(e,t,t,(a,c,l)=>(bg(r),r=sp(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>nee(u.value,r))))}o(iee,"searchAll");function oee(e,t,r,n=!1,s=void 0,i=void 0){if(as.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);bg(r),r=sp(e.database||e,r);let a=new Map;for(let{key:c,value:l}of DB(e,t,t,n,s,i))a.set(c,Rg.parseRow(l,r));return a}o(oee,"searchAllToMap");function aee(e,t,r=!1,n=void 0,s=void 0){if(as.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=DB(e,void 0,t,r,n,s),c=a.transaction,l=MB(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(aee,"iterateDBI");function cee(e,t){if(as.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return Wa.statDBI(e,t).entryCount}o(cee,"countAll");function lee(e,t,r,n,s=!1,i=void 0,a=void 0){return za(e,r,n),pl(e,t,r,(c,l,u,d)=>(n=as.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(lee,"equals");function uee(e,t,r){return za(e,t,r),Wa.openDBI(e,t).getValuesCount(r)}o(uee,"count");function dee(e,t,r,n,s=!1,i=void 0,a=void 0){return za(e,r,n),pl(e,null,r,(c,l)=>{n=as.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(dee,"startsWith");function fee(e,t,r,n,s=!1,i=void 0,a=void 0){return vB(e,t,r,n,s,i,a,!0)}o(fee,"endsWith");function vB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return za(e,r,n),pl(e,null,r,(l,u,d,f)=>{let m=MB(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(LB)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[yg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(vB,"contains");function mee(e,t,r,n,s=!1,i=void 0,a=void 0){za(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),np(e,t,r,n,l,s,i,a,!0,!1)}o(mee,"greaterThan");function pee(e,t,r,n,s=!1,i=void 0,a=void 0){za(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),np(e,t,r,n,l,s,i,a,!1,!1)}o(pee,"greaterThanEqual");function hee(e,t,r,n,s=!1,i=void 0,a=void 0){za(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),np(e,t,r,l,n,s,i,a,!1,!0)}o(hee,"lessThan");function Eee(e,t,r,n,s=!1,i=void 0,a=void 0){za(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),np(e,t,r,l,n,s,i,a,!1,!1)}o(Eee,"lessThanEqual");function _ee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(as.validateEnv(e),r===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(nr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(nr.END_VALUE_REQUIRED);if(n=as.convertKeyValueToWrite(n),s=as.convertKeyValueToWrite(s),n>s)throw new Error(nr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return np(e,t,r,n,s,i,a,c)}o(_ee,"between");function gee(e,t,r,n){as.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(bg(r),r=sp(s,r),n===void 0)throw new Error(nr.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=Rg.parseRow(c,r)),a}o(gee,"searchByHash");function See(e,t,r){as.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(nr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(See,"checkHashExists");function Tee(e,t,r,n,s=[]){return xB(e,t,r,n,s),UB(e,t,r,n,s).map(i=>i[1])}o(Tee,"batchSearchByHash");function yee(e,t,r,n,s=[]){xB(e,t,r,n,s);let i=new Map;for(let[a,c]of UB(e,t,r,n,s))i.set(a,c);return i}o(yee,"batchSearchByHashToMap");function UB(e,t,r,n,s=[]){return pl(e,t,t,(i,a,c)=>{r=sp(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,Rg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(UB,"batchHashSearch");function xB(e,t,r,n,s){if(as.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(bg(r),n==null)throw new Error(nr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(nr.IDS_MUST_BE_ITERABLE)}o(xB,"initializeBatchSearchByHash");function bg(e){if(!Array.isArray(e))throw e===void 0?new Error(nr.FETCH_ATTRIBUTES_REQUIRED):new Error(nr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(bg,"validateFetchAttributes");function za(e,t,r){if(as.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(nr.SEARCH_VALUE_REQUIRED);if(r?.length>see)throw new Error(nr.SEARCH_VALUE_TOO_LARGE)}o(za,"validateComparisonFunctions");function sp(e,t){return t.length===1&&ree.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Wa.listDBIs(e)),t}o(sp,"setGetWholeRowAttributes");BB.exports={searchAll:iee,searchAllToMap:oee,count:uee,countAll:cee,equals:lee,startsWith:dee,endsWith:fee,contains:vB,searchByHash:gee,setGetWholeRowAttributes:sp,batchSearchByHash:Tee,batchSearchByHashToMap:yee,checkHashExists:See,iterateDBI:aee,greaterThan:mee,greaterThanEqual:pee,lessThan:hee,lessThanEqual:Eee,between:_ee}});var rd=v((SPe,qB)=>{var FB=require("lodash"),kB=ft(),ze=require("joi"),Ree=oe(),{hdbSchemaTable:ip,checkValidTable:HB,hdbTable:GB,hdbDatabase:Ag}=Wi(),{handleHDBError:bee,hdbErrors:Aee}=_e(),{getDatabases:Iee}=(we(),M(mt)),{HTTP_STATUS_CODES:wee}=Aee,Nee=ze.object({database:Ag,schema:Ag,table:GB,attribute:ip,value:ze.any().required(),get_attributes:ze.array().min(1).items(ze.alternatives(ip,ze.object())).optional(),desc:ze.bool(),limit:ze.number().integer().min(1),offset:ze.number().integer().min(0)}),Cee=ze.object({database:Ag,schema:Ag,table:GB,operator:ze.string().valid("and","or").default("and").lowercase(),offset:ze.number().integer().min(0),limit:ze.number().integer().min(1),get_attributes:ze.array().min(1).items(ze.alternatives(ip,ze.object())).optional(),sort:ze.object({attribute:ze.alternatives(ip,ze.array().min(1)),descending:ze.bool().optional()}).optional(),conditions:ze.array().min(1).items(ze.alternatives(ze.object({operator:ze.string().valid("and","or").default("and").lowercase(),conditions:ze.array()}),ze.object({attribute:ze.alternatives(ip,ze.array().min(1)),comparator:ze.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:ze.when("comparator",{switch:[{is:"equals",then:ze.any()},{is:"between",then:ze.array().items(ze.alternatives([ze.string(),ze.number()])).length(2)}],otherwise:ze.alternatives(ze.string(),ze.number())}).required()}))).required()});qB.exports=function(e,t){let r=null;switch(t){case"value":r=kB.validateBySchema(e,Nee);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(HB("database",e.schema)),i(HB("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=kB.validateBySchema(e,Cee);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Ree.checkGlobalSchemaTable(e.schema,e.table);if(s)return bee(new Error,s,wee.NOT_FOUND);let a=Iee()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=o(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=FB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!FB.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var wI=v((yPe,$B)=>{"use strict";var Oee=St(),Pee=rd(),{getSchemaPath:Lee}=Rt();$B.exports=Dee;function Dee(e){let t=Pee(e,"hashes");if(t)throw t;let r=Lee(e.schema,e.table);return Oee.openEnvironment(r,e.table)}o(Dee,"initialize")});var NI=v((bPe,VB)=>{"use strict";var Mee=td(),vee=wI();VB.exports=Uee;async function Uee(e){let t=await vee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Mee.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(Uee,"lmdbGetDataByHash")});var nd=v((IPe,KB)=>{"use strict";var CI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};KB.exports=CI});var WB=v((CPe,YB)=>{"use strict";var NPe=nd(),xee=td(),Bee=wI();YB.exports=Fee;async function Fee(e){let t=await Bee(e),r=global.hdb_schema[e.schema][e.table];return xee.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(Fee,"lmdbSearchByHash")});var di=v((PPe,zB)=>{"use strict";var OI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};zB.exports=OI});var Ig=v((DPe,eF)=>{"use strict";var hn=td(),kee=St(),Hee=oe(),je=Yt(),hl=(q(),M(z)),Gee=ji(),jB=zr().LMDB_ERRORS_ENUM,{getSchemaPath:qee}=Rt(),Vo=hl.SEARCH_WILDCARDS;async function $ee(e,t,r){let n;e.schema===hl.SYSTEM_SCHEMA_NAME?n=Gee[e.table]:n=global.hdb_schema[e.schema][e.table];let s=ZB(e,n.hash_attribute,r,t);return JB(e,s,n.hash_attribute,r)}o($ee,"prepSearch");async function JB(e,t,r,n){let s=qee(e.schema,e.table),i=await kee.openEnvironment(s,e.table),a=XB(i,e,t,r),c=a.transaction||i;if([je.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,je.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,je.SEARCH_TYPES.SEARCH_ALL,je.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(Vee(e,r)===!1){let d=e.attribute;if(d===r)return n?QB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?QB(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?hn.batchSearchByHashToMap(c,r,e.get_attributes,u):hn.batchSearchByHash(c,r,e.get_attributes,u)}o(JB,"executeSearch");function XB(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case je.SEARCH_TYPES.EQUALS:s=hn.equals(e,i,t.attribute,t.value,a,c,l);break;case je.SEARCH_TYPES.CONTAINS:s=hn.contains(e,i,t.attribute,t.value,a,c,l);break;case je.SEARCH_TYPES.ENDS_WITH:case je.SEARCH_TYPES._ENDS_WITH:s=hn.endsWith(e,i,t.attribute,t.value,a,c,l);break;case je.SEARCH_TYPES.STARTS_WITH:case je.SEARCH_TYPES._STARTS_WITH:s=hn.startsWith(e,i,t.attribute,t.value,a,c,l);break;case je.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return hn.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case je.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return hn.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case je.SEARCH_TYPES.SEARCH_ALL:return hn.searchAll(e,n,t.get_attributes,a,c,l);case je.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return hn.searchAllToMap(e,n,t.get_attributes,a,c,l);case je.SEARCH_TYPES.BETWEEN:s=hn.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case je.SEARCH_TYPES.GREATER_THAN:case je.SEARCH_TYPES._GREATER_THAN:s=hn.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case je.SEARCH_TYPES.GREATER_THAN_EQUAL:case je.SEARCH_TYPES._GREATER_THAN_EQUAL:s=hn.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case je.SEARCH_TYPES.LESS_THAN:case je.SEARCH_TYPES._LESS_THAN:s=hn.lessThan(e,i,t.attribute,t.value,a,c,l);break;case je.SEARCH_TYPES.LESS_THAN_EQUAL:case je.SEARCH_TYPES._LESS_THAN_EQUAL:s=hn.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(XB,"searchByType");function QB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(QB,"createMapFromIterable");function Vee(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(Vee,"checkToFetchMore");function ZB(e,t,r,n){if(Hee.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),Vo.indexOf(s)>-1)return r===!0?je.SEARCH_TYPES.SEARCH_ALL_TO_MAP:je.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Vo[0])<0&&s.indexOf(Vo[1])<0)return c===!0?r===!0?je.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:je.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:je.SEARCH_TYPES.EQUALS;if(Vo.indexOf(i)>=0&&Vo.indexOf(a)>=0)return e.value=e.value.slice(1,-1),je.SEARCH_TYPES.CONTAINS;if(Vo.indexOf(i)>=0)return e.value=e.value.substr(1),je.SEARCH_TYPES.ENDS_WITH;if(Vo.indexOf(a)>=0)return e.value=e.value.slice(0,-1),je.SEARCH_TYPES.STARTS_WITH;if(s.includes(Vo[0])||s.includes(Vo[1]))return je.SEARCH_TYPES.EQUALS;throw new Error(jB.UNKNOWN_SEARCH_TYPE)}else switch(n){case hl.VALUE_SEARCH_COMPARATORS.BETWEEN:return je.SEARCH_TYPES.BETWEEN;case hl.VALUE_SEARCH_COMPARATORS.GREATER:return je.SEARCH_TYPES.GREATER_THAN;case hl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return je.SEARCH_TYPES.GREATER_THAN_EQUAL;case hl.VALUE_SEARCH_COMPARATORS.LESS:return je.SEARCH_TYPES.LESS_THAN;case hl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return je.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(jB.UNKNOWN_SEARCH_TYPE)}}o(ZB,"createSearchTypeFromSearchObject");eF.exports={executeSearch:JB,createSearchTypeFromSearchObject:ZB,prepSearch:$ee,searchByType:XB}});var rF=v((UPe,tF)=>{"use strict";var vPe=di(),Kee=rd(),Yee=oe(),Wee=(q(),M(z)),zee=Ig();tF.exports=jee;function jee(e,t){if(!Yee.isEmpty(t)&&Wee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Kee(e,"value");if(n)throw n;return zee.prepSearch(e,t,!0)}o(jee,"lmdbGetDataByValue")});var op=v((FPe,nF)=>{"use strict";var BPe=di(),Qee=rd(),Jee=oe(),Xee=(q(),M(z)),Zee=Ig();nF.exports=ete;async function ete(e,t){if(!Jee.isEmpty(t)&&Xee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Qee(e,"value");if(n)throw n;return Zee.prepSearch(e,t,!1)}o(ete,"lmdbSearchByValue")});var iF=v((GPe,sF)=>{"use strict";var HPe=Yt(),PI=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},LI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},DI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};sF.exports={SearchByConditionsObject:PI,SearchCondition:LI,SortAttribute:DI}});var uF=v((YPe,lF)=>{"use strict";var{SearchByConditionsObject:$Pe,SearchCondition:VPe}=iF(),tte=di(),rte=rd(),MI=td(),wg=Yt(),{Resource:KPe}=($a(),M(ix)),cF=Ig(),nte=II(),ste=require("lodash"),{getSchemaPath:ite}=Rt(),oF=St(),{handleHDBError:ote,hdbErrors:ate}=_e(),{HTTP_STATUS_CODES:cte}=ate,lte=1e8;lF.exports=ute;async function ute(e){let t=rte(e,"conditions");if(t)throw ote(t,t.message,cte.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=ite(e.schema,e.table),n=await oF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)oF.openDBI(n,u.attribute);let i=ste.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===wg.SEARCH_TYPES.EQUALS?u.estimated_count=MI.count(n,u.attribute,u.value):d===wg.SEARCH_TYPES.CONTAINS||d===wg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=lte}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await aF(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(cF.filterByType),f=d.length,m=MI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:a,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>nte.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await aF(a,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=MI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(ute,"lmdbSearchByConditions");async function aF(e,t,r,n){let s=new tte(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===wg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,cF.searchByType(e,s,i,n).map(a=>a.value)}o(aF,"executeConditionSearch")});var ap=v((zPe,dF)=>{"use strict";var dte=(q(),M(z)).OPERATIONS_ENUM,vI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=dte.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};dF.exports=vI});var UI=v((QPe,SF)=>{"use strict";var hF=di(),EF=ap(),_F=op(),gF=rp(),kn=(q(),M(z)),fF=oe(),mF=St(),{getTransactionAuditStorePath:fte,getSchemaPath:mte}=Rt(),pF=Q();SF.exports=pte;async function pte(e){try{if(fF.isEmpty(global.hdb_schema[e.schema])||fF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await hte(e),await Ete(e);let t=mte(e.schema,e.table);try{await mF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")pF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=fte(e.schema,e.table);await mF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")pF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(pte,"lmdbDropTable");async function hte(e){let t=new hF(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await _F(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new EF(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await gF(s)}o(hte,"deleteAttributesFromSystem");async function Ete(e){let t=new hF(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await _F(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new EF(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await gF(s)}catch(i){throw i}}o(Ete,"dropTableFromSystem")});var yF=v((XPe,TF)=>{"use strict";var _te=require("fs-extra"),gte=di(),Ste=nd(),Tte=ap(),yte=UI(),Rte=rp(),bte=NI(),Ate=op(),Ko=(q(),M(z)),{getSchemaPath:Ite}=Rt(),{handleHDBError:wte,hdbErrors:Nte}=_e(),{HDB_ERROR_MSGS:Cte,HTTP_STATUS_CODES:Ote}=Nte;TF.exports=Pte;async function Pte(e){let t;try{t=await Lte(e.schema);let r=new gte(Ko.SYSTEM_SCHEMA_NAME,Ko.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ko.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ko.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Ate(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await yte(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Tte(Ko.SYSTEM_SCHEMA_NAME,Ko.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Rte(s);let i=Ite(t);await _te.remove(i)}catch(r){throw r}}o(Pte,"lmdbDropSchema");async function Lte(e){let t=new Ste(Ko.SYSTEM_SCHEMA_NAME,Ko.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ko.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await bte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw wte(new Error,Cte.SCHEMA_NOT_FOUND(e),Ote.NOT_FOUND,void 0,void 0,!0);return n}o(Lte,"validateDropSchema")});var cp=v((eLe,RF)=>{"use strict";var xI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};RF.exports=xI});var FI=v((nLe,bF)=>{"use strict";var Dte=require("fs-extra"),Ng=St(),{getTransactionAuditStorePath:Mte}=Rt(),BI=Yt(),rLe=cp();bF.exports=vte;async function vte(e){let t;try{let r=Mte(e.schema,e.table);await Dte.mkdirp(r),t=await Ng.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{Ng.createDBI(t,BI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Ng.createDBI(t,BI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Ng.createDBI(t,BI.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(vte,"createTransactionsAuditEnvironment")});var wF=v((oLe,IF)=>{"use strict";var kI=(q(),M(z)),AF=St(),Ute=dl(),{getSystemSchemaPath:xte,getSchemaPath:Bte}=Rt(),iLe=ji(),Fte=gg(),HI=_g(),kte=Q(),Hte=FI();IF.exports=Gte;async function Gte(e,t){let r=Bte(t.schema,t.table),n=new HI(t.schema,t.table,kI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new HI(t.schema,t.table,kI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new HI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await AF.createEnvironment(r,t.table),e!==void 0){let a=await AF.openEnvironment(xte(),kI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Ute.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await GI(n),await GI(s),await GI(i)}await Hte(t)}catch(a){throw a}}o(Gte,"lmdbCreateTable");async function GI(e){try{await Fte(e)}catch(t){kte.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(GI,"createAttribute")});var CF=v((cLe,NF)=>{"use strict";var qte=Zm(),$te=Tm(),Vte=Sg(),lp=(q(),M(z)),Kte=dl().updateRecords,Yte=St(),{getSchemaPath:Wte}=Rt(),zte=ep(),jte=Q();NF.exports=Qte;async function Qte(e){try{let{schemaTable:t,attributes:r}=qte(e);$te(e,r,t.hash_attribute),e.schema!==lp.SYSTEM_SCHEMA_NAME&&(r.includes(lp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(lp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(lp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(lp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Vte(e.hdb_auth_header,t,r),s=Wte(e.schema,e.table),i=await Yte.openEnvironment(s,e.table),a=await Kte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await zte(e,a)}catch(c){jte.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(Qte,"lmdbUpdateRecords")});var PF=v((uLe,OF)=>{"use strict";var Jte=(q(),M(z)).OPERATIONS_ENUM,qI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Jte.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};OF.exports=qI});var DF=v((mLe,LF)=>{"use strict";var fLe=PF(),Xte=Zm(),Zte=Tm(),ere=Sg(),up=(q(),M(z)),tre=dl().upsertRecords,rre=St(),{getSchemaPath:nre}=Rt(),sre=ep(),ire=Q(),{handleHDBError:ore,hdbErrors:are}=_e();LF.exports=cre;async function cre(e){let t;try{t=Xte(e)}catch(l){throw ore(l,l.message,are.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Zte(e,n,r.hash_attribute),e.schema!==up.SYSTEM_SCHEMA_NAME&&(n.includes(up.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(up.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(up.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(up.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await ere(e.hdb_auth_header,r,n),i=nre(e.schema,e.table),a=await rre.openEnvironment(i,e.table),c=await tre(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await sre(e,c)}catch(l){ire.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o(cre,"lmdbUpsertRecords")});var vF=v((hLe,MF)=>{"use strict";var $I=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};MF.exports=$I});var xF=v((_Le,UF)=>{"use strict";var VI=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};UF.exports=VI});var kF=v((TLe,FF)=>{"use strict";var KI=St(),{getTransactionAuditStorePath:lre}=Rt(),SLe=vF(),dp=Yt(),ure=oe(),BF=xF(),dre=require("util").promisify,fre=dre(setTimeout),mre=1e4,pre=100;FF.exports=hre;async function hre(e){let t=lre(e.schema,e.table),r=await KI.openEnvironment(t,e.table,!0),n=KI.listDBIs(r);KI.initializeDBIs(r,dp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new BF;do s=await Ere(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await fre(pre);while(s.transactions_deleted>0);return i}o(hre,"deleteAuditLogsBefore");async function Ere(e,t){let r=new BF;try{let n=e.dbis[dp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[dp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];ure.isEmpty(c)||(s=e.dbis[dp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[dp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>mre)break}return await s,r}catch(n){throw n}}o(Ere,"deleteTransactions")});var GF=v((RLe,HF)=>{"use strict";var YI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};HF.exports=YI});var $F=v((ILe,qF)=>{"use strict";var _re=di(),gre=ap(),ALe=GF(),Qi=(q(),M(z)),Sre=oe(),WI=St(),Tre=ji(),yre=op(),Rre=rp(),{getSchemaPath:bre}=Rt();qF.exports=Are;async function Are(e,t=!0){let r;e.schema===Qi.SYSTEM_SCHEMA_NAME?r=Tre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await wre(e),s=bre(e.schema,e.table),i=await WI.openEnvironment(s,e.table);return t===!0&&await Ire(e,i,r.hash_attribute),WI.dropDBI(i,e.attribute),n}o(Are,"lmdbDropAttribute");async function Ire(e,t,r){let n=WI.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(Ire,"removeAttributeFromAllObjects");async function wre(e){let t=new _re(Qi.SYSTEM_SCHEMA_NAME,Qi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Qi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Qi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Qi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await yre(t)).filter(a=>a[Qi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Sre.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(a=>a[Qi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new gre(Qi.SYSTEM_SCHEMA_NAME,Qi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Rre(i)}o(wre,"dropAttributeFromSystem")});var jF=v((CLe,zF)=>{"use strict";var zI=St(),sd=Yt(),NLe=Mn(),jI=(q(),M(z)),VF=oe(),{getTransactionAuditStorePath:Nre}=Rt(),Cre=td(),Cg=Xu(),Ore=Q();zF.exports=Pre;async function Pre(e){let t=Nre(e.schema,e.table),r=await zI.openEnvironment(t,e.table,!0),n=zI.listDBIs(r);zI.initializeDBIs(r,sd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case jI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return KF(r,e.search_values);case jI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Dre(r,e.search_values,s);case jI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Lre(r,e.search_values);default:return KF(r)}}o(Pre,"readAuditLog");function KF(e,t=[0,Date.now()]){VF.isEmpty(t[0])&&(t[0]=0),VF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[sd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Cg,s))}o(KF,"searchTransactionsByTimestamp");function Lre(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[sd.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,WF(e,i))}return Object.fromEntries(r)}o(Lre,"searchTransactionsByUsername");function Dre(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Cre.equals(e,sd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,sd.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=WF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);YF(l,"records",r,d,a),YF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(Dre,"searchTransactionsByHashValues");function YF(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new Cg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Cg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(YF,"loopRecords");function WF(e,t){let r=[];try{let n=e.dbis[sd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new Cg,i);r.push(a)}}catch(i){Ore.warn(i)}return r}catch(n){throw n}}o(WF,"batchSearchTransactions")});var JF=v((DLe,QF)=>{"use strict";var{getSchemaPath:PLe}=Rt(),LLe=St(),{database:Mre}=(we(),M(mt));QF.exports={writeTransaction:vre};async function vre(e,t,r){return Mre({database:e,table:t}).transaction(r)}o(vre,"writeTransaction")});var tk=v((vLe,ek)=>{"use strict";var{getSchemaPath:XF}=Rt(),ZF=St();ek.exports={flush:Ure,resetReadTxn:xre};async function Ure(e,t){return(await ZF.openEnvironment(XF(e,t),t.toString())).flushed}o(Ure,"flush");async function xre(e,t){try{(await ZF.openEnvironment(XF(e,t),t.toString())).resetReadTxn()}catch{}}o(xre,"resetReadTxn")});var ik=v((xLe,sk)=>{"use strict";var{Readable:Bre}=require("stream"),{getDatabases:Fre}=(we(),M(mt)),{readSync:kre,openSync:Hre,createReadStream:rk}=require("fs"),{open:Gre}=require("lmdb"),{OpenDBIObject:nk}=zm(),qre=jm(),{AUDIT_STORE_OPTIONS:$re}=(Hi(),M(u0)),{INTERNAL_DBIS_NAME:Vre,AUDIT_STORE_NAME:Kre}=Yt();sk.exports=Wre;var QI=32768,Yre=100;async function Wre(e){let t=e.database||e.schema||"data",r=Fre()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=Gre({noSync:!0,maxDbs:qre.MAX_DBS}),m,p=f.openDB(Vre,new nk(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,y){y.encoding="binary",y.encoder=void 0;let C=f.openDB(S,y),I=d.openDB(S,y);for(let{key:k,version:J,value:G}of I.getRange({start:null,transaction:h,versions:I.useVersions}))m=C.put(k,G,J),E++%Yre===0&&(await new Promise(H=>setTimeout(H,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(C=>S.startsWith?.(C+"/"))){p.put(S,y);let[,C]=S.split("/"),I=!C,k=new nk(!I,I);await g(S,k)}e.include_audit&&await g(Kre,{...$re}),await m;let R=rk(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let a=r[Object.keys(r)[0]].primaryStore,c=Hre(a.path);return a.transaction(()=>{let u=Buffer.alloc(QI);kre(c,u,0,QI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=rk(null,{fd:c,start:QI}),m=new Bre.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(Wre,"getBackup")});var ck=v((FLe,ak)=>{"use strict";var zre=Q(),{handleHDBError:jre}=_e(),Qre=Fx(),Jre=gg(),Xre=TI(),Zre=yB(),ene=rp(),tne=NI(),rne=WB(),nne=rF(),sne=op(),ine=uF(),one=yF(),ane=wF(),cne=CF(),lne=DF(),une=kF(),dne=UI(),fne=$F(),mne=jF(),pne=JF(),ok=tk(),hne=ik(),JI=class extends Qre{static{o(this,"LMDBBridge")}async searchByConditions(t){return ine(t)}async getDataByHash(t){return await tne(t)}async searchByHash(t){return await rne(t)}async getDataByValue(t,r){return await nne(t,r)}async searchByValue(t){return await sne(t)}async createSchema(t){return await Zre(t)}async dropSchema(t){return await one(t)}async createTable(t,r){return await ane(t,r)}async dropTable(t){return await dne(t)}async createAttribute(t){return await Jre(t)}async createRecords(t){return await Xre(t)}async updateRecords(t){return await cne(t)}async upsertRecords(t){try{return await lne(t)}catch(r){throw jre(r,null,null,zre.ERR,r)}}async deleteRecords(t){return await ene(t)}async dropAttribute(t){return await fne(t)}async deleteAuditLogsBefore(t){return await une(t)}async readAuditLog(t){return await mne(t)}writeTransaction(t,r,n){return pne.writeTransaction(t,r,n)}flush(t,r){return ok.flush(t,r)}resetReadTxn(t,r){return ok.resetReadTxn(t,r)}getBackup(t){return hne(t)}};ak.exports=JI});function Hn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function mp(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=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be a string, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be a string, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be a number, attempt to assign ${p}`);Hn(this)[u]=m},"set");break;case"Int":d=o(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 cs.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Long":d=o(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 cs.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"BigInt":d=o(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 cs.ClientError(`${u} must be a number, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Date":d=o(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 cs.ClientError(`${u} must be a Date, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof Ds||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Hn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be an object, attempt to assign ${m}`);Hn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=XI(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("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]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new cs.ClientError("Can not add a property to a sealed table schema");Hn(this)[l]=u}),a("deleteProperty",function(l){Hn(this)[l]=void 0}),a("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||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?dk:uk);break}c=l}while(c&&c!==uk&&c!==dk)}function fk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(lk[t])return lk[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=XI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Ene(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function XI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends _l{static{o(this,"TrackedObject")}},mp(r,t)),new r(e)):new _l(e);case Array:let n=new Pg(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=XI(a,t?.elements)),n[s]=a}return n;default:return e}}function Lg(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 a=r[s];i=i.update(a)}else i=Lg(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 gl(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 a=gl(i);a!==i&&r===e&&(r=e.slice(0)),i=a}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=qb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=gl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)_ne.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Og(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[El]||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(Og(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(Og(s))return!0}else return!0}else return!0}}return!1}var cs,lk,uk,dk,_l,_ne,El,Pg,fp,ZI=se(()=>{cs=b(_e());y_();ts();o(Hn,"getChanges");o(mp,"assignTrackedAccessors");lk=Object.prototype,uk=new Proxy({},{get:fk}),dk=new Proxy({},{get:fk,set:Ene});o(fk,"getProxiedProperty");o(Ene,"setProxiedProperty");o(XI,"trackObject");_l=class{static{o(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}};mp(_l,{},!0);o(Lg,"collapseData");_ne=Object.prototype.hasOwnProperty;o(gl,"updateAndFreeze");o(Og,"hasChanges");El=Symbol.for("has-array-changes"),Pg=class extends Array{static{o(this,"TrackedArray")}#e;[El];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[El]=!0,super.splice(...t)}push(...t){return this[El]=!0,super.push(...t)}pop(){return this[El]=!0,super.pop()}unshift(...t){return this[El]=!0,super.unshift(...t)}shift(){return this[El]=!0,super.shift()}};Pg.prototype.constructor=Array;fp=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var Tk={};Re(Tk,{ResourceBridge:()=>rw});function nw({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function mk(e,t){let r=Ji(e),n=nw(e,r);if(!r)throw new fi.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},a;bt(i,()=>new Promise(u=>a=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&&Lg(d)}catch(f){d={message:(0,Sk.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function Ji(e){let t=e.database||e.schema||Sne,r=at()[t];if(!r)throw(0,fi.handleHDBError)(new Error,gne.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function pk(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*hk(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;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:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var Ek,Dg,fi,_k,ew,tw,gk,Sk,gne,Sne,Tne,yne,rw,yk=se(()=>{Ek=b(ck()),Dg=b(rd()),fi=b(_e());we();_k=b(Zm());q();ew=b($o()),tw=b(os()),gk=b(oe());xa();ZI();Sk=b(Q()),{HDB_ERROR_MSGS:gne}=fi.hdbErrors,Sne="data",Tne=1e4,yne=10,rw=class extends Ek.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=Ji(t);if(!r)throw new fi.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 a=i;return{attribute:a.attribute??a.search_attribute,comparator:a.comparator??a.search_type,value:a.value!==void 0?a.value:a.search_value}}}o(n,"mapCondition");let s=(0,Dg.default)(t,"conditions");if(s)throw(0,fi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:nw(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new fi.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}]}Ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ji(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ji(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return Ji(t).dropTable()}createSchema(t){return id({database:t.schema,table:null}),ew.signalSchemaChange(new tw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await sw(t.schema),ew.signalSchemaChange(new tw.SchemaEventMsg(process.pid,V.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{schemaTable:r,attributes:n}=(0,_k.default)(t),s,i=at()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),bt(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Lg(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=at()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),bt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return pk(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=at()[t.schema][t.table];if(!r.createdTimeProperty)throw new fi.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:t_.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,gk.asyncSetTimeout)(yne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Tne===0&&await u();return l.length>0&&await u(),s?pk(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Dg.default)(t,"hashes");if(r)throw r;return mk(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of mk(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&yb[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,Dg.default)(t,"value");if(n)throw n;let s=Ji(t);if(!s)throw new fi.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===t_.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:nw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ji(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Ji({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ji(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ji(t),n={};switch(t.search_type){case r_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case r_.USERNAME:{let s=t.search_values;for await(let i of hk(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return hk(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(nw,"getSelect");o(mk,"getRecords");o(Ji,"getTable");o(pk,"createDeleteResponse");o(hk,"groupRecordsInHistory")});var ls=v((jLe,Rk)=>{"use strict";var{ResourceBridge:Rne}=(yk(),M(Tk)),bne=me();bne.initSync();var Mg;function Ane(){return Mg||(Mg=new Rne,Mg)}o(Ane,"getBridge");Rk.exports=Ane()});var mi=v((JLe,Ik)=>{var Ine=ji(),{promisify:wne}=require("util"),{getDatabases:Ak}=(we(),M(mt));Ik.exports={setSchemaDataToGlobal:bk,getTableSchema:Nne,getSystemSchema:Cne,setSchemaDataToGlobalAsync:wne(bk)};function bk(e){global.hdb_schema=Ak(),e&&e()}o(bk,"setSchemaDataToGlobal");function Nne(e,t,r){let n=Ak()[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`)}o(Nne,"getTableSchema");function Cne(){return Ine}o(Cne,"getSystemSchema")});var Gn=v((ZLe,Ok)=>{"use strict";var Ug=rI(),tn=oe(),One=require("util"),xg=ls(),Pne=mi(),wk=Q(),{handleHDBError:Sl,hdbErrors:Lne}=_e(),{HTTP_STATUS_CODES:Tl}=Lne,Dne=One.promisify(Pne.getTableSchema),Mne="updated",Nk="inserted",Ck="upserted";Ok.exports={insert:Une,update:xne,upsert:Bne,validation:vne,flush:Fne};async function vne(e){if(tn.isEmpty(e))throw new Error("invalid update parameters defined.");if(tn.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(tn.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Dne(e.schema,e.table),r=Ug(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={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&tn.isEmptyOrZeroLength(c[n]))throw wk.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(!tn.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw wk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!tn.isEmpty(c[n])&&c[n]!==""&&s.has(tn.autoCast(c[n]))&&(c.skip=!0),s.add(tn.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)}}o(vne,"validation");async function Une(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ug(e);if(t)throw Sl(new Error,t.message,Tl.BAD_REQUEST);tn.transformReq(e);let r=tn.checkSchemaTableExist(e.schema,e.table);if(r)throw Sl(new Error,r,Tl.BAD_REQUEST);let n=await xg.createRecords(e);return vg(Nk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Une,"insertData");async function xne(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ug(e);if(t)throw Sl(new Error,t.message,Tl.BAD_REQUEST);tn.transformReq(e);let r=tn.checkSchemaTableExist(e.schema,e.table);if(r)throw Sl(new Error,r,Tl.BAD_REQUEST);let n=await xg.updateRecords(e);return tn.isEmpty(n.existing_rows)?vg(Mne,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):vg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(xne,"updateData");async function Bne(e){if(e.operation!=="upsert")throw Sl(new Error,"invalid operation, must be upsert",Tl.INTERNAL_SERVER_ERROR);let t=Ug(e);if(t)throw Sl(new Error,t.message,Tl.BAD_REQUEST);tn.transformReq(e);let r=tn.checkSchemaTableExist(e.schema,e.table);if(r)throw Sl(new Error,r,Tl.BAD_REQUEST);let n=await xg.upsertRecords(e);return vg(Ck,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(Bne,"upsertData");function vg(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===Nk?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===Ck?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(vg,"returnObject");function Fne(e){return tn.transformReq(e),xg.flush(e.schema,e.table)}o(Fne,"flush")});var ow=v((tDe,Dk)=>{var kne=ft(),iw=require("joi"),{hdbTable:Hne,hdbDatabase:Pk}=Wi(),Lk={schema:Pk,database:Pk,table:Hne},Gne={date:iw.date().iso().required()},qne={timestamp:iw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Dk.exports=function(e,t){let r=t==="timestamp"?{...Lk,...qne}:{...Lk,...Gne},n=iw.object(r);return kne.validateBySchema(e,n)}});var Uk=v((rDe,vk)=>{var $ne=ft(),aw=require("joi"),{hdbTable:Vne,hdbDatabase:Mk}=Wi(),Kne=aw.object({schema:Mk,database:Mk,table:Vne,hash_values:aw.array().required(),ids:aw.array()});vk.exports=function(e){return $ne.validateBySchema(e,Kne)}});var dw=v((nDe,xk)=>{"use strict";var cw=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},lw=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=a}},uw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};xk.exports={InsertObject:cw,NoSQLSeachObject:lw,DeleteResponseObject:uw}});var bl=v((iDe,Gk)=>{"use strict";var Fk=ow(),Yne=Uk(),yl=oe(),Bk=require("moment"),kk=Q(),{promisify:Wne,callbackify:zne}=require("util"),Rl=(q(),M(z)),jne=mi(),fw=Wne(jne.getTableSchema),mw=ls(),{DeleteResponseObject:Qne}=dw(),{handleHDBError:ja,hdbErrors:Jne}=_e(),{HDB_ERROR_MSGS:Bg,HTTP_STATUS_CODES:Qa}=Jne,Xne="records successfully deleted",Zne=zne(Hk);Gk.exports={delete:Zne,deleteRecord:Hk,deleteFilesBefore:ese,deleteAuditLogsBefore:tse};async function ese(e){let t=Fk(e,"date");if(t)throw ja(t,t.message,Qa.BAD_REQUEST,void 0,void 0,!0);if(yl.transformReq(e),!Bk(e.date,Bk.ISO_8601).isValid())throw ja(new Error,Bg.INVALID_DATE,Qa.BAD_REQUEST,Rl.LOG_LEVELS.ERROR,Bg.INVALID_DATE,!0);let n=yl.checkSchemaTableExist(e.schema,e.table);if(n)throw ja(new Error,n,Qa.NOT_FOUND,Rl.LOG_LEVELS.ERROR,n,!0);let s=await mw.deleteRecordsBefore(e);if(await fw(e.schema,e.table),kk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(ese,"deleteFilesBefore");async function tse(e){let t=Fk(e,"timestamp");if(t)throw ja(t,t.message,Qa.BAD_REQUEST,void 0,void 0,!0);if(yl.transformReq(e),isNaN(e.timestamp))throw ja(new Error,Bg.INVALID_VALUE("Timestamp"),Qa.BAD_REQUEST,Rl.LOG_LEVELS.ERROR,Bg.INVALID_VALUE("Timestamp"),!0);let r=yl.checkSchemaTableExist(e.schema,e.table);if(r)throw ja(new Error,r,Qa.NOT_FOUND,Rl.LOG_LEVELS.ERROR,r,!0);let n=await mw.deleteAuditLogsBefore(e);return await fw(e.schema,e.table),kk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(tse,"deleteAuditLogsBefore");async function Hk(e){e.ids&&(e.hash_values=e.ids);let t=Yne(e);if(t)throw ja(t,t.message,Qa.BAD_REQUEST,void 0,void 0,!0);yl.transformReq(e);let r=yl.checkSchemaTableExist(e.schema,e.table);if(r)throw ja(new Error,r,Qa.NOT_FOUND,Rl.LOG_LEVELS.ERROR,r,!0);try{await fw(e.schema,e.table);let n=await mw.deleteRecords(e);return yl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Xne}`),n}catch(n){if(n.message===Rl.SEARCH_NOT_FOUND_MESSAGE){let s=new Qne;return s.message=Rl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(Hk,"deleteRecord")});var gw={};Re(gw,{HASH_FUNCTION:()=>Gr,hash:()=>Ew,validate:()=>_w});function pw(e=hp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(pp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Ew(e,t=Gr[$k?.toUpperCase()]??Gr.SHA256){return hw[t](e)}function _w(e,t,r=Gr[$k?.toUpperCase()]??Gr.SHA256){return e?rse[r](e,t):!1}var pp,od,qk,$k,hp,Vk,Gr,hw,rse,Sw=se(()=>{pp=b(require("node:crypto")),od=b(require("argon2")),qk=b(me());q();$k=(0,qk.get)(F.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),hp=16,Vk=9,Gr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(pw,"generateSalt");hw={[Gr.MD5]:(e,t=void 0)=>{t=t??pw(Vk);let r=pp.createHash(Gr.MD5).update(e+t).digest("hex");return t+r},[Gr.SHA256]:(e,t=void 0)=>{t=t??pw(hp);let r=pp.createHash(Gr.SHA256).update(e+t).digest("hex");return t+r},[Gr.ARGON2ID]:async e=>{let t=pw(hp),r=await od.hash(e,{type:od.argon2id,salt:Buffer.from(t)});return t+r}},rse={[Gr.MD5]:(e,t)=>{let r=e.slice(0,Vk);return e===hw[Gr.MD5](t,r)},[Gr.SHA256]:(e,t)=>{let r=e.slice(0,hp);return e===hw[Gr.SHA256](t,r)},[Gr.ARGON2ID]:async(e,t)=>await od.verify(e.slice(hp),t)};o(Ew,"hash");o(_w,"validate")});var Yk=v((lDe,Kk)=>{var Tw=ft(),En={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 nse(e){return En.password.presence=!0,En.username.presence=!0,En.role.presence=!0,En.active.presence=!0,Tw.validateObject(e,En)}o(nse,"addUserValidation");function sse(e){return En.password.presence=!1,En.username.presence=!0,En.role.presence=!1,En.active.presence=!1,Tw.validateObject(e,En)}o(sse,"alterUserValidation");function ise(e){return En.password.presence=!1,En.username.presence=!0,En.role.presence=!1,En.active.presence=!1,Tw.validateObject(e,En)}o(ise,"dropUserValidation");Kk.exports={addUserValidation:nse,alterUserValidation:sse,dropUserValidation:ise}});var iH=v((fDe,sH)=>{"use strict";var yw=require("recursive-iterator"),ose=require("alasql"),Rw=require("clone"),Wk=oe(),{handleHDBError:zk,hdbErrors:ase}=_e(),{HDB_ERROR_MSGS:jk,HTTP_STATUS_CODES:Qk}=ase,{getDatabases:cse}=(we(),M(mt)),lse=["DISTINCT_ARRAY"],Jk=Symbol("validateTables"),bw=Symbol("validateTable"),dDe=Symbol("getAllColumns"),Xk=Symbol("validateAllColumns"),Fg=Symbol("findColumn"),Zk=Symbol("validateOrderBy"),Ep=Symbol("validateSegment"),Aw=Symbol("validateColumn"),eH=Symbol("setColumnsForTable"),tH=Symbol("checkColumnsForAsterisk"),rH=Symbol("validateGroupBy"),nH=Symbol("hasColumns"),Iw=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Jk](),this[tH](),this[Xk]()}[Jk](){if(this[nH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[bw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[bw](t.table)})}}[nH](){let t=!1,r=new yw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[bw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=cse();if(!r[t.databaseid])throw zk(new Error,jk.SCHEMA_NOT_FOUND(t.databaseid),Qk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zk(new Error,jk.TABLE_NOT_FOUND(t.databaseid,t.tableid),Qk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Rw(s);i.table=Rw(t),this.attributes.push(i)})}[Fg](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)}[tH](){let t=new yw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[eH](r.tableid)}[eH](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new ose.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Xk](){this[Ep](this.statement.columns,!1),this[Ep](this.statement.joins,!1),this[Ep](this.statement.where,!1),this[rH](this.statement.group,!1),this[Ep](this.statement.order,!0)}[Ep](t,r){if(!t)return;let n=new yw(t),s=[];for(let{node:i,path:a}of n)!Wk.isEmpty(i)&&!Wk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Zk](i):s.push(this[Aw](i)));return s}[rH](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&lse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Rw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Fg](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[Fg](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.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`}[Zk](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Aw](t)}[Aw](t){let r=this[Fg](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]}};sH.exports=Iw});var lH=v((pDe,cH)=>{"use strict";var oH=require("lodash"),_p=require("mathjs"),use=require("jsonata"),aH=oe();cH.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?oH.uniqWith(e,oH.isEqual):e,"distinct_array"),searchJSON:dse,mad:gp.bind(null,_p.mad),mean:gp.bind(null,_p.mean),mode:gp.bind(null,_p.mode),prod:gp.bind(null,_p.prod),median:gp.bind(null,_p.median)};function gp(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}o(gp,"aggregateFunction");function dse(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(aH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),aH.isEmpty(this.__ala__.res[r])){let n=use(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(dse,"searchJSON")});var dH=v((EDe,uH)=>{"use strict";var fr=require("moment"),ww="YYYY-MM-DDTHH:mm:ss.SSSZZ";fr.suppressDeprecationWarnings=!0;uH.exports={current_date:o(()=>fr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>fr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return fr(e).utc().format("YYYY");case"month":return fr(e).utc().format("MM");case"day":return fr(e).utc().format("DD");case"hour":return fr(e).utc().format("HH");case"minute":return fr(e).utc().format("mm");case"second":return fr(e).utc().format("ss");case"millisecond":return fr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>fr(e).utc().format(ww),"date"),date_format:o((e,t)=>fr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>fr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>fr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=fr(e).utc(),s=fr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>fr().utc().valueOf(),"now"),get_server_time:o(()=>fr().format(ww),"get_server_time"),offset_utc:o((e,t)=>fr(e).utc().utcOffset(t).format(ww),"offset_utc")}});var hH=v((gDe,pH)=>{"use strict";var fse=require("@turf/area"),mse=require("@turf/length"),pse=require("@turf/circle"),hse=require("@turf/difference"),Ese=require("@turf/distance"),_se=require("@turf/boolean-contains"),gse=require("@turf/boolean-equal"),Sse=require("@turf/boolean-disjoint"),Tse=require("@turf/helpers"),fH=(q(),M(z)),Je=oe(),Yo=Q();pH.exports={geoArea:yse,geoLength:Rse,geoCircle:bse,geoDifference:Ase,geoDistance:mH,geoNear:Ise,geoContains:wse,geoEqual:Nse,geoCrosses:Cse,geoConvert:Ose};function yse(e){if(Je.isEmpty(e))return NaN;typeof e=="string"&&(e=Je.autoCastJSON(e));try{return fse.default(e)}catch(t){return Yo.trace(t,e),NaN}}o(yse,"geoArea");function Rse(e,t){if(Je.isEmpty(e))return NaN;typeof e=="string"&&(e=Je.autoCastJSON(e));try{return mse.default(e,{units:t||"kilometers"})}catch(r){return Yo.trace(r,e),NaN}}o(Rse,"geoLength");function bse(e,t,r){if(Je.isEmpty(e))return NaN;if(Je.isEmpty(t))return NaN;typeof e=="string"&&(e=Je.autoCastJSON(e));try{return pse.default(e,t,{units:r||"kilometers"})}catch(n){return Yo.trace(n,e,t),NaN}}o(bse,"geoCircle");function Ase(e,t){if(Je.isEmpty(e))return NaN;if(Je.isEmpty(t))return NaN;typeof e=="string"&&(e=Je.autoCastJSON(e)),typeof t=="string"&&(t=Je.autoCastJSON(t));try{return hse(e,t)}catch(r){return Yo.trace(r,e,t),NaN}}o(Ase,"geoDifference");function mH(e,t,r){if(Je.isEmpty(e))return NaN;if(Je.isEmpty(t))return NaN;typeof e=="string"&&(e=Je.autoCastJSON(e)),typeof t=="string"&&(t=Je.autoCastJSON(t));try{return Ese.default(e,t,{units:r||"kilometers"})}catch(n){return Yo.trace(n,e,t),NaN}}o(mH,"geoDistance");function Ise(e,t,r,n){if(Je.isEmpty(e)||Je.isEmpty(t))return!1;if(Je.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Je.autoCastJSON(e)),typeof t=="string"&&(t=Je.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return mH(e,t,n)<=r}catch(s){return Yo.trace(s,e,t),!1}}o(Ise,"geoNear");function wse(e,t){if(Je.isEmpty(e)||Je.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Je.autoCastJSON(e)),typeof t=="string"&&(t=Je.autoCastJSON(t));try{return _se.default(e,t)}catch(r){return Yo.trace(r,e,t),!1}}o(wse,"geoContains");function Nse(e,t){if(Je.isEmpty(e)||Je.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Je.autoCastJSON(e)),typeof t=="string"&&(t=Je.autoCastJSON(t));try{return gse.default(e,t)}catch(r){return Yo.trace(r,e,t),!1}}o(Nse,"geoEqual");function Cse(e,t){if(Je.isEmpty(e)||Je.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Je.autoCastJSON(e)),typeof t=="string"&&(t=Je.autoCastJSON(t));try{return!Sse.default(e,t)}catch(r){return Yo.trace(r,e,t),!1}}o(Cse,"geoCrosses");function Ose(e,t,r){if(Je.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Je.isEmpty(t))throw new Error("geo_type is required");if(Je.isEmpty(fH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(fH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Je.autoCastJSON(e)),Tse[t](e,r)}o(Ose,"geoConvert")});var kg=v((TDe,EH)=>{var Al=lH(),us=dH(),Xi=hH();EH.exports=e=>{e.aggr.mad=e.aggr.MAD=Al.mad,e.aggr.mean=e.aggr.MEAN=Al.mean,e.aggr.mode=e.aggr.MODE=Al.mode,e.aggr.prod=e.aggr.PROD=Al.prod,e.aggr.median=e.aggr.MEDIAN=Al.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Al.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Al.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=us.current_date,e.fn.current_time=e.fn.CURRENT_TIME=us.current_time,e.fn.extract=e.fn.EXTRACT=us.extract,e.fn.date=e.fn.DATE=us.date,e.fn.date_format=e.fn.DATE_FORMAT=us.date_format,e.fn.date_add=e.fn.DATE_ADD=us.date_add,e.fn.date_sub=e.fn.DATE_SUB=us.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=us.date_diff,e.fn.now=e.fn.NOW=us.now,e.fn.offset_utc=e.fn.OFFSET_UTC=us.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=us.get_server_time,e.fn.getdate=e.fn.GETDATE=us.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=us.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Xi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Xi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Xi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Xi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Xi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Xi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Xi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Xi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Xi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Xi.geoNear}});var TH=v((yDe,SH)=>{"use strict";var Sp=require("lodash"),qn=require("alasql");qn.options.cache=!1;var Pse=kg(),_H=require("clone"),Hg=require("recursive-iterator"),Ke=Q(),st=oe(),ad=ls(),Lse=(q(),M(z)),{hdbErrors:Dse}=_e(),{getDatabases:gH}=(we(),M(mt)),Mse="IS NULL",pi="There was a problem performing this search. Please check the logs and try again.";Pse(qn);var Nw=class{static{o(this,"SQLSearch")}constructor(t,r){if(st.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(),st.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!st.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(pi)}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(pi)}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(pi)}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(pi)}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(pi)}}_getColumns(){let t=new Hg(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(_H(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Sp.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=gH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(st.isEmpty(this.statement.where)){Ke.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Hg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!st.isEmpty(r)&&r.right)if(st.isNotEmptyAndHasValue(r.right.value)){let n=st.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new qn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=st.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new qn.yy.LogicValue({value:i}):n instanceof qn.yy.StringValue&&st.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new qn.yy.NumValue({value:i}))});if(t){Ke.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Hg(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 a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!st.isEmpty(Lse.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(st.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(st.isEmptyOrZeroLength(r.left.columnid)||st.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(st.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!st.isEmpty(r.right.value)||!st.isEmpty(r.left.value)?n.add(st.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[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from)&&st.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&&Sp.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(st.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);st.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(st.isEmptyOrZeroLength(this.all_table_attributes)&&!st.isEmptyOrZeroLength(this.columns.columns))return t;if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await qn.promise(r)}catch(r){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ke.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(_H(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(st.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(Mse)>-1&&this.tables.forEach(s=>{let i={columnid:gH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Sp.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 a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=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===a&&(l=!0),!st.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await ad.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw Ke.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ke.error(d),new Error(pi)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await ad.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ke.error(d),new Error(pi)}else if(!st.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await ad.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[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(pi)}else try{c.attribute=s.attribute,c.value="*";let d=await ad.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ke.error(d),new Error(pi)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof qn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,a=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===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new qn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new qn.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new qn.yy.FuncValue:new qn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let a=[],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;a.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await qn.promise(h,t),t=null}catch(p){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ke.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];a.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}a.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=Sp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,R=E.length;g<R;g++){let S=E[g];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 Hg(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=Sp.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(pi)}}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,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await ad.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}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(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ke.trace(`Final SQL: ${s}`),n=await qn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ke.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ke.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ke.error(Dse.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((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"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 a=await ad.getDataByValue(i);for(let[c,l]of a)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(a){throw Ke.error("There was an error when processing this SQL operation. Check your logs"),Ke.error(a),new Error(pi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};SH.exports=Nw});var _n=v((bDe,yH)=>{"use strict";yH.exports={searchByConditions:vse,searchByHash:Use,searchByValue:xse,search:Bse};var Cw=ls(),{transformReq:Ow}=oe();async function vse(e){return Ow(e),Cw.searchByConditions(e)}o(vse,"searchByConditions");async function Use(e){Ow(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Cw.searchByHash(e))r&&t.push(r);return t}o(Use,"searchByHash");async function xse(e){Ow(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Cw.searchByValue(e))t.push(r);return t}o(xse,"searchByValue");function Bse(e,t){try{let r=iH(),n=TH(),s=new r(e);s.validate(),new n(s.statement,s.attributes).search().then(a=>{t(null,a)}).catch(a=>{t(a,null)})}catch(r){return t(r)}}o(Bse,"search")});var Zi=v((IDe,IH)=>{"use strict";var Tp=require("crypto"),Fse=me(),{CONFIG_PARAMS:kse}=(q(),M(z)),bH="aes-256-cbc",Hse=32,Gse=16,Pw=64,AH=32,qse=Pw+AH,RH=new Map;IH.exports={encrypt:$se,decrypt:Vse,createNatsTableStreamName:Kse};function $se(e){let t=Tp.randomBytes(Hse),r=Tp.randomBytes(Gse),n=Tp.createCipheriv(bH,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o($se,"encrypt");function Vse(e){let t=e.substr(0,Pw),r=e.substr(Pw,AH),n=e.substr(qse,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=Tp.createDecipheriv(bH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(Vse,"decrypt");function Kse(e,t){let r=Fse.get(kse.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=RH.get(r);return n||(n=Tp.createHash("md5").update(r).digest("hex"),RH.set(r,n)),n}o(Kse,"createNatsTableStreamName")});var Pt=v((CDe,NH)=>{"use strict";var{platform:NDe}=require("os"),Yse="nats-server.zip",Lw="nats-server",Wse=process.platform==="win32"?`${Lw}.exe`:Lw,zse=/^[^\s.,*>]+$/,wH="__request__",jse=o(e=>`${e}.${wH}`,"REQUEST_SUBJECT"),Qse={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Jse={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Xse={HUB:"hub.pid",LEAF:"leaf.pid"},Zse={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},eie={SUCCESS:"success",ERROR:"error"},tie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},rie={TXN:"txn",MSGID:"msgid"},cd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},nie={[cd.ERR]:1,[cd.WRN]:2,[cd.INF]:3,[cd.DBG]:4,[cd.TRC]:5},sie={debug:"-D",trace:"-DVV"};NH.exports={NATS_SERVER_ZIP:Yse,NATS_SERVER_NAME:Lw,NATS_BINARY_NAME:Wse,PID_FILES:Xse,NATS_CONFIG_FILES:Jse,SERVER_SUFFIX:Zse,NATS_TERM_CONSTRAINTS_RX:zse,REQUEST_SUFFIX:wH,UPDATE_REMOTE_RESPONSE_STATUSES:eie,CLUSTER_STATUS_STATUSES:tie,REQUEST_SUBJECT:jse,SUBJECT_PREFIXES:rie,MSG_HEADERS:Qse,LOG_LEVELS:cd,LOG_LEVEL_FLAGS:sie,LOG_LEVEL_HIERARCHY:nie}});var ds=v((PDe,qr)=>{"use strict";var PH="username is required",LH="nothing to update, must supply active, role or password to update",DH="password cannot be an empty string",MH="If role is specified, it cannot be empty.",vH="active must be true or false";qr.exports.addUser=mie;qr.exports.alterUser=pie;qr.exports.dropUser=Eie;qr.exports.getSuperUser=yie;qr.exports.userInfo=_ie;qr.exports.listUsers=qg;qr.exports.listUsersExternal=gie;qr.exports.setUsersWithRolesCache=Il;qr.exports.findAndValidateUser=Hw;qr.exports.getClusterUser=Rie;qr.exports.getUsersWithRolesCache=Tie;qr.exports.USERNAME_REQUIRED=PH;qr.exports.ALTERUSER_NOTHING_TO_UPDATE=LH;qr.exports.EMPTY_PASSWORD=DH;qr.exports.EMPTY_ROLE=MH;qr.exports.ACTIVE_BOOLEAN=vH;var UH=Gn(),iie=bl(),yp=(Sw(),M(gw)),xH=Yk(),Rp=_n(),xw=$o(),eo=oe(),BH=require("validate.js"),Bw=Q(),{promisify:oie}=require("util"),Fw=Zi(),Mw=(q(),M(z)),CH=Pt(),aie=gt(),cie=me(),lie=ji(),{hdbErrors:uie,ClientError:hi}=_e(),{HTTP_STATUS_CODES:Wo,AUTHENTICATION_ERROR_MSGS:Dw,HDB_ERROR_MSGS:ld}=uie,{UserEventMsg:kw}=os(),vw=require("lodash"),{server:Gg}=(Fr(),M(lm)),die=Q();Gg.getUser=(e,t)=>Hw(e,t,t!=null);Gg.authenticateUser=(e,t)=>Hw(e,t);var FH={username:!0,active:!0,role:!0,password:!0},OH=new Map,fie=oie(iie.delete),Uw=cie.get(Mw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??yp.HASH_FUNCTION.SHA256,to;async function mie(e){let t=BH.cleanAttributes(e,FH),r=xH.addUserValidation(t);if(r)throw new hi(r.message);let n=await Rp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new hi(ld.ROLE_NAME_NOT_FOUND(t.role),Wo.NOT_FOUND);if(n.length>1)throw new hi(ld.DUP_ROLES_FOUND(t.role),Wo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Fw.encrypt(t.password)),t.password=await yp.hash(t.password,Uw),t.hash_function=Uw,t.role=n[0].id;let s=await UH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Bw.debug(s),await Il(),s.skipped_hashes.length===1)throw new hi(ld.USER_ALREADY_EXISTS(t.username),Wo.CONFLICT);return xw.signalUserChange(new kw(process.pid)),`${t.username} successfully added`}o(mie,"addUser");async function pie(e){let t=BH.cleanAttributes(e,FH);if(eo.isEmptyOrZeroLength(t.username))throw new Error(PH);if(eo.isEmptyOrZeroLength(t.password)&&eo.isEmptyOrZeroLength(t.role)&&eo.isEmptyOrZeroLength(t.active))throw new Error(LH);if(!eo.isEmpty(t.password)&&eo.isEmptyOrZeroLength(t.password.trim()))throw new Error(DH);if(!eo.isEmpty(t.active)&&!eo.isBoolean(t.active))throw new Error(vH);if(!eo.isEmpty(t.password)&&!eo.isEmptyOrZeroLength(t.password.trim())&&(hie(t.username)&&(t.hash=Fw.encrypt(t.password)),t.password=await yp.hash(t.password,Uw)),t.role==="")throw new Error(MH);if(t.role){let n=await Rp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new hi(ld.ALTER_USER_ROLE_NOT_FOUND(t.role),Wo.NOT_FOUND);if(n.length>1)throw new hi(ld.DUP_ROLES_FOUND(t.role),Wo.CONFLICT);t.role=n[0].id}let r=await UH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Il(),xw.signalUserChange(new kw(process.pid)),r}o(pie,"alterUser");function hie(e){let t=!1,r=to.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(hie,"isClusterUser");async function Eie(e){let t=xH.dropUserValidation(e);if(t)throw new hi(t.message);if(to.get(e.username)===void 0)throw new hi(ld.USER_NOT_EXIST(e.username),Wo.NOT_FOUND);let r=await fie({table:"hdb_user",schema:"system",hash_values:[e.username]});return Bw.debug(r),await Il(),xw.signalUserChange(new kw(process.pid)),`${e.username} successfully deleted`}o(Eie,"dropUser");async function _ie(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=vw.cloneDeep(e.hdb_user);let r=await Rp.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}o(_ie,"userInfo");async function gie(){let e=await qg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(gie,"listUsersExternal");async function qg(){let e=await Rp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=vw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Rp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=vw.cloneDeep(s),s.role=t[s.role],Sie(s.role),n.set(s.username,s);return n}o(qg,"listUsers");function Sie(e){if(!e){Bw.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(lie)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Sie,"appendSystemTablesToRole");async function Il(e=void 0){e?to=e:to=await qg()}o(Il,"setUsersWithRolesCache");async function Tie(){return to||await Il(),to}o(Tie,"getUsersWithRolesCache");async function Hw(e,t,r=!0){to||await Il();let n=to.get(e);if(!n){if(!r)return{username:e};throw new hi(Dw.GENERIC_AUTH_FAIL,Wo.UNAUTHORIZED)}if(n&&!n.active)throw new hi(Dw.USER_INACTIVE,Wo.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(OH.get(t)===n.password)return s;{let i=yp.validate(n.password,t,n.hash_function||yp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)OH.set(t,n.password);else throw new hi(Dw.GENERIC_AUTH_FAIL,Wo.UNAUTHORIZED)}}return s}o(Hw,"findAndValidateUser");async function yie(){to||await Il();for(let[,e]of to)if(e.role.role==="super_user")return e}o(yie,"getSuperUser");async function Rie(){let e=await qg(),t=aie.getConfigFromFile(Mw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==Mw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=Fw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+CH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+CH.SERVER_SUFFIX.ADMIN,r}o(Rie,"getClusterUser");var kH=[];Gg.invalidateUser=function(e){for(let t of kH)try{t(e)}catch(r){die.error("Error invalidating user",r)}};Gg.onInvalidatedUser=function(e){kH.push(e)}});var Ie,ud=se(()=>{Ie={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var dd,Gw=se(()=>{ud();dd=class{static{o(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==Ie.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Ie.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Ie.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Ie.WARNING,t)}markLoading(t){this.updateStatus(Ie.LOADING,t||"Component is loading")}isHealthy(){return this.status===Ie.HEALTHY}hasError(){return this.status===Ie.ERROR}isLoading(){return this.status===Ie.LOADING}hasWarning(){return this.status===Ie.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var wl,Ja,qw,fd,$w,md,Vw,$g=se(()=>{wl=b(zr()),Ja=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=wl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},qw=class extends Ja{static{o(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,wl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},fd=class extends Ja{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,wl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},$w=class extends Ja{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,wl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},md=class extends Ja{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,wl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},Vw=class extends Ja{static{o(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,wl.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(`
|
|
15
|
-
`)}}});var HH,Nl,GH,Xa,bp,pd,bie,Vg,Kw=se(()=>{HH=b(os()),Nl=b(nt());q();GH=b(es());ud();$g();Xa=(0,GH.loggerWithTag)("componentStatus.crossThread"),bp=class{static{o(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,Nl.onMessageByType)(n_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;Xa.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&&(Xa.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 a=((0,Nl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=a&&!E&&(E=!0,S(),Xa.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),Xa.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${a} responses`),p(y)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,g),(0,HH.sendItcEvent)({type:n_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new fd("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Nl.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 g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return Xa.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof fd?Xa.error?.(`ITC failure during component status collection: ${r.message}`):Xa.warn?.("Failed to collect component status from all threads:",r),Xa.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,Nl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[a,c]of r)n.set(`${a}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},pd=class{static{o(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let a=s.indexOf("@"),c=a!==-1?s.substring(0,a):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let a=this.aggregateComponentGroup(s,i);r.set(s,a)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,a,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Ie.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!a&&(a=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:a};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Ie.ERROR,Ie.WARNING,Ie.LOADING,Ie.UNKNOWN,Ie.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Ie.UNKNOWN}},bie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Vg=new bp(bie)});var Za,Kg=se(()=>{Gw();ud();Kw();$g();Za=class e{static{o(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new md(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ie).includes(r))throw new md(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ie).join(", ")}`);this.statusMap.set(t,new dd(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Ie.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Ie.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Ie.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Ie.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Ie.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Ie.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={[Ie.HEALTHY]:0,[Ie.ERROR]:0,[Ie.WARNING]:0,[Ie.LOADING]:0,[Ie.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await Vg.collect(t);return pd.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:Ie.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let a=n.some(f=>f.status===Ie.ERROR),c=n.some(f=>f.status===Ie.LOADING),l=a?Ie.ERROR:c?Ie.LOADING:Ie.HEALTHY,u="All components loaded successfully",d={};if(a||c){u=n.filter(m=>m.status===Ie.ERROR||m.status===Ie.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Ie.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 mr,Yg=se(()=>{Kg();mr=new Za});function $H(e){let t=qH.get(e);return t||(t=new Yw(e),qH.set(e,t)),t}function VH(){mr.reset()}var Yw,qH,ro,KH,YH=se(()=>{Yg();ud();Yw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return mr.setStatus(this.componentName,Ie.HEALTHY,t),this}warning(t){return mr.setStatus(this.componentName,Ie.WARNING,t),this}error(t,r){return mr.setStatus(this.componentName,Ie.ERROR,t,r),this}loading(t){return mr.setStatus(this.componentName,Ie.LOADING,t||"Loading..."),this}unknown(t){return mr.setStatus(this.componentName,Ie.UNKNOWN,t),this}get(){return mr.getStatus(this.componentName)}},qH=new Map;o($H,"statusForComponent");ro={loading(e,t){mr.initializeLoading(e,t)},loaded(e,t){mr.markLoaded(e,t)},failed(e,t,r){mr.markFailed(e,t,r)}};o(VH,"reset");KH=Ie});var Ap={};Re(Ap,{AggregationError:()=>$w,COMPONENT_STATUS_LEVELS:()=>Ie,ComponentStatus:()=>dd,ComponentStatusError:()=>Ja,ComponentStatusOperationError:()=>md,ComponentStatusRegistry:()=>Za,CrossThreadCollectionError:()=>Vw,CrossThreadStatusCollector:()=>bp,CrossThreadTimeoutError:()=>qw,ITCError:()=>fd,StatusAggregator:()=>pd,componentStatusRegistry:()=>mr,crossThreadCollector:()=>Vg,query:()=>Aie});var Aie,WH=se(()=>{Yg();Kg();Gw();Kg();Kw();Yg();$g();ud();Aie={get(e){return mr.getStatus(e)},all(){return mr.getAllStatuses()},byStatus(e){return mr.getComponentsByStatus(e)},summary(){return mr.getStatusSummary()},async allThreads(){return Za.getAggregatedFromAllThreads(mr)}}});var Ww={};Re(Ww,{STATUS:()=>KH,internal:()=>Ap,lifecycle:()=>ro,reset:()=>VH,statusForComponent:()=>$H});var Ip=se(()=>{YH();WH()});var Np=v((uMe,QH)=>{"use strict";var fs=Q(),gn=(q(),M(z)),Iie=Dx(),wie=ds(),{validateEvent:zw}=os(),wp=ls(),Nie=require("process"),{resetDatabases:Cie}=(we(),M(mt)),Oie={[gn.ITC_EVENT_TYPES.SCHEMA]:Pie,[gn.ITC_EVENT_TYPES.USER]:jH,[gn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Die};async function Pie(e){let t=zw(e);if(t){fs.error(t);return}fs.trace("ITC schemaHandler received schema event:",e),await Iie(e.message),await Lie(e.message)}o(Pie,"schemaHandler");async function Lie(e){try{wp.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),wp.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),wp.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Cie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fs.error(t)}}o(Lie,"syncSchemaMetadata");var zH=[];async function jH(e){try{try{wp.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),wp.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fs.warn(r)}let t=zw(e);if(t){fs.error(t);return}fs.trace(`ITC userHandler ${gn.HDB_ITC_CLIENT_PREFIX}${Nie.pid} received user event:`,e),await wie.setUsersWithRolesCache();for(let r of zH)r()}catch(t){fs.error(t)}}o(jH,"userHandler");jH.addListener=function(e){zH.push(e)};async function Die(e){try{let t=zw(e);if(t){fs.error(t);return}fs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Ip(),M(Ww)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=os(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:gn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?fs.trace(`Sent component status response directly to thread ${u}`):(u===void 0?fs.debug("No originator threadId, falling back to broadcast"):fs.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){fs.error("Error handling component status request:",t)}}o(Die,"componentStatusRequestHandler");QH.exports=Oie});var os=v((EMe,XH)=>{"use strict";var fMe=Q(),jw=oe(),Mie=(q(),M(z)),{ITC_ERRORS:Cp}=zr(),{parentPort:mMe,threadId:vie,isMainThread:Uie,workerData:pMe}=require("worker_threads"),{onMessageFromWorkers:xie,broadcast:hMe,broadcastWithAcknowledgement:Bie}=nt();XH.exports={sendItcEvent:Fie,validateEvent:JH,SchemaEventMsg:kie,UserEventMsg:Hie};var Wg;xie(async(e,t)=>{Wg=Wg||Np(),JH(e),Wg[e.type]&&await Wg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Fie(e){return!Uie&&e.message&&(e.message.originator=vie),Bie(e)}o(Fie,"sendItcEvent");function JH(e){if(typeof e!="object")return Cp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||jw.isEmpty(e.type))return Cp.MISSING_TYPE;if(!e.hasOwnProperty("message")||jw.isEmpty(e.message))return Cp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||jw.isEmpty(e.message.originator))return Cp.MISSING_ORIGIN;if(Mie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Cp.INVALID_EVENT(e.type)}o(JH,"validateEvent");function kie(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(kie,"SchemaEventMsg");function Hie(e){this.originator=e}o(Hie,"UserEventMsg")});var $o=v((SMe,rG)=>{"use strict";var ZH=(q(),M(z)),gMe=oe(),zg=Q(),eG=px(),hd,{sendItcEvent:tG}=os();function Gie(e){try{zg.debug("signalSchemaChange called with message:",e),hd=hd||Np();let t=new eG(ZH.ITC_EVENT_TYPES.SCHEMA,e);return hd.schema(t),tG(t)}catch(t){zg.error(t)}}o(Gie,"signalSchemaChange");function qie(e){try{zg.trace("signalUserChange called with message:",e),hd=hd||Np();let t=new eG(ZH.ITC_EVENT_TYPES.USER,e);return hd.user(t),tG(t)}catch(t){zg.error(t)}}o(qie,"signalUserChange");rG.exports={signalSchemaChange:Gie,signalUserChange:qie}});function Op(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 nG(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Fs(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var Fs,Pp=se(()=>{Fs=class extends Map{static{o(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),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 a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(Op,"appendHeader");o(nG,"mergeHeaders")});function jg(e,t,r=Vie){let n;return function(...i){return n?n.length*Qw>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();Qw=(Qw*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var oG,$ie,Vie,sG,Kie,Jw,iG,Qw,Xw=se(()=>{oG=b(es()),$ie=3e3,Vie=2e4,sG=0,Kie=3e4,Jw=3e3,iG=performance.now()+Jw,Qw=0;o(jg,"throttle");setInterval(()=>{let e=performance.now();e-iG-Jw>$ie&&sG+Kie<e&&(oG.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),sG=e),iG=e},Jw).unref()});var _G={};Re(_G,{EVICTED:()=>qa,INVALIDATED:()=>xn,coerceType:()=>Jg,makeTable:()=>Zg});function Zg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=vA(i,n,l),C,I,k={},J=Promise.resolve(),G,H,X;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(G=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(H=K),K.expiresAt&&(X=K),K.isPrimaryKey&&(k=K);let W,ue=[],ce=[],te=1,ye=2,Ae={},Ye={},qe=864e5,Ar=0,tr,Wr,vr,Su=!1,kc,xt,ri,Ca=Ol.get(F.REPLICATION_DATABASES);if(Array.isArray(Ca)){for(let K of Ca)if(K.name===c&&K.replicateTo>=0){ri=K.replicateTo;break}}let VE=i.getRange({start:!1,end:!1}).constructor,Qf=10,KE=6;g&&tm(),Mm(i.env.path,K=>{if(I)return Pa(K)});class Jf extends _l{static{o(this,"Updatable")}getUpdatedTime(){return Ha.get(this.getRecord())?.version}getExpiresAt(){return Ha.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new fp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class Pe extends Hr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=G;static updatedTimeProperty=H;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(L=>!L.intermediateSource)){if(this.sources.some(L=>L.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}I=I||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),C=C||_.load;let N=o(L=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[L]&&(!U[L].reliesOnPrototype||U.prototype[L])),A.length>0)if(A.length===1){let U=A[0];return(w,D,$)=>{if(w?.source!==U)return U[L](D,$,w)}}else return(U,w,D)=>{let $=[];for(let Y of A){if(U?.source===Y)break;$.push(Y[L](w,D,U))}return Promise.all($)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=o(L=>{if(P[L]&&(!P[L].reliesOnPrototype||P.prototype[L]))return(A,U,w)=>{if(!A?.source)return P[L](U,w,A)}},"getApplyToCanonicalSource");Ae={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ye={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish"),invalidate:N("invalidate")};let x=P.shouldRevalidateEvents;return(async()=>{let L=!1,A,U=o(async(w,D)=>{let $=w.value,Y=w.table?De[c][w.table]:Pe;if(c===im&&(w.table===Iu.ROLE_TABLE_NAME||w.table===Iu.USER_TABLE_NAME)&&(L=!0),w.id===void 0&&(w.id=$[Y.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));w.source=_;let j={residencyId:Hc(w.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:w.nodeId,async:!0},B=w.id,Ee=await Y.getResource(B,D,j);switch(w.finished&&await w.finished,w.type){case"put":return x?Ee._writeInvalidate(B,$,j):Ee._writeUpdate(B,$,!0,j);case"patch":return x?Ee._writeInvalidate(B,$,j):Ee._writeUpdate(B,$,!1,j);case"delete":return Ee._writeDelete(B,j);case"publish":case"message":return Ee._writePublish(B,$,j);case"invalidate":return Ee._writeInvalidate(B,$,j);case"relocate":return Ee._writeRelocate(B,j);default:Fe.default.error?.("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=_.subscribe;w&&R==null&&(R=!0);let D={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=_.subscribeOnThisThread?_.subscribeOnThisThread((0,Cl.getWorkerIndex)(),D):(0,Cl.getWorkerIndex)()===0,Y=w&&$&&await _.subscribe?.(D);if(Y){let j;for await(let B of Y)try{if(!(B.type==="transaction"?B.writes[0]:B)){Fe.default.error?.("Bad subscription event",B);continue}if(B.source=_,B.type==="end_txn"){if(j?.resolve(),B.localTime&&A!==B.localTime){if(B.remoteNodeIds?.length>0){let pe=[Symbol.for("seq"),B.remoteNodeIds[0]],ne=d.get(pe),ie=ne?.nodes;ie||(ie=[]);for(let de of B.remoteNodeIds.slice(1)){let ae=ie.find(ke=>ke.id===de);ie=ie.filter(ke=>ke.id!==de||ke===ae),ae||(ae={id:de,seqId:0},ie.push(ae)),ae.seqId=Math.max(ne?.seqId??1,B.localTime),de===j?.nodeId&&(ae.lastTxnTime=B.timestamp)}let xe=Math.max(ne?.seqId??1,B.localTime);Fe.default.trace?.("Received txn",c,xe,new Date(xe),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(pe,{seqId:xe,nodes:ie})}A=B.localTime}B.onCommit&&j?.committed.then(B.onCommit);continue}if(j)if(B.beginTxn)j.resolve();else{j.write_promises.push(U(B,j));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let fe=bt(B,()=>{if(B.type==="transaction"){let pe=[];for(let ne of B.writes)try{pe.push(U(ne,B))}catch(ie){throw ie.message+=" writing "+JSON.stringify(ne)+" of event "+JSON.stringify(B),ie}return Promise.all(pe)}else if(B.type==="define_schema"){let pe=this.attributes.slice(0),ne=!1;for(let ie of B.attributes)pe.find(xe=>xe.name===ie.name)||(pe.push(ie),ne=!0);ne&&(Ze({table:s,database:c,attributes:pe,origin:"cluster"}),Dp.signalSchemaChange(new Mp.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return B.beginTxn?(j=B,j.write_promises=[U(B,B)],new Promise(pe=>{j.resolve=()=>pe(Promise.all(j.write_promises))})):U(B,B)});j&&(j.committed=fe),L&&fe&&!fe?.waitingForUserChange&&(fe.then(()=>Dp.signalUserChange(new Mp.UserEventMsg(process.pid))),fe.waitingForUserChange=!0),B.onCommit&&(fe?fe.then(B.onCommit):B.onCommit())}catch(Ee){Fe.default.error?.("error in subscription handler",Ee)}}}catch(w){Fe.default.error?.(w)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==Pe.prototype.get}static getResource(_,T,N){let P=super.getResource(_,T,N);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Bi(_);try{if(P.getRecord?.())return P;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let O=!N?.async||i.cache?.get?.(_),x=Ur(T),L=x.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return No(_,T,{transaction:L,ensureLoaded:N?.ensureLoaded},O,A=>{if(A?Pe._updateResource(P,A):P.#e=null,T.onlyIfCached){if(!P.doesExist())throw new lt.ServerError("Entry is not cached",504)}else if(N?.ensureLoaded){let U=dn(_,A,T,P);if(U)return x?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,ks(U,w=>(Pe._updateResource(P,w),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(_)),O}}return P}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=dn(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,ks(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=k?.type;if(_==="String"||_==="ID")return super.getNewId();if(!xt){let O=i.getEntry(Symbol.for("id_allocation")),x=O?.value,L;if(x&&x.nodeName===server.hostname&&(!noe(i)||x.pid===process.pid)){let A=x.start,U=x.end;L=A;for(let w of i.getKeys({start:U,end:A,limit:1,reverse:!0}))L=w}else x=P(O?.version??null),L=x.start;xt=new BigInt64Array([BigInt(L)+1n]),xt=new BigInt64Array(i.getUserSharedBuffer("id",xt.buffer)),xt.maxSafeId=x.end}let T=Number(Atomics.add(xt,0,1n)),N=_==="Int"?512:1048576;if(T+N>=xt.maxSafeId){let O=o(x=>{xt.maxSafeId=T+(_==="Int"?1023:4194303);let L=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=x?void 0:i.useReadTransaction(),U=Number(xt[0]);for(let $ of i.getKeys({start:U+1,end:L,limit:1,transaction:A}))L=$;A?.done();let{value:w,version:D}=i.getEntry(Symbol.for("id_allocation"));if(xt.maxSafeId<L){if(w.end>xt.maxSafeId-100)return;Fe.default.info?.("New id allocation",T,xt.maxSafeId,D),i.put(Symbol.for("id_allocation"),{start:w.start,end:xt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),D)}else{Fe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${xt.maxSafeId}, but id of ${L} detected`);let $=P(D);$.alreadyUpdated||Atomics.store(xt,0,BigInt($.start+1)),xt.maxSafeId=$.end}},"updateEnd");T+N===xt.maxSafeId?setImmediate(O):T+100>=xt.maxSafeId&&(Fe.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return T;function P(O){let x=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=x/4,A,U,w=!1,D,$;do{D=Math.floor(Math.random()*x),$={start:D,end:D+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let Y of i.getKeys({start:D,limit:1,reverse:!0}))A=Y;U=x;for(let Y of i.getKeys({start:D+1,end:x,limit:1}))U=Y;L*=.875,L<1e3&&!w&&(w=!0,Fe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,D,A,U,L))}while(!(L<U-D&&(L<D-A||A===0)));return i.transactionSync(()=>{let Y=i.getEntry(Symbol.for("id_allocation"));return(Y?.version??null)==O?(Fe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(Fe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...Y.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,qe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");qe=qe||(h+E)/4,Pa()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Pe.getResidency=_&&((T,N)=>{try{return _(T,N)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(_){Pe.getResidencyById=_&&(T=>{try{return _(T)}catch(N){throw N.message+=` in residency function for table ${s}`,N}})}static getResidency(_,T){if(Pe.getResidencyById)return Pe.getResidencyById(_[t]);let N=ri;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(N=T.replicateTo)}if(N>=0&&server.nodes){let P=[server.hostname];if(T.previousResidency)P.push(...T.previousResidency.slice(0,N));else{let O=server.nodes.map(A=>A.name),x=Math.floor(O.length*Math.random());P.push(...O.slice(x,x+N));let L=x+N-O.length;L>0&&P.push(...O.slice(0,L))}return P}}static enableAuditing(){g||(g=!0,tm(),Pe.audit=!0)}static coerceId(_){return _===""?null:Jg(_,k)}static async dropTable(){delete De[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Jr&&_.value&&Ba(_.value);if(c===a){for(let _ of S)d.remove(Pe.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Pe.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),eN.default.unlinkSync(i.env.path);Dp.signalSchemaChange(new Mp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(Xf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let N={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Pe.getRecordCount().then(P=>(N.recordCount=P.recordCount,N.estimatedRecordRange=P.estimatedRange,N)):N}if(_!==void 0&&T.loadAsInstance===!1){let N=this.getContext(),P=Ur(N),O=P.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let x=Os(_);Bi(x);let L=!0;return _.checkPermission&&(L=this.allowRead(N.user,_)),ks(ks(L,A=>{if(!A)throw new lt.AccessViolation(N.user);let U=!0;return No(x,N,{transaction:O,ensureLoaded:U},!1,w=>{if(N.onlyIfCached){if(!w?.value)throw new lt.ServerError("Entry is not cached",504)}else if(U){let D=dn(x,w,N);if(D)return P?.disregardReadTxn(),N.loadedFromSource=!0,D.then($=>$?.value)}return w?.value})}),A=>{let U=_?.select;return U&&A!=null?zu(U,this.constructor)(A):A})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let N=On(_,T);if(N?.read){if(N.isSuperUser)return!0;let P=N.attribute_permissions,O=T?.select;if(P?.length>0||Su&&O){if(T||(T={}),O){let x=P?.length>0&&Zw(P,"read");T.select=O.map(L=>{let A=L.name||L;if(!x||x[A]){let U=vr[A]?.definition?.tableClass;if(U){if(L.name||(L={name:L}),!L.checkPermission&&T.checkPermission&&(L.checkPermission=T.checkPermission),!U.prototype.allowRead.call(null,_,L))return!1;if(!L.select)return L.name}return L}}).filter(Boolean)}else T.select=P.filter(x=>x.read&&!vr[x.attribute_name]).map(x=>x.attribute_name);return T}else return!0}}allowUpdate(_,T,N){let P=On(_,N);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let x=Zw(O,"update");for(let L in T)if(!x[L])return!1;for(let L of O){let A=L.attribute_name;!L.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return Oa(this.getContext())}}allowCreate(_,T,N){if(this.isCollection){let P=On(_,N);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let x=Zw(O,"insert");for(let L in T)if(!x[L])return!1;return Oa(this.getContext())}else return Oa(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return On(_,T)?.delete&&Oa(this.getContext())}update(_,T){let N,P=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),O=!1;P?(O=T,T=_,N=this.getId()):N=Os(_);let x=this.getContext();if(!Ur(x))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(O)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(P){let A=this.#t;A&&(T=Object.assign(A,T)),this.#t=T}else{let A=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(A=this.allowUpdate(x.user,T,_)),ks(A,U=>{if(!U)throw new lt.AccessViolation(x.user);return ks(i.get(Os(_)),w=>{let D=new Jf(w);return D._setChanges(T),this._writeUpdate(N,D.getChanges(),!1),D})})}return this._writeUpdate(N,this.#t,O),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===cG?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new fp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let T=!0,N=this.getContext();return _?.checkPermission&&(T=this.allowDelete(N.user,_,N)),ks(T,P=>{if(!P)throw new lt.AccessViolation(N.user);this._writeInvalidate(_?Os(_):this.getId())})}_writeInvalidate(_,T,N){let P=this.getContext();Bi(_),Ur(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.invalidate?.bind(this,P,_),beforeIntermediate:bu(T,Ye.invalidate?.bind(this,P,_)),commit:o((x,L)=>{if(!(xr(x,L,N?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));Fe.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,T,L,x,xn,g,{user:P?.user,residencyId:N?.residencyId,nodeId:N?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let N=this.getContext();Bi(_),Ur(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.relocate?.bind(this,N,_),beforeIntermediate:Ye.relocate?.bind(this,N,_),commit:o((O,x)=>{if(xr(O,x,T?.nodeId)<=0)return;let L=Pe.getResidencyRecord(T.residencyId),A=0,U=null,w=x?.value;if(L&&!L.includes(server.hostname)){for(let D in r)U||(U={}),U[D]=w[D];A=xn}else U=w;Fe.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(O).toISOString()}`),y(_,U,x,O,A,g,{user:N.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let N={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},P=La(this.getResidency(T.value,N)),O;if(P){if(!P.includes(server.hostname))return!1;O=Hc(P)}let x=0;Fe.default.debug?.("Performing a relocate of an entry",existing_entry.key,T.value,P);let L=y(_.key,T.value,_,_.version,x,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,N){let P=this.Source,O;if(!((I||g)&&(!T||(O=i.getEntry(_),!O||!T)||O.version!==N))){if(I){if(i.hasLock(_,O.version))return;let x;for(let L in r)x||(x={}),x[L]=T[L];if(x)return y(_,x,O,N,qa,null,null,null,!0)}if(i.ifVersion(_,N,()=>{Tu(_,T,null)}),g)return y(_,null,O,N,qa,null,null,null,!0);al(i,O??i.getEntry(_),N)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let N=!0;if(_==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return _.checkPermission&&(N=this.allowUpdate(P.user,T,_)),ks(N,O=>{if(!O)throw new lt.AccessViolation(P.user);if(Array.isArray(T))for(let x of T){let L=x[t];this._writeUpdate(L,x,!0)}else{let x=Os(_);this._writeUpdate(x,T,!0)}})}}create(_,T){let N=!0,P=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(N=this.allowCreate(P.user,T,_)),ks(N,O=>{if(!O)throw new lt.AccessViolation(P.user);let x=Os(_)??T[t];if(x===void 0)x=this.constructor.getNewId();else if(i.get(x))throw new lt.ClientError("Record already exists",409);return this._writeUpdate(x,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let N=this.update(_,T);if(N?.then)return N.then(()=>{})}}_writeUpdate(_,T,N,P){let O=this.getContext(),x=Ur(O);Bi(_);let L=this.#n??i.getEntry(_);this.#s=N?cG:Zie;let A=o(w=>N?w.put?()=>w.put(O,_,T):null:w.patch?()=>w.patch(O,_,T):w.put?()=>w.put(O,_,gl(this)):null,"writeToSources"),U={key:_,store:i,entry:L,nodeName:O?.nodeName,validate:o(w=>{T||(T=this.#t),N||T&&Og(this.#t===T?this:T)?O?.source||(x.checkOverloaded(),this.validate(T,!N),H&&(T[H.name]=H.type==="Date"?new Date(w):H.type==="String"?new Date(w).toISOString():w),N&&(t&&T[t]!==_&&(T[t]=_),G&&(L?.value?T[G.name]=L?.value[G.name]:T[G.name]=G.type==="Date"?new Date(w):G.type==="String"?new Date(w).toISOString():w),T=gl(T))):x.removeWrite(U)},"validate"),before:A(Ae),beforeIntermediate:bu(T,A(Ye)),commit:o((w,D,$)=>{if($){if(O&&D?.version>(O.lastModified||0)&&(O.lastModified=D.version),this.#n=D,D?.value&&D.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");N||(this.#e=D?.value??null)}this.#t=void 0,this.#r=w;let Y=D?.value,j;this.#s=0;let B=!1,Ee=xr(w,D,P?.nodeId),fe;if(Ee<=0){if(g){let de=D.localTime,ae=D.version;Fe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(w),"applying later update from:",new Date(ae),"local recorded time",new Date(de));let ke=[];for(;de>w||ae>=w&&de>0;){let Be=l.get(de);if(!Be)break;let Le=At(Be);if(ae=Le.version,ae>=w){if(ae===w){if(Ee=xr(w,{version:ae,localTime:de},P?.nodeId),Ee===0)return;if(Ee>0)continue}if(Le.type==="patch")ke.push(Le),fe=T;else if(Le.type==="put"||Le.type==="delete")return}de=Le.previousLocalTime}de||Fe.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",D),ke.sort((Be,Le)=>Be.version-Le.version);for(let Be of ke){let Le=Be.getValue(i);if(Fe.default.debug?.("Rebuilding update with future patch:",new Date(Be.version),Le,Be),j=T_(j??T,Le,N),!j)return}}else{if(N)return;j=T_(j??T,Y,N),Fe.default.debug?.("Rebuilding update without audit:",j)}Fe.default.trace?.("Rebuilt record to save:",j," is full update:",N)}let pe;if(N&&!j?pe=T:this.constructor.loadAsInstance===!1?pe=gl(Y,j??T):(this.#e=Y,pe=gl(this,j??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let ne;if(P?.residencyId!=null)ne=P.residencyId;else{L?.residencyId&&(O.previousResidency=Pe.getResidencyRecord(L.residencyId));let de=La(Pe.getResidency(pe,O));if(de&&!de.includes(server.hostname))if(fe??=pe,B=!0,Pe.getResidencyById)pe=void 0;else{pe=null;for(let ae in r)pe||(pe={}),pe[ae]=fe[ae]}ne=Hc(de)}N||(fe=T);let ie=O?.expiresAt??(h?h+Date.now():-1);Fe.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(w).toISOString()}${ie?", expires at: "+new Date(ie).toISOString():""}${D?", replaces entry from: "+new Date(D.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),Tu(_,Y,pe);let xe=N?"put":"patch";y(_,pe,D,w,B?xn:0,g,{omitLocalRecord:B,user:O?.user,residencyId:ne,expiresAt:ie,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},xe,!1,fe),O.expiresAt&&Pa()},"commit")};x.addWrite(U)}async delete(_){if(Xf(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,N=this.getContext();return _.checkPermission&&(T=this.allowDelete(N.user,_,N)),ks(T,P=>{if(!P)throw new lt.AccessViolation(N.user);let O=Os(_);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let N=Ur(this.getContext());Bi(_);let P=this.getContext();return N.addWrite({key:_,store:i,entry:this.#n,nodeName:P?.nodeName,before:Ae.delete?.bind(this,P,_),beforeIntermediate:Ye.delete?.bind(this,P,_),commit:o((O,x,L)=>{let A=x?.value;L&&(P&&x?.version>(P.lastModified||0)&&(P.lastModified=x.version),Pe._updateResource(this,x)),!(xr(O,x,T?.nodeId)<=0)&&(Tu(this.getId(),A),Fe.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(O).toISOString()}`),g||R?(y(_,null,x,O,0,g,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||Pa()):al(i,x))},"commit")}),!0}search(_){let T=this.getContext(),N=Ur(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new lt.AccessViolation(T.user);T&&(T.lastModified=jie);let P=_.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let O=_.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let x,L={};function A(ie,xe){let de;switch(xe){case"and":case void 0:if(ie.length<1)throw new Error('An "and" operator requires at least one condition');de=!0;break;case"or":if(ie.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+xe)}for(let ae of ie){if(ae.conditions){ae.conditions=A(ae.conditions,ae.operator);continue}let ke=ae[0]??ae.attribute,Be=ke==null?k:Ki(S,ke);if(Be)(Be.type||xA[ae.comparator])&&(ae[1]===void 0?ae.value=w(ae.value,Be):ae[1]=w(ae[1],Be));else if(ke!=null)throw(0,lt.handleHDBError)(new Error,`${ke} is not a defined attribute`,404);if(ae.chainedConditions)if(ae.chainedConditions.length===1&&(!ae.operator||ae.operator=="and")){let Le=ae.chainedConditions[0],Me,pt;if(Le.comparator==="gt"||Le.comparator==="greater_than"||Le.comparator==="ge"||Le.comparator==="greater_than_equal"?(Me=ae,pt=Le):(Me=Le,pt=ae),Me.comparator!=="lt"&&Me.comparator!=="less_than"&&Me.comparator!=="le"&&Me.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let wt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",Et=Me.comparator==="le"||Me.comparator==="less_than_equal";ae.comparator=(wt?"ge":"gt")+(Et?"le":"lt"),ae.value=[pt.value,Me.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ie}o(A,"prepareConditions");function U(ie,xe){if(_.enforceExecutionOrder)return ie;for(let de of ie)de.conditions&&(de.conditions=U(de.conditions,de.operator));return ie.length>1&&xe!=="or"?Yie(ie,sg(Pe)):ie}o(U,"orderConditions");function w(ie,xe){return Array.isArray(ie)?ie.map(de=>Jg(de,xe)):Jg(ie,xe)}o(w,"coerceTypedValues");let D=_.operator;(P.length>0||D)&&(P=A(P,D));let $=typeof _.sort=="object"&&_.sort,Y;if($&&D!=="or"){let ie=$.attribute;if(ie==null)throw new lt.ClientError("Sort requires an attribute");if(x=P.find(xe=>Ku(xe.attribute)===Ku(ie)),!x){let xe=Ki(S,ie);if(!xe)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not a defined attribute`,404);if(xe.indexed)x={...$,comparator:"sort"},P.push(x);else if(P.length===0&&!_.allowFullScan)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not indexed and not combined with any other conditions`,404)}x&&(x.descending=!!$.descending)}P=U(P,D),$&&(x&&P[0]===x?$.next&&(Y={dbOrderedAttribute:$.attribute,attribute:$.next.attribute,descending:$.next.descending,next:$.next.next}):(x&&P.splice(P.indexOf(x),1),Y=$));let j=_.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:P,operator:D,postOrdering:Y,selectApplied:!!j};let B=N.useReadTxn(),Ee=BA(P,D,Pe,B,_,T,(ie,xe)=>em(ie,j,T,B,xe),L),fe=_.ensureLoaded!==!1,pe=Pe.transformEntryForSelect(j,T,B,L,fe,!0),ne=Pe.transformToOrderedSelect(Ee,j,Y,T,B,pe);return(_.offset||_.limit!==void 0)&&(ne=ne.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),ne.onDone=()=>{ne.onDone=null,N.doneReadTxn()},ne.selectApplied=!0,ne.getColumns=()=>{if(j){let ie=[];for(let xe of j)xe==="*"?ie.push(...S.map(de=>de.name)):ie.push(xe.name||xe);return ie}return S.filter(ie=>!ie.computed&&!ie.relationship).map(ie=>ie.name)},ne}static transformToOrderedSelect(_,T,N,P,O,x){let L=new VE;if(N){_=em(_,T,P,O,null);let A;L.iterate=function(){let w,D=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),$,Y=N.dbOrderedAttribute,j,B,Ee=!0;function fe(ne){let ie=ne.next&&fe(ne.next),xe=ne.descending;return P.sort=ne,(de,ae)=>{let ke=yu(de,ne.attribute,P),Be=yu(ae,ne.attribute,P),Le=xe?(0,Pl.compareKeys)(Be,ke):(0,Pl.compareKeys)(ke,Be);return Le===0?ie?.(de,ae)||0:Le}}o(fe,"createComparator");let pe=fe(N);return{async next(){let ne;if(w)if(ne=w.next(),ne.done){if($)return L.onDone&&L.onDone(),ne}else return{value:await x.call(this,ne.value)};A=[],j&&A.push(j);do if(ne=await D.next(),ne.done){if($=!0,A.length)break;return L.onDone&&L.onDone(),ne}else{let ie=ne.value;if(ie?.then&&(ie=await ie),Y){let xe=yu(ie,Y,P);if(Ee)Ee=!1,B=xe;else if(xe!==B){B=xe,j=ie;break}}A.push(ie)}while(!0);return N.isGrouped,A.sort(pe),w=A[Symbol.iterator](),ne=w.next(),ne.done?(L.onDone&&L.onDone(),ne):{value:await x.call(this,ne.value)}},return(){return L.onDone&&L.onDone(),D.return()},throw(){return L.onDone&&L.onDone(),D.throw()}}};let U=o(w=>{if(typeof T=="object"&&Array.isArray(w.attribute))for(let D=0;D<T.length;D++){let $=T[D],Y;if($.name===w.attribute[0]){for(Y=$.sort||($.sort={});Y.next;)Y=Y.next;Y.attribute=w.attribute.slice(1),Y.descending=w.descending}else $===w.attribute[0]&&(T[D]=Y={name:$,sort:{attribute:w.attribute.slice(1),descending:w.descending}})}w.next&&U(w.next)},"applySortingOnSelect");U(N)}else L.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),L=L.map(function(A){try{let U=x.call(this,A);return typeof U?.catch=="function"?U.catch(w=>{throw w.partialObject={[t]:A.key},w}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return L}static transformEntryForSelect(_,T,N,P,O,x){let L;O&&I&&!(typeof _=="string"?[_]:_)?.every(w=>{let D;return typeof w=="object"?D=w.name:D=w,r[D]||D===t})&&(L=!0);let A,U=o(function(w){let D;if(T?.transaction?.stale&&(T.transaction.stale=!1),w!=null){if(D=w.deref?w.deref():w.value,!D&&(w.key===void 0||w.deref)||w.metadataFlags&xn){if(w.metadataFlags&xn&&T.replicateFrom===!1&&x&&w.residencyId)return tc.SKIP;if(w=No(w.key??w,T,{transaction:N,lazy:_?.length<4,ensureLoaded:O},this?.isSync,$=>$),w?.then)return w.then(U.bind(this));D=w?.value}if(L&&w?.metadataFlags&(xn|qa)||w?.expiresAt!=null&&w?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:w.key,message:"This entry has expired"};let $=dn(w.key??w,w,T);if($?.then)return $.then(U)}}if(D==null)return x?tc.SKIP:D;if(_&&!(_[0]==="*"&&_.length===1)){let $,Y=o((B,Ee)=>{let fe;typeof B=="object"?fe=B.name:fe=B;let pe=vr?.[fe],ne;if(pe){let ie=P?.[fe];if(ie)if(ie.hasMappings){let de=pe.from?D[pe.from]:Ku(w.key);ne=ie.get(de),ne||(ne=[])}else ne=ie.fromRecord?.(D);else ne=pe(D,T,w,!0);let xe=o(de=>{if(pe.directReturn)return Ee(de,fe);if(de&&typeof de=="object"){let ae=pe.definition?.tableClass||Pe;A||(A={});let ke=A[fe]||(A[fe]=ae.transformEntryForSelect(fe===B?null:B.select||(Array.isArray(B)?B:null),T,N,ie,O));if(Array.isArray(de)){let Be=[],Le=ae.transformToOrderedSelect(de,B.select,typeof B.sort=="object"&&B.sort,T,N,ke)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Me=o(wt=>{for(;!wt.done;){if(wt?.then)return wt.then(Me);Be.push(wt.value),wt=Le.next()}Ee(Be,fe)},"nextValue"),pt=Me(Le.next());pt&&($||($=[]),$.push(pt));return}else if(de=ke.call(this,de),de?.then){$||($=[]),$.push(de.then(Be=>Ee(Be,fe)));return}}Ee(de,fe)},"handleResolvedValue");ne?.then?($||($=[]),$.push(ne.then(xe))):xe(ne);return}else ne=D[fe],ne&&typeof ne=="object"&&fe!==B&&(ne=Pe.transformEntryForSelect(B.select||B,T,N,null)({value:ne}));Ee(ne,fe)},"selectAttribute"),j;if(typeof _=="string")Y(_,B=>{j=B});else if(Array.isArray(_))if(_.asArray)j=[],_.forEach((B,Ee)=>{B==="*"?_[Ee]=D:Y(B,fe=>j[Ee]=fe)});else{j={};let B=_.forceNulls;for(let Ee of _)if(Ee==="*")for(let fe in D)j[fe]=D[fe];else Y(Ee,(fe,pe)=>{fe===void 0&&B&&(fe=null),j[pe]=fe})}else throw new lt.ClientError("Invalid select"+_);return $?Promise.all($).then(()=>j):j}return D},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,N=[],P=VA(Pe,this.getId()??null,function(L,A,U,w){try{let D=A.getValue?.(i,T),$=A.type;if(!D&&$==="patch"&&T){let j=i.getEntry(L);j?.version===A.version?D=j.value:D=A.getValue?.(i,!0,U),$="put"}let Y={id:L,localTime:U,value:D,version:A.version,type:$,beginTxn:w};N?N.push(Y):(c!=="system"&&Ve(A.size??1,"db-message",s,null),this.send(Y))}catch(D){Fe.default.error?.(D)}},_.startTime||0,_),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,_.onlyChildren&&(P.onlyChildren=!0)),_.supportsTransactions&&(P.supportsTransactions=!0);let L=this.getId(),A=_.previousCount;A>1e3&&(A=1e3);let U=_.startTime;if(this.isCollection){if(U){if(A)throw new lt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:w,value:D}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let $=At(D);if($.tableId!==n)continue;let Y=$.recordId;if(L==null||fG(L,Y)){let j=$.getValue(i,T,w);if(x({id:Y,localTime:w,value:j,version:$.version,type:$.type,size:$.size}),P.queue?.length>uG&&await P.waitForDrain()===!1)return}P.startTime=w}}else if(A){let w=[];for(let{key:D,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let Y=At($);if(Y.tableId!==n)continue;let j=Y.recordId;if(L==null||fG(L,j)){let B=Y.getValue(i,T,D);if(w.push({id:j,localTime:D,value:B,version:Y.version,type:Y.type}),--A<=0)break}}catch(Y){Fe.default.error("Error getting history entry",D,Y)}for(let D=w.length;D>0;)x(w[--D]);w[0]&&(P.startTime=w[0].localTime)}else if(!_.omitCurrent){for(let{key:w,value:D,version:$,localTime:Y,size:j}of i.getRange({start:L??!1,end:L==null?void 0:[L,Pl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(D&&(x({id:w,localTime:Y,value:D,version:$,type:"put",size:j}),P.queue?.length>uG&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let w=this.#n?.localTime;if(w===MA&&(i.cache?.delete(L),this.#n=i.getEntry(L),Fe.default.trace?.("re-retrieved record",w,this.#n?.localTime),w=this.#n?.localTime),Fe.default.trace?.("Subscription from",U,"from",L,w),U<w){let D=[],$=w;do{let Y=l.get($);if(Y){_.omitCurrent=!0;let j=At(Y),B=j.getValue(i,T,$);T&&(j.type="put"),D.push({id:L,value:B,localTime:$,...j}),$=j.previousLocalTime}else break;A&&A--}while($>U&&A!==0);for(let Y=D.length;Y>0;)x(D[--Y]);P.startTime=w}!_.omitCurrent&&this.doesExist()&&x({id:L,localTime:w,value:this.#e,version:this.#r,type:"put"})}for(let w of N)x(w);N=null})();function x(L){c!=="system"&&Ve(L.size??1,"db-message",s,null),P.send(L)}return o(x,"send"),_.listener&&P.on("data",_.listener),P}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,N){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let P=!0,O=this.getContext();return _.checkPermission&&(P=this.allowCreate(O.user,_,O)),ks(P,x=>{if(!x)throw new lt.AccessViolation(O.user);let L=Os(_);this._writePublish(L,T,N)})}}_writePublish(_,T,N){let P=Ur(this.getContext());_??=null,_!==null&&Bi(_);let O=this.getContext();P.addWrite({key:_,store:i,entry:this.#n,nodeName:O?.nodeName,validate:o(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:Ae.publish?.bind(this,O,_,T),beforeIntermediate:bu(T,Ye.publish?.bind(this,O,_,T)),commit:o((x,L,A)=>{L===void 0&&R&&!g&&Pa(),Fe.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,L?.value??null,L,L?.version||x,0,!0,{user:O?.user,residencyId:N?.residencyId,expiresAt:O?.expiresAt,nodeId:N?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let N,P=o((O,x,L)=>{if(x.type&&O!=null)if(T&&O.__op__&&(O=O.value),x.properties){typeof O!="object"&&(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be an object${x.type?" ("+x.type+")":""}`);let A=x.properties;for(let U=0,w=A.length;U<w;U++){let D=A[U];if(D.relationship||D.computed){_.hasOwnProperty(D.name)&&(N||(N=[])).push(`Computed property ${L}.${D.name} may not be directly assigned a value`);continue}let $=P(O[D.name],D,L+"."+D.name);$&&(O[D.name]=$)}if(x.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(w=>w.name===U)||(N||(N=[])).push(`Property ${U} is not allowed within object in property ${L}`)}else switch(x.type){case"Int":(typeof O!="number"||O>>0!==O)&&(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a string`);break;case"Boolean":typeof O!="boolean"&&(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(O instanceof Ds)){if(typeof O=="string"&&(O=Buffer.from(O)),O instanceof Buffer)return createBlob(O,{type:"text/plain"});(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(x.elements)for(let A=0,U=O.length;A<U;A++){let w=O[A],D=P(w,x.elements,L+"[*]");D&&(O[A]=D)}}else(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be an Array`);break}x.nullable===!1&&O==null&&(N||(N=[])).push(`Property ${L} is required (and not does not allow null values)`)},"validateValue");for(let O=0,x=S.length;O<x;O++){let L=S[O];if(L.relationship||L.computed){Object.hasOwn(_,L.name)&&(N||(N=[])).push(`Computed property ${L.name} may not be directly assigned a value`);continue}if(!T||L.name in _){let A=P(_[L.name],L,L.name);A!==void 0&&(_[L.name]=A)}}if(f)for(let O in _)S.find(x=>x.name===O)||(N||(N=[])).push(`Property ${O} is not allowed`);if(N)throw new lt.ClientError(N.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let N of _){if(!N.name)throw new lt.ClientError("Attribute name is required");if(N.name.match(/[`/]/))throw new lt.ClientError("Attribute names cannot include backticks or forward slashes");Wie(N.name),T.push(N)}return Ze({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static async removeAttributes(_){let T=S.filter(N=>!_.includes(N.name));return Ze({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,T=eN.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,N=1e3/2,P=performance.now(),O=Math.floor(T/2),x=_?.exactCount,L=0,A=0,U;for(let{value:w}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(w!=null&&L++,A++,await ec(),!x&&A<O&&performance.now()-P>N){U=A;break}if(U){let w=L;L=0;for(let{value:ne}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))ne!=null&&L++,await ec();let D=U*2,$=(L+w)/D,Y=Math.pow((L-w+1)/U/2,2)+$*(1-$)/D,j=Math.max(Math.sqrt(Y)*T,1),B=Math.round($*T),Ee=Math.max(B-1.96*j,L+w),fe=Math.min(B+1.96*j,T),pe=Math.pow(10,Math.round(Math.log10(j)));return pe>B&&(pe=pe/10),L=Math.round(B/pe)*pe,{recordCount:L,estimatedRange:[Math.round(Ee),Math.round(fe)]}}return{recordCount:L}}static updatedAttributes(){vr=this.propertyResolvers={$id:o((_,T,N)=>({value:N.key}),"$id"),$updatedtime:o((_,T,N)=>N.version,"$updatedtime"),$updatedTime:o((_,T,N)=>N.version,"$updatedTime"),$expiresAt:o((_,T,N)=>N.expiresAt,"$expiresAt"),$record:o((_,T,N)=>N?{value:_}:_,"$record"),$distance:o((_,T,N)=>N&&(N.distance??T?.vectorDistances?.get(N)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(k=_),_.resolve=null;let T=_.relationship,N=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),N&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Su=!0,T.to)_.elements?.definition?(vr[_.name]=_.resolve=(P,O,x,L)=>{let A=P[T.from?T.from:t],U=_.elements.definition.tableClass;return L?Vu({attribute:T.to,value:A},Ur(O).getReadTxn(),!1,U,!1).map(w=>w&&w.key!==void 0?w:U.primaryStore.getEntry(w,{transaction:Ur(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=_.definition||_.elements?.definition;P?(vr[_.name]=_.resolve=(O,x,L,A)=>{let U=O[T.from];if(U===void 0)return;if(_.elements){let D,$=U?.map(Y=>{let j=P.tableClass.primaryStore[A?"getEntry":"get"](Y,{transaction:Ur(x).getReadTxn()});return j?.then&&(D=!0),Pe.loadAsInstance===!1&&Object.freeze(A?j?.value:j),j});return T.filterMissing?D?Promise.all($).then(Y=>Y.filter(mG)):$.filter(mG):D?Promise.all($):$}let w=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Ur(x).getReadTxn()});return Pe.loadAsInstance===!1&&Object.freeze(A?w?.value:w),w},_.set=(O,x)=>{if(Array.isArray(x)){let L=x.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=L}else{let L=x.getId?.()||x[P.tableClass.primaryKey];O[T.from]=L}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(N)typeof N.from=="function"&&this.setComputedAttribute(_.name,N.from),vr[_.name]=_.resolve=(P,O,x)=>{let L=typeof N.from=="string"?P[N.from]:P,A=this.userResolvers[_.name];if(A)return A(L,O,x);Fe.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let P=r[_.name].customIndex;vr[_.name]=(O,x,L)=>{let A=O[_.name];return P.propertyResolver(A,x,L)},vr[_.name].directReturn=!0}}mp(this,this),mp(Jf,this,!0);for(let _ of S){let T=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,Wu.getStore())},set(N){return _.set(this,N)},configurable:!0})}}static setComputedAttribute(_,T){let N=Ki(S,_);if(!N){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!N.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let N;for(let{key:P,value:O}of l.getRange({start:0,end:_}))await ec(),At(O).tableId===n&&(N=q_(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:x,localTime:L}=P;await ec(),x===null&&L<_&&(N=al(i,P))}await N}static async*getHistory(_=0,T=1/0){for(let{key:N,value:P}of l.getRange({start:_||1,end:T})){await ec();let O=At(P);O.tableId===n&&(yield{id:O.recordId,localTime:N,version:O.version,type:O.type,value:O.getValue(i,!0,N),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let N=i.getEntry(_);if(!N)return T;let P=N.localTime;if(!P)throw new Error("The entry does not have a local audit time");let O=0;do{await ec();let x=l.get(P);if(x){let L=At(x);T.push({id:L.recordId,localTime:P,version:L.version,type:L.type,value:L.getValue(i,!0,P),user:L.user}),P=L.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){W?.remove()}}let YE=jg(async(K,_,T)=>{for(let N of Pe.sources)if(N.get&&(!N.get.reliesOnPrototype||N.prototype.get)){if(N.available?.(T)===!1)continue;_.source=N;let P=await N.get(K,_);if(P)return P}},()=>{throw new lt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Pe.updatedAttributes();let cb=Pe.prototype;return h&&Pe.setTTLExpiration(h/1e3),X&&WE(),Pe;function Tu(K,_,T){let N;for(let P in r){let O=r[P],x=O.isIndexing,L=vr[P],A=T&&(L?L(T):T[P]),U=_&&(L?L(_):_[P]);if(A===U&&!x)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}N=!0;let w=O.indexNulls,D=(0,Lp.getIndexedValues)(A,w),$=(0,Lp.getIndexedValues)(U,w);if($?.length>0){let Y=new Set($);if(D=D?D.filter(j=>{if(Y.has(j))Y.delete(j);else return!0}):[],$=Array.from(Y),($.length>0||D.length>0)&&aG){let j=$.concat(D).map(B=>({key:B,value:K}));O.prefetch(j,dG)}for(let j=0,B=$.length;j<B;j++)O.remove($[j],K)}else D?.length>0&&aG&&O.prefetch(D.map(Y=>({key:Y,value:K})),dG);if(D)for(let Y=0,j=D.length;Y<j;Y++)O.put(D[Y],K)}return N}o(Tu,"updateIndices");function Bi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>lG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Pl.writeKey)(K,eoe,0)>lG)throw new Error("Primary key size is too large: "+K.length);return!0}o(Bi,"checkValidId");function Os(K){return typeof K=="object"&&K?K.id:K}o(Os,"requestTargetToId");function Xf(K){return typeof K=="object"&&K&&K.isCollection}o(Xf,"isSearchTarget");function Zf(K){}o(Zf,"isRequestTarget");function No(K,_,T,N,P){if(Pe.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let x=La(Pe.getResidencyById(K));if(x&&!x.includes(server.hostname)&&C)return C({key:K,residency:x}).then(P)}let O=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let x=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(EG.default.trace?.("Recording db-read action for",`${c}.${s}`),Ve(x?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(x?.value),x?.residencyId&&x.metadataFlags&xn&&C&&T.ensureLoaded&&_?.replicateFrom!==!1?C(x).then(L=>P(L,K),L=>(Fe.default.error?.("Error loading remote record",K,x,T,L),P(null,K))):(x&&_&&(x?.version>(_.lastModified||0)&&(_.lastModified=x.version),x?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=x.localTime)),P(x,K))},"whenPrefetched");return N?O():te>0?(te--,O()):new Promise((x,L)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(ue.push(K),ce.push(U),ue.length>KE&&(te--,A()));function A(){if(ue.length>0){let w=ce;i.prefetch(ue,()=>{te===-1?A():te++;for(let D of w)D()}),ue=[],ce=[],ye>2&&ye--}else te=ye,ye<Qf&&ye++}o(A,"prefetch");function U(){try{x(O())}catch(w){L(w)}}o(U,"load")})}o(No,"loadLocalRecord");function On(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return toe;let N=T[c],P,O=N?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}o(On,"getTablePermissions");function dn(K,_,T,N){if(I){let P=!1;if(T.noCache?P=!0:(_?(!_.value||_.metadataFlags&(xn|qa)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(P=!0):P=!0,Zr(!P,"cache-hit",s)),P){let O=Ru(K,_,T).then(x=>(x?.value&&x?.value.getRecord?.()&&Fe.default.error?.("Can not assign a record that is already a resource"),T&&(x?.version>(T.lastModified||0)&&(T.lastModified=x.version),T.lastRefreshed=Date.now()),x));if(T?.onlyIfCached||_?.value&&N?.allowStaleWhileRevalidate?.(_,K)){if(O.catch(x=>Fe.default.warn?.(x)),T?.onlyIfCached&&!N.doesExist())throw new lt.ServerError("Entry is not cached",504);return}else return O}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Pe.evict(_.key,_.value,_.version),_.value=null,{then(P){return P(_)}}}o(dn,"ensureLoadedFromSource");function Ur(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new Po,_.lmdbDb=i,_;_=T}while(!0)}else return new g_}o(Ur,"txnForContext");function yu(K,_,T){if(!K)return;let N=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let O=vr,x=N;for(let L=0,A=_.length;L<A;L++){let U=_[L],w=O?.[U];x=w&&x?w(x,T,K):x?.[U],K=null,O=w?.definition?.tableClass?.propertyResolvers}return x}let P=vr[_];return P?P(N,T,K):N[_]}o(yu,"getAttributeValue");function em(K,_,T,N,P){let O=P?.length,x={transaction:N,lazy:O>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},L;function A(U,w){let D=U?.value;if(!D)return tc.SKIP;for(let $=0;$<O;$++)if(!L?.includes($)&&!P[$](D,U))return tc.SKIP;return w!==void 0&&(U.key=w),U}if(o(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(w=>{if(L=null,typeof w=="object"&&w?.key!==void 0)return O>0?A(w):w;if(w==null)return tc.SKIP;for(let D=0;D<O;D++){let Y=P[D].idFilter;if(Y){if(!Y(w))return tc.SKIP;L||(L=[]),L.push(D)}}return No(w,T,x,!1,A)});return Array.isArray(K)&&(U=U.filter(w=>w!==tc.SKIP)),U.hasEntries=!0,U}return K}o(em,"transformToEntries");function xr(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let N=server.replication?.exportIdMapping(l),P=_.localTime,O=P&&l.get(P);if(O){let x,L,A=At(O);for(let U in N)N[U]===T&&(x=U),N[U]===A.nodeId&&(L=U);if(x>L)return 1;if(x===L)return 0}}return-1}return 1}o(xr,"precedesExistingVersion");async function Ru(K,_,T){let N=_?.metadataFlags,P=_?.version,O,x;if(!i.attemptLock(K,P,()=>{clearTimeout(x);let w=i.getEntry(K);!w||!w.value||w.metadataFlags&(xn|qa)?O(Ru(K,i.getEntry(K),T)):O(w)}))return new Promise(w=>{O=w,x=setTimeout(()=>{i.unlock(K,P)},Xie)});let L=_?.value,A={requestContext:T,replacingRecord:L,replacingEntry:_,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((w,D)=>{let $;ks(bt(A,async Y=>{let j=performance.now(),B,Ee,fe;try{B=await YE(K,A,_),fe=N&xn;let ne=A.lastModified||fe&&P;Ee=fe||ne>P||!L,ne||(ne=(0,Lp.getNextMonotonicTime)());let ie=performance.now()-j;if(Ve(ie,"cache-resolution",s,null,"success"),U&&Op(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),Y.timestamp=ne,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),B){if(typeof B!="object")throw new Error("Only objects can be cached and stored in tables");if(B.status>0&&B.headers)if(B.status>=300)if(B.status===304)B=L,ne=P;else throw new lt.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==K&&(B[t]=K)}$=!0,w({key:K,version:ne,value:B})}catch(ne){ne.message+=` while resolving record ${K} for ${s}`,L&&((ne.code==="ECONNRESET"||ne.code==="ECONNREFUSED"||ne.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(ne.statusCode===500||ne.statusCode===502||ne.statusCode===503||ne.statusCode===504))?(w({key:K,version:P,value:L}),Fe.default.trace?.(ne.message,"(returned stale record)")):D(ne);let ie=performance.now()-j;Ve(ie,"cache-resolution",s,null,"fail"),U&&Op(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Ur(A).addWrite({key:K,store:i,entry:_,nodeName:"source",before:bu(B),commit:o((ne,ie)=>{if(ie?.version!==P)return;let xe=Tu(K,L,B);if(B){Ye.put?.(A,K,B),ie&&(T.previousResidency=Pe.getResidencyRecord(ie.residencyId));let de,ae=!1,ke,Be=La(Pe.getResidency(B,T));if(Be){if(!Be.includes(server.hostname))if(de=B,ae=!0,Pe.getResidencyById)B=void 0;else{B=null;for(let Le in r)B||(B={}),B[Le]=de[Le]}ke=Hc(Be)}Fe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(ne).toISOString()}`),y(K,B,ie,ne,ae?xn:0,g&&(Ee||ae)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:ke,tableToTrack:s},"put",!!fe,de)}else ie&&(Ye.delete?.(A,K),Fe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(ne).toISOString()}`),g||R?y(K,null,ie,ne,0,g&&Ee||null,{user:A?.user,tableToTrack:s},"delete",!!fe):al(i,ie,P))},"commit")})}),()=>{i.unlock(K,P)},Y=>{i.unlock(K,P),$&&Fe.default.error?.("Error committing cache update",Y)})})}o(Ru,"getFromSource");function Oa(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new lt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new lt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Oa,"checkContextPermissions");function Pa(K){let _=!1;if(K&&(K-Ar>1&&(_=!0),Ar=K),!(qe===tr&&!_)&&(tr=qe,(0,Cl.getWorkerIndex)()===(0,Cl.getWorkerCount)()-1))return Wr&&clearTimeout(Wr),qe?new Promise(T=>{let N=new Date;N.setMonth(0),N.setDate(1),N.setHours(0),N.setMinutes(0),N.setSeconds(0);let P=qe/(1+Ar),O=_?Date.now():Math.ceil((Date.now()-N.getTime())/P)*P+N.getTime(),x=o(L=>{Fe.default.trace?.(`Scheduled next cleanup scan at ${new Date(L)}`),Wr=setTimeout(()=>J=J.then(async()=>{if(x(Math.max(L+qe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Wr);return}let A=50,U=new Array(A),w=0,D=Math.pow(Ar,8)*(Ol.get(F.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),$=E/Math.pow(Math.max(Ar,1),4);Fe.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${D}, adjusted eviction ${$}ms`);function Y(j,B,Ee,fe){let pe=j+$-Date.now();if(pe<0)return!0;if(Ar){let ne=i.lastSize;return Ee&Jr&&Jc(fe,ie=>{ie.size&&(ne+=ie.size)}),Fe.default.trace?.(`shouldEvict adjusted ${pe} ${ne}, ${pe*(j-B)/ne} < ${D}`),pe*(j-B)/ne<D}return!1}o(Y,"shouldEvict");try{let j=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ee,value:fe,version:pe,expiresAt:ne,metadataFlags:ie}=B,xe;fe===null&&!g&&pe+Jie<Date.now()?xe=al(i,B,pe):ne!=null&&Y(ne,pe,ie,fe)&&(xe=Pe.evict(Ee,fe,pe),j++),xe&&(await U[w],U[w]=xe.catch(de=>{Fe.default.error?.("Cleanup error",de)}),++w>=A&&(w=0)),await ec()}Fe.default.debug?.(`Finished cleanup scan for ${s}, evicted ${j} entries`)}catch(j){Fe.default.warn?.(`Error in cleanup scan for ${s}:`,j)}T(void 0),Ar=0}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");x(O)}):void 0}o(Pa,"scheduleCleanup");function tm(){W=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(tm,"addDeleteRemoval");function WE(){(0,Cl.getWorkerIndex)()===0&&setInterval(async()=>{if(!kc){kc=!0;try{let K=X.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${X} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let N of _.getValues(T)){let P=i.getEntry(N);P?.value?P.value[K]<Date.now()&&Pe.evict(N,P.value,P.version):i.ifVersion(N,P?.version,()=>_.remove(T,N))}await ec()}}catch(K){Fe.default.error?.("Error in evicting old records",K)}finally{kc=!1}}},Qie).unref()}o(WE,"runRecordExpirationEviction");function La(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return Fe.default.trace?.(`Shard ${K} mapped to ${_.map(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(La,"residencyFromFunction");function Hc(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}o(Hc,"getResidencyId");function bu(K,_){let T=sA(K,i.rootStore);if(T){let N=_;return N?async()=>{await N(),await T}:()=>T}return _}o(bu,"preCommitBlobsForRecordBefore")}function Zw(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function dG(){}function Jg(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return Qg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Qg(+e);case"Float":return e==="null"?null:Qg(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;roe.test(e)||(e+="Z");let n=new Date(e);return Qg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Xg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Qg(e){if(isNaN(e))throw new SyntaxError;return e}function fG(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function ks(e,t,r){return e?.then?e.then(t,r):t(e)}function mG(e){return e!=null}function Hs(e){try{return JSON.stringify(e)}catch{return e}}function noe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var tc,Lp,pG,hG,Ol,lt,Dp,Mp,Fe,Pl,Cl,Xg,eN,EG,Yie,Wie,zie,jie,Qie,Jie,aG,Xie,cG,Zie,xn,qa,eoe,lG,uG,toe,GMe,roe,ec,ag=se(()=>{q();tc=require("lmdb"),Lp=b(Mn()),pG=b(require("lodash")),hG=b(Tm());$a();Rm();Ol=b(me());KA();lt=b(_e()),Dp=b($o()),Mp=b(os());we();og();Fe=b(es());ZI();xa();Pl=require("ordered-binary"),Cl=b(nt());Hi();Xg=b(oe());sl();rs();y_();Pp();eN=b(require("node:fs"));ts();F_();EG=b(Q());Xw();({sortBy:Yie}=pG.default),{validateAttribute:Wie}=hG.default,zie=new Uint8Array(9);zie[8]=192;jie=1/0,Qie=6e4,Jie=864e5;Ol.initSync();aG=Ol.get(F.STORAGE_PREFETCHWRITES),Xie=1e4,cG=1,Zie=2,xn=1,qa=8,eoe=Buffer.allocUnsafeSlow(8192),lG=1978,uG=100,toe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},GMe=(0,Xg.convertToMS)(Ol.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Zg,"makeTable");o(Zw,"attributesAsObject");o(dG,"noop");roe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Jg,"coerceType");o(Qg,"rejectNaN");o(fG,"isDescendantId");ec=o(()=>new Promise(setImmediate),"rest");o(ks,"when");o(mG,"exists");o(Hs,"stringify");o(noe,"hasOtherProcesses")});function eS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function tS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var gG=se(()=>{o(eS,"euclideanDistance");o(tS,"cosineDistance")});var SG,TG,_d,no,Ed,soe,ioe,rS,yG=se(()=>{gG();SG=require("msgpackr"),TG=b(es()),_d=b(_e()),no=(0,TG.loggerWithTag)("HNSW"),Ed=Symbol.for("entryPoint"),soe=Symbol.for("key"),ioe=10,rS=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=SG.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?eS:tS,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[soe,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(Ed);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)g[R]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);no.debug?.("setting entry point to",i),this.indexStore.put(Ed,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),ioe),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);no.debug?.("setting entry point to",i),this.indexStore.put(Ed,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&no.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<g.length;S++){let{id:y,distance:C,node:I}=g[S];if(y===i)continue;let k=[];if(this.optimizeRouting){let H=!1,X=I[E],W=1+this.optimizeRouting*(1+.5*S/this.M);for(let ue=0;ue<X.length;ue++){let{id:ce,distance:te}=X[ue],ye=1+this.optimizeRouting*(1+.5*ue/this.M);for(let Ae=0;Ae<R.length;Ae++){let{id:Ye,distance:qe}=R[Ae];if(Ye===ce){C*W>qe+te?H=!0:te*ye>C+qe&&(k.push({fromId:Ye,toId:y}),k.push({fromId:y,toId:Ye}));break}}if(H)break}if(H)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:C});for(let{fromId:H,toId:X}of k){let W=d(H);W||(W=d(H,this.indexStore.get(H)));for(let ue=0;ue<W[E].length;ue++)if(W[E][ue].id===X){Object.isFrozen(W[E])&&(W[E]=W[E].slice()),W[E].splice(ue,1);break}}let J=c[E],G=J?.find(({id:H})=>H===y);if(G){let H=J?.indexOf(G);J.copied||(J=[...J],J.copied=!0,c[E]=J),J.splice(H,1)}else this.addConnection(y,d(y,I),i,E,C,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(Ed);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);no.debug?.("setting entry point to",l),this.indexStore.put(Ed,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(no.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(Ed);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new _d.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new _d.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=tS;else if(s==="euclidean")c=eS;else{if(s)throw new _d.ClientError("Unknown distance function");c=this.distance}if(!t)throw new _d.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new _d.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){no.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||no.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){no.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&no.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?no.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?eS:tS);let c=a(s.target,t);return i.set(n,c),c}return t}}});var tN,RG=se(()=>{yG();tN={HNSW:rS}});var mt={};Re(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>nS,database:()=>id,databaseEnvs:()=>zo,databases:()=>De,dropDatabase:()=>sw,dropTableMeta:()=>doe,getDatabases:()=>at,getDefaultCompression:()=>uS,getTables:()=>aoe,onRemovedDB:()=>Hp,onUpdatedTable:()=>Ll,readMetaDb:()=>vp,resetDatabases:()=>Rd,table:()=>Ze,tables:()=>Sn});function kp(e,t){let r=cS.OpenDBIObject??cS.default.OpenDBIObject;return new r(e,t)}function aoe(){return aS||at(),Sn||{}}function at(){if(aS)return De;aS=!0,Td=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Ht.join)((0,zt.getHdbBasePath)(),$c),t=(0,zt.get)(F.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,zt.get)(F.STORAGE_PATH)||e&&((0,ms.existsSync)(e)?e:(0,Ht.join)((0,zt.getHdbBasePath)(),e_)),!!e){if((0,ms.existsSync)(e))for(let r of(0,ms.readdirSync)(e,{withFileTypes:!0})){let n=(0,Ht.basename)(r.name,".mdb");r.isFile()&&(0,Ht.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&vp((0,Ht.join)(e,r.name),null,n)}if((0,ms.existsSync)((0,Sd.getBaseSchemaPath)())){for(let r of(0,ms.readdirSync)((0,Sd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ht.join)((0,Sd.getBaseSchemaPath)(),r.name),s=(0,Ht.join)((0,Sd.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,ms.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Ht.extname)(i.name).toLowerCase()===".mdb"){let a=(0,Ht.join)(s,i.name);vp((0,Ht.join)(n,i.name),(0,Ht.basename)(i.name,".mdb"),r.name,a,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,ms.existsSync)(s))for(let a of(0,ms.readdirSync)(s,{withFileTypes:!0}))a.isFile()&&(0,Ht.extname)(a.name).toLowerCase()===".mdb"&&vp((0,Ht.join)(s,a.name),(0,Ht.basename)(a.name,".mdb"),r);let i=n.tables;if(i)for(let a in i){let c=i[a],l=(0,Ht.join)(c.path,(0,Ht.basename)(a+".mdb"));(0,ms.existsSync)(l)&&vp(l,a,r,null,!0)}}for(let r in De){let n=Td.get(r);if(n){let s=De[r];r.includes("delete")&&Nr.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Nr.trace(`delete table class ${i}`),delete s[i])}else if(delete De[r],r==="data"){for(let s in Sn)delete Sn[s];delete Sn[lS]}}if((0,zt.get)(F.ANALYTICS_REPLICATE)===!1?nS.includes("hdb_analytics")||nS.push("hdb_analytics"):(De.system?.hdb_analytics?.enableAuditing(),De.system?.hdb_analytics_hostname?.enableAuditing()),De.system)for(let r of nS)De.system[r]&&(De.system[r].replicate=!1);return Td=null,De}}function Rd(){aS=!1;for(let[,e]of zo)e.needsDeletion=!0;at();for(let[e,t]of zo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),zo.delete(e);let r=De[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete De[t.databaseName],xp.forEach(i=>i(t.databaseName));break}}return De}function vp(e,t,r=sN,n,s){let i=new rN.default(e,!1);try{let a=zo.get(e);a?a.needsDeletion=!1:(a=(0,yd.open)(i),zo.set(e,a));let c=new kp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(sS.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ms.existsSync)(n)&&(i.path=n,u=(0,yd.open)(i),u.isLegacy=!0):u=G_(a));let d=NG(r),f=d[lS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(g==null||h.is_hash_attribute)&&(R.primary=h),g!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){g=te;break}if(!g){Nr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],C,I,k=typeof g.audit=="boolean"?g.audit:(0,zt.get)(F.LOGGING_AUDITLOG),J=g.trackDeletes,G=g.expiration,H=g.eviction,X=g.sealed,W=g.splitSegments,ue=g.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{C=g.tableId,C?C>=(l.get(gd)||0)&&(l.putSync(gd,C+1),Nr.info(`Updating next table id (it was out of sync) to ${C+1} for ${p}`)):(g.tableId=C=l.get(gd),C||(C=1),Nr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(gd,C+1),l.putSync(g.key,g));let te=new kp(!g.is_hash_attribute,g.is_hash_attribute);if(te.compression=g.compression,te.compression){let ye=(0,zt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||wG;te.compression.threshold=ye}I=rg(a.openDB(g.key,te),a),a.databaseName=r,I.tableId=C}let ce;for(let te of E){te.attribute=te.name;try{if(!te.is_hash_attribute&&(te.indexed||te.attribute&&!te.name)){if(!S[te.name]){let Ae=OG(te.key,a,te);S[te.name]=Ae,S[te.name].indexNulls=te.indexNulls}let ye=y.find(Ae=>Ae.name===te.name);ye?y.splice(y.indexOf(ye),1,te):y.push(te),ce=!0}}catch(ye){Nr.error("Error trying to update attribute",te,y,S,ye)}}for(let te of y)if(!E.find(Ae=>Ae.name===te.name)){if(te.is_hash_attribute){Nr.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),ce=!0)}if(R)ce&&(R.schemaVersion++,R.updatedAttributes());else{R=CG(d,p,Zg({primaryStore:I,auditStore:u,audit:k,sealed:X,splitSegments:W,replicate:ue,expirationMS:G&&G*1e3,evictionMS:H&&H*1e3,trackDeletes:J,tableName:p,tableId:C,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of Up)te(R)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function NG(e){let t=De[e];if(t||(e==="data"?t=De[e]=Sn:e==="system"?Object.defineProperty(De,"system",{value:t=Object.create(null),configurable:!0}):t=De[e]=Object.create(null)),Td&&!Td.has(e)){let r=new Set;t[lS]=r,Td.set(e,r)}return t}function CG(e,t,r){return e[t]=r,r}function id({database:e,table:t}){e||(e=sN),at();let r=NG(e),n=(0,Ht.join)((0,zt.getHdbBasePath)(),$c),s=(0,zt.get)(F.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,zt.get)(F.STORAGE_PATH)||((0,ms.existsSync)(n)?n:(0,Ht.join)((0,zt.getHdbBasePath)(),e_));let a=(0,Ht.join)(n,(i?t:e)+".mdb"),c=zo.get(a);if(!c||c.status==="closed"){let l=new rN.default(a,!1);c=(0,yd.open)(l),zo.set(a,c)}return c.auditStore||(c.auditStore=G_(c)),c}async function sw(e){if(!De[e])throw new Error("Schema does not exist");let t=De[e],r;for(let n in t)r=t[n].primaryStore.rootStore,zo.delete(r.path),r.status==="open"&&(await r.close(),await Bp.remove(r.path));if(r||(r=id({database:e,table:null}),r.status==="open"&&(await r.close(),await Bp.remove(r.path))),e==="data"){for(let n in Sn)delete Sn[n];delete Sn[lS]}delete De[e],xp.forEach(n=>n(e)),await nA(r)}function OG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&tN[r.indexed.type]?.useObjectStore,s=new kp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=tN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Nr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=sN);let h=id({database:r,table:t}),E=De[r];Nr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let C=new kp(!1);for(let W of a)W.attribute&&!W.name?(W.name=W.attribute,W.indexed=!0):W.attribute=W.name,W.expiresAt&&(W.indexed=!0);let I,k;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let W=h.auditStore;S=a.find(ye=>ye.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=uS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,zt.get)(F.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Nr.trace(`${t} table loading, opening primary store`);let ue=new kp(!1,!0);ue.compression=S.compression;let ce=t+"/";if(y=h.dbisDb=h.openDB(sS.INTERNAL_DBIS_NAME,C),X(),y.get(ce))return k&&k(),Rd(),Ze(e);let te=rg(h.openDB(ce,ue),h);h.databaseName=r,te.tableId=y.get(gd),Nr.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(gd,te.tableId+1),S.tableId=te.tableId,g=CG(E,t,Zg({primaryStore:te,auditStore:W,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:te.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:y})),g.schemaVersion=1,I=!0,y.put(ce,S)}let J=g.indices;y=y||(h.dbisDb=h.openDB(sS.INTERNAL_DBIS_NAME,C)),g.dbisDB=y;let G=[];for(let{key:W,value:ue}of y.getRange({start:!0})){let[ce,te]=W.toString().split("/");if(te===""&&(te=ue.name),te){if(ce!==t)continue}else continue;let ye=a.find(Ye=>Ye.name===te),Ae=!ye?.indexed&&ue.indexed&&!ue.isPrimaryKey;if((!ye||Ae)&&(X(),I=!0,ye||y.remove(W),Ae)){let Ye=g.indices[ce];Ye&&G.push(Ye)}}let H=[];try{for(let W of a||[]){if((W.relationship||W.computed)&&(I=!0,W.relationship))continue;let ue=t+"/"+(W.name||"");Object.defineProperty(W,"key",{value:ue,configurable:!0});let ce=y.get(ue);if(W.isPrimaryKey){if(ce=ce||y.get(ue=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ce.expiration||void 0)||(+s||void 0)!==(+ce.eviction||void 0)||W.type!==ce.type){let ye={...ce};typeof c=="boolean"&&(c&&g.enableAuditing(c),ye.audit=c),n&&(ye.expiration=+n),s&&(ye.eviction=+s),l!==void 0&&(ye.sealed=l),d!==void 0&&(ye.replicate=d),W.type&&(ye.type=W.type),I=!0,X(),y.put(ue,ye)}continue}ce?.attribute&&!ce.name&&(ce.indexed=!0);let te=!ce||ce.type!==W.type||JSON.stringify(ce.indexed)!==JSON.stringify(W.indexed)||ce.nullable!==W.nullable||ce.version!==W.version||JSON.stringify(ce.properties)!==JSON.stringify(W.properties)||JSON.stringify(ce.elements)!==JSON.stringify(W.elements);if(W.indexed){let ye=OG(ue,h,W);(te||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<Fp.workerData?.restartNumber)&&(I=!0,X(),ce=y.get(ue),(te||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<Fp.workerData?.restartNumber)&&(I=!0,W.indexNulls===void 0&&(W.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(W.lastIndexedKey=ce?.lastIndexedKey??void 0,W.indexingPID=process.pid,ye.isIndexing=!0,Object.defineProperty(W,"dbi",{value:ye}),H.push(W))),y.put(ue,W)),ce?.indexNulls&&W.indexNulls===void 0&&(W.indexNulls=!0),ye.indexNulls=W.indexNulls,J[W.name]=ye}else te&&(I=!0,X(),y.put(ue,W))}}finally{k&&k()}if(I&&(g.schemaVersion++,g.updatedAttributes()),Nr.trace(`${t} table loading, running index`),H.length>0||G.length>0?g.indexingOperation=uoe(g,H,G):I&&iS.signalSchemaChange(new oS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,I)for(let W of Up)W(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Nr.trace(`${t} table loaded`),g;function X(){k||h.transactionSync(()=>({then(W){k=W}}))}o(X,"startTxn")}async function uoe(e,t,r){try{Nr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await iS.signalSchemaChange(new oS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,yd.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[g]);if(R.customIndex){R.customIndex.index(f,y);continue}let C=(0,bG.getIndexedValues)(y);if(C)for(let I=0,k=C.length;I<k;I++)R.put(C[I],f)}catch(S){a[g]||(a[g]=!0,Nr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Nr.error(h)}),Fp.workerData&&Fp.workerData.restartNumber!==IG.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>coe?await s:d>loe&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await iS.signalSchemaChange(new oS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Nr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Nr.error("Error in indexing",n)}}function doe({table:e,database:t}){let r=id({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Ll(e){return Up.push(e),{remove(){let t=Up.indexOf(e);t>-1&&Up.splice(t,1)}}}function Hp(e){return xp.push(e),{remove(){let t=xp.indexOf(e);t>-1&&xp.splice(t,1)}}}function uS(){let e=(0,zt.get)(F.STORAGE_COMPRESSION),t=(0,zt.get)(F.STORAGE_COMPRESSION_DICTIONARY),r=(0,zt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||wG,n={startingOffset:32};return t&&(n.dictionary=Bp.readFileSync(t)),r&&(n.threshold=r),e&&n}var zt,sS,yd,Ht,ms,Sd,rN,Bp,nN,bG,iS,oS,Fp,AG,IG,cS,ooe,Nr,sN,lS,wG,nS,Sn,De,gd,Up,xp,aS,zo,Td,coe,loe,we=se(()=>{zt=b(me()),sS=b(Yt()),yd=require("lmdb"),Ht=require("path"),ms=require("fs"),Sd=b(Rt());ag();rN=b(jm());q();Bp=b(require("fs-extra")),nN=b(ii()),bG=b(Mn()),iS=b($o()),oS=b(os()),Fp=require("worker_threads"),AG=b(Q()),IG=b(nt());Hi();sl();ts();RG();cS=b(zm()),{forComponent:ooe}=AG.default;o(kp,"OpenDBIObject");Nr=ooe("storage"),sN="data",lS=Symbol("defined-tables"),wG=((0,zt.get)(F.STORAGE_PAGESIZE)||4096)-60;(0,zt.initSync)();nS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],Sn=Object.create(null),De=Object.create(null);(0,nN._assignPackageExport)("databases",De);(0,nN._assignPackageExport)("tables",Sn);gd=Symbol.for("next-table-id"),Up=[],xp=[],zo=new Map;o(aoe,"getTables");o(at,"getDatabases");o(Rd,"resetDatabases");o(vp,"readMetaDb");o(NG,"ensureDB");o(CG,"setTable");o(id,"database");o(sw,"dropDatabase");o(OG,"openIndex");o(Ze,"table");coe=1e3,loe=10;o(uoe,"runIndexing");o(doe,"dropTableMeta");o(Ll,"onUpdatedTable");o(Hp,"onRemovedDB");o(uS,"getDefaultCompression")});var aN={};Re(aN,{loadGQLSchema:()=>poe,start:()=>oN,startOnMainThread:()=>moe});function oN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,p=[],h;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let k=function(G){if(G.kind==="NonNullType"){let W=k(G.type);return W.nullable=!1,W}if(G.kind==="ListType")return{type:"array",elements:k(G.type)};let X={type:G.name?.value};return Object.defineProperty(X,"location",{value:G.loc.startToken}),X};o(k,"getProperty");let S=R.name.value,y=[],C={table:null,database:null,properties:y};m.set(S,C),i.allTypes.set(S,C);for(let G of R.directives){if(G.name.value==="table"){for(let X of G.arguments)C[X.name.value]=X.value.value;C.schema&&(C.database=C.schema),C.table||(C.table=S),C.audit&&(C.audit=C.audit!=="false"),C.attributes=C.properties,p.push(C)}if(G.name.value==="sealed"&&(C.sealed=!0),G.name.value==="splitSegments"&&(C.splitSegments=!0),G.name.value==="replicate"&&(C.replicate=!0),G.name.value==="export"){C.export=!0;for(let X of G.arguments)typeof C.export!="object"&&(C.export={}),C.export[X.name.value]=X.value.value}}let I=!1,J={};for(let G of R.fields){let H=k(G.type);H.name=G.name.value,y.push(H),J[H.name]=void 0;for(let X of G.directives){let W=X.name.value;if(W==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",X.loc):(H.isPrimaryKey=!0,I=!0);else if(W==="indexed"){let ue={};for(let ce of X.arguments||[])ue[ce.name.value]=ce.value.value;H.indexed=ue}else if(W==="computed"){for(let ue of X.arguments||[])if(ue.name.value==="from"){let ce=ue.value.value;H.computed={from:g(ce,ue,J)},H.version==null&&(H.version=ce)}else ue.name.value==="version"&&(H.version=ue.value.value);H.computed=H.computed||!0}else if(W==="relationship"){let ue={};for(let ce of X.arguments)ue[ce.name.value]=ce.value.value;H.relationship=ue}else if(W==="createdTime")H.assignCreatedTime=!0;else if(W==="updatedTime")H.assignUpdatedTime=!0;else if(W==="expiresAt")H.expiresAt=!0;else if(W==="allow"){let ue=H.authorizedRoles=[];for(let ce of X.arguments)ce.name.value==="role"&&ue.push(ce.value.value)}else server.knownGraphQLDirectives.includes(W)&&console.warn(`@${W} is an unknown directive, at`,X.loc)}}C.type=S,S==="Query"&&(h=C)}function E(R){let S=m.get(R.type);S?(Object.defineProperty(R,"properties",{value:S.properties}),Object.defineProperty(R,"definition",{value:S})):R.type==="array"?E(R.elements):foe.includes(R.type)||(0,LG.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}o(E,"connectPropertyType");for(let R of m.values())for(let S of R.properties)E(S);for(let R of p)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,iN.dirname)(n),R.tableClass):i.set((0,iN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,S,y){return new PG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}o(g,"createComputedFrom")}}var iN,PG,LG,foe,moe,poe,DG=se(()=>{iN=require("path"),PG=require("node:vm");we();LG=b(nt());Va();foe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(oN,"start");moe=oN,poe=o(e=>oN({ensureTable:Ze}).handleFile(e,null,null,new ju),"loadGQLSchema")});var lN={};Re(lN,{start:()=>boe});function hoe(e){if(e.kind!==Ge.Kind.OPERATION_DEFINITION&&e.kind!==Ge.Kind.FRAGMENT_DEFINITION)throw new $r(`Unexpected non-executable definition type ${e.kind}.`)}function MG(e){if(typeof e!="object"||e===null)throw new so("Request body must be an object.");if(!("query"in e))throw new so("Request body must contain a `query` field.");if(typeof e.query!="string")throw new so("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new so("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new so("Request body `operationName` field must be a string.")}function cN(e){return parseInt(e.value,10)}function UG(e){return parseFloat(e.value)}function xG(e,t,r){let n=r.get(e.name.value);return BG(n)?FG(n,t):{attribute:t,value:n}}function BG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function FG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],BG(n)?FG(n,t):{attribute:t,value:n}))}function Eoe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Ge.Kind.NULL:return{attribute:t,value:null};case Ge.Kind.INT:return{attribute:t,value:cN(e.value)};case Ge.Kind.FLOAT:return{attribute:t,value:UG(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:t,value:e.value.value};case Ge.Kind.VARIABLE:return xG(e.value,t,r);case Ge.Kind.OBJECT:return kG(e.value,t,r);case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new $r(`Value type, ${e.value.kind}, is not supported.`)}}function kG(e,t,r){return e.fields.flatMap(n=>Eoe(n,t,r))}function _oe(e,t){switch(e.value.kind){case Ge.Kind.NULL:return{attribute:e.name.value,value:null};case Ge.Kind.INT:return{attribute:e.name.value,value:cN(e.value)};case Ge.Kind.FLOAT:return{attribute:e.name.value,value:UG(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Ge.Kind.VARIABLE:return xG(e.value,e.name.value,t);case Ge.Kind.OBJECT:return kG(e.value,[e.name.value],t);case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new $r(`Argument type, ${e.value.kind}, is not supported.`)}}function goe(e,t){return e.flatMap(r=>_oe(r,t))}function dS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Ge.Kind.FIELD:return r;case Ge.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new $r(`Fragment \`${n}\` not found.`);return dS(s.selectionSet,t)}case Ge.Kind.INLINE_FRAGMENT:return dS(r.selectionSet,t)}})}function HG(e,t){return dS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:HG(r.selectionSet,t)}:r.name.value)}async function Soe(e,t,r,n){let s=Us.getMatch(e.name.value,"graphql");if(s===void 0)throw new $r(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:HG(e.selectionSet,r),conditions:goe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function GG(e){switch(e.kind){case Ge.Kind.NULL:return null;case Ge.Kind.INT:return cN(e);case Ge.Kind.FLOAT:return parseFloat(e.value);case Ge.Kind.STRING:case Ge.Kind.BOOLEAN:return e.value;case Ge.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:GG(r.value),...t}),{});case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new $r(`Value type, ${e.kind}, is not supported.`)}}function Toe(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=GG(n.defaultValue)),n.type.kind===Ge.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new $r(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function yoe(e,t,r,n){if(e.operation===Ge.OperationTypeNode.SUBSCRIPTION)throw new $r("Subscriptions are not supported.");if(e.operation===Ge.OperationTypeNode.MUTATION)throw new $r("Mutations are not supported yet.");let s=Toe(e.variableDefinitions,t),i=await Promise.all(dS(e.selectionSet,r).map(c=>Soe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function vG({query:e,variables:t={},operationName:r},n){let s=Ge.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(hoe(u),u.kind===Ge.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new $r("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 $r(`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 $r("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new $r(`Operation \`${r}\` not found.`);let l=await yoe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Roe(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 MG(r),vG(r,e)}case"POST":{let r=await vo(e.headers.get("content-type"),!0)(e._nodeRequest);return MG(r),vG(r,e)}default:throw new so("Method Not Allowed",405,{Allow:"GET, POST"})}}function boe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Roe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof so)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Ge.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof $r)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:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof so)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Ge.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof $r)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 Ge,$r,so,qG=se(()=>{Ge=b(require("graphql"));Uo();Va();o(hoe,"assertExecutableDefinitionNode");o(MG,"assertRequestParams");o(cN,"processIntValueNode");o(UG,"processFloatValueNode");o(xG,"processVariableNode");o(BG,"isObject");o(FG,"transformObjectIntoQueryCondition");o(Eoe,"processObjectFieldNode");o(kG,"processObjectValueNode");o(_oe,"processArgumentNode");o(goe,"buildConditionsQuery");o(dS,"fillInFragments");o(HG,"buildSelectQuery");o(Soe,"processFieldNode");o(GG,"processConstValueNode");o(Toe,"resolveVariables");o(yoe,"executeOperation");o(vG,"resolver");$r=class extends Error{static{o(this,"GraphQLQueryingError")}},so=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Roe,"graphqlQueryingHandler");o(boe,"start")});var zG=v((lve,WG)=>{var bd=require("validate.js"),VG=ft(),Ad=(q(),M(z)),{handleHDBError:Aoe,hdbErrors:Ioe}=_e(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:woe}=Ioe,uN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Noe={STRUCTURE_USER:"structure_user"},$G=Object.values(Ad.ROLE_TYPES_ENUM),Coe="attribute_permissions",Ooe="attribute_name",{PERMS_CRUD_ENUM:Id}=Ad,Poe=[Coe,...Object.values(Id)],KG=[Id.READ,Id.INSERT,Id.UPDATE],Loe=[Ooe,...KG];function Doe(e){let t=uN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,YG(e,t)}o(Doe,"addRoleValidation");function Moe(e){let t=uN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,YG(e,t)}o(Moe,"alterRoleValidation");function voe(e){let t=uN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,VG.validateObject(e,t)}o(voe,"dropRoleValidation");var Uoe=["operation","role","id","permission","hdb_user","access"];function YG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Uoe.includes(n[a])||s.push(n[a]);s.length>0&&pr(sr.INVALID_ROLE_JSON_KEYS(s),r);let i=VG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{pr(a,r)}),e.permission){let a=xoe(e);a&&pr(a,r),$G.forEach(c=>{e.permission[c]&&!bd.isBoolean(e.permission[c])&&pr(sr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if($G.indexOf(a)<0){if(a===Noe.STRUCTURE_USER){let l=e.permission[a];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]||pr(sr.SCHEMA_NOT_FOUND(f),r)}continue}pr(sr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){pr(sr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){pr(sr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Poe.includes(d)||pr(sr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(Id).forEach(d=>{bd.isDefined(u[d])?bd.isBoolean(u[d])||pr(sr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):pr(sr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){pr(sr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){pr(sr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][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=>{!Loe.includes(E)&&E!==Id.DELETE&&pr(sr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!bd.isDefined(p.attribute_name)){pr(sr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){pr(sr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}KG.forEach(E=>{bd.isDefined(p[E])?bd.isBoolean(p[E])||pr(sr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):pr(sr.ATTR_PERM_MISSING(E,h),r,a,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=`${a}.${l}`;pr(sr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Boe(r)}o(YG,"customValidate");WG.exports={addRoleValidation:Doe,alterRoleValidation:Moe,dropRoleValidation:voe};function xoe(e){let{operation:t,permission:r}=e;if(t===Ad.OPERATIONS_ENUM.ADD_ROLE||t===Ad.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 sr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?Ad.ROLE_TYPES_ENUM.SUPER_USER:Ad.ROLE_TYPES_ENUM.CLUSTER_USER;return sr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(xoe,"validateNoSUPerms");function Boe(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:sr.ROLE_PERMS_ERROR,...e};return Aoe(new Error,n,woe.BAD_REQUEST)}else return null}o(Boe,"generateRolePermResponse");function pr(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]}}o(pr,"addPermError")});var qp=v((fve,XG)=>{"use strict";var jG=Gn(),QG=_n(),Foe=bl(),fN=zG(),mN=$o(),dve=require("uuid").v4,koe=require("util"),fS=(q(),M(z)),Hoe=oe(),pN=QG.searchByValue,Goe=QG.searchByHash,qoe=koe.promisify(Foe.delete),$oe=di(),Voe=nd(),{hdbErrors:Koe,handleHDBError:Dl}=_e(),{HDB_ERROR_MSGS:JG,HTTP_STATUS_CODES:Gp}=Koe,{UserEventMsg:hN}=os();XG.exports={addRole:Yoe,alterRole:Woe,dropRole:zoe,listRoles:joe};function dN(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}o(dN,"scrubRoleDetails");async function Yoe(e){let t=fN.addRoleValidation(e);if(t)throw t;e=dN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await pN(r)||[])}catch(i){throw Dl(i)}if(n&&n.length>0)throw Dl(new Error,JG.ROLE_ALREADY_EXISTS(e.role),Gp.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 jG.insert(s),mN.signalUserChange(new hN(process.pid)),e=dN(e),e}o(Yoe,"addRole");async function Woe(e){let t=fN.alterRoleValidation(e);if(t)throw t;e=dN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await jG.update(r)}catch(s){throw Dl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Dl(new Error,"Invalid role id",Gp.BAD_REQUEST,void 0,void 0,!0);return await mN.signalUserChange(new hN(process.pid)),e}o(Woe,"alterRole");async function zoe(e){let t=fN.dropRoleValidation(e);if(t)throw Dl(new Error,t,Gp.BAD_REQUEST,void 0,void 0,!0);let r=new Voe(fS.SYSTEM_SCHEMA_NAME,fS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Goe(r));if(n.length===0)throw Dl(new Error,JG.ROLE_NOT_FOUND,Gp.NOT_FOUND,void 0,void 0,!0);let s=new $oe(fS.SYSTEM_SCHEMA_NAME,fS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await pN(s)),a=!1;if(Hoe.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Dl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Gp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await qoe(c),mN.signalUserChange(new hN(process.pid)),`${n[0].role} successfully deleted`}o(zoe,"dropRole");async function joe(){return pN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(joe,"listRoles")});var EN={};Re(EN,{start:()=>tq,startOnMainThread:()=>Xoe});function tq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,ZG.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 a in i.permission){if(Qoe.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=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 Joe(i)}}}async function Joe(e){let t=at().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,eq.isEqual)(i,e)?void 0:(e.id=r.id,(0,mS.alterRole)(e))}return(0,mS.addRole)(e)}var mS,ZG,eq,Qoe,Xoe,rq=se(()=>{we();mS=b(qp()),ZG=require("yaml"),eq=require("lodash"),Qoe=["super_user","cluster_user","structure_user"];o(tq,"start");o(Joe,"ensureRole");Xoe=tq});async function pS(e){let t=(0,iq.pathToFileURL)(e).toString();if(Zoe)return $p||($p=eae(rae)),(await(await $p).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function eae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),$p=new Compartment({console,Math,Date,fetch:tae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,sq.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Hr,s.tables=Sn,s.databases=De}};let n=await(0,nq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),$p}function tae(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 rae(){return{Resource:Hr,tables:Sn}}var nq,sq,iq,Zoe,$p,_N=se(()=>{$a();we();nq=require("fs/promises"),sq=require("path"),iq=require("url"),Zoe=!1;o(pS,"secureImport");o(eae,"getCompartment");o(tae,"secureOnlyFetch");o(rae,"getGlobalVars")});var gN={};Re(gN,{handleApplication:()=>nae,suppressHandleApplicationWarning:()=>sae});function oq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function nae(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}pS(t.absolutePath).then(r=>{let n=(0,hS.dirname)(t.urlPath);oq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),aq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function aq(e,t,r){for(let n in t){let s=t[n],i=(0,hS.join)(r,n);oq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&aq(e,s,i)}}var hS,sae,cq=se(()=>{_N();hS=require("path");o(oq,"isResource");o(nae,"handleApplication");o(aq,"recurseForResources");sae=!0});var TN={};Re(TN,{start:()=>iae});function iae({resources:e}){e.set("login",SN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var SN,lq=se(()=>{$a();o(iae,"start");SN=class extends Hr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function hq(e){let t={openapi:oae,info:{title:"HarperDB HTTP REST interface",version:mq.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}],n=o(s=>{if(s.type&&!t.components.schemas[s.type]){t.components.schemas[s.type]={};let i={},a=[];for(let c of s.properties)ES[c.type]?i[c.name]=new RN(ES[c.type],c.type):c.properties?(i[c.name]=new Eq(c.type),n(c)):c.elements?.properties&&(i[c.name]=new fae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new fq(i,!s.sealed,a)}},"includeDefinitionInSchema");for(let[,s]of e){if(!s.path||s.Resource.isError)continue;let{path:i}=s,a=i.split("/").pop(),{attributes:c,sealed:l}=s.Resource,{prototype:u,primaryKey:d="id"}=s.Resource;if(!c&&e.allTypes.has(s.path)){let J=e.allTypes.get(s.path);l=J.sealed,c=J.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:J,name:G,elements:H,relationship:X,definition:W,nullable:ue}of c){let ce=W??H?.definition;ce&&n(ce),ue===!1&&p.push(G),X?J==="array"?f[G]={type:"array",items:{$ref:Gs+H.type}}:f[G]={$ref:Gs+J}:ce?J==="array"?f[G]={type:"array",items:{$ref:Gs+ce.type}}:f[G]={$ref:Gs+ce.type}:J==="array"?H.type==="Any"?f[G]={type:"array",items:{format:H.type}}:f[G]={type:"array",items:new RN(ES[H.type],H.type)}:J==="Any"?f[G]={format:J}:f[G]=new RN(ES[J],J),m.push(new bN(G,"query",f[G]))}let h=Object.keys(f),E=new bN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new bN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new fq(f,!l,p);let R=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",y=typeof u.get=="function",C=typeof u.delete=="function",I=typeof u.patch=="function",k="/"+i+"/";R&&(t.paths[k]={},t.paths[k].post=new aae(a,r,{200:new wd({$ref:Gs+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),y&&(t.paths[k]||(t.paths[k]={}),t.paths[k].get=new yN(m,r,{200:new wd({type:"array",items:{$ref:Gs+a}})},"search for records by the specified property name and value pairs")),t.paths[k]||(t.paths[k]={}),t.paths[k].options=new cae(m,r,{200:new lae},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),C&&(t.paths[k]||(t.paths[k]={}),t.paths[k].delete=new dq(m,r,"delete all the records that match the provided query",{204:new uq})),k="/"+i+"/{"+d+"}",y&&(t.paths[k]={},t.paths[k].get=new yN([E],r,{200:new wd({$ref:Gs+a})},"retrieve a record by its primary key")),S&&(t.paths[k]||(t.paths[k]={}),t.paths[k].put=new uae([E],r,a,{200:new wd({$ref:Gs+a})},"create or update the record with the URL path that maps to the record's primary key")),I&&(t.paths[k]||(t.paths[k]={}),t.paths[k].patch=new dae([E],r,a,{200:new wd({$ref:Gs+a})},"patch the record with the URL path that maps to the record's primary key")),C&&(t.paths[k]||(t.paths[k]={}),t.paths[k].delete=new dq([E],r,"delete a record with the given primary key",{204:new uq})),y&&g.schema.enum.length>0&&(k="/"+i+"/{"+d+"}.{property}",t.paths[k]={},t.paths[k].get=new yN([E,g],r,{200:new wd({enum:h})},"used to retrieve the specified property of the specified record"))}for(let[,s]of e.allTypes)n(s),s.sealed&&t.components.schemas[s.type].additionalProperties&&(t.components.schemas[s.type].additionalProperties=!1);return t}function aae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Gs+e}}}},this.security=t,this.responses=r}function yN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function cae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function lae(){this.description=pq,this.headers={},this.content={}}function wd(e,t){this.description=pq,this.content={"application/json":{schema:e}},this.headers=t}function uq(){this.description="successfully processed request, no content returned to client"}function uae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Gs+r}}}},this.responses=n}function dae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Gs+r}}}},this.responses=n}function dq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function fq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function RN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function Eq(e){this.$ref=`#/components/schemas/${e}`}function fae(e){this.type="array",this.items=new Eq(e)}function bN(e,t,r){this.name=e,this.in=t,this.schema=r}var mq,oae,ES,Gs,pq,_q=se(()=>{mq=b(Ct()),oae="3.0.3",ES={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Gs="#/components/schemas/",pq="successful operation";o(hq,"generateJsonApi");o(aae,"Post");o(yN,"Get");o(cae,"Options");o(lae,"ResponseOptions200");o(wd,"Response200");o(uq,"Response204");o(uae,"Put");o(dae,"Patch");o(dq,"Delete");o(fq,"ResourceSchema");o(RN,"Type");o(Eq,"Ref");o(fae,"ArrayRef");o(bN,"Parameter")});var Sq={};Re(Sq,{Request:()=>rc,createReuseportFd:()=>_S});var gq,rc,AN,IN,_S,Vp=se(()=>{gq=require("os"),rc=class{static{o(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 IN(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 AN(this._nodeRequest))}get host(){return this._nodeRequest.authority||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)}},AN=class{static{o(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)}},IN=class{static{o(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,gq.platform)()!="win32"&&(_S=require("node-unix-socket").createReuseportFd)});var SS={};Re(SS,{parseHeaderValue:()=>NN,start:()=>hae});async function pae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&ig(e);let i=new Fs;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==Tq){let g=gS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ci(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=NN(g);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 g=NN(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=vo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Nd.ClientError(g,400)}if(e.authorize=!0,a===Tq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return hq(gS);throw new Nd.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 Nd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Nd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,wN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=nG(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=Cm(f.data,e,f)),f}else if(isFinite(p)){mae[0]=p;let g=String.fromCharCode(34,(rn[0]&63)+62,(rn[0]>>6)+(rn[1]<<2&63)+62,(rn[1]>>4)+(rn[2]<<4&63)+62,(rn[2]>>2)+62,(rn[3]&63)+62,(rn[3]>>6)+(rn[4]<<2&63)+62,(rn[4]>>4)+(rn[5]<<4&63)+62,(rn[5]>>2)+62,(rn[6]&63)+62,(rn[6]>>6)+(rn[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),wN.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=Cm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?Ei.warn(a):Ei.info(a):Ei.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=Cm(a.contentType?a:bq(a),e,c),c}}function hae(e){wN=e,e.includeExpensiveRecordCountEstimates&&(rc.prototype.includeExpensiveRecordCountEstimates=!0),!yq&&(yq=!0,gS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return pae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Kp++;let s=new Zn;Rq||(Rq=!0,$m(l=>{Kp>0&&l.push({metric:"ws-connections",connections:Kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ei.warn(l)});let a;t.on("message",o(function(u){a||(a=vo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);Ve(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{Kp--,Zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=gS.getMatch(l,"ws");if(Zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ve(h=>({count:h.count,total:Kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ci(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Mo(p.value,r);t.send(h),Ve(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?Ei.warn(l):Ei.info(l):Ei.error(l),t.close(Eae[l.statusCode]||1011,bq(l))}t.close()},e))}function NN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Ei,Nd,bq,rn,mae,wN,Tq,yq,gS,Rq,Kp,Eae,Aq=se(()=>{Uo();rs();Ei=b(Q()),Nd=b(_e());og();Pu();xa();Pp();_q();Vp();cg();({errorToString:bq}=Ei),rn=new Uint8Array(8),mae=new Float64Array(rn.buffer,0,1),wN={},Tq="openapi";o(pae,"http");Kp=0;o(hae,"start");Eae={401:3e3,403:3003};o(NN,"parseHeaderValue")});var CN=v((Fve,wq)=>{var{recordAction:TS,recordActionBinary:Iq}=(rs(),M(J_)),_ae=require("fastify-plugin"),gae=200;wq.exports=_ae(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),TS(a,"duration",u,f,d),Iq(s.raw.statusCode<400,"success",u,f,d),Iq(1,"response_"+s.raw.statusCode,u,f,d);let m=gae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{TS(performance.now()-c,"transfer",u,f,d),TS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,TS(m,"bytes-sent",u,f,d));let p=a.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 Cq=v((kve,Nq)=>{var Sae=ft(),Tae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Nq.exports=function(e){return Sae.validateObject(e,Tae)}});var yS=v((Hve,Oq)=>{"use strict";var yae=(q(),M(z)).OPERATIONS_ENUM,ON=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=yae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Oq.exports=ON});var zp={};Re(zp,{createTokens:()=>DN,getJWTRSAKeys:()=>wS,refreshOperationToken:()=>MN,validateOperationToken:()=>vN,validateRefreshToken:()=>NS});async function wS(){if(RS)return RS;try{let e=Yp.default.join(Wp.default.getHdbBasePath(),gb),t=await bS.default.readFile(Yp.default.join(e,am.JWT_PASSPHRASE_NAME),"utf8"),r=await bS.default.readFile(Yp.default.join(e,am.JWT_PRIVATE_KEY_NAME),"utf8");return RS={publicKey:await bS.default.readFile(Yp.default.join(e,am.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},RS}catch(e){throw IS.default.error(e),new _i.ClientError(Od.NO_ENCRYPTION_KEYS,Cd.INTERNAL_SERVER_ERROR)}}async function DN(e){let t=(0,PN.validateBySchema)(e,io.default.object({username:io.default.string().optional(),password:io.default.string().optional(),role:io.default.string().optional(),expires_in:io.default.alternatives(io.default.string(),io.default.number()).optional()}));if(t)throw new _i.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(0,LN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw IS.default.error(f),new _i.ClientError(Od.INVALID_CREDENTIALS,Cd.UNAUTHORIZED)}if(!r)throw new _i.ClientError(Od.INVALID_CREDENTIALS,Cd.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 a=await wS(),c=await Pd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??vq,algorithm:AS,subject:Ld.OPERATION}),l=await Pd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Rae,algorithm:AS,subject:Ld.REFRESH}),u=Ew(l,Gr.SHA256);if((await(0,Pq.update)(new Lq.default(im,Iu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new _i.ClientError(Od.REFRESH_TOKEN_SAVE_FAILED,Cd.INTERNAL_SERVER_ERROR);return Dq.default.signalUserChange(new Mq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function MN(e){let t=(0,PN.validateBySchema)(e,io.default.object({refresh_token:io.default.string().required()}).required());if(t)throw new _i.ClientError(t.message);let{refresh_token:r}=e;await NS(r);let n=await wS(),s=await Pd.default.decode(r);return{operation_token:await Pd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:vq,algorithm:AS,subject:Ld.OPERATION})}}async function vN(e){return Uq(e,Ld.OPERATION)}async function NS(e){return Uq(e,Ld.REFRESH)}async function Uq(e,t){try{let r=await wS(),n=await Pd.default.verify(e,r.publicKey,{algorithms:AS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,LN.findAndValidateUser)(n.username,void 0,!1);if(t===Ld.REFRESH&&!_w(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw IS.default.warn(r),r?.name==="TokenExpiredError"?new _i.ClientError(Od.TOKEN_EXPIRED,Cd.FORBIDDEN):new _i.ClientError(Od.INVALID_TOKEN,Cd.UNAUTHORIZED)}}var Pd,bS,Yp,io,PN,_i,IS,LN,Pq,Lq,Dq,Mq,Wp,Cd,Od,vq,Rae,AS,Ld,RS,Dd=se(()=>{Pd=b(require("jsonwebtoken")),bS=b(require("fs-extra")),Yp=b(require("node:path")),io=b(require("joi")),PN=b(ft());q();_i=b(_e()),IS=b(Q());Sw();LN=b(ds()),Pq=b(Gn()),Lq=b(yS()),Dq=b($o()),Mq=b(os()),Wp=b(me()),{HTTP_STATUS_CODES:Cd,AUTHENTICATION_ERROR_MSGS:Od}=_i.hdbErrors;Wp.default.initSync();vq=Wp.default.get(F.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Rae=Wp.default.get(F.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",AS="RS256",Ld={OPERATION:"operation",REFRESH:"refresh"};o(wS,"getJWTRSAKeys");o(DN,"createTokens");o(MN,"refreshOperationToken");o(vN,"validateOperationToken");o(NS,"validateRefreshToken");o(Uq,"validateToken")});var UN=v((Kve,Fq)=>{"use strict";var bae=Cq(),Md=require("passport"),Aae=require("passport-local").Strategy,Iae=require("passport-http").BasicStrategy,wae=require("util"),Nae=ds(),Bq=wae.callbackify(Nae.findAndValidateUser),Vve=zr(),Cae=(q(),M(z)),xq=(Dd(),M(zp));Md.use(new Aae(function(e,t,r){Bq(e,t,r)}));Md.use(new Iae(function(e,t,r){Bq(e,t,r)}));Md.serializeUser(function(e,t){t(null,e)});Md.deserializeUser(function(e,t){t(null,e)});function Oae(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":Md.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Cae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?xq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):xq.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Md.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(Oae,"authorize");function Pae(e,t){let r=bae(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 a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(Pae,"checkPermissions");Fq.exports={authorize:Oae,checkPermissions:Pae}});var GN=v((jve,qq)=>{var LS=require("clone"),DS=ft(),Lae=oe(),OS=(q(),M(z)),Wve=Q(),xN=require("fs"),FN=require("joi"),{string:PS}=FN.types(),{hdbErrors:Dae,handleHDBError:CS}=_e(),{HDB_ERROR_MSGS:zve,HTTP_STATUS_CODES:BN}=Dae,{commonValidators:vd}=Wi(),kq=" is required",Mae=["insert","update","upsert"],kN={database:{presence:!1,format:vd.schema_format,length:vd.schema_length},schema:{presence:!1,format:vd.schema_format,length:vd.schema_length},table:{presence:!0,format:vd.schema_format,length:vd.schema_length},action:{inclusion:{within:Mae,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},vae={schema:PS.required(),table:PS.required(),action:PS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Uae,AWS_SECRET:xae,AWS_BUCKET:Bae,AWS_FILE_KEY:Fae,REGION:kae}=OS.S3_BUCKET_AUTH_KEYS,Hae={s3:{presence:!0},[`s3.${Uae}`]:{presence:!0,type:"String"},[`s3.${xae}`]:{presence:!0,type:"String"},[`s3.${Bae}`]:{presence:!0,type:"String"},[`s3.${Fae}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${kae}`]:{presence:!0,type:"String"}},Hq=LS(kN);Hq.data.presence={message:kq};var Gq=LS(kN);Gq.file_path.presence={message:kq};var Gae=Object.assign(LS(kN),Hae),HN=LS(vae);HN.csv_url=PS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();HN.passthrough_headers=FN.object();function qae(e){let t=DS.validateObject(e,Hq);return MS(e,t)}o(qae,"dataObject");function $ae(e){let t=DS.validateBySchema(e,FN.object(HN));return MS(e,t)}o($ae,"urlObject");function Vae(e){let t=DS.validateObject(e,Gq);return MS(e,t)}o(Vae,"fileObject");function Kae(e){let t=DS.validateObject(e,Gae);return MS(e,t)}o(Kae,"s3FileObject");function MS(e,t){if(!t){let r=Lae.checkGlobalSchemaTable(e.schema,e.table);if(r)return CS(new Error,r,BN.BAD_REQUEST);if(e.operation===OS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{xN.accessSync(e.file_path,xN.constants.R_OK|xN.constants.F_OK)}catch(n){return n.code===OS.NODE_ERROR_CODES.ENOENT?CS(n,`No such file or directory ${n.path}`,BN.BAD_REQUEST):n.code===OS.NODE_ERROR_CODES.EACCES?CS(n,`Permission denied ${n.path}`,BN.BAD_REQUEST):CS(n)}}return t}o(MS,"postValidateChecks");qq.exports={dataObject:qae,urlObject:$ae,fileObject:Vae,s3FileObject:Kae}});var qN=v((Jve,$q)=>{"use strict";var jp=Q(),vS=(q(),M(z));async function Yae(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===vS.OPERATIONS_ENUM.INSERT||t.operation===vS.OPERATIONS_ENUM.UPDATE||t.operation===vS.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===vS.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(jp.info(i.message),i):i.http_resp_msg?(jp.error(`Error calling operation: ${e.name}`),jp.error(i.http_resp_msg),i):(jp.error(`Error calling operation: ${e.name}`),jp.error(i),i)}}o(Yae,"callOperationFunctionAsAwait");$q.exports={callOperationFunctionAsAwait:Yae}});var $N=v((Zve,Kq)=>{"use strict";var{S3:Wae,GetObjectCommand:zae}=require("@aws-sdk/client-s3");Kq.exports={getFileStreamFromS3:jae,getS3AuthObj:Vq};async function jae(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Vq(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new zae(r))).Body}o(jae,"getFileStreamFromS3");function Vq(e,t,r){return new Wae({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(Vq,"getS3AuthObj")});var Wq=v((tUe,Yq)=>{"use strict";var VN=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},KN=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Yq.exports={BulkLoadFileObject:VN,BulkLoadDataObject:KN}});var jq=v((nUe,zq)=>{"use strict";var YN=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};zq.exports=YN});var Jq=v((iUe,Qq)=>{"use strict";var WN=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};Qq.exports=WN});var jN=v((aUe,Zq)=>{"use strict";var Xq=jq(),Qae=Jq(),{HDB_ERROR_MSGS:Jae}=zr(),zN=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=Jae.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 Xq(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Qae(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new Xq(r,n,[],i);this.unauthorized_access[a]=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}};Zq.exports=zN});var Ml=v((uUe,n$)=>{"use strict";var lUe=_n(),Qp=Q(),{validateBySchema:e$}=ft(),jo=require("joi"),Xae=Zi(),US=oe(),{handleHDBError:xS,hdbErrors:Zae,ClientError:t$}=_e(),{HDB_ERROR_MSGS:BS,HTTP_STATUS_CODES:QN}=Zae,r$=me();r$.initSync();var{getDatabases:JN}=(we(),M(mt)),ece=require("fs-extra"),tce=(q(),M(z));n$.exports={describeAll:rce,describeTable:FS,describeSchema:nce};async function rce(e={}){try{let t=US.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=JN(),a={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){a[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await FS({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let g=n[m].tables[h].attribute_permissions;E=await FS({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){Qp.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],a[l[m].schema]&&delete a[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],a[l[m].schema]&&delete a[l[m].schema]);for(let m in a)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return Qp.error("Got an error in describeAll"),Qp.error(t),xS(new Error,BS.DESCRIBE_ALL_ERR)}}o(rce,"describeAll");async function FS(e,t){US.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=e$(e,jo.object({database:jo.string(),table:jo.string().required(),exact_count:jo.boolean().strict(),include_computed:jo.boolean().strict()}));if(i)throw new t$(i.message);let c=JN()[r];if(!c)throw xS(new Error,BS.SCHEMA_NOT_FOUND(e.schema),QN.NOT_FOUND);let l=c[n];if(!l)throw xS(new Error,BS.TABLE_NOT_FOUND(e.schema,e.table),QN.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})}o(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 ece.stat(l.primaryStore.env.path)).size}catch(p){Qp.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),r$.get(tce.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Xae.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){Qp.warn(`unable to stat table dbi due to ${p}`)}return m}o(FS,"descTable");async function nce(e){US.transformReq(e);let t=e$(e,jo.object({database:jo.string(),exact_count:jo.boolean().strict(),include_computed:jo.boolean().strict()}));if(t)throw new t$(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=JN()[n];if(!i)throw xS(new Error,BS.SCHEMA_NOT_FOUND(e.schema),QN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),US.isEmpty(l)||l.describe){let u=await FS({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(nce,"describeSchema")});var c$=v((fUe,a$)=>{"use strict";var sce=Ml(),{hdbErrors:s$}=_e(),{getDatabases:i$}=(we(),M(mt));a$.exports={checkSchemaExists:o$,checkSchemaTableExists:ice,schemaDescribe:sce};async function o$(e){if(!i$()[e])return s$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(o$,"checkSchemaExists");async function ice(e,t){let r=await o$(e);if(r)return r;if(!i$()[e][t])return s$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(ice,"checkSchemaTableExists")});var kS=v((pUe,l$)=>{"use strict";var oce=ls();l$.exports={writeTransaction:ace};function ace(e,t,r){return oce.writeTransaction(e,t,r)}o(ace,"writeTransaction")});var rC=v((SUe,y$)=>{"use strict";var{decode:cce}=require("msgpackr"),{isMainThread:EUe,parentPort:_Ue,threadId:gUe}=require("worker_threads"),qS=hr(),Ud=Pt(),eC=(q(),M(z)),Tn=Q(),ZN=me(),lce=(q(),M(z)),{onMessageByType:uce}=nt(),m$=Zi(),{recordAction:u$,recordActionBinary:dce}=(rs(),M(J_)),{publishToStream:fce}=qS,{ConsumerEvents:d$}=require("nats"),mce=_n(),{promisify:pce}=require("util"),{decodeBlobsWithWrites:hce}=(ts(),M(v_)),p$=pce(setTimeout),$S=1e4,VS,GS,Ece,_ce,h$,Jp=new Map,xd=new Map;y$.exports={initialize:E$,ingestConsumer:tC,setSubscription:gce,setIgnoreOrigin:yce,getDatabaseSubscriptions:Tce,updateConsumer:_$};async function E$(){uce(eC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await _$(n)}),h$=!0,Tn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await qS.getNATSReferences();VS=e,GS=e.info.server_name,Ece=t,_ce=r}o(E$,"initialize");async function _$(e){if(e.status==="start"){let{js:t,jsm:r}=await g$(e.node_domain_name);tC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Jp.get(e.stream_name+e.node_domain_name);t&&(Tn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Jp.set(e.stream_name+e.node_domain_name,"close")),xd.get(e.node_domain_name)==="failed"&&xd.set(e.node_domain_name,"close")}}o(_$,"updateConsumer");var KS=new Map;function gce(e,t,r){let n=KS.get(e);n||KS.set(e,n=new Map),n.set(t,r),h$||E$().then(Sce)}o(gce,"setSubscription");async function Sce(){let e=await mce.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Ud.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await g$(r),!n))break;let{schema:a,table:c}=i,l=m$.createNatsTableStreamName(a,c);tC(l,n,s,r)}}}o(Sce,"accessConsumers");async function g$(e){let t,r,n=1;for(;!r;)try{t=await VS.jetstream({domain:e}),r=await VS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(xd.get(e)==="close")break;xd.set(e,"failed"),n%10===1&&Tn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<$S?n++*100:$S;await p$(i)}return{js:t,jsm:r}}o(g$,"connectToRemoteJS");function Tce(){return KS}o(Tce,"getDatabaseSubscriptions");var S$;function yce(e){S$=e}o(yce,"setIgnoreOrigin");var T$=100,f$=new Array(T$),HS=0;async function tC(e,t,r,n){let{connection:s}=await qS.getNATSReferences();VS=s,GS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,GS),Tn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(xd.get(n)==="close")break;a%10===1&&Tn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Tn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await qS.createConsumer(r,e,GS,new Date(Date.now()).toISOString()));let d=a++*100<$S?a++*100:$S;await p$(d)}let c=!1,l;for(;!c;){if(Jp.get(e+n)==="close"||xd.get(n)==="close"){Jp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:ZN.get(eC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Jp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===d$.ConsumerDeleted&&(await l.close(),c=!0),d.type===d$.HeartbeatsMissed){let f=d.data;Tn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(Tn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await f$[HS],f$[HS]=Rce(d).catch(f=>{Tn.error(f)}),++HS>=T$&&(HS=0)}catch(d){d.message==="consumer deleted"?(Tn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Tn.error("Error consuming clustering ingest, restarting consumer",d)}}}o(tC,"ingestConsumer");async function Rce(e){let t;await hce(()=>{t=cce(e.data)}),u$(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Tn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=ZN.get(eC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Ud.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Ud.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Ud.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!S$),dce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Ud.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;Tn.trace("processing message:",a,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),Tn.trace(`messageProcessor nats msg id: ${e.headers.get(Ud.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:g,user:R,node_name:S}=m||{},y=KS.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:XN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map((k,J)=>({type:XN(a),value:k,expiresAt:p,id:f?.[J],table:u}));for(;l;)I.push({type:XN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:I,table:u,timestamp:g,onCommit:h,user:R,nodeName:S})}ZN.get(lce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&fce(e.subject.split(".").slice(0,-1).join("."),m$.createNatsTableStreamName(c,u),e.headers,e.data),await E;let C=Date.now()-g;g&&u$(C,"replication-latency",e.subject,a,"ingest")}catch(a){Tn.error(a)}e.ack()}o(Rce,"messageProcessor");function XN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(XN,"convertOperation")});var hr=v((wUe,F$)=>{"use strict";var Vr=me();Vr.initSync();var bce=require("fs-extra"),Ace=require("semver"),eh=require("path"),{monotonicFactory:Ice}=require("ulidx"),b$=Ice(),wce=require("util"),A$=require("child_process"),Nce=wce.promisify(A$.exec),Cce=A$.spawn,nn=Pt(),rt=(q(),M(z)),{packageJson:Oce,PACKAGE_ROOT:Pce}=Ct(),YS=oe(),gi=Q(),WS=Zi(),Lce=kS(),Xp=gt(),{broadcast:Dce,onMessageByType:Mce,getWorkerIndex:vce}=nt(),{isMainThread:I$}=require("worker_threads"),{Encoder:Uce,decode:oC}=require("msgpackr"),w$=new Uce,{isEmpty:Bl}=YS,N$=ds(),yUe=48*36e11;I$&&Mce(rt.ITC_EVENT_TYPES.RESTART,()=>{yn=void 0,xl=void 0});var{connect:xce,StorageType:Bce,RetentionPolicy:Fce,AckPolicy:aC,DeliverPolicy:cC,DiscardPolicy:kce,NatsConnection:RUe,JetStreamManager:bUe,JetStreamClient:AUe,StringCodec:IUe,JSONCodec:Hce,createInbox:lC,headers:Gce,ErrorCode:R$}=require("nats"),{recordAction:qce}=(rs(),M(J_)),{encodeBlobsAsBuffers:$ce}=(ts(),M(v_)),C$=Hce(),Vce="clustering",Kce=Oce.engines[nn.NATS_SERVER_NAME],Yce=eh.join(Pce,"dependencies"),iC=eh.join(Yce,`${process.platform}-${process.arch}`,nn.NATS_BINARY_NAME),nC,sC,Zp,vl,Ul;F$.exports={runCommand:O$,checkNATSServerInstalled:Wce,createConnection:uC,getConnection:th,getJetStreamManager:rh,getJetStream:L$,getNATSReferences:oo,getServerList:jce,createLocalStream:dC,listStreams:D$,deleteLocalStream:Qce,getServerConfig:Bd,listRemoteStreams:Jce,viewStream:Xce,viewStreamIterator:Zce,publishToStream:ele,request:nle,reloadNATS:fC,reloadNATSHub:sle,reloadNATSLeaf:ile,extractServerName:rle,requestErrorHandler:ole,createLocalTableStream:x$,createTableStreams:lle,purgeTableStream:B$,purgeSchemaTableStreams:ule,getStreamInfo:dle,updateLocalStreams:mle,closeConnection:zce,getJsmServerName:zS,addNatsMsgHeader:M$,clearClientCache:P$,updateRemoteConsumer:ale,createConsumer:v$,updateConsumerIterator:cle};async function O$(e,t=void 0){let{stdout:r,stderr:n}=await Nce(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
15
|
+
`)}}});var HH,Nl,GH,Xa,bp,pd,bie,Vg,Kw=se(()=>{HH=b(os()),Nl=b(nt());q();GH=b(es());ud();$g();Xa=(0,GH.loggerWithTag)("componentStatus.crossThread"),bp=class{static{o(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,Nl.onMessageByType)(n_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;Xa.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&&(Xa.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 a=((0,Nl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=a&&!E&&(E=!0,S(),Xa.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),Xa.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${a} responses`),p(y)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,g),(0,HH.sendItcEvent)({type:n_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new fd("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,Nl.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 g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return Xa.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof fd?Xa.error?.(`ITC failure during component status collection: ${r.message}`):Xa.warn?.("Failed to collect component status from all threads:",r),Xa.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,Nl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[a,c]of r)n.set(`${a}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},pd=class{static{o(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let a=s.indexOf("@"),c=a!==-1?s.substring(0,a):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let a=this.aggregateComponentGroup(s,i);r.set(s,a)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,a,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Ie.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!a&&(a=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:a};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Ie.ERROR,Ie.WARNING,Ie.LOADING,Ie.UNKNOWN,Ie.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Ie.UNKNOWN}},bie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Vg=new bp(bie)});var Za,Kg=se(()=>{Gw();ud();Kw();$g();Za=class e{static{o(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new md(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ie).includes(r))throw new md(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ie).join(", ")}`);this.statusMap.set(t,new dd(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Ie.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Ie.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Ie.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Ie.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Ie.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Ie.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={[Ie.HEALTHY]:0,[Ie.ERROR]:0,[Ie.WARNING]:0,[Ie.LOADING]:0,[Ie.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await Vg.collect(t);return pd.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:Ie.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let a=n.some(f=>f.status===Ie.ERROR),c=n.some(f=>f.status===Ie.LOADING),l=a?Ie.ERROR:c?Ie.LOADING:Ie.HEALTHY,u="All components loaded successfully",d={};if(a||c){u=n.filter(m=>m.status===Ie.ERROR||m.status===Ie.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Ie.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 mr,Yg=se(()=>{Kg();mr=new Za});function $H(e){let t=qH.get(e);return t||(t=new Yw(e),qH.set(e,t)),t}function VH(){mr.reset()}var Yw,qH,ro,KH,YH=se(()=>{Yg();ud();Yw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return mr.setStatus(this.componentName,Ie.HEALTHY,t),this}warning(t){return mr.setStatus(this.componentName,Ie.WARNING,t),this}error(t,r){return mr.setStatus(this.componentName,Ie.ERROR,t,r),this}loading(t){return mr.setStatus(this.componentName,Ie.LOADING,t||"Loading..."),this}unknown(t){return mr.setStatus(this.componentName,Ie.UNKNOWN,t),this}get(){return mr.getStatus(this.componentName)}},qH=new Map;o($H,"statusForComponent");ro={loading(e,t){mr.initializeLoading(e,t)},loaded(e,t){mr.markLoaded(e,t)},failed(e,t,r){mr.markFailed(e,t,r)}};o(VH,"reset");KH=Ie});var Ap={};Re(Ap,{AggregationError:()=>$w,COMPONENT_STATUS_LEVELS:()=>Ie,ComponentStatus:()=>dd,ComponentStatusError:()=>Ja,ComponentStatusOperationError:()=>md,ComponentStatusRegistry:()=>Za,CrossThreadCollectionError:()=>Vw,CrossThreadStatusCollector:()=>bp,CrossThreadTimeoutError:()=>qw,ITCError:()=>fd,StatusAggregator:()=>pd,componentStatusRegistry:()=>mr,crossThreadCollector:()=>Vg,query:()=>Aie});var Aie,WH=se(()=>{Yg();Kg();Gw();Kg();Kw();Yg();$g();ud();Aie={get(e){return mr.getStatus(e)},all(){return mr.getAllStatuses()},byStatus(e){return mr.getComponentsByStatus(e)},summary(){return mr.getStatusSummary()},async allThreads(){return Za.getAggregatedFromAllThreads(mr)}}});var Ww={};Re(Ww,{STATUS:()=>KH,internal:()=>Ap,lifecycle:()=>ro,reset:()=>VH,statusForComponent:()=>$H});var Ip=se(()=>{YH();WH()});var Np=v((uMe,QH)=>{"use strict";var fs=Q(),gn=(q(),M(z)),Iie=Dx(),wie=ds(),{validateEvent:zw}=os(),wp=ls(),Nie=require("process"),{resetDatabases:Cie}=(we(),M(mt)),Oie={[gn.ITC_EVENT_TYPES.SCHEMA]:Pie,[gn.ITC_EVENT_TYPES.USER]:jH,[gn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Die};async function Pie(e){let t=zw(e);if(t){fs.error(t);return}fs.trace("ITC schemaHandler received schema event:",e),await Iie(e.message),await Lie(e.message)}o(Pie,"schemaHandler");async function Lie(e){try{wp.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),wp.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),wp.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Cie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fs.error(t)}}o(Lie,"syncSchemaMetadata");var zH=[];async function jH(e){try{try{wp.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),wp.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fs.warn(r)}let t=zw(e);if(t){fs.error(t);return}fs.trace(`ITC userHandler ${gn.HDB_ITC_CLIENT_PREFIX}${Nie.pid} received user event:`,e),await wie.setUsersWithRolesCache();for(let r of zH)r()}catch(t){fs.error(t)}}o(jH,"userHandler");jH.addListener=function(e){zH.push(e)};async function Die(e){try{let t=zw(e);if(t){fs.error(t);return}fs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Ip(),M(Ww)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=os(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:gn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?fs.trace(`Sent component status response directly to thread ${u}`):(u===void 0?fs.debug("No originator threadId, falling back to broadcast"):fs.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){fs.error("Error handling component status request:",t)}}o(Die,"componentStatusRequestHandler");QH.exports=Oie});var os=v((EMe,XH)=>{"use strict";var fMe=Q(),jw=oe(),Mie=(q(),M(z)),{ITC_ERRORS:Cp}=zr(),{parentPort:mMe,threadId:vie,isMainThread:Uie,workerData:pMe}=require("worker_threads"),{onMessageFromWorkers:xie,broadcast:hMe,broadcastWithAcknowledgement:Bie}=nt();XH.exports={sendItcEvent:Fie,validateEvent:JH,SchemaEventMsg:kie,UserEventMsg:Hie};var Wg;xie(async(e,t)=>{Wg=Wg||Np(),JH(e),Wg[e.type]&&await Wg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Fie(e){return!Uie&&e.message&&(e.message.originator=vie),Bie(e)}o(Fie,"sendItcEvent");function JH(e){if(typeof e!="object")return Cp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||jw.isEmpty(e.type))return Cp.MISSING_TYPE;if(!e.hasOwnProperty("message")||jw.isEmpty(e.message))return Cp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||jw.isEmpty(e.message.originator))return Cp.MISSING_ORIGIN;if(Mie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Cp.INVALID_EVENT(e.type)}o(JH,"validateEvent");function kie(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(kie,"SchemaEventMsg");function Hie(e){this.originator=e}o(Hie,"UserEventMsg")});var $o=v((SMe,rG)=>{"use strict";var ZH=(q(),M(z)),gMe=oe(),zg=Q(),eG=px(),hd,{sendItcEvent:tG}=os();function Gie(e){try{zg.debug("signalSchemaChange called with message:",e),hd=hd||Np();let t=new eG(ZH.ITC_EVENT_TYPES.SCHEMA,e);return hd.schema(t),tG(t)}catch(t){zg.error(t)}}o(Gie,"signalSchemaChange");function qie(e){try{zg.trace("signalUserChange called with message:",e),hd=hd||Np();let t=new eG(ZH.ITC_EVENT_TYPES.USER,e);return hd.user(t),tG(t)}catch(t){zg.error(t)}}o(qie,"signalUserChange");rG.exports={signalSchemaChange:Gie,signalUserChange:qie}});function Op(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 nG(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Fs(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var Fs,Pp=se(()=>{Fs=class extends Map{static{o(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),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 a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(Op,"appendHeader");o(nG,"mergeHeaders")});function jg(e,t,r=Vie){let n;return function(...i){return n?n.length*Qw>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();Qw=(Qw*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var oG,$ie,Vie,sG,Kie,Jw,iG,Qw,Xw=se(()=>{oG=b(es()),$ie=3e3,Vie=2e4,sG=0,Kie=3e4,Jw=3e3,iG=performance.now()+Jw,Qw=0;o(jg,"throttle");setInterval(()=>{let e=performance.now();e-iG-Jw>$ie&&sG+Kie<e&&(oG.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),sG=e),iG=e},Jw).unref()});var _G={};Re(_G,{EVICTED:()=>qa,INVALIDATED:()=>xn,coerceType:()=>Jg,makeTable:()=>Zg});function Zg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=vA(i,n,l),C,I,k={},J=Promise.resolve(),G,H,X;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(G=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(H=K),K.expiresAt&&(X=K),K.isPrimaryKey&&(k=K);let W,ue=[],ce=[],te=1,ye=2,Ae={},Ye={},qe=864e5,Ar=0,tr,Wr,vr,Su=!1,kc,xt,ri,Ca=Ol.get(F.REPLICATION_DATABASES);if(Array.isArray(Ca)){for(let K of Ca)if(K.name===c&&K.replicateTo>=0){ri=K.replicateTo;break}}let VE=i.getRange({start:!1,end:!1}).constructor,Qf=10,KE=6;g&&tm(),Mm(i.env.path,K=>{if(I)return Pa(K)});class Jf extends _l{static{o(this,"Updatable")}getUpdatedTime(){return Ha.get(this.getRecord())?.version}getExpiresAt(){return Ha.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new fp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class Pe extends Hr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=G;static updatedTimeProperty=H;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(L=>!L.intermediateSource)){if(this.sources.some(L=>L.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}I=I||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),C=C||_.load;let N=o(L=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[L]&&(!U[L].reliesOnPrototype||U.prototype[L])),A.length>0)if(A.length===1){let U=A[0];return(w,D,$)=>{if(w?.source!==U)return U[L](D,$,w)}}else return(U,w,D)=>{let $=[];for(let Y of A){if(U?.source===Y)break;$.push(Y[L](w,D,U))}return Promise.all($)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=o(L=>{if(P[L]&&(!P[L].reliesOnPrototype||P.prototype[L]))return(A,U,w)=>{if(!A?.source)return P[L](U,w,A)}},"getApplyToCanonicalSource");Ae={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ye={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish"),invalidate:N("invalidate")};let x=P.shouldRevalidateEvents;return(async()=>{let L=!1,A,U=o(async(w,D)=>{let $=w.value,Y=w.table?De[c][w.table]:Pe;if(c===im&&(w.table===Iu.ROLE_TABLE_NAME||w.table===Iu.USER_TABLE_NAME)&&(L=!0),w.id===void 0&&(w.id=$[Y.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));w.source=_;let j={residencyId:Hc(w.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:w.nodeId,async:!0},B=w.id,Ee=await Y.getResource(B,D,j);switch(w.finished&&await w.finished,w.type){case"put":return x?Ee._writeInvalidate(B,$,j):Ee._writeUpdate(B,$,!0,j);case"patch":return x?Ee._writeInvalidate(B,$,j):Ee._writeUpdate(B,$,!1,j);case"delete":return Ee._writeDelete(B,j);case"publish":case"message":return Ee._writePublish(B,$,j);case"invalidate":return Ee._writeInvalidate(B,$,j);case"relocate":return Ee._writeRelocate(B,j);default:Fe.default.error?.("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=_.subscribe;w&&R==null&&(R=!0);let D={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=_.subscribeOnThisThread?_.subscribeOnThisThread((0,Cl.getWorkerIndex)(),D):(0,Cl.getWorkerIndex)()===0,Y=w&&$&&await _.subscribe?.(D);if(Y){let j;for await(let B of Y)try{if(!(B.type==="transaction"?B.writes[0]:B)){Fe.default.error?.("Bad subscription event",B);continue}if(B.source=_,B.type==="end_txn"){if(j?.resolve(),B.localTime&&A!==B.localTime){if(B.remoteNodeIds?.length>0){let pe=[Symbol.for("seq"),B.remoteNodeIds[0]],ne=d.get(pe),ie=ne?.nodes;ie||(ie=[]);for(let de of B.remoteNodeIds.slice(1)){let ae=ie.find(ke=>ke.id===de);ie=ie.filter(ke=>ke.id!==de||ke===ae),ae||(ae={id:de,seqId:0},ie.push(ae)),ae.seqId=Math.max(ne?.seqId??1,B.localTime),de===j?.nodeId&&(ae.lastTxnTime=B.timestamp)}let xe=Math.max(ne?.seqId??1,B.localTime);Fe.default.trace?.("Received txn",c,xe,new Date(xe),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(pe,{seqId:xe,nodes:ie})}A=B.localTime}B.onCommit&&j?.committed.then(B.onCommit);continue}if(j)if(B.beginTxn)j.resolve();else{j.write_promises.push(U(B,j));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let fe=bt(B,()=>{if(B.type==="transaction"){let pe=[];for(let ne of B.writes)try{pe.push(U(ne,B))}catch(ie){throw ie.message+=" writing "+JSON.stringify(ne)+" of event "+JSON.stringify(B),ie}return Promise.all(pe)}else if(B.type==="define_schema"){let pe=this.attributes.slice(0),ne=!1;for(let ie of B.attributes)pe.find(xe=>xe.name===ie.name)||(pe.push(ie),ne=!0);ne&&(Ze({table:s,database:c,attributes:pe,origin:"cluster"}),Dp.signalSchemaChange(new Mp.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return B.beginTxn?(j=B,j.write_promises=[U(B,B)],new Promise(pe=>{j.resolve=()=>pe(Promise.all(j.write_promises))})):U(B,B)});j&&(j.committed=fe),L&&fe&&!fe?.waitingForUserChange&&(fe.then(()=>Dp.signalUserChange(new Mp.UserEventMsg(process.pid))),fe.waitingForUserChange=!0),B.onCommit&&(fe?fe.then(B.onCommit):B.onCommit())}catch(Ee){Fe.default.error?.("error in subscription handler",Ee)}}}catch(w){Fe.default.error?.(w)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==Pe.prototype.get}static getResource(_,T,N){let P=super.getResource(_,T,N);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Bi(_);try{if(P.getRecord?.())return P;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let O=!N?.async||i.cache?.get?.(_),x=Ur(T),L=x.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return No(_,T,{transaction:L,ensureLoaded:N?.ensureLoaded},O,A=>{if(A?Pe._updateResource(P,A):P.#e=null,T.onlyIfCached){if(!P.doesExist())throw new lt.ServerError("Entry is not cached",504)}else if(N?.ensureLoaded){let U=dn(_,A,T,P);if(U)return x?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,ks(U,w=>(Pe._updateResource(P,w),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(_)),O}}return P}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=dn(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,ks(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=k?.type;if(_==="String"||_==="ID")return super.getNewId();if(!xt){let O=i.getEntry(Symbol.for("id_allocation")),x=O?.value,L;if(x&&x.nodeName===server.hostname&&(!noe(i)||x.pid===process.pid)){let A=x.start,U=x.end;L=A;for(let w of i.getKeys({start:U,end:A,limit:1,reverse:!0}))L=w}else x=P(O?.version??null),L=x.start;xt=new BigInt64Array([BigInt(L)+1n]),xt=new BigInt64Array(i.getUserSharedBuffer("id",xt.buffer)),xt.maxSafeId=x.end}let T=Number(Atomics.add(xt,0,1n)),N=_==="Int"?512:1048576;if(T+N>=xt.maxSafeId){let O=o(x=>{xt.maxSafeId=T+(_==="Int"?1023:4194303);let L=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=x?void 0:i.useReadTransaction(),U=Number(xt[0]);for(let $ of i.getKeys({start:U+1,end:L,limit:1,transaction:A}))L=$;A?.done();let{value:w,version:D}=i.getEntry(Symbol.for("id_allocation"));if(xt.maxSafeId<L){if(w.end>xt.maxSafeId-100)return;Fe.default.info?.("New id allocation",T,xt.maxSafeId,D),i.put(Symbol.for("id_allocation"),{start:w.start,end:xt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),D)}else{Fe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${xt.maxSafeId}, but id of ${L} detected`);let $=P(D);$.alreadyUpdated||Atomics.store(xt,0,BigInt($.start+1)),xt.maxSafeId=$.end}},"updateEnd");T+N===xt.maxSafeId?setImmediate(O):T+100>=xt.maxSafeId&&(Fe.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return T;function P(O){let x=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=x/4,A,U,w=!1,D,$;do{D=Math.floor(Math.random()*x),$={start:D,end:D+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let Y of i.getKeys({start:D,limit:1,reverse:!0}))A=Y;U=x;for(let Y of i.getKeys({start:D+1,end:x,limit:1}))U=Y;L*=.875,L<1e3&&!w&&(w=!0,Fe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,D,A,U,L))}while(!(L<U-D&&(L<D-A||A===0)));return i.transactionSync(()=>{let Y=i.getEntry(Symbol.for("id_allocation"));return(Y?.version??null)==O?(Fe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(Fe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...Y.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,qe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");qe=qe||(h+E)/4,Pa()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Pe.getResidency=_&&((T,N)=>{try{return _(T,N)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(_){Pe.getResidencyById=_&&(T=>{try{return _(T)}catch(N){throw N.message+=` in residency function for table ${s}`,N}})}static getResidency(_,T){if(Pe.getResidencyById)return Pe.getResidencyById(_[t]);let N=ri;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(N=T.replicateTo)}if(N>=0&&server.nodes){let P=[server.hostname];if(T.previousResidency)P.push(...T.previousResidency.slice(0,N));else{let O=server.nodes.map(A=>A.name),x=Math.floor(O.length*Math.random());P.push(...O.slice(x,x+N));let L=x+N-O.length;L>0&&P.push(...O.slice(0,L))}return P}}static enableAuditing(){g||(g=!0,tm(),Pe.audit=!0)}static coerceId(_){return _===""?null:Jg(_,k)}static async dropTable(){delete De[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Jr&&_.value&&Ba(_.value);if(c===a){for(let _ of S)d.remove(Pe.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Pe.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),eN.default.unlinkSync(i.env.path);Dp.signalSchemaChange(new Mp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(Xf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let N={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Pe.getRecordCount().then(P=>(N.recordCount=P.recordCount,N.estimatedRecordRange=P.estimatedRange,N)):N}if(_!==void 0&&T.loadAsInstance===!1){let N=this.getContext(),P=Ur(N),O=P.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let x=Os(_);Bi(x);let L=!0;return _.checkPermission&&(L=this.allowRead(N.user,_)),ks(ks(L,A=>{if(!A)throw new lt.AccessViolation(N.user);let U=!0;return No(x,N,{transaction:O,ensureLoaded:U},!1,w=>{if(N.onlyIfCached){if(!w?.value)throw new lt.ServerError("Entry is not cached",504)}else if(U){let D=dn(x,w,N);if(D)return P?.disregardReadTxn(),N.loadedFromSource=!0,D.then($=>$?.value)}return w?.value})}),A=>{let U=_?.select;return U&&A!=null?zu(U,this.constructor)(A):A})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let N=On(_,T);if(N?.read){if(N.isSuperUser)return!0;let P=N.attribute_permissions,O=T?.select;if(P?.length>0||Su&&O){if(T||(T={}),O){let x=P?.length>0&&Zw(P,"read");T.select=O.map(L=>{let A=L.name||L;if(!x||x[A]){let U=vr[A]?.definition?.tableClass;if(U){if(L.name||(L={name:L}),!L.checkPermission&&T.checkPermission&&(L.checkPermission=T.checkPermission),!U.prototype.allowRead.call(null,_,L))return!1;if(!L.select)return L.name}return L}}).filter(Boolean)}else T.select=P.filter(x=>x.read&&!vr[x.attribute_name]).map(x=>x.attribute_name);return T}else return!0}}allowUpdate(_,T,N){let P=On(_,N);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let x=Zw(O,"update");for(let L in T)if(!x[L])return!1;for(let L of O){let A=L.attribute_name;!L.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return Oa(this.getContext())}}allowCreate(_,T,N){if(this.isCollection){let P=On(_,N);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let x=Zw(O,"insert");for(let L in T)if(!x[L])return!1;return Oa(this.getContext())}else return Oa(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return On(_,T)?.delete&&Oa(this.getContext())}update(_,T){let N,P=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),O=!1;P?(O=T,T=_,N=this.getId()):N=Os(_);let x=this.getContext();if(!Ur(x))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(O)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(P){let A=this.#t;A&&(T=Object.assign(A,T)),this.#t=T}else{let A=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(A=this.allowUpdate(x.user,T,_)),ks(A,U=>{if(!U)throw new lt.AccessViolation(x.user);return ks(i.get(Os(_)),w=>{let D=new Jf(w);return D._setChanges(T),this._writeUpdate(N,D.getChanges(),!1),D})})}return this._writeUpdate(N,this.#t,O),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===cG?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new fp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let T=!0,N=this.getContext();return _?.checkPermission&&(T=this.allowDelete(N.user,_,N)),ks(T,P=>{if(!P)throw new lt.AccessViolation(N.user);this._writeInvalidate(_?Os(_):this.getId())})}_writeInvalidate(_,T,N){let P=this.getContext();Bi(_),Ur(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.invalidate?.bind(this,P,_),beforeIntermediate:bu(T,Ye.invalidate?.bind(this,P,_)),commit:o((x,L)=>{if(!(xr(x,L,N?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));Fe.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,T,L,x,xn,g,{user:P?.user,residencyId:N?.residencyId,nodeId:N?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let N=this.getContext();Bi(_),Ur(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.relocate?.bind(this,N,_),beforeIntermediate:Ye.relocate?.bind(this,N,_),commit:o((O,x)=>{if(xr(O,x,T?.nodeId)<=0)return;let L=Pe.getResidencyRecord(T.residencyId),A=0,U=null,w=x?.value;if(L&&!L.includes(server.hostname)){for(let D in r)U||(U={}),U[D]=w[D];A=xn}else U=w;Fe.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(O).toISOString()}`),y(_,U,x,O,A,g,{user:N.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let N={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},P=La(this.getResidency(T.value,N)),O;if(P){if(!P.includes(server.hostname))return!1;O=Hc(P)}let x=0;Fe.default.debug?.("Performing a relocate of an entry",existing_entry.key,T.value,P);let L=y(_.key,T.value,_,_.version,x,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,N){let P=this.Source,O;if(!((I||g)&&(!T||(O=i.getEntry(_),!O||!T)||O.version!==N))){if(I){if(i.hasLock(_,O.version))return;let x;for(let L in r)x||(x={}),x[L]=T[L];if(x)return y(_,x,O,N,qa,null,null,null,!0)}if(i.ifVersion(_,N,()=>{Tu(_,T,null)}),g)return y(_,null,O,N,qa,null,null,null,!0);al(i,O??i.getEntry(_),N)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let N=!0;if(_==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return _.checkPermission&&(N=this.allowUpdate(P.user,T,_)),ks(N,O=>{if(!O)throw new lt.AccessViolation(P.user);if(Array.isArray(T))for(let x of T){let L=x[t];this._writeUpdate(L,x,!0)}else{let x=Os(_);this._writeUpdate(x,T,!0)}})}}create(_,T){let N=!0,P=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(N=this.allowCreate(P.user,T,_)),ks(N,O=>{if(!O)throw new lt.AccessViolation(P.user);let x=Os(_)??T[t];if(x===void 0)x=this.constructor.getNewId();else if(i.get(x))throw new lt.ClientError("Record already exists",409);return this._writeUpdate(x,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let N=this.update(_,T);if(N?.then)return N.then(()=>{})}}_writeUpdate(_,T,N,P){let O=this.getContext(),x=Ur(O);Bi(_);let L=this.#n??i.getEntry(_);this.#s=N?cG:Zie;let A=o(w=>N?w.put?()=>w.put(O,_,T):null:w.patch?()=>w.patch(O,_,T):w.put?()=>w.put(O,_,gl(this)):null,"writeToSources"),U={key:_,store:i,entry:L,nodeName:O?.nodeName,validate:o(w=>{T||(T=this.#t),N||T&&Og(this.#t===T?this:T)?O?.source||(x.checkOverloaded(),this.validate(T,!N),H&&(T[H.name]=H.type==="Date"?new Date(w):H.type==="String"?new Date(w).toISOString():w),N&&(t&&T[t]!==_&&(T[t]=_),G&&(L?.value?T[G.name]=L?.value[G.name]:T[G.name]=G.type==="Date"?new Date(w):G.type==="String"?new Date(w).toISOString():w),T=gl(T))):x.removeWrite(U)},"validate"),before:A(Ae),beforeIntermediate:bu(T,A(Ye)),commit:o((w,D,$)=>{if($){if(O&&D?.version>(O.lastModified||0)&&(O.lastModified=D.version),this.#n=D,D?.value&&D.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");N||(this.#e=D?.value??null)}this.#t=void 0,this.#r=w;let Y=D?.value,j;this.#s=0;let B=!1,Ee=xr(w,D,P?.nodeId),fe;if(Ee<=0){if(g){let de=D.localTime,ae=D.version;Fe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(w),"applying later update from:",new Date(ae),"local recorded time",new Date(de));let ke=[];for(;de>w||ae>=w&&de>0;){let Be=l.get(de);if(!Be)break;let Le=At(Be);if(ae=Le.version,ae>=w){if(ae===w){if(Ee=xr(w,{version:ae,localTime:de},P?.nodeId),Ee===0)return;if(Ee>0)continue}if(Le.type==="patch")ke.push(Le),fe=T;else if(Le.type==="put"||Le.type==="delete")return}de=Le.previousLocalTime}de||Fe.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",D),ke.sort((Be,Le)=>Be.version-Le.version);for(let Be of ke){let Le=Be.getValue(i);if(Fe.default.debug?.("Rebuilding update with future patch:",new Date(Be.version),Le,Be),j=T_(j??T,Le,N),!j)return}}else{if(N)return;j=T_(j??T,Y,N),Fe.default.debug?.("Rebuilding update without audit:",j)}Fe.default.trace?.("Rebuilt record to save:",j," is full update:",N)}let pe;if(N&&!j?pe=T:this.constructor.loadAsInstance===!1?pe=gl(Y,j??T):(this.#e=Y,pe=gl(this,j??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let ne;if(P?.residencyId!=null)ne=P.residencyId;else{L?.residencyId&&(O.previousResidency=Pe.getResidencyRecord(L.residencyId));let de=La(Pe.getResidency(pe,O));if(de&&!de.includes(server.hostname))if(fe??=pe,B=!0,Pe.getResidencyById)pe=void 0;else{pe=null;for(let ae in r)pe||(pe={}),pe[ae]=fe[ae]}ne=Hc(de)}N||(fe=T);let ie=O?.expiresAt??(h?h+Date.now():-1);Fe.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(w).toISOString()}${ie?", expires at: "+new Date(ie).toISOString():""}${D?", replaces entry from: "+new Date(D.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),Tu(_,Y,pe);let xe=N?"put":"patch";y(_,pe,D,w,B?xn:0,g,{omitLocalRecord:B,user:O?.user,residencyId:ne,expiresAt:ie,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},xe,!1,fe),O.expiresAt&&Pa()},"commit")};x.addWrite(U)}async delete(_){if(Xf(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,N=this.getContext();return _.checkPermission&&(T=this.allowDelete(N.user,_,N)),ks(T,P=>{if(!P)throw new lt.AccessViolation(N.user);let O=Os(_);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let N=Ur(this.getContext());Bi(_);let P=this.getContext();return N.addWrite({key:_,store:i,entry:this.#n,nodeName:P?.nodeName,before:Ae.delete?.bind(this,P,_),beforeIntermediate:Ye.delete?.bind(this,P,_),commit:o((O,x,L)=>{let A=x?.value;L&&(P&&x?.version>(P.lastModified||0)&&(P.lastModified=x.version),Pe._updateResource(this,x)),!(xr(O,x,T?.nodeId)<=0)&&(Tu(this.getId(),A),Fe.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(O).toISOString()}`),g||R?(y(_,null,x,O,0,g,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||Pa()):al(i,x))},"commit")}),!0}search(_){let T=this.getContext(),N=Ur(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new lt.AccessViolation(T.user);T&&(T.lastModified=jie);let P=_.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let O=_.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let x,L={};function A(ie,xe){let de;switch(xe){case"and":case void 0:if(ie.length<1)throw new Error('An "and" operator requires at least one condition');de=!0;break;case"or":if(ie.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+xe)}for(let ae of ie){if(ae.conditions){ae.conditions=A(ae.conditions,ae.operator);continue}let ke=ae[0]??ae.attribute,Be=ke==null?k:Ki(S,ke);if(Be)(Be.type||xA[ae.comparator])&&(ae[1]===void 0?ae.value=w(ae.value,Be):ae[1]=w(ae[1],Be));else if(ke!=null&&!_.allowConditionsOnDynamicAttributes)throw(0,lt.handleHDBError)(new Error,`${ke} is not a defined attribute`,404);if(ae.chainedConditions)if(ae.chainedConditions.length===1&&(!ae.operator||ae.operator=="and")){let Le=ae.chainedConditions[0],Me,pt;if(Le.comparator==="gt"||Le.comparator==="greater_than"||Le.comparator==="ge"||Le.comparator==="greater_than_equal"?(Me=ae,pt=Le):(Me=Le,pt=ae),Me.comparator!=="lt"&&Me.comparator!=="less_than"&&Me.comparator!=="le"&&Me.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let wt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",Et=Me.comparator==="le"||Me.comparator==="less_than_equal";ae.comparator=(wt?"ge":"gt")+(Et?"le":"lt"),ae.value=[pt.value,Me.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ie}o(A,"prepareConditions");function U(ie,xe){if(_.enforceExecutionOrder)return ie;for(let de of ie)de.conditions&&(de.conditions=U(de.conditions,de.operator));return ie.length>1&&xe!=="or"?Yie(ie,sg(Pe)):ie}o(U,"orderConditions");function w(ie,xe){return Array.isArray(ie)?ie.map(de=>Jg(de,xe)):Jg(ie,xe)}o(w,"coerceTypedValues");let D=_.operator;(P.length>0||D)&&(P=A(P,D));let $=typeof _.sort=="object"&&_.sort,Y;if($&&D!=="or"){let ie=$.attribute;if(ie==null)throw new lt.ClientError("Sort requires an attribute");if(x=P.find(xe=>Ku(xe.attribute)===Ku(ie)),!x){let xe=Ki(S,ie);if(!xe)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not a defined attribute`,404);if(xe.indexed)x={...$,comparator:"sort"},P.push(x);else if(P.length===0&&!_.allowFullScan)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not indexed and not combined with any other conditions`,404)}x&&(x.descending=!!$.descending)}P=U(P,D),$&&(x&&P[0]===x?$.next&&(Y={dbOrderedAttribute:$.attribute,attribute:$.next.attribute,descending:$.next.descending,next:$.next.next}):(x&&P.splice(P.indexOf(x),1),Y=$));let j=_.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:P,operator:D,postOrdering:Y,selectApplied:!!j};let B=N.useReadTxn(),Ee=BA(P,D,Pe,B,_,T,(ie,xe)=>em(ie,j,T,B,xe),L),fe=_.ensureLoaded!==!1,pe=Pe.transformEntryForSelect(j,T,B,L,fe,!0),ne=Pe.transformToOrderedSelect(Ee,j,Y,T,B,pe);return(_.offset||_.limit!==void 0)&&(ne=ne.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),ne.onDone=()=>{ne.onDone=null,N.doneReadTxn()},ne.selectApplied=!0,ne.getColumns=()=>{if(j){let ie=[];for(let xe of j)xe==="*"?ie.push(...S.map(de=>de.name)):ie.push(xe.name||xe);return ie}return S.filter(ie=>!ie.computed&&!ie.relationship).map(ie=>ie.name)},ne}static transformToOrderedSelect(_,T,N,P,O,x){let L=new VE;if(N){_=em(_,T,P,O,null);let A;L.iterate=function(){let w,D=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),$,Y=N.dbOrderedAttribute,j,B,Ee=!0;function fe(ne){let ie=ne.next&&fe(ne.next),xe=ne.descending;return P.sort=ne,(de,ae)=>{let ke=yu(de,ne.attribute,P),Be=yu(ae,ne.attribute,P),Le=xe?(0,Pl.compareKeys)(Be,ke):(0,Pl.compareKeys)(ke,Be);return Le===0?ie?.(de,ae)||0:Le}}o(fe,"createComparator");let pe=fe(N);return{async next(){let ne;if(w)if(ne=w.next(),ne.done){if($)return L.onDone&&L.onDone(),ne}else return{value:await x.call(this,ne.value)};A=[],j&&A.push(j);do if(ne=await D.next(),ne.done){if($=!0,A.length)break;return L.onDone&&L.onDone(),ne}else{let ie=ne.value;if(ie?.then&&(ie=await ie),Y){let xe=yu(ie,Y,P);if(Ee)Ee=!1,B=xe;else if(xe!==B){B=xe,j=ie;break}}A.push(ie)}while(!0);return N.isGrouped,A.sort(pe),w=A[Symbol.iterator](),ne=w.next(),ne.done?(L.onDone&&L.onDone(),ne):{value:await x.call(this,ne.value)}},return(){return L.onDone&&L.onDone(),D.return()},throw(){return L.onDone&&L.onDone(),D.throw()}}};let U=o(w=>{if(typeof T=="object"&&Array.isArray(w.attribute))for(let D=0;D<T.length;D++){let $=T[D],Y;if($.name===w.attribute[0]){for(Y=$.sort||($.sort={});Y.next;)Y=Y.next;Y.attribute=w.attribute.slice(1),Y.descending=w.descending}else $===w.attribute[0]&&(T[D]=Y={name:$,sort:{attribute:w.attribute.slice(1),descending:w.descending}})}w.next&&U(w.next)},"applySortingOnSelect");U(N)}else L.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),L=L.map(function(A){try{let U=x.call(this,A);return typeof U?.catch=="function"?U.catch(w=>{throw w.partialObject={[t]:A.key},w}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return L}static transformEntryForSelect(_,T,N,P,O,x){let L;O&&I&&!(typeof _=="string"?[_]:_)?.every(w=>{let D;return typeof w=="object"?D=w.name:D=w,r[D]||D===t})&&(L=!0);let A,U=o(function(w){let D;if(T?.transaction?.stale&&(T.transaction.stale=!1),w!=null){if(D=w.deref?w.deref():w.value,!D&&(w.key===void 0||w.deref)||w.metadataFlags&xn){if(w.metadataFlags&xn&&T.replicateFrom===!1&&x&&w.residencyId)return tc.SKIP;if(w=No(w.key??w,T,{transaction:N,lazy:_?.length<4,ensureLoaded:O},this?.isSync,$=>$),w?.then)return w.then(U.bind(this));D=w?.value}if(L&&w?.metadataFlags&(xn|qa)||w?.expiresAt!=null&&w?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:w.key,message:"This entry has expired"};let $=dn(w.key??w,w,T);if($?.then)return $.then(U)}}if(D==null)return x?tc.SKIP:D;if(_&&!(_[0]==="*"&&_.length===1)){let $,Y=o((B,Ee)=>{let fe;typeof B=="object"?fe=B.name:fe=B;let pe=vr?.[fe],ne;if(pe){let ie=P?.[fe];if(ie)if(ie.hasMappings){let de=pe.from?D[pe.from]:Ku(w.key);ne=ie.get(de),ne||(ne=[])}else ne=ie.fromRecord?.(D);else ne=pe(D,T,w,!0);let xe=o(de=>{if(pe.directReturn)return Ee(de,fe);if(de&&typeof de=="object"){let ae=pe.definition?.tableClass||Pe;A||(A={});let ke=A[fe]||(A[fe]=ae.transformEntryForSelect(fe===B?null:B.select||(Array.isArray(B)?B:null),T,N,ie,O));if(Array.isArray(de)){let Be=[],Le=ae.transformToOrderedSelect(de,B.select,typeof B.sort=="object"&&B.sort,T,N,ke)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Me=o(wt=>{for(;!wt.done;){if(wt?.then)return wt.then(Me);Be.push(wt.value),wt=Le.next()}Ee(Be,fe)},"nextValue"),pt=Me(Le.next());pt&&($||($=[]),$.push(pt));return}else if(de=ke.call(this,de),de?.then){$||($=[]),$.push(de.then(Be=>Ee(Be,fe)));return}}Ee(de,fe)},"handleResolvedValue");ne?.then?($||($=[]),$.push(ne.then(xe))):xe(ne);return}else ne=D[fe],ne&&typeof ne=="object"&&fe!==B&&(ne=Pe.transformEntryForSelect(B.select||B,T,N,null)({value:ne}));Ee(ne,fe)},"selectAttribute"),j;if(typeof _=="string")Y(_,B=>{j=B});else if(Array.isArray(_))if(_.asArray)j=[],_.forEach((B,Ee)=>{B==="*"?_[Ee]=D:Y(B,fe=>j[Ee]=fe)});else{j={};let B=_.forceNulls;for(let Ee of _)if(Ee==="*")for(let fe in D)j[fe]=D[fe];else Y(Ee,(fe,pe)=>{fe===void 0&&B&&(fe=null),j[pe]=fe})}else throw new lt.ClientError("Invalid select"+_);return $?Promise.all($).then(()=>j):j}return D},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,N=[],P=VA(Pe,this.getId()??null,function(L,A,U,w){try{let D=A.getValue?.(i,T),$=A.type;if(!D&&$==="patch"&&T){let j=i.getEntry(L);j?.version===A.version?D=j.value:D=A.getValue?.(i,!0,U),$="put"}let Y={id:L,localTime:U,value:D,version:A.version,type:$,beginTxn:w};N?N.push(Y):(c!=="system"&&Ve(A.size??1,"db-message",s,null),this.send(Y))}catch(D){Fe.default.error?.(D)}},_.startTime||0,_),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,_.onlyChildren&&(P.onlyChildren=!0)),_.supportsTransactions&&(P.supportsTransactions=!0);let L=this.getId(),A=_.previousCount;A>1e3&&(A=1e3);let U=_.startTime;if(this.isCollection){if(U){if(A)throw new lt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:w,value:D}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let $=At(D);if($.tableId!==n)continue;let Y=$.recordId;if(L==null||fG(L,Y)){let j=$.getValue(i,T,w);if(x({id:Y,localTime:w,value:j,version:$.version,type:$.type,size:$.size}),P.queue?.length>uG&&await P.waitForDrain()===!1)return}P.startTime=w}}else if(A){let w=[];for(let{key:D,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let Y=At($);if(Y.tableId!==n)continue;let j=Y.recordId;if(L==null||fG(L,j)){let B=Y.getValue(i,T,D);if(w.push({id:j,localTime:D,value:B,version:Y.version,type:Y.type}),--A<=0)break}}catch(Y){Fe.default.error("Error getting history entry",D,Y)}for(let D=w.length;D>0;)x(w[--D]);w[0]&&(P.startTime=w[0].localTime)}else if(!_.omitCurrent){for(let{key:w,value:D,version:$,localTime:Y,size:j}of i.getRange({start:L??!1,end:L==null?void 0:[L,Pl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(D&&(x({id:w,localTime:Y,value:D,version:$,type:"put",size:j}),P.queue?.length>uG&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let w=this.#n?.localTime;if(w===MA&&(i.cache?.delete(L),this.#n=i.getEntry(L),Fe.default.trace?.("re-retrieved record",w,this.#n?.localTime),w=this.#n?.localTime),Fe.default.trace?.("Subscription from",U,"from",L,w),U<w){let D=[],$=w;do{let Y=l.get($);if(Y){_.omitCurrent=!0;let j=At(Y),B=j.getValue(i,T,$);T&&(j.type="put"),D.push({id:L,value:B,localTime:$,...j}),$=j.previousLocalTime}else break;A&&A--}while($>U&&A!==0);for(let Y=D.length;Y>0;)x(D[--Y]);P.startTime=w}!_.omitCurrent&&this.doesExist()&&x({id:L,localTime:w,value:this.#e,version:this.#r,type:"put"})}for(let w of N)x(w);N=null})();function x(L){c!=="system"&&Ve(L.size??1,"db-message",s,null),P.send(L)}return o(x,"send"),_.listener&&P.on("data",_.listener),P}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,N){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let P=!0,O=this.getContext();return _.checkPermission&&(P=this.allowCreate(O.user,_,O)),ks(P,x=>{if(!x)throw new lt.AccessViolation(O.user);let L=Os(_);this._writePublish(L,T,N)})}}_writePublish(_,T,N){let P=Ur(this.getContext());_??=null,_!==null&&Bi(_);let O=this.getContext();P.addWrite({key:_,store:i,entry:this.#n,nodeName:O?.nodeName,validate:o(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:Ae.publish?.bind(this,O,_,T),beforeIntermediate:bu(T,Ye.publish?.bind(this,O,_,T)),commit:o((x,L,A)=>{L===void 0&&R&&!g&&Pa(),Fe.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,L?.value??null,L,L?.version||x,0,!0,{user:O?.user,residencyId:N?.residencyId,expiresAt:O?.expiresAt,nodeId:N?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let N,P=o((O,x,L)=>{if(x.type&&O!=null)if(T&&O.__op__&&(O=O.value),x.properties){typeof O!="object"&&(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be an object${x.type?" ("+x.type+")":""}`);let A=x.properties;for(let U=0,w=A.length;U<w;U++){let D=A[U];if(D.relationship||D.computed){_.hasOwnProperty(D.name)&&(N||(N=[])).push(`Computed property ${L}.${D.name} may not be directly assigned a value`);continue}let $=P(O[D.name],D,L+"."+D.name);$&&(O[D.name]=$)}if(x.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(w=>w.name===U)||(N||(N=[])).push(`Property ${U} is not allowed within object in property ${L}`)}else switch(x.type){case"Int":(typeof O!="number"||O>>0!==O)&&(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a string`);break;case"Boolean":typeof O!="boolean"&&(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(O instanceof Ds)){if(typeof O=="string"&&(O=Buffer.from(O)),O instanceof Buffer)return createBlob(O,{type:"text/plain"});(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(x.elements)for(let A=0,U=O.length;A<U;A++){let w=O[A],D=P(w,x.elements,L+"[*]");D&&(O[A]=D)}}else(N||(N=[])).push(`Value ${Hs(O)} in property ${L} must be an Array`);break}x.nullable===!1&&O==null&&(N||(N=[])).push(`Property ${L} is required (and not does not allow null values)`)},"validateValue");for(let O=0,x=S.length;O<x;O++){let L=S[O];if(L.relationship||L.computed){Object.hasOwn(_,L.name)&&(N||(N=[])).push(`Computed property ${L.name} may not be directly assigned a value`);continue}if(!T||L.name in _){let A=P(_[L.name],L,L.name);A!==void 0&&(_[L.name]=A)}}if(f)for(let O in _)S.find(x=>x.name===O)||(N||(N=[])).push(`Property ${O} is not allowed`);if(N)throw new lt.ClientError(N.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let N of _){if(!N.name)throw new lt.ClientError("Attribute name is required");if(N.name.match(/[`/]/))throw new lt.ClientError("Attribute names cannot include backticks or forward slashes");Wie(N.name),T.push(N)}return Ze({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static async removeAttributes(_){let T=S.filter(N=>!_.includes(N.name));return Ze({table:s,database:c,schemaDefined:u,attributes:T}),Pe.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,T=eN.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,N=1e3/2,P=performance.now(),O=Math.floor(T/2),x=_?.exactCount,L=0,A=0,U;for(let{value:w}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(w!=null&&L++,A++,await ec(),!x&&A<O&&performance.now()-P>N){U=A;break}if(U){let w=L;L=0;for(let{value:ne}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))ne!=null&&L++,await ec();let D=U*2,$=(L+w)/D,Y=Math.pow((L-w+1)/U/2,2)+$*(1-$)/D,j=Math.max(Math.sqrt(Y)*T,1),B=Math.round($*T),Ee=Math.max(B-1.96*j,L+w),fe=Math.min(B+1.96*j,T),pe=Math.pow(10,Math.round(Math.log10(j)));return pe>B&&(pe=pe/10),L=Math.round(B/pe)*pe,{recordCount:L,estimatedRange:[Math.round(Ee),Math.round(fe)]}}return{recordCount:L}}static updatedAttributes(){vr=this.propertyResolvers={$id:o((_,T,N)=>({value:N.key}),"$id"),$updatedtime:o((_,T,N)=>N.version,"$updatedtime"),$updatedTime:o((_,T,N)=>N.version,"$updatedTime"),$expiresAt:o((_,T,N)=>N.expiresAt,"$expiresAt"),$record:o((_,T,N)=>N?{value:_}:_,"$record"),$distance:o((_,T,N)=>N&&(N.distance??T?.vectorDistances?.get(N)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(k=_),_.resolve=null;let T=_.relationship,N=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),N&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Su=!0,T.to)_.elements?.definition?(vr[_.name]=_.resolve=(P,O,x,L)=>{let A=P[T.from?T.from:t],U=_.elements.definition.tableClass;return L?Vu({attribute:T.to,value:A},Ur(O).getReadTxn(),!1,U,!1).map(w=>w&&w.key!==void 0?w:U.primaryStore.getEntry(w,{transaction:Ur(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=_.definition||_.elements?.definition;P?(vr[_.name]=_.resolve=(O,x,L,A)=>{let U=O[T.from];if(U===void 0)return;if(_.elements){let D,$=U?.map(Y=>{let j=P.tableClass.primaryStore[A?"getEntry":"get"](Y,{transaction:Ur(x).getReadTxn()});return j?.then&&(D=!0),Pe.loadAsInstance===!1&&Object.freeze(A?j?.value:j),j});return T.filterMissing?D?Promise.all($).then(Y=>Y.filter(mG)):$.filter(mG):D?Promise.all($):$}let w=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Ur(x).getReadTxn()});return Pe.loadAsInstance===!1&&Object.freeze(A?w?.value:w),w},_.set=(O,x)=>{if(Array.isArray(x)){let L=x.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=L}else{let L=x.getId?.()||x[P.tableClass.primaryKey];O[T.from]=L}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(N)typeof N.from=="function"&&this.setComputedAttribute(_.name,N.from),vr[_.name]=_.resolve=(P,O,x)=>{let L=typeof N.from=="string"?P[N.from]:P,A=this.userResolvers[_.name];if(A)return A(L,O,x);Fe.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let P=r[_.name].customIndex;vr[_.name]=(O,x,L)=>{let A=O[_.name];return P.propertyResolver(A,x,L)},vr[_.name].directReturn=!0}}mp(this,this),mp(Jf,this,!0);for(let _ of S){let T=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,Wu.getStore())},set(N){return _.set(this,N)},configurable:!0})}}static setComputedAttribute(_,T){let N=Ki(S,_);if(!N){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!N.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let N;for(let{key:P,value:O}of l.getRange({start:0,end:_}))await ec(),At(O).tableId===n&&(N=q_(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:x,localTime:L}=P;await ec(),x===null&&L<_&&(N=al(i,P))}await N}static async*getHistory(_=0,T=1/0){for(let{key:N,value:P}of l.getRange({start:_||1,end:T})){await ec();let O=At(P);O.tableId===n&&(yield{id:O.recordId,localTime:N,version:O.version,type:O.type,value:O.getValue(i,!0,N),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let N=i.getEntry(_);if(!N)return T;let P=N.localTime;if(!P)throw new Error("The entry does not have a local audit time");let O=0;do{await ec();let x=l.get(P);if(x){let L=At(x);T.push({id:L.recordId,localTime:P,version:L.version,type:L.type,value:L.getValue(i,!0,P),user:L.user}),P=L.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){W?.remove()}}let YE=jg(async(K,_,T)=>{for(let N of Pe.sources)if(N.get&&(!N.get.reliesOnPrototype||N.prototype.get)){if(N.available?.(T)===!1)continue;_.source=N;let P=await N.get(K,_);if(P)return P}},()=>{throw new lt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Pe.updatedAttributes();let cb=Pe.prototype;return h&&Pe.setTTLExpiration(h/1e3),X&&WE(),Pe;function Tu(K,_,T){let N;for(let P in r){let O=r[P],x=O.isIndexing,L=vr[P],A=T&&(L?L(T):T[P]),U=_&&(L?L(_):_[P]);if(A===U&&!x)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}N=!0;let w=O.indexNulls,D=(0,Lp.getIndexedValues)(A,w),$=(0,Lp.getIndexedValues)(U,w);if($?.length>0){let Y=new Set($);if(D=D?D.filter(j=>{if(Y.has(j))Y.delete(j);else return!0}):[],$=Array.from(Y),($.length>0||D.length>0)&&aG){let j=$.concat(D).map(B=>({key:B,value:K}));O.prefetch(j,dG)}for(let j=0,B=$.length;j<B;j++)O.remove($[j],K)}else D?.length>0&&aG&&O.prefetch(D.map(Y=>({key:Y,value:K})),dG);if(D)for(let Y=0,j=D.length;Y<j;Y++)O.put(D[Y],K)}return N}o(Tu,"updateIndices");function Bi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>lG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Pl.writeKey)(K,eoe,0)>lG)throw new Error("Primary key size is too large: "+K.length);return!0}o(Bi,"checkValidId");function Os(K){return typeof K=="object"&&K?K.id:K}o(Os,"requestTargetToId");function Xf(K){return typeof K=="object"&&K&&K.isCollection}o(Xf,"isSearchTarget");function Zf(K){}o(Zf,"isRequestTarget");function No(K,_,T,N,P){if(Pe.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let x=La(Pe.getResidencyById(K));if(x&&!x.includes(server.hostname)&&C)return C({key:K,residency:x}).then(P)}let O=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let x=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(EG.default.trace?.("Recording db-read action for",`${c}.${s}`),Ve(x?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(x?.value),x?.residencyId&&x.metadataFlags&xn&&C&&T.ensureLoaded&&_?.replicateFrom!==!1?C(x).then(L=>P(L,K),L=>(Fe.default.error?.("Error loading remote record",K,x,T,L),P(null,K))):(x&&_&&(x?.version>(_.lastModified||0)&&(_.lastModified=x.version),x?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=x.localTime)),P(x,K))},"whenPrefetched");return N?O():te>0?(te--,O()):new Promise((x,L)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(ue.push(K),ce.push(U),ue.length>KE&&(te--,A()));function A(){if(ue.length>0){let w=ce;i.prefetch(ue,()=>{te===-1?A():te++;for(let D of w)D()}),ue=[],ce=[],ye>2&&ye--}else te=ye,ye<Qf&&ye++}o(A,"prefetch");function U(){try{x(O())}catch(w){L(w)}}o(U,"load")})}o(No,"loadLocalRecord");function On(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return toe;let N=T[c],P,O=N?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}o(On,"getTablePermissions");function dn(K,_,T,N){if(I){let P=!1;if(T.noCache?P=!0:(_?(!_.value||_.metadataFlags&(xn|qa)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(P=!0):P=!0,Zr(!P,"cache-hit",s)),P){let O=Ru(K,_,T).then(x=>(x?.value&&x?.value.getRecord?.()&&Fe.default.error?.("Can not assign a record that is already a resource"),T&&(x?.version>(T.lastModified||0)&&(T.lastModified=x.version),T.lastRefreshed=Date.now()),x));if(T?.onlyIfCached||_?.value&&N?.allowStaleWhileRevalidate?.(_,K)){if(O.catch(x=>Fe.default.warn?.(x)),T?.onlyIfCached&&!N.doesExist())throw new lt.ServerError("Entry is not cached",504);return}else return O}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Pe.evict(_.key,_.value,_.version),_.value=null,{then(P){return P(_)}}}o(dn,"ensureLoadedFromSource");function Ur(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new Po,_.lmdbDb=i,_;_=T}while(!0)}else return new g_}o(Ur,"txnForContext");function yu(K,_,T){if(!K)return;let N=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let O=vr,x=N;for(let L=0,A=_.length;L<A;L++){let U=_[L],w=O?.[U];x=w&&x?w(x,T,K):x?.[U],K=null,O=w?.definition?.tableClass?.propertyResolvers}return x}let P=vr[_];return P?P(N,T,K):N[_]}o(yu,"getAttributeValue");function em(K,_,T,N,P){let O=P?.length,x={transaction:N,lazy:O>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},L;function A(U,w){let D=U?.value;if(!D)return tc.SKIP;for(let $=0;$<O;$++)if(!L?.includes($)&&!P[$](D,U))return tc.SKIP;return w!==void 0&&(U.key=w),U}if(o(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(w=>{if(L=null,typeof w=="object"&&w?.key!==void 0)return O>0?A(w):w;if(w==null)return tc.SKIP;for(let D=0;D<O;D++){let Y=P[D].idFilter;if(Y){if(!Y(w))return tc.SKIP;L||(L=[]),L.push(D)}}return No(w,T,x,!1,A)});return Array.isArray(K)&&(U=U.filter(w=>w!==tc.SKIP)),U.hasEntries=!0,U}return K}o(em,"transformToEntries");function xr(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let N=server.replication?.exportIdMapping(l),P=_.localTime,O=P&&l.get(P);if(O){let x,L,A=At(O);for(let U in N)N[U]===T&&(x=U),N[U]===A.nodeId&&(L=U);if(x>L)return 1;if(x===L)return 0}}return-1}return 1}o(xr,"precedesExistingVersion");async function Ru(K,_,T){let N=_?.metadataFlags,P=_?.version,O,x;if(!i.attemptLock(K,P,()=>{clearTimeout(x);let w=i.getEntry(K);!w||!w.value||w.metadataFlags&(xn|qa)?O(Ru(K,i.getEntry(K),T)):O(w)}))return new Promise(w=>{O=w,x=setTimeout(()=>{i.unlock(K,P)},Xie)});let L=_?.value,A={requestContext:T,replacingRecord:L,replacingEntry:_,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((w,D)=>{let $;ks(bt(A,async Y=>{let j=performance.now(),B,Ee,fe;try{B=await YE(K,A,_),fe=N&xn;let ne=A.lastModified||fe&&P;Ee=fe||ne>P||!L,ne||(ne=(0,Lp.getNextMonotonicTime)());let ie=performance.now()-j;if(Ve(ie,"cache-resolution",s,null,"success"),U&&Op(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),Y.timestamp=ne,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),B){if(typeof B!="object")throw new Error("Only objects can be cached and stored in tables");if(B.status>0&&B.headers)if(B.status>=300)if(B.status===304)B=L,ne=P;else throw new lt.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==K&&(B[t]=K)}$=!0,w({key:K,version:ne,value:B})}catch(ne){ne.message+=` while resolving record ${K} for ${s}`,L&&((ne.code==="ECONNRESET"||ne.code==="ECONNREFUSED"||ne.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(ne.statusCode===500||ne.statusCode===502||ne.statusCode===503||ne.statusCode===504))?(w({key:K,version:P,value:L}),Fe.default.trace?.(ne.message,"(returned stale record)")):D(ne);let ie=performance.now()-j;Ve(ie,"cache-resolution",s,null,"fail"),U&&Op(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Ur(A).addWrite({key:K,store:i,entry:_,nodeName:"source",before:bu(B),commit:o((ne,ie)=>{if(ie?.version!==P)return;let xe=Tu(K,L,B);if(B){Ye.put?.(A,K,B),ie&&(T.previousResidency=Pe.getResidencyRecord(ie.residencyId));let de,ae=!1,ke,Be=La(Pe.getResidency(B,T));if(Be){if(!Be.includes(server.hostname))if(de=B,ae=!0,Pe.getResidencyById)B=void 0;else{B=null;for(let Le in r)B||(B={}),B[Le]=de[Le]}ke=Hc(Be)}Fe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(ne).toISOString()}`),y(K,B,ie,ne,ae?xn:0,g&&(Ee||ae)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:ke,tableToTrack:s},"put",!!fe,de)}else ie&&(Ye.delete?.(A,K),Fe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(ne).toISOString()}`),g||R?y(K,null,ie,ne,0,g&&Ee||null,{user:A?.user,tableToTrack:s},"delete",!!fe):al(i,ie,P))},"commit")})}),()=>{i.unlock(K,P)},Y=>{i.unlock(K,P),$&&Fe.default.error?.("Error committing cache update",Y)})})}o(Ru,"getFromSource");function Oa(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new lt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new lt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Oa,"checkContextPermissions");function Pa(K){let _=!1;if(K&&(K-Ar>1&&(_=!0),Ar=K),!(qe===tr&&!_)&&(tr=qe,(0,Cl.getWorkerIndex)()===(0,Cl.getWorkerCount)()-1))return Wr&&clearTimeout(Wr),qe?new Promise(T=>{let N=new Date;N.setMonth(0),N.setDate(1),N.setHours(0),N.setMinutes(0),N.setSeconds(0);let P=qe/(1+Ar),O=_?Date.now():Math.ceil((Date.now()-N.getTime())/P)*P+N.getTime(),x=o(L=>{Fe.default.trace?.(`Scheduled next cleanup scan at ${new Date(L)}`),Wr=setTimeout(()=>J=J.then(async()=>{if(x(Math.max(L+qe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Wr);return}let A=50,U=new Array(A),w=0,D=Math.pow(Ar,8)*(Ol.get(F.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),$=E/Math.pow(Math.max(Ar,1),4);Fe.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${D}, adjusted eviction ${$}ms`);function Y(j,B,Ee,fe){let pe=j+$-Date.now();if(pe<0)return!0;if(Ar){let ne=i.lastSize;return Ee&Jr&&Jc(fe,ie=>{ie.size&&(ne+=ie.size)}),Fe.default.trace?.(`shouldEvict adjusted ${pe} ${ne}, ${pe*(j-B)/ne} < ${D}`),pe*(j-B)/ne<D}return!1}o(Y,"shouldEvict");try{let j=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ee,value:fe,version:pe,expiresAt:ne,metadataFlags:ie}=B,xe;fe===null&&!g&&pe+Jie<Date.now()?xe=al(i,B,pe):ne!=null&&Y(ne,pe,ie,fe)&&(xe=Pe.evict(Ee,fe,pe),j++),xe&&(await U[w],U[w]=xe.catch(de=>{Fe.default.error?.("Cleanup error",de)}),++w>=A&&(w=0)),await ec()}Fe.default.debug?.(`Finished cleanup scan for ${s}, evicted ${j} entries`)}catch(j){Fe.default.warn?.(`Error in cleanup scan for ${s}:`,j)}T(void 0),Ar=0}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");x(O)}):void 0}o(Pa,"scheduleCleanup");function tm(){W=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(tm,"addDeleteRemoval");function WE(){(0,Cl.getWorkerIndex)()===0&&setInterval(async()=>{if(!kc){kc=!0;try{let K=X.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${X} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let N of _.getValues(T)){let P=i.getEntry(N);P?.value?P.value[K]<Date.now()&&Pe.evict(N,P.value,P.version):i.ifVersion(N,P?.version,()=>_.remove(T,N))}await ec()}}catch(K){Fe.default.error?.("Error in evicting old records",K)}finally{kc=!1}}},Qie).unref()}o(WE,"runRecordExpirationEviction");function La(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return Fe.default.trace?.(`Shard ${K} mapped to ${_.map(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(La,"residencyFromFunction");function Hc(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}o(Hc,"getResidencyId");function bu(K,_){let T=sA(K,i.rootStore);if(T){let N=_;return N?async()=>{await N(),await T}:()=>T}return _}o(bu,"preCommitBlobsForRecordBefore")}function Zw(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function dG(){}function Jg(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return Qg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Qg(+e);case"Float":return e==="null"?null:Qg(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;roe.test(e)||(e+="Z");let n=new Date(e);return Qg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Xg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Qg(e){if(isNaN(e))throw new SyntaxError;return e}function fG(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function ks(e,t,r){return e?.then?e.then(t,r):t(e)}function mG(e){return e!=null}function Hs(e){try{return JSON.stringify(e)}catch{return e}}function noe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var tc,Lp,pG,hG,Ol,lt,Dp,Mp,Fe,Pl,Cl,Xg,eN,EG,Yie,Wie,zie,jie,Qie,Jie,aG,Xie,cG,Zie,xn,qa,eoe,lG,uG,toe,GMe,roe,ec,ag=se(()=>{q();tc=require("lmdb"),Lp=b(Mn()),pG=b(require("lodash")),hG=b(Tm());$a();Rm();Ol=b(me());KA();lt=b(_e()),Dp=b($o()),Mp=b(os());we();og();Fe=b(es());ZI();xa();Pl=require("ordered-binary"),Cl=b(nt());Hi();Xg=b(oe());sl();rs();y_();Pp();eN=b(require("node:fs"));ts();F_();EG=b(Q());Xw();({sortBy:Yie}=pG.default),{validateAttribute:Wie}=hG.default,zie=new Uint8Array(9);zie[8]=192;jie=1/0,Qie=6e4,Jie=864e5;Ol.initSync();aG=Ol.get(F.STORAGE_PREFETCHWRITES),Xie=1e4,cG=1,Zie=2,xn=1,qa=8,eoe=Buffer.allocUnsafeSlow(8192),lG=1978,uG=100,toe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},GMe=(0,Xg.convertToMS)(Ol.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Zg,"makeTable");o(Zw,"attributesAsObject");o(dG,"noop");roe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Jg,"coerceType");o(Qg,"rejectNaN");o(fG,"isDescendantId");ec=o(()=>new Promise(setImmediate),"rest");o(ks,"when");o(mG,"exists");o(Hs,"stringify");o(noe,"hasOtherProcesses")});function eS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function tS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var gG=se(()=>{o(eS,"euclideanDistance");o(tS,"cosineDistance")});var SG,TG,_d,no,Ed,soe,ioe,rS,yG=se(()=>{gG();SG=require("msgpackr"),TG=b(es()),_d=b(_e()),no=(0,TG.loggerWithTag)("HNSW"),Ed=Symbol.for("entryPoint"),soe=Symbol.for("key"),ioe=10,rS=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=SG.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?eS:tS,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[soe,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(Ed);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)g[R]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);no.debug?.("setting entry point to",i),this.indexStore.put(Ed,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),ioe),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);no.debug?.("setting entry point to",i),this.indexStore.put(Ed,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&no.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<g.length;S++){let{id:y,distance:C,node:I}=g[S];if(y===i)continue;let k=[];if(this.optimizeRouting){let H=!1,X=I[E],W=1+this.optimizeRouting*(1+.5*S/this.M);for(let ue=0;ue<X.length;ue++){let{id:ce,distance:te}=X[ue],ye=1+this.optimizeRouting*(1+.5*ue/this.M);for(let Ae=0;Ae<R.length;Ae++){let{id:Ye,distance:qe}=R[Ae];if(Ye===ce){C*W>qe+te?H=!0:te*ye>C+qe&&(k.push({fromId:Ye,toId:y}),k.push({fromId:y,toId:Ye}));break}}if(H)break}if(H)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:C});for(let{fromId:H,toId:X}of k){let W=d(H);W||(W=d(H,this.indexStore.get(H)));for(let ue=0;ue<W[E].length;ue++)if(W[E][ue].id===X){Object.isFrozen(W[E])&&(W[E]=W[E].slice()),W[E].splice(ue,1);break}}let J=c[E],G=J?.find(({id:H})=>H===y);if(G){let H=J?.indexOf(G);J.copied||(J=[...J],J.copied=!0,c[E]=J),J.splice(H,1)}else this.addConnection(y,d(y,I),i,E,C,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(Ed);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);no.debug?.("setting entry point to",l),this.indexStore.put(Ed,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(no.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(Ed);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new _d.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new _d.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=tS;else if(s==="euclidean")c=eS;else{if(s)throw new _d.ClientError("Unknown distance function");c=this.distance}if(!t)throw new _d.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new _d.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){no.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||no.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){no.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&no.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?no.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?eS:tS);let c=a(s.target,t);return i.set(n,c),c}return t}}});var tN,RG=se(()=>{yG();tN={HNSW:rS}});var mt={};Re(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>nS,database:()=>id,databaseEnvs:()=>zo,databases:()=>De,dropDatabase:()=>sw,dropTableMeta:()=>doe,getDatabases:()=>at,getDefaultCompression:()=>uS,getTables:()=>aoe,onRemovedDB:()=>Hp,onUpdatedTable:()=>Ll,readMetaDb:()=>vp,resetDatabases:()=>Rd,table:()=>Ze,tables:()=>Sn});function kp(e,t){let r=cS.OpenDBIObject??cS.default.OpenDBIObject;return new r(e,t)}function aoe(){return aS||at(),Sn||{}}function at(){if(aS)return De;aS=!0,Td=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Ht.join)((0,zt.getHdbBasePath)(),$c),t=(0,zt.get)(F.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,zt.get)(F.STORAGE_PATH)||e&&((0,ms.existsSync)(e)?e:(0,Ht.join)((0,zt.getHdbBasePath)(),e_)),!!e){if((0,ms.existsSync)(e))for(let r of(0,ms.readdirSync)(e,{withFileTypes:!0})){let n=(0,Ht.basename)(r.name,".mdb");r.isFile()&&(0,Ht.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&vp((0,Ht.join)(e,r.name),null,n)}if((0,ms.existsSync)((0,Sd.getBaseSchemaPath)())){for(let r of(0,ms.readdirSync)((0,Sd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ht.join)((0,Sd.getBaseSchemaPath)(),r.name),s=(0,Ht.join)((0,Sd.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,ms.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Ht.extname)(i.name).toLowerCase()===".mdb"){let a=(0,Ht.join)(s,i.name);vp((0,Ht.join)(n,i.name),(0,Ht.basename)(i.name,".mdb"),r.name,a,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,ms.existsSync)(s))for(let a of(0,ms.readdirSync)(s,{withFileTypes:!0}))a.isFile()&&(0,Ht.extname)(a.name).toLowerCase()===".mdb"&&vp((0,Ht.join)(s,a.name),(0,Ht.basename)(a.name,".mdb"),r);let i=n.tables;if(i)for(let a in i){let c=i[a],l=(0,Ht.join)(c.path,(0,Ht.basename)(a+".mdb"));(0,ms.existsSync)(l)&&vp(l,a,r,null,!0)}}for(let r in De){let n=Td.get(r);if(n){let s=De[r];r.includes("delete")&&Nr.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Nr.trace(`delete table class ${i}`),delete s[i])}else if(delete De[r],r==="data"){for(let s in Sn)delete Sn[s];delete Sn[lS]}}if((0,zt.get)(F.ANALYTICS_REPLICATE)===!1?nS.includes("hdb_analytics")||nS.push("hdb_analytics"):(De.system?.hdb_analytics?.enableAuditing(),De.system?.hdb_analytics_hostname?.enableAuditing()),De.system)for(let r of nS)De.system[r]&&(De.system[r].replicate=!1);return Td=null,De}}function Rd(){aS=!1;for(let[,e]of zo)e.needsDeletion=!0;at();for(let[e,t]of zo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),zo.delete(e);let r=De[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete De[t.databaseName],xp.forEach(i=>i(t.databaseName));break}}return De}function vp(e,t,r=sN,n,s){let i=new rN.default(e,!1);try{let a=zo.get(e);a?a.needsDeletion=!1:(a=(0,yd.open)(i),zo.set(e,a));let c=new kp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(sS.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ms.existsSync)(n)&&(i.path=n,u=(0,yd.open)(i),u.isLegacy=!0):u=G_(a));let d=NG(r),f=d[lS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(g==null||h.is_hash_attribute)&&(R.primary=h),g!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){g=te;break}if(!g){Nr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],C,I,k=typeof g.audit=="boolean"?g.audit:(0,zt.get)(F.LOGGING_AUDITLOG),J=g.trackDeletes,G=g.expiration,H=g.eviction,X=g.sealed,W=g.splitSegments,ue=g.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{C=g.tableId,C?C>=(l.get(gd)||0)&&(l.putSync(gd,C+1),Nr.info(`Updating next table id (it was out of sync) to ${C+1} for ${p}`)):(g.tableId=C=l.get(gd),C||(C=1),Nr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(gd,C+1),l.putSync(g.key,g));let te=new kp(!g.is_hash_attribute,g.is_hash_attribute);if(te.compression=g.compression,te.compression){let ye=(0,zt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||wG;te.compression.threshold=ye}I=rg(a.openDB(g.key,te),a),a.databaseName=r,I.tableId=C}let ce;for(let te of E){te.attribute=te.name;try{if(!te.is_hash_attribute&&(te.indexed||te.attribute&&!te.name)){if(!S[te.name]){let Ae=OG(te.key,a,te);S[te.name]=Ae,S[te.name].indexNulls=te.indexNulls}let ye=y.find(Ae=>Ae.name===te.name);ye?y.splice(y.indexOf(ye),1,te):y.push(te),ce=!0}}catch(ye){Nr.error("Error trying to update attribute",te,y,S,ye)}}for(let te of y)if(!E.find(Ae=>Ae.name===te.name)){if(te.is_hash_attribute){Nr.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),ce=!0)}if(R)ce&&(R.schemaVersion++,R.updatedAttributes());else{R=CG(d,p,Zg({primaryStore:I,auditStore:u,audit:k,sealed:X,splitSegments:W,replicate:ue,expirationMS:G&&G*1e3,evictionMS:H&&H*1e3,trackDeletes:J,tableName:p,tableId:C,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of Up)te(R)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function NG(e){let t=De[e];if(t||(e==="data"?t=De[e]=Sn:e==="system"?Object.defineProperty(De,"system",{value:t=Object.create(null),configurable:!0}):t=De[e]=Object.create(null)),Td&&!Td.has(e)){let r=new Set;t[lS]=r,Td.set(e,r)}return t}function CG(e,t,r){return e[t]=r,r}function id({database:e,table:t}){e||(e=sN),at();let r=NG(e),n=(0,Ht.join)((0,zt.getHdbBasePath)(),$c),s=(0,zt.get)(F.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,zt.get)(F.STORAGE_PATH)||((0,ms.existsSync)(n)?n:(0,Ht.join)((0,zt.getHdbBasePath)(),e_));let a=(0,Ht.join)(n,(i?t:e)+".mdb"),c=zo.get(a);if(!c||c.status==="closed"){let l=new rN.default(a,!1);c=(0,yd.open)(l),zo.set(a,c)}return c.auditStore||(c.auditStore=G_(c)),c}async function sw(e){if(!De[e])throw new Error("Schema does not exist");let t=De[e],r;for(let n in t)r=t[n].primaryStore.rootStore,zo.delete(r.path),r.status==="open"&&(await r.close(),await Bp.remove(r.path));if(r||(r=id({database:e,table:null}),r.status==="open"&&(await r.close(),await Bp.remove(r.path))),e==="data"){for(let n in Sn)delete Sn[n];delete Sn[lS]}delete De[e],xp.forEach(n=>n(e)),await nA(r)}function OG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&tN[r.indexed.type]?.useObjectStore,s=new kp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=tN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Nr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=sN);let h=id({database:r,table:t}),E=De[r];Nr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let C=new kp(!1);for(let W of a)W.attribute&&!W.name?(W.name=W.attribute,W.indexed=!0):W.attribute=W.name,W.expiresAt&&(W.indexed=!0);let I,k;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let W=h.auditStore;S=a.find(ye=>ye.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=uS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,zt.get)(F.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Nr.trace(`${t} table loading, opening primary store`);let ue=new kp(!1,!0);ue.compression=S.compression;let ce=t+"/";if(y=h.dbisDb=h.openDB(sS.INTERNAL_DBIS_NAME,C),X(),y.get(ce))return k&&k(),Rd(),Ze(e);let te=rg(h.openDB(ce,ue),h);h.databaseName=r,te.tableId=y.get(gd),Nr.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(gd,te.tableId+1),S.tableId=te.tableId,g=CG(E,t,Zg({primaryStore:te,auditStore:W,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:te.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:y})),g.schemaVersion=1,I=!0,y.put(ce,S)}let J=g.indices;y=y||(h.dbisDb=h.openDB(sS.INTERNAL_DBIS_NAME,C)),g.dbisDB=y;let G=[];for(let{key:W,value:ue}of y.getRange({start:!0})){let[ce,te]=W.toString().split("/");if(te===""&&(te=ue.name),te){if(ce!==t)continue}else continue;let ye=a.find(Ye=>Ye.name===te),Ae=!ye?.indexed&&ue.indexed&&!ue.isPrimaryKey;if((!ye||Ae)&&(X(),I=!0,ye||y.remove(W),Ae)){let Ye=g.indices[ce];Ye&&G.push(Ye)}}let H=[];try{for(let W of a||[]){if((W.relationship||W.computed)&&(I=!0,W.relationship))continue;let ue=t+"/"+(W.name||"");Object.defineProperty(W,"key",{value:ue,configurable:!0});let ce=y.get(ue);if(W.isPrimaryKey){if(ce=ce||y.get(ue=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ce.expiration||void 0)||(+s||void 0)!==(+ce.eviction||void 0)||W.type!==ce.type){let ye={...ce};typeof c=="boolean"&&(c&&g.enableAuditing(c),ye.audit=c),n&&(ye.expiration=+n),s&&(ye.eviction=+s),l!==void 0&&(ye.sealed=l),d!==void 0&&(ye.replicate=d),W.type&&(ye.type=W.type),I=!0,X(),y.put(ue,ye)}continue}ce?.attribute&&!ce.name&&(ce.indexed=!0);let te=!ce||ce.type!==W.type||JSON.stringify(ce.indexed)!==JSON.stringify(W.indexed)||ce.nullable!==W.nullable||ce.version!==W.version||JSON.stringify(ce.properties)!==JSON.stringify(W.properties)||JSON.stringify(ce.elements)!==JSON.stringify(W.elements);if(W.indexed){let ye=OG(ue,h,W);(te||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<Fp.workerData?.restartNumber)&&(I=!0,X(),ce=y.get(ue),(te||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<Fp.workerData?.restartNumber)&&(I=!0,W.indexNulls===void 0&&(W.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(W.lastIndexedKey=ce?.lastIndexedKey??void 0,W.indexingPID=process.pid,ye.isIndexing=!0,Object.defineProperty(W,"dbi",{value:ye}),H.push(W))),y.put(ue,W)),ce?.indexNulls&&W.indexNulls===void 0&&(W.indexNulls=!0),ye.indexNulls=W.indexNulls,J[W.name]=ye}else te&&(I=!0,X(),y.put(ue,W))}}finally{k&&k()}if(I&&(g.schemaVersion++,g.updatedAttributes()),Nr.trace(`${t} table loading, running index`),H.length>0||G.length>0?g.indexingOperation=uoe(g,H,G):I&&iS.signalSchemaChange(new oS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,I)for(let W of Up)W(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Nr.trace(`${t} table loaded`),g;function X(){k||h.transactionSync(()=>({then(W){k=W}}))}o(X,"startTxn")}async function uoe(e,t,r){try{Nr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await iS.signalSchemaChange(new oS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,yd.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[g]);if(R.customIndex){R.customIndex.index(f,y);continue}let C=(0,bG.getIndexedValues)(y);if(C)for(let I=0,k=C.length;I<k;I++)R.put(C[I],f)}catch(S){a[g]||(a[g]=!0,Nr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Nr.error(h)}),Fp.workerData&&Fp.workerData.restartNumber!==IG.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>coe?await s:d>loe&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await iS.signalSchemaChange(new oS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Nr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Nr.error("Error in indexing",n)}}function doe({table:e,database:t}){let r=id({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Ll(e){return Up.push(e),{remove(){let t=Up.indexOf(e);t>-1&&Up.splice(t,1)}}}function Hp(e){return xp.push(e),{remove(){let t=xp.indexOf(e);t>-1&&xp.splice(t,1)}}}function uS(){let e=(0,zt.get)(F.STORAGE_COMPRESSION),t=(0,zt.get)(F.STORAGE_COMPRESSION_DICTIONARY),r=(0,zt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||wG,n={startingOffset:32};return t&&(n.dictionary=Bp.readFileSync(t)),r&&(n.threshold=r),e&&n}var zt,sS,yd,Ht,ms,Sd,rN,Bp,nN,bG,iS,oS,Fp,AG,IG,cS,ooe,Nr,sN,lS,wG,nS,Sn,De,gd,Up,xp,aS,zo,Td,coe,loe,we=se(()=>{zt=b(me()),sS=b(Yt()),yd=require("lmdb"),Ht=require("path"),ms=require("fs"),Sd=b(Rt());ag();rN=b(jm());q();Bp=b(require("fs-extra")),nN=b(ii()),bG=b(Mn()),iS=b($o()),oS=b(os()),Fp=require("worker_threads"),AG=b(Q()),IG=b(nt());Hi();sl();ts();RG();cS=b(zm()),{forComponent:ooe}=AG.default;o(kp,"OpenDBIObject");Nr=ooe("storage"),sN="data",lS=Symbol("defined-tables"),wG=((0,zt.get)(F.STORAGE_PAGESIZE)||4096)-60;(0,zt.initSync)();nS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],Sn=Object.create(null),De=Object.create(null);(0,nN._assignPackageExport)("databases",De);(0,nN._assignPackageExport)("tables",Sn);gd=Symbol.for("next-table-id"),Up=[],xp=[],zo=new Map;o(aoe,"getTables");o(at,"getDatabases");o(Rd,"resetDatabases");o(vp,"readMetaDb");o(NG,"ensureDB");o(CG,"setTable");o(id,"database");o(sw,"dropDatabase");o(OG,"openIndex");o(Ze,"table");coe=1e3,loe=10;o(uoe,"runIndexing");o(doe,"dropTableMeta");o(Ll,"onUpdatedTable");o(Hp,"onRemovedDB");o(uS,"getDefaultCompression")});var aN={};Re(aN,{loadGQLSchema:()=>poe,start:()=>oN,startOnMainThread:()=>moe});function oN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,p=[],h;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let k=function(G){if(G.kind==="NonNullType"){let W=k(G.type);return W.nullable=!1,W}if(G.kind==="ListType")return{type:"array",elements:k(G.type)};let X={type:G.name?.value};return Object.defineProperty(X,"location",{value:G.loc.startToken}),X};o(k,"getProperty");let S=R.name.value,y=[],C={table:null,database:null,properties:y};m.set(S,C),i.allTypes.set(S,C);for(let G of R.directives){if(G.name.value==="table"){for(let X of G.arguments)C[X.name.value]=X.value.value;C.schema&&(C.database=C.schema),C.table||(C.table=S),C.audit&&(C.audit=C.audit!=="false"),C.attributes=C.properties,p.push(C)}if(G.name.value==="sealed"&&(C.sealed=!0),G.name.value==="splitSegments"&&(C.splitSegments=!0),G.name.value==="replicate"&&(C.replicate=!0),G.name.value==="export"){C.export=!0;for(let X of G.arguments)typeof C.export!="object"&&(C.export={}),C.export[X.name.value]=X.value.value}}let I=!1,J={};for(let G of R.fields){let H=k(G.type);H.name=G.name.value,y.push(H),J[H.name]=void 0;for(let X of G.directives){let W=X.name.value;if(W==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",X.loc):(H.isPrimaryKey=!0,I=!0);else if(W==="indexed"){let ue={};for(let ce of X.arguments||[])ue[ce.name.value]=ce.value.value;H.indexed=ue}else if(W==="computed"){for(let ue of X.arguments||[])if(ue.name.value==="from"){let ce=ue.value.value;H.computed={from:g(ce,ue,J)},H.version==null&&(H.version=ce)}else ue.name.value==="version"&&(H.version=ue.value.value);H.computed=H.computed||!0}else if(W==="relationship"){let ue={};for(let ce of X.arguments)ue[ce.name.value]=ce.value.value;H.relationship=ue}else if(W==="createdTime")H.assignCreatedTime=!0;else if(W==="updatedTime")H.assignUpdatedTime=!0;else if(W==="expiresAt")H.expiresAt=!0;else if(W==="allow"){let ue=H.authorizedRoles=[];for(let ce of X.arguments)ce.name.value==="role"&&ue.push(ce.value.value)}else server.knownGraphQLDirectives.includes(W)&&console.warn(`@${W} is an unknown directive, at`,X.loc)}}C.type=S,S==="Query"&&(h=C)}function E(R){let S=m.get(R.type);S?(Object.defineProperty(R,"properties",{value:S.properties}),Object.defineProperty(R,"definition",{value:S})):R.type==="array"?E(R.elements):foe.includes(R.type)||(0,LG.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}o(E,"connectPropertyType");for(let R of m.values())for(let S of R.properties)E(S);for(let R of p)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,iN.dirname)(n),R.tableClass):i.set((0,iN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,S,y){return new PG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}o(g,"createComputedFrom")}}var iN,PG,LG,foe,moe,poe,DG=se(()=>{iN=require("path"),PG=require("node:vm");we();LG=b(nt());Va();foe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(oN,"start");moe=oN,poe=o(e=>oN({ensureTable:Ze}).handleFile(e,null,null,new ju),"loadGQLSchema")});var lN={};Re(lN,{start:()=>boe});function hoe(e){if(e.kind!==Ge.Kind.OPERATION_DEFINITION&&e.kind!==Ge.Kind.FRAGMENT_DEFINITION)throw new $r(`Unexpected non-executable definition type ${e.kind}.`)}function MG(e){if(typeof e!="object"||e===null)throw new so("Request body must be an object.");if(!("query"in e))throw new so("Request body must contain a `query` field.");if(typeof e.query!="string")throw new so("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new so("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new so("Request body `operationName` field must be a string.")}function cN(e){return parseInt(e.value,10)}function UG(e){return parseFloat(e.value)}function xG(e,t,r){let n=r.get(e.name.value);return BG(n)?FG(n,t):{attribute:t,value:n}}function BG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function FG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],BG(n)?FG(n,t):{attribute:t,value:n}))}function Eoe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Ge.Kind.NULL:return{attribute:t,value:null};case Ge.Kind.INT:return{attribute:t,value:cN(e.value)};case Ge.Kind.FLOAT:return{attribute:t,value:UG(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:t,value:e.value.value};case Ge.Kind.VARIABLE:return xG(e.value,t,r);case Ge.Kind.OBJECT:return kG(e.value,t,r);case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new $r(`Value type, ${e.value.kind}, is not supported.`)}}function kG(e,t,r){return e.fields.flatMap(n=>Eoe(n,t,r))}function _oe(e,t){switch(e.value.kind){case Ge.Kind.NULL:return{attribute:e.name.value,value:null};case Ge.Kind.INT:return{attribute:e.name.value,value:cN(e.value)};case Ge.Kind.FLOAT:return{attribute:e.name.value,value:UG(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Ge.Kind.VARIABLE:return xG(e.value,e.name.value,t);case Ge.Kind.OBJECT:return kG(e.value,[e.name.value],t);case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new $r(`Argument type, ${e.value.kind}, is not supported.`)}}function goe(e,t){return e.flatMap(r=>_oe(r,t))}function dS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Ge.Kind.FIELD:return r;case Ge.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new $r(`Fragment \`${n}\` not found.`);return dS(s.selectionSet,t)}case Ge.Kind.INLINE_FRAGMENT:return dS(r.selectionSet,t)}})}function HG(e,t){return dS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:HG(r.selectionSet,t)}:r.name.value)}async function Soe(e,t,r,n){let s=Us.getMatch(e.name.value,"graphql");if(s===void 0)throw new $r(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:HG(e.selectionSet,r),conditions:goe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function GG(e){switch(e.kind){case Ge.Kind.NULL:return null;case Ge.Kind.INT:return cN(e);case Ge.Kind.FLOAT:return parseFloat(e.value);case Ge.Kind.STRING:case Ge.Kind.BOOLEAN:return e.value;case Ge.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:GG(r.value),...t}),{});case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new $r(`Value type, ${e.kind}, is not supported.`)}}function Toe(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=GG(n.defaultValue)),n.type.kind===Ge.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new $r(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function yoe(e,t,r,n){if(e.operation===Ge.OperationTypeNode.SUBSCRIPTION)throw new $r("Subscriptions are not supported.");if(e.operation===Ge.OperationTypeNode.MUTATION)throw new $r("Mutations are not supported yet.");let s=Toe(e.variableDefinitions,t),i=await Promise.all(dS(e.selectionSet,r).map(c=>Soe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function vG({query:e,variables:t={},operationName:r},n){let s=Ge.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(hoe(u),u.kind===Ge.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new $r("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 $r(`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 $r("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new $r(`Operation \`${r}\` not found.`);let l=await yoe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Roe(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 MG(r),vG(r,e)}case"POST":{let r=await vo(e.headers.get("content-type"),!0)(e._nodeRequest);return MG(r),vG(r,e)}default:throw new so("Method Not Allowed",405,{Allow:"GET, POST"})}}function boe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Roe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof so)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Ge.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof $r)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:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof so)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Ge.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof $r)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 Ge,$r,so,qG=se(()=>{Ge=b(require("graphql"));Uo();Va();o(hoe,"assertExecutableDefinitionNode");o(MG,"assertRequestParams");o(cN,"processIntValueNode");o(UG,"processFloatValueNode");o(xG,"processVariableNode");o(BG,"isObject");o(FG,"transformObjectIntoQueryCondition");o(Eoe,"processObjectFieldNode");o(kG,"processObjectValueNode");o(_oe,"processArgumentNode");o(goe,"buildConditionsQuery");o(dS,"fillInFragments");o(HG,"buildSelectQuery");o(Soe,"processFieldNode");o(GG,"processConstValueNode");o(Toe,"resolveVariables");o(yoe,"executeOperation");o(vG,"resolver");$r=class extends Error{static{o(this,"GraphQLQueryingError")}},so=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Roe,"graphqlQueryingHandler");o(boe,"start")});var zG=v((lve,WG)=>{var bd=require("validate.js"),VG=ft(),Ad=(q(),M(z)),{handleHDBError:Aoe,hdbErrors:Ioe}=_e(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:woe}=Ioe,uN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Noe={STRUCTURE_USER:"structure_user"},$G=Object.values(Ad.ROLE_TYPES_ENUM),Coe="attribute_permissions",Ooe="attribute_name",{PERMS_CRUD_ENUM:Id}=Ad,Poe=[Coe,...Object.values(Id)],KG=[Id.READ,Id.INSERT,Id.UPDATE],Loe=[Ooe,...KG];function Doe(e){let t=uN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,YG(e,t)}o(Doe,"addRoleValidation");function Moe(e){let t=uN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,YG(e,t)}o(Moe,"alterRoleValidation");function voe(e){let t=uN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,VG.validateObject(e,t)}o(voe,"dropRoleValidation");var Uoe=["operation","role","id","permission","hdb_user","access"];function YG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Uoe.includes(n[a])||s.push(n[a]);s.length>0&&pr(sr.INVALID_ROLE_JSON_KEYS(s),r);let i=VG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{pr(a,r)}),e.permission){let a=xoe(e);a&&pr(a,r),$G.forEach(c=>{e.permission[c]&&!bd.isBoolean(e.permission[c])&&pr(sr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if($G.indexOf(a)<0){if(a===Noe.STRUCTURE_USER){let l=e.permission[a];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]||pr(sr.SCHEMA_NOT_FOUND(f),r)}continue}pr(sr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){pr(sr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){pr(sr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Poe.includes(d)||pr(sr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(Id).forEach(d=>{bd.isDefined(u[d])?bd.isBoolean(u[d])||pr(sr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):pr(sr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){pr(sr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){pr(sr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][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=>{!Loe.includes(E)&&E!==Id.DELETE&&pr(sr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!bd.isDefined(p.attribute_name)){pr(sr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){pr(sr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}KG.forEach(E=>{bd.isDefined(p[E])?bd.isBoolean(p[E])||pr(sr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):pr(sr.ATTR_PERM_MISSING(E,h),r,a,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=`${a}.${l}`;pr(sr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Boe(r)}o(YG,"customValidate");WG.exports={addRoleValidation:Doe,alterRoleValidation:Moe,dropRoleValidation:voe};function xoe(e){let{operation:t,permission:r}=e;if(t===Ad.OPERATIONS_ENUM.ADD_ROLE||t===Ad.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 sr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?Ad.ROLE_TYPES_ENUM.SUPER_USER:Ad.ROLE_TYPES_ENUM.CLUSTER_USER;return sr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(xoe,"validateNoSUPerms");function Boe(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:sr.ROLE_PERMS_ERROR,...e};return Aoe(new Error,n,woe.BAD_REQUEST)}else return null}o(Boe,"generateRolePermResponse");function pr(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]}}o(pr,"addPermError")});var qp=v((fve,XG)=>{"use strict";var jG=Gn(),QG=_n(),Foe=bl(),fN=zG(),mN=$o(),dve=require("uuid").v4,koe=require("util"),fS=(q(),M(z)),Hoe=oe(),pN=QG.searchByValue,Goe=QG.searchByHash,qoe=koe.promisify(Foe.delete),$oe=di(),Voe=nd(),{hdbErrors:Koe,handleHDBError:Dl}=_e(),{HDB_ERROR_MSGS:JG,HTTP_STATUS_CODES:Gp}=Koe,{UserEventMsg:hN}=os();XG.exports={addRole:Yoe,alterRole:Woe,dropRole:zoe,listRoles:joe};function dN(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}o(dN,"scrubRoleDetails");async function Yoe(e){let t=fN.addRoleValidation(e);if(t)throw t;e=dN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await pN(r)||[])}catch(i){throw Dl(i)}if(n&&n.length>0)throw Dl(new Error,JG.ROLE_ALREADY_EXISTS(e.role),Gp.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 jG.insert(s),mN.signalUserChange(new hN(process.pid)),e=dN(e),e}o(Yoe,"addRole");async function Woe(e){let t=fN.alterRoleValidation(e);if(t)throw t;e=dN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await jG.update(r)}catch(s){throw Dl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Dl(new Error,"Invalid role id",Gp.BAD_REQUEST,void 0,void 0,!0);return await mN.signalUserChange(new hN(process.pid)),e}o(Woe,"alterRole");async function zoe(e){let t=fN.dropRoleValidation(e);if(t)throw Dl(new Error,t,Gp.BAD_REQUEST,void 0,void 0,!0);let r=new Voe(fS.SYSTEM_SCHEMA_NAME,fS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Goe(r));if(n.length===0)throw Dl(new Error,JG.ROLE_NOT_FOUND,Gp.NOT_FOUND,void 0,void 0,!0);let s=new $oe(fS.SYSTEM_SCHEMA_NAME,fS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await pN(s)),a=!1;if(Hoe.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Dl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Gp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await qoe(c),mN.signalUserChange(new hN(process.pid)),`${n[0].role} successfully deleted`}o(zoe,"dropRole");async function joe(){return pN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(joe,"listRoles")});var EN={};Re(EN,{start:()=>tq,startOnMainThread:()=>Xoe});function tq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,ZG.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 a in i.permission){if(Qoe.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=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 Joe(i)}}}async function Joe(e){let t=at().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,eq.isEqual)(i,e)?void 0:(e.id=r.id,(0,mS.alterRole)(e))}return(0,mS.addRole)(e)}var mS,ZG,eq,Qoe,Xoe,rq=se(()=>{we();mS=b(qp()),ZG=require("yaml"),eq=require("lodash"),Qoe=["super_user","cluster_user","structure_user"];o(tq,"start");o(Joe,"ensureRole");Xoe=tq});async function pS(e){let t=(0,iq.pathToFileURL)(e).toString();if(Zoe)return $p||($p=eae(rae)),(await(await $p).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function eae(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),$p=new Compartment({console,Math,Date,fetch:tae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,sq.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Hr,s.tables=Sn,s.databases=De}};let n=await(0,nq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),$p}function tae(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 rae(){return{Resource:Hr,tables:Sn}}var nq,sq,iq,Zoe,$p,_N=se(()=>{$a();we();nq=require("fs/promises"),sq=require("path"),iq=require("url"),Zoe=!1;o(pS,"secureImport");o(eae,"getCompartment");o(tae,"secureOnlyFetch");o(rae,"getGlobalVars")});var gN={};Re(gN,{handleApplication:()=>nae,suppressHandleApplicationWarning:()=>sae});function oq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function nae(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}pS(t.absolutePath).then(r=>{let n=(0,hS.dirname)(t.urlPath);oq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),aq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function aq(e,t,r){for(let n in t){let s=t[n],i=(0,hS.join)(r,n);oq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&aq(e,s,i)}}var hS,sae,cq=se(()=>{_N();hS=require("path");o(oq,"isResource");o(nae,"handleApplication");o(aq,"recurseForResources");sae=!0});var TN={};Re(TN,{start:()=>iae});function iae({resources:e}){e.set("login",SN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var SN,lq=se(()=>{$a();o(iae,"start");SN=class extends Hr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function hq(e){let t={openapi:oae,info:{title:"HarperDB HTTP REST interface",version:mq.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}],n=o(s=>{if(s.type&&!t.components.schemas[s.type]){t.components.schemas[s.type]={};let i={},a=[];for(let c of s.properties)ES[c.type]?i[c.name]=new RN(ES[c.type],c.type):c.properties?(i[c.name]=new Eq(c.type),n(c)):c.elements?.properties&&(i[c.name]=new fae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new fq(i,!s.sealed,a)}},"includeDefinitionInSchema");for(let[,s]of e){if(!s.path||s.Resource.isError)continue;let{path:i}=s,a=i.split("/").pop(),{attributes:c,sealed:l}=s.Resource,{prototype:u,primaryKey:d="id"}=s.Resource;if(!c&&e.allTypes.has(s.path)){let J=e.allTypes.get(s.path);l=J.sealed,c=J.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:J,name:G,elements:H,relationship:X,definition:W,nullable:ue}of c){let ce=W??H?.definition;ce&&n(ce),ue===!1&&p.push(G),X?J==="array"?f[G]={type:"array",items:{$ref:Gs+H.type}}:f[G]={$ref:Gs+J}:ce?J==="array"?f[G]={type:"array",items:{$ref:Gs+ce.type}}:f[G]={$ref:Gs+ce.type}:J==="array"?H.type==="Any"?f[G]={type:"array",items:{format:H.type}}:f[G]={type:"array",items:new RN(ES[H.type],H.type)}:J==="Any"?f[G]={format:J}:f[G]=new RN(ES[J],J),m.push(new bN(G,"query",f[G]))}let h=Object.keys(f),E=new bN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new bN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new fq(f,!l,p);let R=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",y=typeof u.get=="function",C=typeof u.delete=="function",I=typeof u.patch=="function",k="/"+i+"/";R&&(t.paths[k]={},t.paths[k].post=new aae(a,r,{200:new wd({$ref:Gs+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),y&&(t.paths[k]||(t.paths[k]={}),t.paths[k].get=new yN(m,r,{200:new wd({type:"array",items:{$ref:Gs+a}})},"search for records by the specified property name and value pairs")),t.paths[k]||(t.paths[k]={}),t.paths[k].options=new cae(m,r,{200:new lae},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),C&&(t.paths[k]||(t.paths[k]={}),t.paths[k].delete=new dq(m,r,"delete all the records that match the provided query",{204:new uq})),k="/"+i+"/{"+d+"}",y&&(t.paths[k]={},t.paths[k].get=new yN([E],r,{200:new wd({$ref:Gs+a})},"retrieve a record by its primary key")),S&&(t.paths[k]||(t.paths[k]={}),t.paths[k].put=new uae([E],r,a,{200:new wd({$ref:Gs+a})},"create or update the record with the URL path that maps to the record's primary key")),I&&(t.paths[k]||(t.paths[k]={}),t.paths[k].patch=new dae([E],r,a,{200:new wd({$ref:Gs+a})},"patch the record with the URL path that maps to the record's primary key")),C&&(t.paths[k]||(t.paths[k]={}),t.paths[k].delete=new dq([E],r,"delete a record with the given primary key",{204:new uq})),y&&g.schema.enum.length>0&&(k="/"+i+"/{"+d+"}.{property}",t.paths[k]={},t.paths[k].get=new yN([E,g],r,{200:new wd({enum:h})},"used to retrieve the specified property of the specified record"))}for(let[,s]of e.allTypes)n(s),s.sealed&&t.components.schemas[s.type].additionalProperties&&(t.components.schemas[s.type].additionalProperties=!1);return t}function aae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Gs+e}}}},this.security=t,this.responses=r}function yN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function cae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function lae(){this.description=pq,this.headers={},this.content={}}function wd(e,t){this.description=pq,this.content={"application/json":{schema:e}},this.headers=t}function uq(){this.description="successfully processed request, no content returned to client"}function uae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Gs+r}}}},this.responses=n}function dae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Gs+r}}}},this.responses=n}function dq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function fq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function RN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function Eq(e){this.$ref=`#/components/schemas/${e}`}function fae(e){this.type="array",this.items=new Eq(e)}function bN(e,t,r){this.name=e,this.in=t,this.schema=r}var mq,oae,ES,Gs,pq,_q=se(()=>{mq=b(Ct()),oae="3.0.3",ES={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Gs="#/components/schemas/",pq="successful operation";o(hq,"generateJsonApi");o(aae,"Post");o(yN,"Get");o(cae,"Options");o(lae,"ResponseOptions200");o(wd,"Response200");o(uq,"Response204");o(uae,"Put");o(dae,"Patch");o(dq,"Delete");o(fq,"ResourceSchema");o(RN,"Type");o(Eq,"Ref");o(fae,"ArrayRef");o(bN,"Parameter")});var Sq={};Re(Sq,{Request:()=>rc,createReuseportFd:()=>_S});var gq,rc,AN,IN,_S,Vp=se(()=>{gq=require("os"),rc=class{static{o(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 IN(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 AN(this._nodeRequest))}get host(){return this._nodeRequest.authority||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)}},AN=class{static{o(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)}},IN=class{static{o(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,gq.platform)()!="win32"&&(_S=require("node-unix-socket").createReuseportFd)});var SS={};Re(SS,{parseHeaderValue:()=>NN,start:()=>hae});async function pae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&ig(e);let i=new Fs;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==Tq){let g=gS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ci(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=NN(g);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 g=NN(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=vo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Nd.ClientError(g,400)}if(e.authorize=!0,a===Tq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return hq(gS);throw new Nd.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 Nd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Nd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,wN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=nG(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=Cm(f.data,e,f)),f}else if(isFinite(p)){mae[0]=p;let g=String.fromCharCode(34,(rn[0]&63)+62,(rn[0]>>6)+(rn[1]<<2&63)+62,(rn[1]>>4)+(rn[2]<<4&63)+62,(rn[2]>>2)+62,(rn[3]&63)+62,(rn[3]>>6)+(rn[4]<<2&63)+62,(rn[4]>>4)+(rn[5]<<4&63)+62,(rn[5]>>2)+62,(rn[6]&63)+62,(rn[6]>>6)+(rn[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),wN.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=Cm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?Ei.warn(a):Ei.info(a):Ei.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=Cm(a.contentType?a:bq(a),e,c),c}}function hae(e){wN=e,e.includeExpensiveRecordCountEstimates&&(rc.prototype.includeExpensiveRecordCountEstimates=!0),!yq&&(yq=!0,gS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return pae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Kp++;let s=new Zn;Rq||(Rq=!0,$m(l=>{Kp>0&&l.push({metric:"ws-connections",connections:Kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ei.warn(l)});let a;t.on("message",o(function(u){a||(a=vo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);Ve(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{Kp--,Zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=gS.getMatch(l,"ws");if(Zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ve(h=>({count:h.count,total:Kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ci(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Mo(p.value,r);t.send(h),Ve(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?Ei.warn(l):Ei.info(l):Ei.error(l),t.close(Eae[l.statusCode]||1011,bq(l))}t.close()},e))}function NN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Ei,Nd,bq,rn,mae,wN,Tq,yq,gS,Rq,Kp,Eae,Aq=se(()=>{Uo();rs();Ei=b(Q()),Nd=b(_e());og();Pu();xa();Pp();_q();Vp();cg();({errorToString:bq}=Ei),rn=new Uint8Array(8),mae=new Float64Array(rn.buffer,0,1),wN={},Tq="openapi";o(pae,"http");Kp=0;o(hae,"start");Eae={401:3e3,403:3003};o(NN,"parseHeaderValue")});var CN=v((Fve,wq)=>{var{recordAction:TS,recordActionBinary:Iq}=(rs(),M(J_)),_ae=require("fastify-plugin"),gae=200;wq.exports=_ae(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),TS(a,"duration",u,f,d),Iq(s.raw.statusCode<400,"success",u,f,d),Iq(1,"response_"+s.raw.statusCode,u,f,d);let m=gae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{TS(performance.now()-c,"transfer",u,f,d),TS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,TS(m,"bytes-sent",u,f,d));let p=a.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 Cq=v((kve,Nq)=>{var Sae=ft(),Tae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Nq.exports=function(e){return Sae.validateObject(e,Tae)}});var yS=v((Hve,Oq)=>{"use strict";var yae=(q(),M(z)).OPERATIONS_ENUM,ON=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=yae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Oq.exports=ON});var zp={};Re(zp,{createTokens:()=>DN,getJWTRSAKeys:()=>wS,refreshOperationToken:()=>MN,validateOperationToken:()=>vN,validateRefreshToken:()=>NS});async function wS(){if(RS)return RS;try{let e=Yp.default.join(Wp.default.getHdbBasePath(),gb),t=await bS.default.readFile(Yp.default.join(e,am.JWT_PASSPHRASE_NAME),"utf8"),r=await bS.default.readFile(Yp.default.join(e,am.JWT_PRIVATE_KEY_NAME),"utf8");return RS={publicKey:await bS.default.readFile(Yp.default.join(e,am.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},RS}catch(e){throw IS.default.error(e),new _i.ClientError(Od.NO_ENCRYPTION_KEYS,Cd.INTERNAL_SERVER_ERROR)}}async function DN(e){let t=(0,PN.validateBySchema)(e,io.default.object({username:io.default.string().optional(),password:io.default.string().optional(),role:io.default.string().optional(),expires_in:io.default.alternatives(io.default.string(),io.default.number()).optional()}));if(t)throw new _i.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(0,LN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw IS.default.error(f),new _i.ClientError(Od.INVALID_CREDENTIALS,Cd.UNAUTHORIZED)}if(!r)throw new _i.ClientError(Od.INVALID_CREDENTIALS,Cd.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 a=await wS(),c=await Pd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??vq,algorithm:AS,subject:Ld.OPERATION}),l=await Pd.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Rae,algorithm:AS,subject:Ld.REFRESH}),u=Ew(l,Gr.SHA256);if((await(0,Pq.update)(new Lq.default(im,Iu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new _i.ClientError(Od.REFRESH_TOKEN_SAVE_FAILED,Cd.INTERNAL_SERVER_ERROR);return Dq.default.signalUserChange(new Mq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function MN(e){let t=(0,PN.validateBySchema)(e,io.default.object({refresh_token:io.default.string().required()}).required());if(t)throw new _i.ClientError(t.message);let{refresh_token:r}=e;await NS(r);let n=await wS(),s=await Pd.default.decode(r);return{operation_token:await Pd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:vq,algorithm:AS,subject:Ld.OPERATION})}}async function vN(e){return Uq(e,Ld.OPERATION)}async function NS(e){return Uq(e,Ld.REFRESH)}async function Uq(e,t){try{let r=await wS(),n=await Pd.default.verify(e,r.publicKey,{algorithms:AS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,LN.findAndValidateUser)(n.username,void 0,!1);if(t===Ld.REFRESH&&!_w(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw IS.default.warn(r),r?.name==="TokenExpiredError"?new _i.ClientError(Od.TOKEN_EXPIRED,Cd.FORBIDDEN):new _i.ClientError(Od.INVALID_TOKEN,Cd.UNAUTHORIZED)}}var Pd,bS,Yp,io,PN,_i,IS,LN,Pq,Lq,Dq,Mq,Wp,Cd,Od,vq,Rae,AS,Ld,RS,Dd=se(()=>{Pd=b(require("jsonwebtoken")),bS=b(require("fs-extra")),Yp=b(require("node:path")),io=b(require("joi")),PN=b(ft());q();_i=b(_e()),IS=b(Q());Sw();LN=b(ds()),Pq=b(Gn()),Lq=b(yS()),Dq=b($o()),Mq=b(os()),Wp=b(me()),{HTTP_STATUS_CODES:Cd,AUTHENTICATION_ERROR_MSGS:Od}=_i.hdbErrors;Wp.default.initSync();vq=Wp.default.get(F.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Rae=Wp.default.get(F.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",AS="RS256",Ld={OPERATION:"operation",REFRESH:"refresh"};o(wS,"getJWTRSAKeys");o(DN,"createTokens");o(MN,"refreshOperationToken");o(vN,"validateOperationToken");o(NS,"validateRefreshToken");o(Uq,"validateToken")});var UN=v((Kve,Fq)=>{"use strict";var bae=Cq(),Md=require("passport"),Aae=require("passport-local").Strategy,Iae=require("passport-http").BasicStrategy,wae=require("util"),Nae=ds(),Bq=wae.callbackify(Nae.findAndValidateUser),Vve=zr(),Cae=(q(),M(z)),xq=(Dd(),M(zp));Md.use(new Aae(function(e,t,r){Bq(e,t,r)}));Md.use(new Iae(function(e,t,r){Bq(e,t,r)}));Md.serializeUser(function(e,t){t(null,e)});Md.deserializeUser(function(e,t){t(null,e)});function Oae(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":Md.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Cae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?xq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):xq.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Md.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(Oae,"authorize");function Pae(e,t){let r=bae(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 a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(Pae,"checkPermissions");Fq.exports={authorize:Oae,checkPermissions:Pae}});var GN=v((jve,qq)=>{var LS=require("clone"),DS=ft(),Lae=oe(),OS=(q(),M(z)),Wve=Q(),xN=require("fs"),FN=require("joi"),{string:PS}=FN.types(),{hdbErrors:Dae,handleHDBError:CS}=_e(),{HDB_ERROR_MSGS:zve,HTTP_STATUS_CODES:BN}=Dae,{commonValidators:vd}=Wi(),kq=" is required",Mae=["insert","update","upsert"],kN={database:{presence:!1,format:vd.schema_format,length:vd.schema_length},schema:{presence:!1,format:vd.schema_format,length:vd.schema_length},table:{presence:!0,format:vd.schema_format,length:vd.schema_length},action:{inclusion:{within:Mae,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},vae={schema:PS.required(),table:PS.required(),action:PS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Uae,AWS_SECRET:xae,AWS_BUCKET:Bae,AWS_FILE_KEY:Fae,REGION:kae}=OS.S3_BUCKET_AUTH_KEYS,Hae={s3:{presence:!0},[`s3.${Uae}`]:{presence:!0,type:"String"},[`s3.${xae}`]:{presence:!0,type:"String"},[`s3.${Bae}`]:{presence:!0,type:"String"},[`s3.${Fae}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${kae}`]:{presence:!0,type:"String"}},Hq=LS(kN);Hq.data.presence={message:kq};var Gq=LS(kN);Gq.file_path.presence={message:kq};var Gae=Object.assign(LS(kN),Hae),HN=LS(vae);HN.csv_url=PS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();HN.passthrough_headers=FN.object();function qae(e){let t=DS.validateObject(e,Hq);return MS(e,t)}o(qae,"dataObject");function $ae(e){let t=DS.validateBySchema(e,FN.object(HN));return MS(e,t)}o($ae,"urlObject");function Vae(e){let t=DS.validateObject(e,Gq);return MS(e,t)}o(Vae,"fileObject");function Kae(e){let t=DS.validateObject(e,Gae);return MS(e,t)}o(Kae,"s3FileObject");function MS(e,t){if(!t){let r=Lae.checkGlobalSchemaTable(e.schema,e.table);if(r)return CS(new Error,r,BN.BAD_REQUEST);if(e.operation===OS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{xN.accessSync(e.file_path,xN.constants.R_OK|xN.constants.F_OK)}catch(n){return n.code===OS.NODE_ERROR_CODES.ENOENT?CS(n,`No such file or directory ${n.path}`,BN.BAD_REQUEST):n.code===OS.NODE_ERROR_CODES.EACCES?CS(n,`Permission denied ${n.path}`,BN.BAD_REQUEST):CS(n)}}return t}o(MS,"postValidateChecks");qq.exports={dataObject:qae,urlObject:$ae,fileObject:Vae,s3FileObject:Kae}});var qN=v((Jve,$q)=>{"use strict";var jp=Q(),vS=(q(),M(z));async function Yae(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===vS.OPERATIONS_ENUM.INSERT||t.operation===vS.OPERATIONS_ENUM.UPDATE||t.operation===vS.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===vS.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(jp.info(i.message),i):i.http_resp_msg?(jp.error(`Error calling operation: ${e.name}`),jp.error(i.http_resp_msg),i):(jp.error(`Error calling operation: ${e.name}`),jp.error(i),i)}}o(Yae,"callOperationFunctionAsAwait");$q.exports={callOperationFunctionAsAwait:Yae}});var $N=v((Zve,Kq)=>{"use strict";var{S3:Wae,GetObjectCommand:zae}=require("@aws-sdk/client-s3");Kq.exports={getFileStreamFromS3:jae,getS3AuthObj:Vq};async function jae(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Vq(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new zae(r))).Body}o(jae,"getFileStreamFromS3");function Vq(e,t,r){return new Wae({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(Vq,"getS3AuthObj")});var Wq=v((tUe,Yq)=>{"use strict";var VN=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},KN=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Yq.exports={BulkLoadFileObject:VN,BulkLoadDataObject:KN}});var jq=v((nUe,zq)=>{"use strict";var YN=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};zq.exports=YN});var Jq=v((iUe,Qq)=>{"use strict";var WN=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};Qq.exports=WN});var jN=v((aUe,Zq)=>{"use strict";var Xq=jq(),Qae=Jq(),{HDB_ERROR_MSGS:Jae}=zr(),zN=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=Jae.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 Xq(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Qae(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new Xq(r,n,[],i);this.unauthorized_access[a]=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}};Zq.exports=zN});var Ml=v((uUe,n$)=>{"use strict";var lUe=_n(),Qp=Q(),{validateBySchema:e$}=ft(),jo=require("joi"),Xae=Zi(),US=oe(),{handleHDBError:xS,hdbErrors:Zae,ClientError:t$}=_e(),{HDB_ERROR_MSGS:BS,HTTP_STATUS_CODES:QN}=Zae,r$=me();r$.initSync();var{getDatabases:JN}=(we(),M(mt)),ece=require("fs-extra"),tce=(q(),M(z));n$.exports={describeAll:rce,describeTable:FS,describeSchema:nce};async function rce(e={}){try{let t=US.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=JN(),a={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){a[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await FS({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let g=n[m].tables[h].attribute_permissions;E=await FS({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){Qp.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],a[l[m].schema]&&delete a[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],a[l[m].schema]&&delete a[l[m].schema]);for(let m in a)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return Qp.error("Got an error in describeAll"),Qp.error(t),xS(new Error,BS.DESCRIBE_ALL_ERR)}}o(rce,"describeAll");async function FS(e,t){US.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=e$(e,jo.object({database:jo.string(),table:jo.string().required(),exact_count:jo.boolean().strict(),include_computed:jo.boolean().strict()}));if(i)throw new t$(i.message);let c=JN()[r];if(!c)throw xS(new Error,BS.SCHEMA_NOT_FOUND(e.schema),QN.NOT_FOUND);let l=c[n];if(!l)throw xS(new Error,BS.TABLE_NOT_FOUND(e.schema,e.table),QN.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})}o(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 ece.stat(l.primaryStore.env.path)).size}catch(p){Qp.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),r$.get(tce.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Xae.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){Qp.warn(`unable to stat table dbi due to ${p}`)}return m}o(FS,"descTable");async function nce(e){US.transformReq(e);let t=e$(e,jo.object({database:jo.string(),exact_count:jo.boolean().strict(),include_computed:jo.boolean().strict()}));if(t)throw new t$(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=JN()[n];if(!i)throw xS(new Error,BS.SCHEMA_NOT_FOUND(e.schema),QN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),US.isEmpty(l)||l.describe){let u=await FS({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(nce,"describeSchema")});var c$=v((fUe,a$)=>{"use strict";var sce=Ml(),{hdbErrors:s$}=_e(),{getDatabases:i$}=(we(),M(mt));a$.exports={checkSchemaExists:o$,checkSchemaTableExists:ice,schemaDescribe:sce};async function o$(e){if(!i$()[e])return s$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(o$,"checkSchemaExists");async function ice(e,t){let r=await o$(e);if(r)return r;if(!i$()[e][t])return s$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(ice,"checkSchemaTableExists")});var kS=v((pUe,l$)=>{"use strict";var oce=ls();l$.exports={writeTransaction:ace};function ace(e,t,r){return oce.writeTransaction(e,t,r)}o(ace,"writeTransaction")});var rC=v((SUe,y$)=>{"use strict";var{decode:cce}=require("msgpackr"),{isMainThread:EUe,parentPort:_Ue,threadId:gUe}=require("worker_threads"),qS=hr(),Ud=Pt(),eC=(q(),M(z)),Tn=Q(),ZN=me(),lce=(q(),M(z)),{onMessageByType:uce}=nt(),m$=Zi(),{recordAction:u$,recordActionBinary:dce}=(rs(),M(J_)),{publishToStream:fce}=qS,{ConsumerEvents:d$}=require("nats"),mce=_n(),{promisify:pce}=require("util"),{decodeBlobsWithWrites:hce}=(ts(),M(v_)),p$=pce(setTimeout),$S=1e4,VS,GS,Ece,_ce,h$,Jp=new Map,xd=new Map;y$.exports={initialize:E$,ingestConsumer:tC,setSubscription:gce,setIgnoreOrigin:yce,getDatabaseSubscriptions:Tce,updateConsumer:_$};async function E$(){uce(eC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await _$(n)}),h$=!0,Tn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await qS.getNATSReferences();VS=e,GS=e.info.server_name,Ece=t,_ce=r}o(E$,"initialize");async function _$(e){if(e.status==="start"){let{js:t,jsm:r}=await g$(e.node_domain_name);tC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Jp.get(e.stream_name+e.node_domain_name);t&&(Tn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Jp.set(e.stream_name+e.node_domain_name,"close")),xd.get(e.node_domain_name)==="failed"&&xd.set(e.node_domain_name,"close")}}o(_$,"updateConsumer");var KS=new Map;function gce(e,t,r){let n=KS.get(e);n||KS.set(e,n=new Map),n.set(t,r),h$||E$().then(Sce)}o(gce,"setSubscription");async function Sce(){let e=await mce.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Ud.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await g$(r),!n))break;let{schema:a,table:c}=i,l=m$.createNatsTableStreamName(a,c);tC(l,n,s,r)}}}o(Sce,"accessConsumers");async function g$(e){let t,r,n=1;for(;!r;)try{t=await VS.jetstream({domain:e}),r=await VS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(xd.get(e)==="close")break;xd.set(e,"failed"),n%10===1&&Tn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<$S?n++*100:$S;await p$(i)}return{js:t,jsm:r}}o(g$,"connectToRemoteJS");function Tce(){return KS}o(Tce,"getDatabaseSubscriptions");var S$;function yce(e){S$=e}o(yce,"setIgnoreOrigin");var T$=100,f$=new Array(T$),HS=0;async function tC(e,t,r,n){let{connection:s}=await qS.getNATSReferences();VS=s,GS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,GS),Tn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(xd.get(n)==="close")break;a%10===1&&Tn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Tn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await qS.createConsumer(r,e,GS,new Date(Date.now()).toISOString()));let d=a++*100<$S?a++*100:$S;await p$(d)}let c=!1,l;for(;!c;){if(Jp.get(e+n)==="close"||xd.get(n)==="close"){Jp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:ZN.get(eC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Jp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===d$.ConsumerDeleted&&(await l.close(),c=!0),d.type===d$.HeartbeatsMissed){let f=d.data;Tn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(Tn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await f$[HS],f$[HS]=Rce(d).catch(f=>{Tn.error(f)}),++HS>=T$&&(HS=0)}catch(d){d.message==="consumer deleted"?(Tn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Tn.error("Error consuming clustering ingest, restarting consumer",d)}}}o(tC,"ingestConsumer");async function Rce(e){let t;await hce(()=>{t=cce(e.data)}),u$(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Tn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=ZN.get(eC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Ud.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Ud.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Ud.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!S$),dce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Ud.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;Tn.trace("processing message:",a,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),Tn.trace(`messageProcessor nats msg id: ${e.headers.get(Ud.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:g,user:R,node_name:S}=m||{},y=KS.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:XN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map((k,J)=>({type:XN(a),value:k,expiresAt:p,id:f?.[J],table:u}));for(;l;)I.push({type:XN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:I,table:u,timestamp:g,onCommit:h,user:R,nodeName:S})}ZN.get(lce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&fce(e.subject.split(".").slice(0,-1).join("."),m$.createNatsTableStreamName(c,u),e.headers,e.data),await E;let C=Date.now()-g;g&&u$(C,"replication-latency",e.subject,a,"ingest")}catch(a){Tn.error(a)}e.ack()}o(Rce,"messageProcessor");function XN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(XN,"convertOperation")});var hr=v((wUe,F$)=>{"use strict";var Vr=me();Vr.initSync();var bce=require("fs-extra"),Ace=require("semver"),eh=require("path"),{monotonicFactory:Ice}=require("ulidx"),b$=Ice(),wce=require("util"),A$=require("child_process"),Nce=wce.promisify(A$.exec),Cce=A$.spawn,nn=Pt(),rt=(q(),M(z)),{packageJson:Oce,PACKAGE_ROOT:Pce}=Ct(),YS=oe(),gi=Q(),WS=Zi(),Lce=kS(),Xp=gt(),{broadcast:Dce,onMessageByType:Mce,getWorkerIndex:vce}=nt(),{isMainThread:I$}=require("worker_threads"),{Encoder:Uce,decode:oC}=require("msgpackr"),w$=new Uce,{isEmpty:Bl}=YS,N$=ds(),yUe=48*36e11;I$&&Mce(rt.ITC_EVENT_TYPES.RESTART,()=>{yn=void 0,xl=void 0});var{connect:xce,StorageType:Bce,RetentionPolicy:Fce,AckPolicy:aC,DeliverPolicy:cC,DiscardPolicy:kce,NatsConnection:RUe,JetStreamManager:bUe,JetStreamClient:AUe,StringCodec:IUe,JSONCodec:Hce,createInbox:lC,headers:Gce,ErrorCode:R$}=require("nats"),{recordAction:qce}=(rs(),M(J_)),{encodeBlobsAsBuffers:$ce}=(ts(),M(v_)),C$=Hce(),Vce="clustering",Kce=Oce.engines[nn.NATS_SERVER_NAME],Yce=eh.join(Pce,"dependencies"),iC=eh.join(Yce,`${process.platform}-${process.arch}`,nn.NATS_BINARY_NAME),nC,sC,Zp,vl,Ul;F$.exports={runCommand:O$,checkNATSServerInstalled:Wce,createConnection:uC,getConnection:th,getJetStreamManager:rh,getJetStream:L$,getNATSReferences:oo,getServerList:jce,createLocalStream:dC,listStreams:D$,deleteLocalStream:Qce,getServerConfig:Bd,listRemoteStreams:Jce,viewStream:Xce,viewStreamIterator:Zce,publishToStream:ele,request:nle,reloadNATS:fC,reloadNATSHub:sle,reloadNATSLeaf:ile,extractServerName:rle,requestErrorHandler:ole,createLocalTableStream:x$,createTableStreams:lle,purgeTableStream:B$,purgeSchemaTableStreams:ule,getStreamInfo:dle,updateLocalStreams:mle,closeConnection:zce,getJsmServerName:zS,addNatsMsgHeader:M$,clearClientCache:P$,updateRemoteConsumer:ale,createConsumer:v$,updateConsumerIterator:cle};async function O$(e,t=void 0){let{stdout:r,stderr:n}=await Nce(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
16
16
|
`,""));return r.replace(`
|
|
17
17
|
`,"")}o(O$,"runCommand");async function Wce(){try{await bce.access(iC)}catch{return!1}let e=await O$(`${iC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Ace.eq(t,Kce)}o(Wce,"checkNATSServerInstalled");async function uC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await N$.getClusterUser();if(Bl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}gi.trace("create nats connection called");let i=await xce({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Vr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Vr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Vr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),gi.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&gi.error("Error with Nats client connection, connection closed",a),i===yn&&P$()}),i}o(uC,"createConnection");function P$(){yn=void 0,vl=void 0,Ul=void 0,xl=void 0}o(P$,"clearClientCache");async function zce(){yn&&(await yn.drain(),yn=void 0,vl=void 0,Ul=void 0,xl=void 0)}o(zce,"closeConnection");var yn,xl;async function th(){return xl||(xl=uC(Vr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),yn=await xl),yn||xl}o(th,"getConnection");async function rh(){if(vl)return vl;Bl(yn)&&await th();let{domain:e}=Bd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Bl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return vl=await yn.jetstreamManager({domain:e,timeout:6e4}),vl}o(rh,"getJetStreamManager");async function L$(){if(Ul)return Ul;Bl(yn)&&await th();let{domain:e}=Bd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Bl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ul=yn.jetstream({domain:e,timeout:6e4}),Ul}o(L$,"getJetStream");async function oo(){let e=yn||await th(),t=vl||await rh(),r=Ul||await L$();return{connection:e,jsm:t,js:r}}o(oo,"getNATSReferences");async function jce(e){let t=Vr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await N$.getClusterUser(),s=await uC(t,r,n),i=lC(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=C$.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 YS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(jce,"getServerList");async function dC(e,t){let{jsm:r}=await oo(),n=Vr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Vr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Vr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Bce.File,retention:Fce.Limits,subjects:t,discard:kce.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(dC,"createLocalStream");async function D$(){let{jsm:e}=await oo(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(D$,"listStreams");async function Qce(e){let{jsm:t}=await oo();await t.streams.delete(e)}o(Qce,"deleteLocalStream");async function Jce(e){let{connection:t}=await oo(),r=[],n=lC(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(C$.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(Jce,"listRemoteStreams");async function Xce(e,t=void 0,r=void 0){let{jsm:n,js:s}=await oo(),i=b$(),a={durable_name:i,ack_policy:aC.Explicit};t&&(a.deliver_policy=cC.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);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=oC(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(nn.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(Xce,"viewStream");async function*Zce(e,t=void 0,r=void 0){let{jsm:n,js:s}=await oo(),i=b$(),a={durable_name:i,ack_policy:aC.Explicit};t&&(a.deliver_policy=cC.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);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=oC(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(nn.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Zce,"viewStreamIterator");async function ele(e,t,r,n){gi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=M$(n,r);let{js:s}=await oo(),i=await zS(),a=`${e}.${i}`,c=await $ce(()=>n instanceof Uint8Array?n:w$.encode(n));try{gi.trace(`publishToStream publishing to subject: ${a}`),qce(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return U$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){gi.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await dC(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(ele,"publishToStream");function M$(e,t){t===void 0&&(t=Gce());let r=Vr.get(rt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(nn.MSG_HEADERS.ORIGIN)&&r&&t.append(nn.MSG_HEADERS.ORIGIN,r),t}o(M$,"addNatsMsgHeader");function Bd(e){e=e.toLowerCase();let t=eh.join(Vr.get(rt.CONFIG_PARAMS.ROOTPATH),Vce);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Bl(sC)&&(sC={port:Xp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Xp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+nn.SERVER_SUFFIX.HUB,config_file:nn.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:eh.join(t,nn.PID_FILES.HUB),hdbNatsPath:t}),sC;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Bl(nC)&&(nC={port:Xp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Xp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+nn.SERVER_SUFFIX.LEAF,config_file:nn.NATS_CONFIG_FILES.LEAF_SERVER,domain:Xp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+nn.SERVER_SUFFIX.LEAF,pid_file_path:eh.join(t,nn.PID_FILES.LEAF),hdbNatsPath:t}),nC;gi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Bd,"getServerConfig");async function v$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:aC.Explicit,durable_name:r,deliver_policy:cC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(v$,"createConsumer");async function tle(e,t,r){await e.consumers.delete(t,r)}o(tle,"removeConsumer");function rle(e){return e.split(".")[1]}o(rle,"extractServerName");async function nle(e,t,r=6e4,n=lC()){if(!YS.isObject(t))throw new Error("data param must be an object");let s=w$.encode(t),{connection:i}=await oo(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return oC(c.data)}o(nle,"request");function fC(e){return new Promise(async(t,r)=>{let n=Cce(iC,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(fC,"reloadNATS");async function sle(){let{pid_file_path:e}=Bd(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await fC(e)}o(sle,"reloadNATSHub");async function ile(){let{pid_file_path:e}=Bd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await fC(e)}o(ile,"reloadNATSLeaf");function ole(e,t,r){let n;switch(e.code){case R$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case R$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(ole,"requestErrorHandler");async function ale(e,t){let r=t+nn.SERVER_SUFFIX.LEAF,{connection:n}=await oo(),{jsm:s}=await hle(r),{schema:i,table:a}=e,c=WS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await U$(async()=>{if(e.subscribe===!0)await v$(s,c,n.info.server_name,l);else try{await tle(s,c,n.info.server_name)}catch(u){gi.trace(u)}})}o(ale,"updateRemoteConsumer");async function cle(e,t,r,n){let s=WS.createNatsTableStreamName(e,t),i=r+nn.SERVER_SUFFIX.LEAF,a={type:rt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!I$&&vce()<Vr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=rC();await c(a)}await Dce(a),n==="stop"&&await YS.asyncSetTimeout(1e3)}o(cle,"updateConsumerIterator");function U$(e){return Lce.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(U$,"exclusiveLock");async function x$(e,t){let r=WS.createNatsTableStreamName(e,t),n=await zS(),s=fle(e,t,n);await dC(r,[s])}o(x$,"createLocalTableStream");async function lle(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await x$(n,s)}}o(lle,"createTableStreams");async function B$(e,t,r=void 0){if(Vr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=WS.createNatsTableStreamName(e,t),{domain:s}=Bd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await th()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")gi.warn(n);else throw n}}o(B$,"purgeTableStream");async function ule(e,t){if(Vr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await B$(e,t[r])}o(ule,"purgeSchemaTableStreams");async function dle(e){return(await rh()).streams.info(e)}o(dle,"getStreamInfo");function fle(e,t,r){return`${nn.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(fle,"createSubjectName");async function zS(){if(Zp)return Zp;if(Zp=(await rh())?.nc?.info?.server_name,Zp===void 0)throw new Error("Unable to get jetstream manager server name");return Zp}o(zS,"getJsmServerName");async function mle(){let e=await rh(),t=await zS(),r=await D$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=ple(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");gi.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(mle,"updateLocalStreams");function ple(e){let{config:t}=e,r=!1,n=Vr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Vr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Vr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(ple,"updateStreamLimits");async function hle(e){let t,r;try{t=await yn.jetstream({domain:e}),r=await yn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw gi.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(hle,"connectToRemoteJS")});function mC(e){let t=e.get(jS),r=t?(0,Fd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=it(),s=!1;r.nodeName=it();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:sh(e)??1,nodes:[]})})}i[n]=0,e.putSync(jS,(0,Fd.pack)(r))}return r}function nh(e){return mC(e).remoteNameToId}function H$(e,t){let r=mC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(jS,(0,Fd.pack)(r)),s}function QS(e,t){let r=mC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(jS,(0,Fd.pack)(r))}return k$.trace?.("The remote node name map",e,n,s),s}var k$,Fd,jS,pC=se(()=>{k$=b(es());ps();Fd=require("msgpackr"),jS=Symbol.for("remote-ids");o(mC,"getIdMappingRecord");o(nh,"exportIdMapping");o(H$,"remoteToLocalNodeId");o(QS,"getIdOfRemoteNode")});var Y$={};Re(Y$,{commitsAwaitingReplication:()=>Hd,getHDBNodeTable:()=>jt,getReplicationSharedStatus:()=>Gd,iterateRoutes:()=>oh,shouldReplicateToNode:()=>ih,subscribeToNodeUpdates:()=>qd});function jt(){return G$||(G$=Ze({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 Gd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function qd(e){jt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;K$.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 jt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function ih(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&jt().primaryStore.get(it())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Ele(){qd(e=>{nc({},(t,r)=>{let n=e.name,s=q$.get(n);if(s||q$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=Gd(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Hd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*oh(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=kd.default.get(F.REPLICATION_SECUREPORT)??(!kd.default.get(F.REPLICATION_PORT)&&kd.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||kd.default.get(F.REPLICATION_PORT)||kd.default.get(F.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){$$.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var $$,V$,kd,K$,G$,q$,Hd,$d=se(()=>{we();ps();Rm();$$=require("worker_threads"),V$=b(_e()),kd=b(me());q();K$=b(es());server.nodes=[];o(jt,"getHDBNodeTable");o(Gd,"getReplicationSharedStatus");o(qd,"subscribeToNodeUpdates");o(ih,"shouldReplicateToNode");q$=new Map;pU((e,t,r)=>{if(r>server.nodes.length)throw new V$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Hd||(Hd=new Map,Ele());let n=Hd.get(e);return n||(n=[],Hd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(Ele,"startSubscriptionToReplications");o(oh,"iterateRoutes")});var J$={};Re(J$,{connectedToNode:()=>Fl,disconnectedFromNode:()=>Kd,ensureNode:()=>Qo,requestClusterStatus:()=>Q$,startOnMainThread:()=>hC});async function hC(e){let t=0,r=at();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){JS.set(i,sh(l.auditStore));break}}}co.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=it();function c(){let l=jt().primaryStore.get(a);if(l!==null){let u=e.url??sc();if(l===void 0||l.url!==u||l.shard!==e.shard)return Qo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),jt().primaryStore.get(a)&&c();for(let l of oh(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}qd(s)});let n;function s(i,a=i?.name){let c=it()&&a===it()||sc()&&i?.url===sc();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of jt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ut.trace("Setting up node replication for",i),!i){for(let[f,m]of ao){let p;for(let[h,{worker:E,nodes:g}]of m){let R=g[0];if(R&&R.name==a){p=!0;for(let[S,{worker:y}]of m)m.delete(S),ut.warn("Node was deleted, unsubscribing from node",a,S,f),y?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){ao.get(f).iterator.remove(),ao.delete(f);return}}return}if(c)return;if(!i.url){ut.info(`Node ${i.name} is missing url`);return}let l=ao.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ut.info(`Added node ${i.name} at ${i.url} for process ${it()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Vd)if(i.url===m.url){Vd.delete(f);break}Vd.set(i.name,i)}let u=at();if(l||(l=new Map,ao.set(i.url,l)),l.iterator=nc(e,(f,m,p)=>{p?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ut.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ut.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];JS.has(f)&&ah.default.get(F.REPLICATION_FAILOVER)&&(E.push({replicateByDefault:m,name:it(),startTime:JS.get(f),endTime:Date.now(),replicates:!0}),JS.delete(f));let g=ih(i,f),R=co.workers.filter(S=>S.name==="http");if(p?(h=p.worker,p.nodes=E):g&&(t=t%R.length,h=R[t++],l.set(f,{worker:h,nodes:E,url:i.url}),h?.on("exit",()=>{l.get(f)?.worker===h&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let S={type:"subscribe-to-node",database:f,nodes:E};h?h.postMessage(S):ch(S)},_le);else{ut.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:jt().primaryStore.get(it())?.replicates}),jt().primaryStore.get(it())?.replicates||(n=!1,ut.info("Disabling replication, this node name",it(),jt().primaryStore.get(it()),f));let S={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};h?h.postMessage(S):ZS(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Kd=o(function(i){try{ut.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Vd.keys()),c=a.sort(),l=c.indexOf(i.name||Si(i.url));if(l===-1){ut.warn("Disconnected node not found in node map",i.name,a);return}let u=ao.get(i.url),d=u?.get(i.database);if(!d){ut.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!ah.default.get(F.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,p=(l+1)%c.length;for(;l!==p;){let h=c[p],E=Vd.get(h);u=ao.get(E.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){p=(p+1)%c.length;continue}let{worker:R,nodes:S}=g,y=!1;for(let C of d.nodes){if(S.some(I=>I.name===C.name)){ut.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}C.endTime<Date.now()||(S.push(C),y=!0)}if(d.nodes=[d.nodes[0]],!y){ut.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}ut.info(`Failing over ${i.database} from ${i.name} to ${h}`),R?R.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):ch({database:i.database,nodes:S});return}ut.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ut.error("Error failing over node",a)}},"disconnectedFromNode"),Fl=o(function(i){let a=ao.get(i.url),c=a?.get(i.database);if(!c){ut.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ut.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ut.debug("Connected node is not named yet",i.database,c);return}if(!ah.default.get(F.REPLICATION_FAILOVER))return;c.nodes=[l];let u=!1;for(let d of ao.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:p,connected:h}=f;if(p)if(h===!1&&p[0].shard===l.shard)u=!0,c.nodes.push(p[0]);else{let E=p.filter(g=>g&&g.name!==l.name);E.length<p.length&&(f.nodes=E,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:p}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,co.onMessageByType)("disconnected-from-node",Kd),(0,co.onMessageByType)("connected-to-node",Fl),(0,co.onMessageByType)("request-cluster-status",Q$)}function Q$(e,t){let r=[];for(let[n,s]of Vd)try{let i=ao.get(s.url);ut.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=z$(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ut.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Qo(e,t){let r=jt();e=e??Si(t.url),t.name=e;try{if(t.ca){let s=new j$.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ut.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ut.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!ah.default.get(F.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=z$(n[s]);for(let c of t[s]){let l=!1;for(let u of a)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=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ut.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var co,XS,ut,W$,ah,j$,z$,_le,ao,Kd,Fl,Vd,JS,lh=se(()=>{we();co=b(nt());ps();XS=require("worker_threads");$d();ut=b(Q()),W$=b(require("lodash")),ah=b(me());q();j$=require("crypto"),{cloneDeep:z$}=W$.default,_le=200,ao=new Map,Vd=new Map,JS=new Map;o(hC,"startOnMainThread");o(Q$,"requestClusterStatus");XS.parentPort&&(Kd=o(e=>{XS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Fl=o(e=>{XS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,co.onMessageByType)("subscribe-to-node",e=>{ch(e)}),(0,co.onMessageByType)("unsubscribe-from-node",e=>{ZS(e)}));o(Qo,"ensureNode")});var Es=v(Gt=>{"use strict";var Er=require("path"),{watch:gle}=require("chokidar"),$n=require("fs-extra"),Yd=require("node-forge"),nV=require("net"),{generateKeyPair:EC,X509Certificate:Jo,createPrivateKey:sV,randomBytes:Sle}=require("node:crypto"),Tle=require("util");EC=Tle.promisify(EC);var Lt=Yd.pki,Ti=require("joi"),{v4:iV}=require("uuid"),{validateBySchema:TC}=ft(),{forComponent:yle}=Q(),hs=me(),qs=(q(),M(z)),{CONFIG_PARAMS:Hl}=qs,yi=bb(),{ClientError:ic}=_e(),tT=require("node:tls"),{relative:oV,join:Rle}=require("node:path"),{CERTIFICATE_VALUES:X$}=yi,ble=Vc(),_C=gt(),{table:Ale,getDatabases:Ile,databases:eT}=(we(),M(mt)),{getJWTRSAKeys:Z$}=(Dd(),M(zp)),Qe=yle("tls").conditional;Gt.generateKeys=bC;Gt.updateConfigCert=pV;Gt.createCsr=Dle;Gt.signCertificate=Mle;Gt.setCertTable=Wd;Gt.loadCertificates=dV;Gt.reviewSelfSignedCert=IC;Gt.createTLSSelector=EV;Gt.listCertificates=gV;Gt.addCertificate=kle;Gt.removeCertificate=Gle;Gt.createNatsCerts=xle;Gt.generateCertsKeys=Ule;Gt.getReplicationCert=dh;Gt.getReplicationCertAuth=Lle;Gt.renewSelfSigned=Ble;Gt.hostnamesFromCert=NC;Gt.getKey=qle;Gt.getHostnamesFromCertificate=$le;Gt.getPrimaryHostName=wC;Gt.generateSerialNumber=sT;var{urlToNodeName:aV,getThisNodeUrl:wle,getThisNodeName:nT,clearThisNodeName:Nle}=(ps(),M(Xo)),{readFileSync:Cle,statSync:cV}=require("node:fs"),$Ue=me(),{getTicketKeys:Ole,onMessageFromWorkers:Ple}=nt(),{isMainThread:lV}=require("worker_threads"),{TLSSocket:uV,createSecureContext:VUe}=require("node:tls"),yC=3650,uh=["127.0.0.1","localhost","::1"],RC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function sT(){let e=Sle(8);return e[0]=e[0]&127|1,e.toString("hex")}o(sT,"generateSerialNumber");Ple(async e=>{e.type===qs.ITC_EVENT_TYPES.RESTART&&(hs.initSync(!0),await IC())});var sn;function ac(){return sn||(sn=Ile().system.hdb_certificate,sn||(sn=Ale({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),sn}o(ac,"getCertTable");async function dh(){let e=EV("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(nT());if(!r)return;let n=new Jo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(dh,"getReplicationCert");async function Lle(){ac();let e=(await dh()).options.cert,r=new Jo(e).issuer.match(/CN=(.*)/)?.[1];return sn.get(r)}o(Lle,"getReplicationCertAuth");var eV,oc=new Map;function dV(){if(eV)return;eV=!0;let e=[{configKey:Hl.TLS},{configKey:Hl.OPERATIONSAPI_TLS}];ac();let t=Er.dirname(_C.getConfigFilePath()),r;for(let{configKey:n}of e){let s=_C.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&oV(Rle(t,"keys"),a);c&&tV(a,l=>{oc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&lV){let d;tV(u,f=>{if(X$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=hV(u),h=new Jo(p),E;try{E=wC(h)}catch(y){Qe.error?.("error extracting host name from certificate",y);return}if(E==null){Qe.error?.("No host name found on certificate");return}if(h.checkIssued(new Jo(X$.cert)))return;let g=sn.primaryStore.get(E),R=cV(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=S){R<S&&Qe.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=sn.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(dV,"loadCertificates");function tV(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&lV&&Qe.warn?.(`Reloading ${r}:`,i),n=c,t(hV(i)))}catch(c){Qe.error?.(`Error loading ${r}:`,i,c)}},"loadFile");$n.existsSync(e)?s(e,cV(e)):Qe.error?.(`${r} file not found:`,e),gle(e,{persistent:!1}).on("change",s)}o(tV,"loadAndWatch");function gC(){let e=wle();if(e==null){let t=uh[0];return Qe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return aV(e)}o(gC,"getHost");function rT(){let e=nT();if(e==null){let t=uh[0];return Qe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(rT,"getCommonName");async function Dle(){let e=await dh(),t=Lt.certificateFromPem(e.options.cert),r=Lt.privateKeyFromPem(e.options.key);Qe.info?.("Creating CSR with cert named:",e.name);let n=Lt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:rT()},...RC];Qe.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:fV()}];return Qe.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Yd.pki.certificationRequestToPem(n)}o(Dle,"createCsr");function fV(){let e=uh.includes(rT())?uh:[...uh,rT()];return e.includes(gC())||e.push(gC()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>nV.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(fV,"certExtensions");async function Mle(e){let t={},r=Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ac();for await(let d of sn.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(oc.has(d.private_key_name)){n=oc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await $n.exists(Er.join(r,d.private_key_name))){n=$n.readFile(Er.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await SC();s=d.ca,n=d.private_key}n=Lt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Lt.certificateFromPem(s.certificate);Qe.info?.("Signing CSR with cert named",s.name);let a=Lt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return Qe.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Yd.pki.createCertificate();c.serialNumber=sT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+yC),Qe.info?.("sign cert setting validity:",c.validity),Qe.info?.("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),Qe.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;Qe.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Yd.md.sha256.create()),t.certificate=Lt.certificateToPem(c)}else Qe.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(Mle,"signCertificate");async function vle(e,t){await Wd({name:nT(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Wd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Lt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(vle,"createCertificateTable");async function Wd(e){let t;try{t=new Jo(e.certificate)}catch(r){Qe.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Qe.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},ac(),await sn.patch(e)}o(Wd,"setCertTable");async function bC(){let e=await EC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Lt.publicKeyFromPem(e.publicKey),privateKey:Lt.privateKeyFromPem(e.privateKey)}}o(bC,"generateKeys");async function AC(e,t,r){let n=Lt.createCertificate();if(!t){let a=await dh();t=Lt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber=sT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+yC);let i=[{name:"commonName",value:rT()},...RC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(fV()),n.sign(e,Yd.md.sha256.create()),Lt.certificateToPem(n)}o(AC,"generateCertificates");async function SC(){let e=await gV(),t;for(let r of e){if(!r.is_authority)continue;let n=await _V(r.private_key_name);if(r.private_key_name&&n&&new Jo(r.certificate).checkPrivateKey(sV(n))){Qe.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Qe.trace?.("No CA found with matching private key")}o(SC,"getCertAuthority");async function mV(e,t,r=!0){let n=Lt.createCertificate();n.publicKey=t,n.serialNumber=sT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+yC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${hs.get(Hl.REPLICATION_HOSTNAME)??aV(hs.get(Hl.REPLICATION_URL))??iV().split("-")[0]}`},...RC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,Yd.md.sha256.create());let a=Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),c=Er.join(a,yi.PRIVATEKEY_PEM_NAME);return r&&await $n.writeFile(c,Lt.privateKeyToPem(e)),n}o(mV,"generateCertAuthority");async function Ule(){let{privateKey:e,publicKey:t}=await bC(),r=await mV(e,t),n=await AC(e,t,r);await vle(n,r),pV()}o(Ule,"generateCertsKeys");async function xle(){let e=await AC(Lt.privateKeyFromPem(yi.CERTIFICATE_VALUES.key),void 0,Lt.certificateFromPem(yi.CERTIFICATE_VALUES.cert)),t=Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),r=Er.join(t,yi.NATS_CERTIFICATE_PEM_NAME);await $n.exists(r)||await $n.writeFile(r,e);let n=Er.join(t,yi.NATS_CA_PEM_NAME);await $n.exists(n)||await $n.writeFile(n,yi.CERTIFICATE_VALUES.cert)}o(xle,"createNatsCerts");async function Ble(){ac();for await(let e of sn.search([{attribute:"is_self_signed",value:!0}]))await sn.delete(e.name);await IC()}o(Ble,"renewSelfSigned");async function IC(){Nle(),await dV(),ac();let e=await SC();if(!e){Qe.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Lt.privateKeyFromPem($n.readFileSync(u)),keyPath:u}}catch(d){return Qe.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=hs.get(Hl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=hs.get(Hl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),c=oV(a,i);s||(Qe.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await bC(),$n.existsSync(Er.join(a,yi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${iV().split("-")[0]}.pem`),await $n.writeFile(Er.join(a,c),Lt.privateKeyToPem(s)));let l=await mV(s,Lt.setRsaPublicKey(s.n,s.e),!1);await Wd({name:l.subject.getField("CN").value,uses:["https"],certificate:Lt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await dh()){let r=nT();Qe.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await SC();let n=Lt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await AC(Lt.privateKeyFromPem(e.private_key),s,n);await Wd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(IC,"reviewSelfSignedCert");function pV(){let e=ble(Object.keys(qs.CONFIG_PARAM_MAP),!0),t=Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),r=Er.join(t,yi.PRIVATEKEY_PEM_NAME),n=Er.join(t,yi.NATS_CERTIFICATE_PEM_NAME),s=Er.join(t,yi.NATS_CA_PEM_NAME),i=qs.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),_C.updateConfigValue(void 0,void 0,a,!1,!0)}o(pV,"updateConfigCert");function hV(e){return e.startsWith("-----BEGIN")?e:Cle(e,"utf8")}o(hV,"readPEM");var rV=tT.createSecureContext;tT.createSecureContext=function(e){if(!e.cert||!e.key)return rV(e);let t={...e};delete t.key,delete t.cert;let r=rV(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Fle=uV.prototype._init;uV.prototype._init=function(e,t){Fle.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var kl=new Map;function EV(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),kl.clear();let d=0;if(eT===void 0){c();return}for await(let f of eT.system.hdb_certificate.search([])){let m=f.certificate,p=new Jo(m);f.is_authority&&(p.asString=m,kl.set(p.subject,m))}for await(let f of eT.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await _V(f.private_key_name),E=f.certificate,g=new Jo(E);if(kl.has(g.issuer)&&(E+=`
|
|
18
18
|
`+kl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:Ole(),availableCAs:kl,ca:t&&Array.from(kl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(R.sessionIdContext=a.sessionIdContext);let S=f.hostnames??NC(g);Array.isArray(S)||(S=[S]);for(let I of S)I===gC()&&(p+=1);let y=tT.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(kl),y.certStart=E.toString().slice(0,100);let C;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),nV.isIP(I)&&(C=!0);let k=r.get(I)?.quality??0;Qe.trace?.("Assigning TLS for hostname",I,"if",p,">",k),p>k&&r.set(I,y)}else Qe.error?.("No hostname found for certificate at",tT.certificate);Qe.trace?.("Adding TLS",y.name,"for",a.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=y,d=p,a&&(a.defaultContext=y))}catch(m){Qe.error?.("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),eT?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){Qe.info?.("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return Qe.debug?.("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?Qe.debug?.("No certificate found to match",a,"using the default certificate"):Qe.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Qe.info?.("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(EV,"createTLSSelector");async function _V(e){let t=oc.get(e);return!t&&e?await $n.readFile(Er.join(hs.get(Hl.ROOTPATH),qs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(_V,"getPrivateKeyByName");async function gV(){ac();let e=[];for await(let t of sn.search([]))e.push(t);return e}o(gV,"listCertificates");async function kle(e){let t=TC(e,Ti.object({name:Ti.string().required(),certificate:Ti.string().required(),is_authority:Ti.boolean().required(),private_key:Ti.string(),hosts:Ti.array(),uses:Ti.array()}));if(t)throw new ic(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Jo(n),c=!1,l=!1,u;for(let[p,h]of oc)!s&&!c&&a.checkPrivateKey(sV(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new ic("A suitable private key was not found for this certificate");let d;if(!r){try{d=wC(a)}catch(p){Qe.error?.(p)}if(d==null)throw new ic("Error extracting certificate host name, please provide a name parameter")}let f=Hle(r??d);s&&!c&&!l&&(await $n.writeFile(Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME,f+".pem"),s),oc.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Wd(m),"Successfully added certificate: "+f}o(kle,"addCertificate");function Hle(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(Hle,"sanitizeName");async function Gle(e){let t=TC(e,Ti.object({name:Ti.string().required()}));if(t)throw new ic(t.message);let{name:r}=e;ac();let n=await sn.get(r);if(!n)throw new ic(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await sn.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(Qe.info?.("Removing private key named",s),await $n.remove(Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME,s)))}return await sn.delete(r),"Successfully removed "+r}o(Gle,"removeCertificate");function wC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||NC(e)[0]}o(wC,"getPrimaryHostName");function NC(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(NC,"hostnamesFromCert");async function qle(e){if(e.bypass_auth!==!0)throw new ic("Unauthorized","401");let t=TC(e,Ti.object({name:Ti.string().required()}));if(t)throw new ic(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await Z$()).privateKey;if(r===".jwtPublic")return(await Z$()).publicKey;if(oc.get(r))return oc.get(e.name);throw new ic("Key not found")}o(qle,"getKey");function $le(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o($le,"getHostnamesFromCertificate")});var $V={};Re($V,{BACK_PRESSURE_RATIO_POSITION:()=>HV,CONFIRMATION_STATUS_POSITION:()=>kV,LATENCY_POSITION:()=>dT,NodeReplicationConnection:()=>jd,OPERATION_REQUEST:()=>DC,RECEIVED_TIME_POSITION:()=>vC,RECEIVED_VERSION_POSITION:()=>MC,RECEIVING_STATUS_POSITION:()=>UC,RECEIVING_STATUS_RECEIVING:()=>qV,RECEIVING_STATUS_WAITING:()=>GV,SENDING_TIME_POSITION:()=>fh,createWebSocket:()=>fT,databaseSubscriptions:()=>lc,replicateOverWS:()=>mh,tableUpdateListeners:()=>BC});async function fT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=it(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!PC){let l=(0,vV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),PC=u.secureContexts}if(i=PC.get(s),i&&le.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,xV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(uT?.caCount!==Zo.size&&(uT=UV.createSecureContext({...i.options,ca:[...Zo,...i.options.availableCAs.values()]}),uT.caCount=Zo.size),c.secureContext=uT),new LV.WebSocket(e,"harperdb-replication-v1",c)}function mh(e,t,r){let n=t.port||t.securePort,s=Gl.pid%1e3+"-"+DV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);le.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||lc,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&at()[u],g,R=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let y,C,I,k,J,G,H,X=6e4,W,ue=0,ce=0,te=0,ye=PV.default.get(F.REPLICATION_BLOBTIMEOUT)??12e4,Ae=new Map,Ye=[],qe=0,Ar;if(t.url){let A=o(()=>{J&&ce===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(J=performance.now(),e.ping(),ce=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,CV).unref(),A()}else tr();e._socket?.setMaxListeners(200);function tr(){clearTimeout(k),ce=e._socket?.bytesRead,te=e._socket?.bytesWritten,k=setTimeout(()=>{ce===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(le.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},CV*2).unref()}o(tr,"resetPingTimer");let Wr=0,vr=0,Su=!1,kc=3e4;function xt(){if(dn?.length>0){let A=performance.now(),U=A-vr;Wr=(Wr*kc+(Su?U:0))/(kc+U),m[HV]=Wr,vr=A}}o(xt,"updateBackPressureRatio"),setInterval(xt,kc).unref();function ri(){if(!(!g||!u))return m||(m=Gd(f,u,g)),m}o(ri,"getSharedStatus"),u&&Hc(u);let Ca,VE,Qf=[],KE=[],Jf,Pe=[],YE=[],cb=[],Tu=150,Bi=25,Os=0,Xf=0,Zf=!1,No,On,dn,Ur;e.on("message",yu);async function yu(A){if(r=await r,!r){le.error?.(s,"No authorization provided"),xr(1008,"Unauthorized");return}em(A),e.off("message",yu),e.on("message",em)}o(yu,"onWSMessageWhenAuthorized");function em(A){ue=performance.now();try{let U=A.dataView=new el(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let Y=(0,ot.decode)(A),[j,B,Ee]=Y;switch(j){case TV:{if(B){if(g){if(g!==B){le.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${B}, disconnecting`),e.send((0,ot.encode)([zd])),xr(1008,"Node name mismatch");return}}else if(g=B,t.connection?.tentativeNode){let de=t.connection.tentativeNode;de.name=g,t.connection.tentativeNode=null,Qo(g,de)}if(t.connection&&(t.connection.nodeName=g),le.debug?.(s,"received node name:",g,"db:",u??Y[2]),!u)try{Hc(u=Y[2]),u==="system"&&(Ca=nc(t,(de,ae)=>{La(ae)&&K(ae)}),e.on("close",()=>{Ca?.remove()}))}catch(de){le.warn?.(s,"Error setting database",de),e.send((0,ot.encode)([zd])),xr(1008,de.message);return}tm()}break}case wV:{le.debug?.(s,"Received table definitions for",B.map(de=>de.table));for(let de of B){let ae=Y[2];de.database=ae;let ke;if(La(ae)){if(u==="system")De[ae]?.[de.table]||(ke=L(de,De[ae]?.[de.table]));else{if(ae!=="data"&&!De[ae]){le.warn?.("Database not found",ae);return}ke=L(de,De[ae]?.[de.table])}f||(f=ke?.auditStore),E||(E=at()?.[ae])}}break}case zd:xr();break;case DC:try{let de=r?.replicates||r?.subscribers||r?.name;le.debug?.("Received operation request",B,"from",g),server.operation(B,{user:r},!de).then(ae=>{le.debug?.("Requested request from finished",g,ae),Array.isArray(ae)&&(ae={results:ae}),ae.requestId=B.requestId,e.send((0,ot.encode)([oT,ae]))},ae=>{le.debug?.("Failed requested operation from",g,ae),e.send((0,ot.encode)([oT,{requestId:B.requestId,error:CC(ae)}]))})}catch(de){e.send((0,ot.encode)([oT,{requestId:B.requestId,error:CC(de)}]))}break;case oT:let{resolve:fe,reject:pe}=R.get(B.requestId);le.debug?.("Received completed operation request",g,B),B.error?pe(new Error(B.error)):fe(B),R.delete(B.requestId);break;case OC:let ne=Y[3];if(!E){u?le.error?.(s,"No database found for",u):le.error?.(s,"Database name never received"),xr();return}let ie=E[ne];ie=L({table:ne,database:u,attributes:B.attributes,schemaDefined:B.schemaDefined},ie),Qf[Ee]={name:ne,decoder:new ot.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:B.typedStructs,structures:B.structures}),getEntry(de){return ie.primaryStore.getEntry(de)},rootStore:ie.primaryStore.rootStore};break;case yV:Ur=f?H$(B,f):new Map,Jf=Y[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Jf}`);break;case RV:let xe=Ee;cb[xe]=B;break;case IV:ri()[kV]=B,le.trace?.(s,"received and broadcasting committed update",B),ri().buffer.notify();break;case AV:y=B,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case aT:{let de=Y[1],{fileId:ae,size:ke,finished:Be,error:Le}=de,Me=Ae.get(ae);le.debug?.("Received blob",ae,"has stream",!!Me,"connectedToBlob",!!Me?.connectedToBlob,"length",Y[2].length,"finished",Be),Me||(Me=new LC.PassThrough,Me.expectedSize=ke,Ae.set(ae,Me)),Me.lastChunk=Date.now();let pt=Y[2];Ve(pt.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Be?(Le?(Me.on("error",()=>{}),Me.destroy(new Error("Blob error: "+Le+" for record "+(Me.recordId??"unknown")+" from "+remote_node_name))):Me.end(pt),Me.connectedToBlob&&Ae.delete(ae)):Me.write(pt)}catch(wt){le.error?.(`Error receiving blob for ${Me.recordId} from ${g} and streaming to storage`,wt),Ae.delete(ae)}break}case bV:{let de=B,ae;try{let ke=Y[3],Be=KE[Ee]||(KE[Ee]=E[Y[4]]);if(!Be)return le.warn?.("Unknown table id trying to handle record request",Ee);let Le=Be.primaryStore.getBinaryFast(Symbol.for("structures")),Me=Le?.length??0;if(Me>0&&Me!==Xf){Xf=Me;let wt=(0,ot.decode)(Le);e.send((0,ot.encode)([OC,{typedStructs:wt.typed,structures:wt.named},Ee,Be.tableName]))}let pt=Be.primaryStore.getBinaryFast(ke);if(pt){let wt=Be.primaryStore.decoder.decode(pt,{valueAsBuffer:!0}),Et=ct||{};Et.version=(0,BV.getLastVersion)(),ct&&ct[Hu]&Jr&&(wt=Buffer.from(wt),Dm(()=>Be.primaryStore.decoder.decode(pt),zE=>Oa(zE,ke),Be.primaryStore.rootStore)),ae=(0,ot.encode)([iT,de,{value:wt,expiresAt:Et.expiresAt,version:Et.version,residencyId:Et.residencyId,nodeId:Et.nodeId,user:Et.user}])}else ae=(0,ot.encode)([iT,de])}catch(ke){ae=(0,ot.encode)([iT,de,{error:ke.message}])}e.send(ae);break}case iT:{let{resolve:de,reject:ae,tableId:ke,key:Be}=R.get(Y[1]),Le=Y[2];if(Le?.error)ae(new Error(Le.error));else if(Le){let Me;M_(()=>{let pt=Qf[ke].decoder.decode(Le.value);Le.value=pt,Le.key=Be,de(Le)||Me&&setTimeout(()=>Me.forEach(P_),6e4).unref()},f?.rootStore,pt=>{let wt=Pa(pt,Be);return Me||(Me=[]),Me.push(wt),wt})}else de();R.delete(Y[1]);break}case SV:{dn=B;let de,ae,ke=!1;if(h){if(u!==h.databaseName&&!h.then){le.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(le.debug?.(s,"received subscription request for",u,"at",dn),!h){let Ce;h=new Promise(Kt=>{le.debug?.("Waiting for subscription to database "+u),Ce=Kt}),h.ready=Ce,lc.set(u,h)}if(r.name)ae=jt().subscribe(r.name),ae.then(async Ce=>{de=Ce;for await(let Kt of de){let Bt=Kt.value;if(!(Bt?.replicates===!0||Bt?.replicates?.receives||Bt?.subscriptions?.some(Br=>(Br.database||Br.schema)===u&&Br.publish!==!1))){ke=!0,e.send((0,ot.encode)([zd])),xr(1008,`Unauthorized database subscription to ${u}`);return}}},Ce=>{le.error?.(s,"Error subscribing to HDB nodes",Ce)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ot.encode)([zd])),xr(1008,`Unauthorized database subscription to ${u}`);return}if(On&&(le.debug?.(s,"stopping previous subscription",u),On.emit("close")),dn.length===0)return;let Be=dn[0],Le=o(Ce=>{if(Ce&&(Be.replicateByDefault?!Be.tables.includes(Ce.tableName):Be.tables.includes(Ce.tableName)))return{table:Ce}},"tableToTableEntry"),Me={txnTime:0},pt,wt,Et=1/0,zE,jE=o((Ce,Kt)=>{if(Ce.type==="end_txn"){Me.txnTime&&(a[i]!==66&&le.error?.("Invalid encoding of message"),N(9),N(V_),O(zE=Kt),KM()),i=c,Me.txnTime=0;return}let Bt=Ce.nodeId,Br=Ce.tableId,Nt=wt[Br];if(!Nt&&(Nt=wt[Br]=Le(h.tableById[Br]),!Nt))return le.debug?.("Not subscribed to table",Br);let Ps=Nt.table,Ft=Ps.primaryStore,ni=Ft.encoder;(Ce.extendedType&tg||!ni.typedStructs)&&(ni._mergeStructures(ni.getStructures()),ni.typedStructs&&(ni.lastTypedStructuresLength=ni.typedStructs.length));let Au=pt[Bt];if(!(Au&&Au.startTime<Kt&&(!Au.endTime||Au.endTime>Kt)))return lT&&le.trace?.(s,"skipping replication update",Ce.recordId,"to:",g,"from:",Bt,"subscribed:",pt),YM();lT&&le.trace?.(s,"sending replication update",Ce.recordId,"to:",g,"from:",Bt,"subscribed:",pt);let lb=Ce.version;Me.txnTime!==lb&&(Me.txnTime&&(lT&&le.trace?.(s,"new txn time, sending queued txn",Me.txnTime),a[i]!==66&&le.error?.("Invalid encoding of message"),KM()),Me.txnTime=lb,i=c,O(lb));let Gc=Ce.residencyId,ub=WE(Gc,Ps),QE;if(ub&&!ub.includes(g)){let Fi=WE(Ce.previousResidencyId,Ps);if(Fi&&!Fi.includes(g)&&(Ce.type==="put"||Ce.type==="patch")||Ps.getResidencyById)return YM();let qc=Ce.recordId;le.trace?.(s,"sending invalidation",qc,g,"from",Bt);let rm=0;Gc&&(rm|=tl),Ce.previousResidencyId&&(rm|=rl);let mb,JE=null;for(let WM in Ps.indices){if(!JE){if(mb=Ce.getValue(Ft,!0),!mb)break;JE={}}JE[WM]=mb[WM]}QE=nl(Ce.version,Br,qc,null,Bt,Ce.user,Ce.type==="put"||Ce.type==="patch"?"invalidate":Ce.type,ni.encode(JE),rm,Gc,Ce.previousResidencyId,Ce.expiresAt)}function YM(){return le.trace?.(s,"skipping audit record",Ce.recordId),G||(G=setTimeout(()=>{G=null,(zE||0)+NV/2<Et&&(lT&&le.trace?.(s,"sending skipped sequence update",Et),e.send((0,ot.encode)([AV,Et])))},NV).unref()),new Promise(setImmediate)}o(YM,"skipAuditRecord");let db=ni.typedStructs,fb=ni.structures;if((db?.length!=Nt.typed_length||fb?.length!=Nt.structure_length)&&(Nt.typed_length=db?.length,Nt.structure_length=fb.length,le.debug?.(s,"send table struct",Nt.typed_length,Nt.structure_length),Nt.sentName||(Nt.sentName=!0),e.send((0,ot.encode)([OC,{typedStructs:db,structures:fb,attributes:Ps.attributes,schemaDefined:Ps.schemaDefined},Br,Nt.table.tableName]))),Gc&&!YE[Gc]&&(e.send((0,ot.encode)([RV,ub,Gc])),YE[Gc]=!0),QE)N(QE.length),P(QE);else{let Fi=Ce.encoded;Ce.extendedType&Jr&&Dm(()=>Ce.getValue(Ft),rm=>Oa(rm,Ce.recordId),Ft.rootStore);let qc=Fi[0]===66?8:0;N(Fi.length-qc),P(Fi,qc),le.trace?.("wrote record",Ce.recordId,"length:",Fi.length)}if(e._socket.writableNeedDrain){let Fi=performance.now();return Su=!0,xt(),new Promise(qc=>{le.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",()=>{qc(),Su=!1,xt()})})}else return qe>Bi?new Promise(Fi=>{Ar=Fi}):new Promise(setImmediate)},"sendAuditRecord"),KM=o(()=>{c-i>8?(e.send(a.subarray(i,c)),le.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Ve(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):le.debug?.(s,"skipping empty transaction")},"sendQueuedData");On=new xC.EventEmitter,On.once("close",()=>{ke=!0,de?.end()});for(let{startTime:Ce}of dn)Ce<Et&&(Et=Ce);(ae||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,wt=h.tableById.map(Le),pt=[];for(let{name:Kt,startTime:Bt,endTime:Br}of dn){let Nt=QS(Kt,f);le.debug?.("subscription to",Kt,"using local id",Nt,"starting",Bt),pt[Nt]={startTime:Bt,endTime:Br}}K(u),Ca||(Ca=Ll(Kt=>{Kt.databaseName===u&&K(u)}),VE=Hp(Kt=>{Kt===u&&(e.send((0,ot.encode)([zd])),xr())}),e.on("close",()=>{Ca?.remove(),VE?.remove()})),e.send((0,ot.encode)([yV,nh(h.auditStore),dn.map(({name:Kt})=>Kt)]));let Ce=!0;do{isFinite(Et)||(le.warn?.("Invalid sequence id "+Et),xr(1008,"Invalid sequence id"+Et));let Kt;if(Ce&&!ke&&(Ce=!1,Et===0)){le.info?.("Replicating all tables to",g);let Bt=Et,Br=mT(f);for(let Nt in E){if(!Le(Nt))continue;let Ps=E[Nt];for(let Ft of Ps.primaryStore.getRange({snapshot:!1,versions:!0})){if(ke)return;if(Ft.localTime>=Et){le.trace?.(s,"Copying record from",u,Nt,Ft.key,Ft.localTime),Bt=Math.max(Ft.localTime,Bt),Kt=!0,ri()[fh]=1;let ni=nl(Ft.version,Ps.tableId,Ft.key,null,Br,null,"put",Dm(()=>Ps.primaryStore.encoder.encode(Ft.value),Au=>Oa(Au,Ft.key)),Ft.metadataFlags&-256,Ft.residencyId,null,Ft.expiresAt);await jE({recordId:Ft.key,tableId:Ps.tableId,type:"put",getValue(){return Ft.value},encoded:ni,version:Ft.version,residencyId:Ft.residencyId,nodeId:Br,extendedType:Ft.metadataFlags},Ft.localTime)}}}Kt&&jE({type:"end_txn"},Et),ri()[fh]=0,Et=Bt}for(let{key:Bt,value:Br}of f.getRange({start:Et||1,exclusiveStart:!0,snapshot:!1})){if(ke)return;let Nt=At(Br);le.debug?.("sending audit record",Bt,Nt.recordId),ri()[fh]=Bt,Et=Bt,await jE(Nt,Bt),On.startTime=Bt,Kt=!0}Kt&&jE({type:"end_txn"},Et),ri()[fh]=0,await fx(f)}while(!ke)}).catch(Ce=>{le.error?.(s,"Error handling subscription to node",Ce),xr(1008,"Error handling subscription to node")});break}}return}U.position=8;let w=!0,D,$;do{ri();let Y=U.readInt();if(Y===9&&U.getUint8(U.position)==V_){U.position++,y=$=U.readFloat64(),m[MC]=y,m[vC]=Date.now(),m[UC]=GV,le.trace?.("received remote sequence update",y,u);break}let j=U.position,B=At(A,j,j+Y),Ee=Qf[B.tableId];Ee||le.error?.(`No table found with an id of ${B.tableId}`);let fe;B.residencyId&&(fe=cb[B.residencyId],le.trace?.(s,"received residency list",fe,B.type,B.recordId));try{let pe=B.recordId;M_(()=>{D={table:Ee.name,id:B.recordId,type:B.type,nodeId:Ur.get(B.nodeId),residencyList:fe,timestamp:B.version,value:B.getValue(Ee),user:B.user,beginTxn:w,expiresAt:B.expiresAt}},f?.rootStore,ne=>Pa(ne,pe))}catch(pe){throw pe.message+="typed structures for current decoder"+JSON.stringify(Ee.decoder.typedStructs),pe}w=!1,le.debug?.(s,"received replication message",B.type,"id",D.id,"version",new Date(B.version),"nodeId",D.nodeId),m[MC]=B.version,m[vC]=Date.now(),m[UC]=qV,h.send(D),U.position=j+Y}while(U.position<A.byteLength);Os++,u!=="system"&&Ve(A.byteLength,"bytes-received",`${g}.${u}.${D?.table||"unknown_table"}`,"replication","ingest"),Os>Tu&&!Zf&&(Zf=!0,e.pause(),le.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(D){let Y=Date.now()-D.timestamp;u!=="system"&&Ve(Y,"replication-latency",g+"."+u+"."+D.table,D.type,"ingest")}Os--,Zf&&(Zf=!1,e.resume(),le.debug?.(`Replication resuming ${g}`)),Ye.length>0&&await Promise.all(Ye),le.trace?.("All blobs finished"),!C&&$&&(le.trace?.(s,"queuing confirmation of a commit at",$),setTimeout(()=>{e.send((0,ot.encode)([IV,C])),le.trace?.(s,"sent confirmation of a commit at",C),C=null},Yle)),C=$,le.debug?.("last sequence committed",new Date($),u)}})}catch(U){le.error?.(s,"Error handling incoming replication message",U)}}o(em,"onWSMessage"),e.on("ping",tr),e.on("pong",()=>{if(t.connection){let A=performance.now()-J;t.connection.latency=A,ri()&&(m[dT]=A),t.isSubscriptionConnection&&Fl({name:g,database:u,url:t.url,latency:A})}J=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout(k),clearInterval(H),On&&On.emit("close"),No&&No.end();for(let[w,{reject:D}]of R)D(new Error(`Connection closed ${U?.toString()} ${A}`));le.debug?.(s,"closed",A,U?.toString())});function xr(A,U){try{e.isFinished=!0,le.debug?.(s,"closing",g,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(w){le.error?.(s,"Error closing connection",w)}}o(xr,"close");let Ru=new Set;async function Oa(A,U){let w=L_(A);if(Ru.has(w)){le.debug?.("Blob already being sent",w);return}Ru.add(w);try{let D;qe++;for await(let $ of A.stream())D&&(le.debug?.("Sending blob chunk",w,"length",D.length),e.send((0,ot.encode)([aT,{fileId:w,size:A.size},D]))),D=$,e._socket.writableNeedDrain&&(le.debug?.("draining",w),await new Promise(Y=>e._socket.once("drain",Y)),le.debug?.("drained",w)),Ve($.length,"bytes-sent",`${g}.${u}`,"replication","blob");le.debug?.("Sending final blob chunk",w,"length",D.length),e.send((0,ot.encode)([aT,{fileId:w,size:A.size,finished:!0},D]))}catch(D){le.warn?.("Error sending blob",D,"blob id",w,"for record",U),e.send((0,ot.encode)([aT,{fileId:w,finished:!0,error:CC(D)},Buffer.alloc(0)]))}finally{Ru.delete(w),qe--,qe<Bi&&Ar?.()}}o(Oa,"sendBlobs");function Pa(A,U){let w=L_(A),D=Ae.get(w);le.debug?.("Received transaction with blob",w,"has stream",!!D,"ended",!!D?.writableEnded),D?D.writableEnded&&Ae.delete(w):(D=new LC.PassThrough,Ae.set(w,D)),D.connectedToBlob=!0,D.lastChunk=Date.now(),D.recordId=U,A.size===void 0&&D.expectedSize&&(A.size=D.expectedSize);let $=D.blob??createBlob(D,A);D.blob=$;let Y=Bo(()=>Lm($).saving,h.auditStore?.rootStore);return Y&&(Y.blobId=w,Ye.push(Y),Y.finally(()=>{le.debug?.(`Finished receiving blob stream ${w}`),Ye.splice(Ye.indexOf(Y),1)})),$}o(Pa,"receiveBlobs");function tm(){if(p||(p=!0,t.connection?.on("subscriptions-updated",tm)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;f||(f=h?.auditStore);try{for(let D of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let $ of D.value.nodes||[])$.lastTxnTime>(A.get($.id)??0)&&A.set($.id,$.lastTxnTime)}catch(D){if(!D.message.includes("Can not re"))throw D}let U=t.connection?.nodeSubscriptions?.[0];S=[];let w=t.connection?.nodeSubscriptions.map((D,$)=>{let Y=[],{replicateByDefault:j}=D;if(D.subscriptions){for(let pe of D.subscriptions)if(pe.subscribe&&(pe.schema||pe.database)===u){let ne=pe.table;E?.[ne]?.replicate!==!1&&Y.push(ne)}j=!1}else for(let pe in E)(j?E[pe].replicate===!1:E[pe].replicate)&&Y.push(pe);let B=f&&QS(D.name,f),Ee=h?.dbisDB?.get([Symbol.for("seq"),B])??1,fe=Math.max(Ee?.seqId??1,(typeof D.startTime=="string"?new Date(D.startTime).getTime():D.startTime)??1);if(le.debug?.("Starting time recorded in db",D.name,B,u,Ee?.seqId,"start time:",fe,new Date(fe)),U!==D){let pe=f&&QS(U.name,f),ne=h?.dbisDB?.get([Symbol.for("seq"),pe])??1;for(let ie of ne?.nodes||[])ie.name===D.name&&(fe=ie.seqId,le.debug?.("Using sequence id from proxy node",U.name,fe))}if(B===void 0?le.warn("Starting subscription request from node",D,"but no node id found"):S.push(B),A.get(B)>fe&&(fe=A.get(B),le.debug?.("Updating start time from more recent txn recorded",U.name,fe)),fe===1&&cT)try{new URL(cT).hostname===D.name?(le.warn?.(`Requesting full copy of database ${u} from ${cT}`),fe=0):fe=Date.now()-6e4}catch(pe){le.error?.("Error parsing leader URL",cT,pe)}return le.trace?.(s,"defining subscription request",D.name,u,new Date(fe)),{name:D.name,replicateByDefault:j,tables:Y,startTime:fe,endTime:D.endTime}});if(w)if(le.debug?.(s,"sending subscription request",w,h?.dbisDB?.path),clearTimeout(W),w.length>0)e.send((0,ot.encode)([SV,w]));else{let D=o(()=>{let $=performance.now();W=setTimeout(()=>{ue<=$?xr(1008,"Connection has no subscriptions and is no longer used"):D()},X).unref()},"scheduleClose");D()}}o(tm,"sendSubscriptionRequestUpdate");function WE(A,U){if(!A)return;let w=Pe[A];return w||(w=U.getResidencyRecord(A),Pe[A]=w),w}o(WE,"getResidence");function La(A){return!(cc&&cc!="*"&&!cc[A]&&!cc.includes?.(A)&&!cc.some?.(U=>U.name===A))}o(La,"checkDatabaseAccess");function Hc(A){if(h=h||d.get(A),!La(A))throw new Error(`Access to database "${A}" is not permitted`);h||le.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=at()?.[A]);let U=it();if(U===g)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return bu(U,A),!0}o(Hc,"setDatabase");function bu(A,U){let w=at()?.[U],D=[];for(let $ in w){let Y=w[$];D.push({table:$,schemaDefined:Y.schemaDefined,attributes:Y.attributes.map(j=>({name:j.name,type:j.type,isPrimaryKey:j.isPrimaryKey}))})}le.trace?.("Sending database info for node",A,"database name",U),e.send((0,ot.encode)([TV,A,U,D]))}o(bu,"sendNodeDBName");function K(A){let U=at()?.[A],w=[];for(let D in U){if(dn&&!dn.some(Y=>Y.replicateByDefault?!Y.tables.includes(D):Y.tables.includes(D)))continue;let $=U[D];w.push({table:D,schemaDefined:$.schemaDefined,attributes:$.attributes.map(Y=>({name:Y.name,type:Y.type,isPrimaryKey:Y.isPrimaryKey}))})}e.send((0,ot.encode)([wV,w,A]))}o(K,"sendDBSchema"),H=setInterval(()=>{for(let[A,U]of Ae)U.lastChunk+ye<Date.now()&&(le.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${g}`),Ae.delete(A),U.end())},ye).unref();let _=1,T=[];return{end(){No&&No.end(),On&&On.emit("close")},getRecord(A){let U=_++;return new Promise((w,D)=>{let $=[bV,U,A.table.tableId,A.id];T[A.table.tableId]||($.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,ot.encode)($)),ue=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(Y){let{table:j,entry:B}=A;if(w(Y),Y)return j._recordRelocate(B,Y)},reject:D})})},sendOperation(A){let U=_++;return A.requestId=U,e.send((0,ot.encode)([DC,A])),new Promise((w,D)=>{R.set(U,{resolve:w,reject:D})})}};function N(A){x(5),A<128?a[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,A),c+=5)}function P(A,U=0,w=A.length){let D=w-U;x(D),A.copy(a,c,U,w),c+=D}function O(A){x(8),l.setFloat64(c,A),c+=8}function x(A){if(A+16>a.length-c){let U=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);a.copy(U,0,i,c),c=c-i,i=0,a=U,l=new DataView(a.buffer,0,a.length)}}function L(A,U){let w=A.database??"data";U||(U={});let D=U.schemaDefined,$=!1,Y=A.schemaDefined,j=U.attributes||[];for(let B=0;B<A.attributes?.length;B++){let Ee=A.attributes[B],fe=j.find(pe=>pe.name===Ee.name);(!fe||fe.type!==Ee.type)&&(D?le.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${Ee.name}: ${Ee.type}' from '${g}' does not match local attribute ${fe?"'"+fe.name+": "+fe.type+"'":"which does not exist"}`):($=!0,Y||(Ee.indexed=!0),fe?j[j.indexOf(fe)]=Ee:j.push(Ee)))}return $?(le.debug?.("(Re)creating",A),Ze({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:j,...U})):U}}var PV,ot,LV,DV,MV,xC,vV,UV,Gl,xV,LC,BV,FV,Vle,CC,le,SV,TV,yV,zd,RV,OC,bV,iT,DC,oT,AV,IV,wV,aT,kV,MC,vC,fh,dT,UC,HV,GV,qV,Kle,cT,BC,lc,lT,NV,Yle,CV,PC,uT,OV,jd,FC=se(()=>{we();Hi();pC();KA();ps();PV=b(me());q();sl();ot=require("msgpackr"),LV=require("ws"),DV=require("worker_threads"),MV=b(Q());lh();xC=require("events"),vV=b(Es()),UV=b(require("node:tls"));$d();Gl=b(require("node:process")),xV=require("node:net");rs();ts();LC=require("node:stream"),BV=require("lmdb"),FV=b(require("minimist")),{forComponent:Vle,errorToString:CC}=MV.default,le=Vle("replication").conditional,SV=129,TV=140,yV=141,zd=142,RV=130,OC=132,bV=133,iT=134,DC=136,oT=137,AV=143,IV=144,wV=145,aT=146,kV=0,MC=1,vC=2,fh=3,dT=4,UC=5,HV=6,GV=0,qV=1,Kle=(0,FV.default)(Gl.argv),cT=Kle.HDB_LEADER_URL??Gl.env.HDB_LEADER_URL,BC=new Map,lc=new Map,lT=!0,NV=300,Yle=2,CV=3e4;o(fT,"createWebSocket");OV=500,jd=class extends xC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=OV;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??Si(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await fT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Gl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),le[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=OV,this.nodeSubscriptions&&Fl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=mh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(le.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?le.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):le.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&Kd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();le.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(mh,"replicateOverWS")});function ph(e){return e===KV||e===Wle}function zle(e){return e===YV||e===WV}function kC(e){return e===KV?YV:WV}function jle(){if(VV)return;VV=!0;let e=ql.CryptoEngine.prototype,t=ql.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return ph(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return ph(s)?{name:kC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return zle(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=ql.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(ph(i)){let a=kC(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),a,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(ph(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new hh.X509Certificate(Buffer.from(i)),l=new hh.X509Certificate(Buffer.from(a));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,a]=n,c=a.algorithm.algorithmId;if(ph(c)){let l=kC(c);try{let u=this.crypto?.subtle||this.subtle||ql.getCrypto(!0)?.subtle||hh.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",a.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var ql,hh,KV,Wle,YV,WV,VV,zV=se(()=>{ql=b(require("pkijs")),hh=require("node:crypto"),KV="1.3.101.112",Wle="1.3.101.113",YV="Ed25519",WV="Ed448",VV=!1;o(ph,"isEd25519OrEd448");o(zle,"isEdDSAAlgorithmName");o(kC,"getEdDSAAlgorithmName");o(jle,"applyEd25519Patch");jle()});function Qle(){return pT||(pT=Ze({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),pT.sourcedFrom(HC)),pT}function Jle(e){if(ht.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return ht.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return ht.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function Qd(e,t){ht.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=Jle(t);if(r===!1)return ht.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=eue(e);return ht.trace?.("Certificate chain length:",n.length),n.length===1&&!n[0].issuer?(ht.debug?.("Certificate without issuer - cannot perform OCSP check"),{valid:!0,status:"no-issuer-cert",method:"disabled"}):n.length<2||!n[0].issuer?(ht.debug?.("Certificate chain too short for revocation checking"),{valid:!0,status:"insufficient-chain",method:"disabled"}):Xle(n[0].cert,n[0].issuer,r)}async function Xle(e,t,r){ht.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=jV(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=jV(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,QV.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;ht.trace?.("OCSP cache key:",i);let c=await Qle().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??ea.failureMode)==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(ht.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();if(ht.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),l.status==="unknown"&&u&&(l.reason==="ocsp-error"||l.reason==="timeout"||l.reason==="OCSP timeout")){let m=(r?.failureMode??ea.failureMode)==="fail-closed";return m||ht.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!m,status:m?l.status:"error-allowed",cached:!u,method:l.method||"ocsp"}}return{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(n){return ht.error?.("OCSP verification error:",n),(r?.failureMode??ea.failureMode)==="fail-closed"?{valid:!1,status:"error",error:n.message,method:"ocsp"}:(ht.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Zle(e,t,r){ht.trace?.("Performing OCSP check with timeout:",r);try{(0,hT.getCertURLs)(e)}catch(n){return ht.debug?.("Certificate does not contain OCSP URL:",n.message),{status:"unknown",reason:"no-ocsp-url"}}try{let n=await(0,hT.getCertStatus)(e,{ca:t,timeout:r});switch(ht.debug?.("OCSP response:",n.status),n.status){case"good":return{status:"good"};case"revoked":return{status:"revoked",reason:n.revocationReason?.toString()||"unspecified"};default:return{status:"unknown",reason:"unknown-status"}}}catch(n){let s=n;return ht.debug?.("OCSP check failed:",s.message),{status:"unknown",reason:s.name==="AbortError"?"timeout":"ocsp-error"}}}function jV(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
|
|
19
|
-
`)}function eue(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}var hT,QV,JV,ht,HC,ea,pT,ET=se(()=>{zV();hT=require("easy-ocsp"),QV=require("node:crypto"),JV=b(es());we();$a();ht=(0,JV.loggerWithTag)("cert-verification"),HC=class extends Hr{static{o(this,"CertificateVerificationSource")}async get(t){ht.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;ht.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??ea.timeout,l=await Promise.race([Zle(s,i,c),new Promise((m,p)=>setTimeout(()=>p(new Error("OCSP timeout")),c))]);if(ht.debug?.("OCSP check result:",l),l.status==="unknown"&&(l.reason==="ocsp-error"||l.reason==="timeout"||l.reason==="no-ocsp-url")){let m=a?.failureMode??ea.failureMode;if(ht.error?.("OCSP check failed:",l.reason),m==="fail-closed"){let p=a?.errorCacheTtl??ea.errorCacheTtl,h=Date.now()+p;return r&&(r.expiresAt=h),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:h,method:"ocsp"}}else return ht.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null}let d=a?.cacheTtl??ea.cacheTtl,f=Date.now()+d;return r&&(r.expiresAt=f),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:f,method:"ocsp"}}catch(c){if(ht.error?.("OCSP verification error:",c),(a?.failureMode??ea.failureMode)==="fail-closed"){let u=a?.errorCacheTtl??ea.errorCacheTtl,d=Date.now()+u;return r&&(r.expiresAt=d),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:d,method:"ocsp"}}return ht.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null}}},ea={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-open"};o(Qle,"getCertificateCacheTable");o(Jle,"getCertificateVerificationConfig");o(Qd,"verifyCertificate");o(Xle,"verifyOCSP");o(Zle,"performOCSPCheck");o(jV,"bufferToPem");o(eue,"extractCertificateChain")});var Xo={};Re(Xo,{clearThisNodeName:()=>lue,disableReplication:()=>sue,enabledDatabases:()=>cc,forEachReplicatedDatabase:()=>nc,getThisNodeId:()=>mT,getThisNodeName:()=>it,getThisNodeUrl:()=>sc,hostnameToUrl:()=>TT,lastTimeInAuditStore:()=>sh,monitorNodeCAs:()=>o1,replicateOperation:()=>due,replicationCertificateAuthorities:()=>Zo,sendOperationToNode:()=>Eh,servers:()=>rue,setReplicator:()=>c1,start:()=>nue,startOnMainThread:()=>hC,subscribeToNode:()=>ch,unsubscribeFromNode:()=>ZS,urlToNodeName:()=>Si});function nue(e){if(!e.port&&!e.securePort&&(e.port=$s.default.get(F.OPERATIONSAPI_NETWORK_PORT),e.securePort=$s.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),!it())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of oh(e))t.set(Si(s.url),s);iue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=ve.ws(async(s,i,a,c)=>{if(It.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),mh(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,ve.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=jt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,s1.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await Qd(s.peerCertificate,e);if(!u.valid){It.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else It.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:It.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(Zo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=ST.createSecureContext(u)}catch(l){It.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),$s.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1&&i()}o1(()=>{for(let s of n)s()})}function o1(e){let t=0;qd(r=>{r?.ca&&(Zo.add(r.ca),Zo.size!==t&&(t=Zo.size,e?.()))})}function sue(e=!0){i1=e}function iue(e){i1||(at(),cc=e.databases,nc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||lc;for(let[s,i]of gT){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];c1(r,s,e),BC.get(s)?.forEach(i=>i(s))}}))}function c1(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class a1 extends Hr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||lc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(It.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Zn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===ve.hostname)continue;let E=aue(h,a1.subscription,e);if(E?.isConnected){let g=Gd(t.auditStore,e,h)[dT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new r1.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:tue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",$l,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function oue(e,t,r,n,s){let i=gT.get(e);i||gT.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new jd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function aue(e,t,r){let n=XV.get($l);n||(n=new Map,XV.set($l,n));let s=n.get(r);if(s)return s;let i=jt().primaryStore.get(e);return i?.url&&(s=new jd(i.url,t,r,$l,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Eh(e,t,r){r||(r={}),r.serverName=e.name;let n=await fT(e.url,r),s=mh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function ch(e){try{n1.isMainThread&&It.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=lc.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,lc.set(e.database,t)}let r=oue(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>ih(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function ZS({name:e,url:t,database:r}){It.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(jt().primaryStore.getRange({})));let n=gT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function cue(){if(GC!==void 0)return GC;let e=$s.default.get(F.OPERATIONSAPI_TLS_CERTIFICATE)||$s.default.get(F.TLS_CERTIFICATE);if(e)return GC=new e1.X509Certificate((0,t1.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return $l||($l=$s.default.get("replication_hostname")??Si($s.default.get("replication_url"))??cue()??ZV("operationsapi_network_secureport")??ZV("operationsapi_network_port")??"127.0.0.1")}function lue(){$l=void 0}function ZV(e){let t=$s.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function _T(e){let t=$s.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function mT(e){return nh(e)?.[it()]}function sc(){let e=$s.default.get("replication_url");return e||TT(it())}function TT(e){let t=_T("replication_port");if(t)return`ws://${e}:${t}`;if(t=_T("replication_secureport"),t)return`wss://${e}:${t}`;if(t=_T("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=_T("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Si(e){if(e)return new URL(e).hostname}function nc(e,t){for(let n of Object.getOwnPropertyNames(De))r(n);return Hp(n=>{r(n)}),Ll((n,s)=>{r(n.databaseName)});function r(n){let s=De[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):uue(n)&&t(s,n,!1)}o(r,"forDatabase")}function uue(e){let t=De[e];for(let r in t)if(t[r].replicate)return!0}function sh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function due(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",ve.nodes.map(n=>n.name));let r=await Promise.allSettled(ve.nodes.map(n=>Eh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=ve.nodes[s]?.name,i})}return t}var $s,It,e1,t1,ST,r1,n1,s1,i1,tue,rue,Zo,cc,gT,XV,GC,$l,ps=se(()=>{we();$a();Pu();FC();Fr();$s=b(me()),It=b(Q()),e1=require("crypto");ET();t1=require("fs");lh();$d();q();pC();ST=b(require("node:tls")),r1=b(_e()),n1=require("worker_threads"),s1=b(Es()),tue=1,rue=[],Zo=$s.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(ST.rootCertificates):new Set;o(nue,"start");o(o1,"monitorNodeCAs");o(sue,"disableReplication");o(iue,"assignReplicationSource");o(c1,"setReplicator");gT=new Map;o(oue,"getSubscriptionConnection");XV=new Map;o(aue,"getRetrievalConnectionByName");o(Eh,"sendOperationToNode");o(ch,"subscribeToNode");o(ZS,"unsubscribeFromNode");o(cue,"getCommonNameFromCert");o(it,"getThisNodeName");o(lue,"clearThisNodeName");Object.defineProperty(ve,"hostname",{get(){return it()}});o(ZV,"getHostFromListeningPort");o(_T,"getPortFromListeningPort");o(mT,"getThisNodeId");ve.replication={getThisNodeId:mT,exportIdMapping:nh};o(sc,"getThisNodeUrl");o(TT,"hostnameToUrl");o(Si,"urlToNodeName");o(nc,"forEachReplicatedDatabase");o(uue,"hasExplicitlyReplicatedTable");o(sh,"lastTimeInAuditStore");o(due,"replicateOperation")});var IT=v((b0e,m1)=>{"use strict";var Jd=c$(),{validateBySchema:_h}=ft(),{commonValidators:Xd,schemaRegex:qC}=Wi(),_r=require("joi"),fue=Q(),mue=require("uuid").v4,bT=$o(),Zd=(q(),M(z)),pue=require("util"),uc=ls(),{handleHDBError:ta,hdbErrors:hue,ClientError:Vl}=_e(),{HDB_ERROR_MSGS:yT,HTTP_STATUS_CODES:ra}=hue,{SchemaEventMsg:AT}=os(),l1=hr(),{getDatabases:Eue}=(we(),M(mt)),{transformReq:ef}=oe(),{replicateOperation:u1}=(ps(),M(Xo)),{cleanupOrphans:_ue}=(ts(),M(v_)),RT=_r.string().min(1).max(Xd.schema_length.maximum).pattern(qC).messages({"string.pattern.base":"{:#label} "+Xd.schema_format.message}),gue=_r.string().min(1).max(Xd.schema_length.maximum).pattern(qC).messages({"string.pattern.base":"{:#label} "+Xd.schema_format.message}).required(),Sue=_r.string().min(1).max(Xd.schema_length.maximum).pattern(qC).messages({"string.pattern.base":"{:#label} "+Xd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();m1.exports={createSchema:Tue,createSchemaStructure:d1,createTable:yue,createTableStructure:f1,createAttribute:wue,dropSchema:Rue,dropTable:bue,dropAttribute:Aue,getBackup:Nue,cleanupOrphanBlobs:Cue};async function Tue(e){let t=await d1(e);return bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema)),t}o(Tue,"createSchema");async function d1(e){let t=_h(e,_r.object({database:RT,schema:RT}));if(t)throw new Vl(t.message);if(ef(e),!await Jd.checkSchemaExists(e.schema))throw ta(new Error,yT.SCHEMA_EXISTS_ERR(e.schema),ra.BAD_REQUEST,Zd.LOG_LEVELS.ERROR,yT.SCHEMA_EXISTS_ERR(e.schema),!0);return await uc.createSchema(e),`database '${e.schema}' successfully created`}o(d1,"createSchemaStructure");async function yue(e){return ef(e),e.hash_attribute=e.primary_key??e.hash_attribute,await f1(e)}o(yue,"createTable");async function f1(e){let t=_h(e,_r.object({database:RT,schema:RT,table:gue,residence:_r.array().items(_r.string().min(1)).optional(),hash_attribute:Sue}));if(t)throw new Vl(t.message);if(!await Jd.checkSchemaTableExists(e.schema,e.table))throw ta(new Error,yT.TABLE_EXISTS_ERR(e.schema,e.table),ra.BAD_REQUEST,Zd.LOG_LEVELS.ERROR,yT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:mue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await uc.createTable(n,e);else throw ta(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ra.BAD_REQUEST);else await uc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(f1,"createTableStructure");async function Rue(e){let t=_h(e,_r.object({database:_r.string(),schema:_r.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Vl(t.message);ef(e);let r=await Jd.checkSchemaExists(e.schema);if(r)throw ta(new Error,r,ra.NOT_FOUND,Zd.LOG_LEVELS.ERROR,r,!0);let n=await Jd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await uc.dropSchema(e),bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema)),await l1.purgeSchemaTableStreams(e.schema,s);let i=await u1(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Rue,"dropSchema");async function bue(e){let t=_h(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required()}));if(t)throw new Vl(t.message);ef(e);let r=await Jd.checkSchemaTableExists(e.schema,e.table);if(r)throw ta(new Error,r,ra.NOT_FOUND,Zd.LOG_LEVELS.ERROR,r,!0);await uc.dropTable(e),await l1.purgeTableStream(e.schema,e.table);let n=await u1(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(bue,"dropTable");async function Aue(e){let t=_h(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required(),attribute:_r.string().required()}));if(t)throw new Vl(t.message);ef(e);let r=await Jd.checkSchemaTableExists(e.schema,e.table);if(r)throw ta(new Error,r,ra.NOT_FOUND,Zd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ta(new Error,"You cannot drop a hash attribute",ra.BAD_REQUEST,void 0,void 0,!0);if(Zd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ta(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ra.BAD_REQUEST,void 0,void 0,!0);try{return await uc.dropAttribute(e),Iue(e),bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw fue.error(`Got an error deleting attribute ${pue.inspect(e)}.`),n}}o(Aue,"dropAttribute");function Iue(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(Iue,"dropAttributeFromGlobal");async function wue(e){ef(e);let t=Eue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw ta(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ra.BAD_REQUEST,void 0,void 0,!0);return await uc.createAttribute(e),bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(wue,"createAttribute");function Nue(e){return uc.getBackup(e)}o(Nue,"getBackup");function Cue(e){if(!e.database)throw new Vl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Vl(`Unknown database '${e.database}'`);return _ue(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(Cue,"cleanupOrphanBlobs")});var h1=v((I0e,p1)=>{"use strict";var{OPERATIONS_ENUM:Oue}=(q(),M(z)),$C=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Oue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};p1.exports=$C});var VC=v((C0e,T1)=>{"use strict";var Pue=ls(),N0e=h1(),wT=oe(),NT=(q(),M(z)),Lue=me(),{handleHDBError:E1,hdbErrors:Due}=_e(),{HDB_ERROR_MSGS:_1,HTTP_STATUS_CODES:g1}=Due,Mue=Object.values(NT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),S1="To use this operation audit log must be enabled in harperdb-config.yaml";T1.exports=vue;async function vue(e){if(wT.isEmpty(e.schema))throw new Error(_1.SCHEMA_REQUIRED_ERR);if(wT.isEmpty(e.table))throw new Error(_1.TABLE_REQUIRED_ERR);if(!Lue.get(NT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw E1(new Error,S1,g1.BAD_REQUEST,NT.LOG_LEVELS.ERROR,S1,!0);let t=wT.checkSchemaTableExist(e.schema,e.table);if(t)throw E1(new Error,t,g1.NOT_FOUND,NT.LOG_LEVELS.ERROR,t,!0);if(!wT.isEmpty(e.search_type)&&Mue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Pue.readAuditLog(e)}o(vue,"readAuditLog")});var R1=v((P0e,y1)=>{"use strict";var{OPERATIONS_ENUM:Uue}=(q(),M(z)),KC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Uue.GET_BACKUP,this.schema=t,this.table=r}};y1.exports=KC});var I1=v((v0e,A1)=>{"use strict";var xue=ls(),D0e=R1(),YC=oe(),Bue=(q(),M(z)),M0e=me(),{handleHDBError:Fue,hdbErrors:kue}=_e(),{HDB_ERROR_MSGS:b1,HTTP_STATUS_CODES:Hue}=kue;A1.exports=Gue;async function Gue(e){if(YC.isEmpty(e.schema))throw new Error(b1.SCHEMA_REQUIRED_ERR);if(YC.isEmpty(e.table))throw new Error(b1.TABLE_REQUIRED_ERR);let t=YC.checkSchemaTableExist(e.schema,e.table);if(t)throw Fue(new Error,t,Hue.NOT_FOUND,Bue.LOG_LEVELS.ERROR,t,!0);return await xue.getBackup(readAuditLogObject)}o(Gue,"getBackup")});var O1=v((x0e,C1)=>{"use strict";var que=me(),dc=require("joi"),$ue=ft(),w1=require("moment"),Vue=require("fs-extra"),WC=require("path"),Kue=require("lodash"),gh=(q(),M(z)),{LOG_LEVELS:Kl}=(q(),M(z)),Yue="YYYY-MM-DD hh:mm:ss",Wue=WC.resolve(__dirname,"../logs");C1.exports=function(e){return $ue.validateBySchema(e,zue)};var zue=dc.object({from:dc.custom(N1),until:dc.custom(N1),level:dc.valid(Kl.NOTIFY,Kl.FATAL,Kl.ERROR,Kl.WARN,Kl.INFO,Kl.DEBUG,Kl.TRACE),order:dc.valid("asc","desc"),limit:dc.number().min(1),start:dc.number().min(0),log_name:dc.custom(jue)});function N1(e,t){if(w1(e,w1.ISO_8601).format(Yue)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(N1,"validateDatetime");function jue(e,t){if(Kue.invert(gh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=que.get(gh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?gh.LOG_NAMES.HDB:e,i=s===gh.LOG_NAMES.INSTALL?WC.join(Wue,gh.LOG_NAMES.INSTALL):WC.join(n,s);return Vue.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(jue,"validateReadLogPath")});var jC=v((F0e,L1)=>{"use strict";var CT=(q(),M(z)),Que=Q(),Jue=me(),Xue=O1(),zC=require("path"),P1=require("fs-extra"),{once:Zue}=require("events"),{handleHDBError:ede,hdbErrors:tde}=_e(),{PACKAGE_ROOT:rde}=Ct(),{replicateOperation:nde}=(ps(),M(Xo)),sde=zC.join(rde,"logs"),ide=1e3,ode=200;L1.exports=ade;async function ade(e){let t=Xue(e);if(t)throw ede(t,t.message,tde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=nde(e),n=Jue.get(CT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?CT.LOG_NAMES.HDB:e.log_name,i=s===CT.LOG_NAMES.INSTALL?zC.join(sde,CT.LOG_NAMES.INSTALL):zC.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?ide:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(P1.statSync(i).size-(E+5)*ode,0));let R=P1.createReadStream(i,{start:g});R.on("error",G=>{Que.error(G)});let S=0,y=[],C="",I;R.on("data",G=>{let H=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=C+G;let X=0,W;for(;(W=H.exec(G))&&!R.destroyed;){I&&(I.message=G.slice(X,W.index),k(I));let[ue,ce,te]=W,ye=te.split("] ["),Ae=ye[0],Ye=ye[1];ye.splice(0,2),I={timestamp:ce,thread:Ae,level:Ye,tags:ye,message:""},X=W.index+ue.length}C=G.slice(X)}),R.on("end",G=>{R.destroyed||I&&(I.message=C.trim(),k(I))}),R.resume();function k(G){let H,X,W;switch(!0){case(a&&l&&d):H=new Date(G.timestamp),X=new Date(u),W=new Date(f),G.level===c&&H>=X&&H<=W&&S<h?S++:G.level===c&&H>=X&&H<=W&&(lo(G,p,y),S++,S===E&&R.destroy());break;case(a&&l):H=new Date(G.timestamp),X=new Date(u),G.level===c&&H>=X&&S<h?S++:G.level===c&&H>=X&&(lo(G,p,y),S++,S===E&&R.destroy());break;case(a&&d):H=new Date(G.timestamp),W=new Date(f),G.level===c&&H<=W&&S<h?S++:G.level===c&&H<=W&&(lo(G,p,y),S++,S===E&&R.destroy());break;case(l&&d):H=new Date(G.timestamp),X=new Date(u),W=new Date(f),H>=X&&H<=W&&S<h?S++:H>=X&&H<=W&&(lo(G,p,y),S++,S===E&&R.destroy());break;case a:G.level===c&&S<h?S++:G.level===c&&(lo(G,p,y),S++,S===E&&R.destroy());break;case l:H=new Date(G.timestamp),X=new Date(u),H>=X&&S<h?S++:H>=X&&S>=h&&(lo(G,p,y),S++,S===E&&R.destroy());break;case d:H=new Date(G.timestamp),W=new Date(f),H<=W&&S<h?S++:H<=W&&S>=h&&(lo(G,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(lo(G,p,y),S++,S===E&&R.destroy())}}o(k,"onLogMessage"),await Zue(R,"close");let J=await r;if(J.replicated){for(let G of y)G.node=server.hostname;for(let G of J.replicated){let H=G.node;if(G.status==="failed")lo({timestamp:new Date().toISOString(),level:"error",node:H,message:`Error retrieving logs: ${G.reason}`},p,y);else for(let X of G.results)X.node=H,lo(X,p,y)}}return y}o(ade,"readLog");function lo(e,t,r){t==="desc"?cde(e,r):t==="asc"?lde(e,r):r.push(e)}o(lo,"pushLineToResult");function cde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(cde,"insertDescending");function lde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(lde,"insertAscending")});var OT=v((V0e,U1)=>{"use strict";var QC=require("joi"),{string:tf,boolean:D1,date:ude}=QC.types(),dde=ft(),{validateSchemaExists:H0e,validateTableExists:G0e,validateSchemaName:q0e}=Wi(),fde=(q(),M(z)),mde=Pt(),M1=me();M1.initSync();var $0e=tf.invalid(M1.get(fde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(mde.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),v1={operation:tf.valid("add_node","update_node","set_node_replication"),node_name:tf.optional(),subscriptions:QC.array().items({table:tf.optional(),schema:tf.optional(),database:tf.optional(),subscribe:D1.required(),publish:D1.required().custom(hde),start_time:ude.iso()})};function pde(e){return dde.validateBySchema(e,QC.object(v1))}o(pde,"addUpdateNodeValidator");function hde(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(hde,"checkForFalsy");U1.exports={addUpdateNodeValidator:pde,validationSchema:v1}});var rf=v((Y0e,x1)=>{"use strict";var JC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},XC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};x1.exports={Node:JC,NodeSubscription:XC}});var F1=v((z0e,B1)=>{"use strict";var Ede=(q(),M(z)).OPERATIONS_ENUM,ZC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Ede.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};B1.exports=ZC});var Sh=v((Q0e,k1)=>{"use strict";var eO=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},tO=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};k1.exports={RemotePayloadObject:eO,RemotePayloadSubscription:tO}});var G1=v((X0e,H1)=>{"use strict";var rO=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};H1.exports=rO});var $1=v((sxe,q1)=>{"use strict";var _de=G1(),exe=Yt(),txe=St(),gde=Q(),{getSchemaPath:rxe,getTransactionAuditStorePath:nxe}=Rt(),{getDatabases:Sde}=(we(),M(mt));q1.exports=Tde;async function Tde(e){let t=new _de;try{let r=Sde()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){gde.warn(`unable to stat table dbi due to ${r}`)}return t}o(Tde,"lmdbGetTableSize")});var K1=v((oxe,V1)=>{"use strict";var nO=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};V1.exports=nO});var yh=v((fxe,j1)=>{"use strict";var yde=require("fs-extra"),Rde=require("path"),Rn=require("systeminformation"),fc=Q(),Y1=hr(),cxe=Pt(),nf=(q(),M(z)),bde=$1(),Ade=Ml(),{getThreadInfo:W1}=nt(),Th=me();Th.initSync();var Ide=K1(),{openEnvironment:lxe}=St(),{getSchemaPath:uxe}=Rt(),{database:dxe,databases:sO}=(we(),M(mt)),PT;j1.exports={getHDBProcessInfo:cO,getNetworkInfo:uO,getDiskInfo:lO,getMemoryInfo:aO,getCPUInfo:oO,getTimeInfo:iO,getSystemInformation:dO,systemInformation:wde,getTableSize:fO,getMetrics:mO};function iO(){return Rn.time()}o(iO,"getTimeInfo");async function oO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await Rn.cpu();d.cpu_speed=await Rn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:R,...S}=await Rn.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:C,rawLoadIdle:I,rawLoadIrq:k,rawLoadNice:J,rawLoadSystem:G,rawLoadUser:H,...X}=y;S.cpus.push(X)}),d.current_load=S,d}catch(e){return fc.error(`error in getCPUInfo: ${e}`),{}}}o(oO,"getCPUInfo");async function aO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Rn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return fc.error(`error in getMemoryInfo: ${e}`),{}}}o(aO,"getMemoryInfo");async function cO(){let e={core:[],clustering:[]};try{let t=await Rn.processes(),r;try{r=Number.parseInt(await yde.readFile(Rde.join(Th.get(nf.CONFIG_PARAMS.ROOTPATH),nf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===nf.NODE_ERROR_CODES.ENOENT)fc.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return fc.error(`error in getHDBProcessInfo: ${t}`),e}}o(cO,"getHDBProcessInfo");async function lO(){let e={};try{if(!Th.get(nf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Rn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await Rn.fsStats();return e.read_write=u,e.size=await Rn.fsSize(),e}catch(t){return fc.error(`error in getDiskInfo: ${t}`),e}}o(lO,"getDiskInfo");async function uO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Th.get(nf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Rn.networkInterfaceDefault(),e.latency=await Rn.inetChecksite("google.com"),(await Rn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await Rn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return fc.error(`error in getNetworkInfo: ${t}`),e}}o(uO,"getNetworkInfo");async function dO(){if(PT!==void 0)return PT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await Rn.osInfo();e=c;let l=await Rn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,PT=e,PT}catch(t){return fc.error(`error in getSystemInformation: ${t}`),e}}o(dO,"getSystemInformation");async function fO(){let e=[],t=await Ade.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await bde(n));return e}o(fO,"getTableSize");async function mO(){let e={};for(let t in sO){let r=e[t]={},n=r.tables={};for(let s in sO[t])try{let i=sO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){fc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(mO,"getMetrics");async function z1(){if(Th.get(nf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Y1.getNATSReferences(),t=await Y1.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(z1,"getNatsStreamInfo");async function wde(e){let t=new Ide;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await dO(),t.time=iO(),t.cpu=await oO(),t.memory=await aO(),t.disk=await lO(),t.network=await uO(),t.harperdb_processes=await cO(),t.table_size=await fO(),t.metrics=await mO(),t.threads=await W1(),t.replication=await z1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await dO();break;case"time":t.time=iO();break;case"cpu":t.cpu=await oO();break;case"memory":t.memory=await aO();break;case"disk":t.disk=await lO();break;case"network":t.network=await uO();break;case"harperdb_processes":t.harperdb_processes=await cO();break;case"table_size":t.table_size=await fO();break;case"database_metrics":case"metrics":t.metrics=await mO();break;case"threads":t.threads=await W1();break;case"replication":t.replication=await z1();break;default:break}return t}o(wde,"systemInformation")});var uo=v((_xe,Z1)=>{"use strict";var Nde=Gn(),pO=oe(),Cde=require("util"),Yl=(q(),M(z)),Q1=me();Q1.initSync();var Ode=UN(),J1=_n(),{Node:pxe,NodeSubscription:hxe}=rf(),Pde=nd(),Lde=F1(),{RemotePayloadObject:Dde,RemotePayloadSubscription:Mde}=Sh(),{handleHDBError:vde,hdbErrors:Ude}=_e(),{HTTP_STATUS_CODES:xde,HDB_ERROR_MSGS:Bde}=Ude,Fde=di(),kde=yh(),{packageJson:Hde}=Ct(),{getDatabases:Gde}=(we(),M(mt)),Exe=Cde.promisify(Ode.authorize),qde=J1.searchByHash,$de=J1.searchByValue;Z1.exports={isEmpty:Vde,getNodeRecord:Kde,upsertNodeRecord:Yde,buildNodePayloads:Wde,checkClusteringEnabled:zde,getAllNodeRecords:jde,getSystemInfo:Qde,reverseSubscription:X1};function Vde(e){return e==null}o(Vde,"isEmpty");async function Kde(e){let t=new Pde(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return qde(t)}o(Kde,"getNodeRecord");async function Yde(e){let t=new Lde(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Nde.upsert(t)}o(Yde,"upsertNodeRecord");function X1(e){if(pO.isEmpty(e.subscribe)||pO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(X1,"reverseSubscription");function Wde(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=pO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=X1(c),p=Gde()[l]?.[u],h=new Mde(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Dde(r,t,s,n)}o(Wde,"buildNodePayloads");function zde(){if(!Q1.get(Yl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vde(new Error,Bde.CLUSTERING_NOT_ENABLED,xde.BAD_REQUEST,void 0,void 0,!0)}o(zde,"checkClusteringEnabled");async function jde(){let e=new Fde(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await $de(e))}o(jde,"getAllNodeRecords");async function Qde(){let e=await kde.getSystemInformation();return{hdb_version:Hde.version,node_version:e.node_version,platform:e.platform}}o(Qde,"getSystemInfo")});var hO=v((Sxe,aK)=>{"use strict";var LT=hr(),eK=oe(),tK=Pt(),rK=(q(),M(z)),DT=Q(),nK=IT(),Jde=cp(),{RemotePayloadObject:Xde}=Sh(),{handleHDBError:sK,hdbErrors:Zde}=_e(),{HTTP_STATUS_CODES:iK}=Zde,{NodeSubscription:oK}=rf();aK.exports=efe;async function efe(e,t){let r;try{r=await LT.request(`${t}.${tK.REQUEST_SUFFIX}`,new Xde(rK.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),DT.trace("Response from remote describe all request:",r)}catch(a){DT.error(`addNode received error from describe all request to remote node: ${a}`);let c=LT.requestErrorHandler(a,"add_node",t);throw sK(new Error,c,iK.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===tK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw sK(new Error,a,iK.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===rK.SYSTEM_SCHEMA_NAME){await LT.createLocalTableStream(l,c);let h=new oK(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=eK.doesSchemaExist(l),d=n[l]!==void 0,f=c?eK.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(DT.trace(`addNode creating schema: ${l}`),await nK.createSchema({operation:"create_schema",schema:l})),!f&&m){DT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Jde(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await nK.createTable(h)}await LT.createLocalTableStream(l,c);let p=new oK(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(efe,"reviewSubscriptions")});var sf={};Re(sf,{addNodeBack:()=>EO,removeNodeBack:()=>_O,setNode:()=>sfe});async function sfe(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Si(t)):t=TT(r);let n=(0,lK.validateBySchema)(e,nfe);if(n)throw(0,na.handleHDBError)(n,n.message,rfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new na.ClientError("url or hostname is required for remove_node operation");let p=r,h=jt(),E=await h.get(p);if(!E)throw new na.ClientError(p+" does not exist");try{await Eh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){_s.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new na.ClientError("url required for this operation");let s=sc();if(s==null)throw new na.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Vs.getReplicationCert)();let p=await(0,Vs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Vs.createCsr)(),_s.info("Sending CSR to target node:",t)):p&&(c=p.certificate,_s.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,pc.get)(F.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,pc.get)(F.REPLICATION_SHARD)!==void 0&&(l.shard=(0,pc.get)(F.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(cK):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=cK(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Eh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,_s.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(_s.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Vs.setCertTable)({name:tfe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Vs.setCertTable)({name:it(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,pc.get)(F.REPLICATION_SHARD)!==void 0&&(p.shard=(0,pc.get)(F.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Qo(it(),p)}await Qo(u?u.nodeName:f.name??Si(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function EO(e){_s.trace("addNodeBack received request:",e);let t=await(0,Vs.signCertificate)(e),r;e.csr?(r=t.signingCA,_s.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,_s.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Vs.getReplicationCertAuth)();if(n.replicates){let i={url:sc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,pc.get)(F.REPLICATION_SHARD)!==void 0&&(i.shard=(0,pc.get)(F.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Qo(it(),i)}return await Qo(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,_s.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function _O(e){_s.trace("removeNodeBack received request:",e),await jt().delete(e.name)}function cK(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Vs,lK,mc,pc,_s,na,tfe,rfe,nfe,of=se(()=>{Vs=b(Es()),lK=b(ft()),mc=b(require("joi")),pc=b(me());q();lh();$d();ps();_s=b(Q()),na=b(_e()),{pki:tfe}=require("node-forge"),{HTTP_STATUS_CODES:rfe}=na.hdbErrors,nfe=mc.default.object({hostname:mc.default.string(),verify_tls:mc.default.boolean(),replicates:mc.default.boolean(),subscriptions:mc.default.array(),revoked_certificates:mc.default.array(),shard:mc.default.number()});o(sfe,"setNode");o(EO,"addNodeBack");o(_O,"removeNodeBack");o(cK,"reverseSubscription")});var Ah=v((Cxe,dK)=>{"use strict";var{handleHDBError:MT,hdbErrors:ife}=_e(),{HTTP_STATUS_CODES:vT}=ife,{addUpdateNodeValidator:ofe}=OT(),UT=Q(),xT=(q(),M(z)),uK=Pt(),afe=oe(),Rh=hr(),bh=uo(),gO=me(),cfe=hO(),{Node:lfe,NodeSubscription:ufe}=rf(),{broadcast:dfe}=nt(),{setNode:ffe}=(of(),M(sf)),wxe=me(),Nxe=(q(),M(z)),mfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",pfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hfe=gO.get(xT.CONFIG_PARAMS.CLUSTERING_NODENAME);dK.exports=Efe;async function Efe(e,t=!1){if(UT.trace("addNode called with:",e),gO.get(xT.CONFIG_PARAMS.REPLICATION_URL)||gO.get(xT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ffe(e);bh.checkClusteringEnabled();let r=ofe(e);if(r)throw MT(r,r.message,vT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await bh.getNodeRecord(n);if(!afe.isEmptyOrZeroLength(f))throw MT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,vT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await cfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=mfe,a;let c=bh.buildNodePayloads(s,hfe,xT.OPERATIONS_ENUM.ADD_NODE,await bh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new ufe(p.schema,p.table,p.publish,p.subscribe))}UT.trace("addNode sending remote payload:",c);let u;try{u=await Rh.request(`${n}.${uK.REQUEST_SUFFIX}`,c)}catch(f){UT.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await Rh.updateRemoteConsumer(E,n)}let m=Rh.requestErrorHandler(f,"add_node",n);throw MT(new Error,m,vT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===uK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw MT(new Error,f,vT.INTERNAL_SERVER_ERROR,"error",f)}UT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await Rh.updateRemoteConsumer(p,n),p.subscribe===!0&&await Rh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new lfe(n,l,u.system_info);return await bh.upsertNodeRecord(d),dfe({type:"nats_update"}),i.length>0?a.message=pfe:a.message=`Successfully added '${n}' to manifest`,a}o(Efe,"addNode")});var RO=v((Lxe,mK)=>{"use strict";var{handleHDBError:SO,hdbErrors:_fe}=_e(),{HTTP_STATUS_CODES:TO}=_fe,{addUpdateNodeValidator:gfe}=OT(),Ih=Q(),BT=(q(),M(z)),fK=Pt(),Pxe=oe(),wh=hr(),Nh=uo(),yO=me(),{cloneDeep:Sfe}=require("lodash"),Tfe=hO(),{Node:yfe,NodeSubscription:Rfe}=rf(),{broadcast:bfe}=nt(),{setNode:Afe}=(of(),M(sf)),Ife="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",wfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Nfe=yO.get(BT.CONFIG_PARAMS.CLUSTERING_NODENAME);mK.exports=Cfe;async function Cfe(e){if(Ih.trace("updateNode called with:",e),yO.get(BT.CONFIG_PARAMS.REPLICATION_URL)??yO.get(BT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Afe(e);Nh.checkClusteringEnabled();let t=gfe(e);if(t)throw SO(t,t.message,TO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Nh.getNodeRecord(r);s.length>0&&(n=Sfe(s));let{added:i,skipped:a}=await Tfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Ife,c;let l=Nh.buildNodePayloads(i,Nfe,BT.OPERATIONS_ENUM.UPDATE_NODE,await Nh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Ih.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Ih.trace("updateNode sending remote payload:",l);let u;try{u=await wh.request(`${r}.${fK.REQUEST_SUFFIX}`,l)}catch(d){Ih.error(`updateNode received error from request: ${d}`);let f=wh.requestErrorHandler(d,"update_node",r);throw SO(new Error,f,TO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===fK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw SO(new Error,d,TO.INTERNAL_SERVER_ERROR,"error",d)}Ih.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await wh.updateRemoteConsumer(m,r),m.subscribe===!0?await wh.updateConsumerIterator(m.schema,m.table,r,"start"):await wh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new yfe(r,[],u.system_info)]),await Ofe(n[0],i,u.system_info),a.length>0?c.message=wfe:c.message=`Successfully updated '${r}'`,c}o(Cfe,"updateNode");async function Ofe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new Rfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Nh.upsertNodeRecord(n),bfe({type:"nats_update"})}o(Ofe,"updateNodeTable")});var gK=v((Mxe,_K)=>{"use strict";var EK=require("joi"),{string:pK}=EK.types(),Pfe=ft(),hK=(q(),M(z)),Lfe=me(),Dfe=Pt();_K.exports=Mfe;function Mfe(e){let t=pK.invalid(Lfe.get(hK.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Dfe.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=EK.object({operation:pK.valid(hK.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Pfe.validateBySchema(e,r)}o(Mfe,"removeNodeValidator")});var Oh=v((Uxe,bK)=>{"use strict";var{handleHDBError:SK,hdbErrors:vfe}=_e(),{HTTP_STATUS_CODES:TK}=vfe,Ufe=gK(),Ch=Q(),yK=uo(),xfe=oe(),af=(q(),M(z)),RK=Pt(),bO=hr(),AO=me(),{RemotePayloadObject:Bfe}=Sh(),{NodeSubscription:Ffe}=rf(),kfe=ap(),Hfe=bl(),{broadcast:Gfe}=nt(),{setNode:qfe}=(of(),M(sf)),$fe=AO.get(af.CONFIG_PARAMS.CLUSTERING_NODENAME);bK.exports=Vfe;async function Vfe(e){if(Ch.trace("removeNode called with:",e),AO.get(af.CONFIG_PARAMS.REPLICATION_URL)??AO.get(af.CONFIG_PARAMS.REPLICATION_HOSTNAME))return qfe(e);yK.checkClusteringEnabled();let t=Ufe(e);if(t)throw SK(t,t.message,TK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await yK.getNodeRecord(r);if(xfe.isEmptyOrZeroLength(n))throw SK(new Error,`Node '${r}' was not found.`,TK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Bfe(af.OPERATIONS_ENUM.REMOVE_NODE,$fe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await bO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await bO.updateRemoteConsumer(new Ffe(d.schema,d.table,!1,!1),r)}catch(f){Ch.error(f)}}try{i=await bO.request(`${r}.${RK.REQUEST_SUFFIX}`,s),Ch.trace("Remove node reply from remote node:",r,i)}catch(l){Ch.error("removeNode received error from request:",l),a=!0}let c=new kfe(af.SYSTEM_SCHEMA_NAME,af.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Hfe.deleteRecord(c),Gfe({type:"nats_update"}),i?.status===RK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(Ch.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(Vfe,"removeNode")});var wK=v((Bxe,IK)=>{"use strict";var AK=require("joi"),{string:Kfe,array:Yfe}=AK.types(),Wfe=ft(),zfe=OT();IK.exports=jfe;function jfe(e){let t=AK.object({operation:Kfe.valid("configure_cluster").required(),connections:Yfe.items(zfe.validationSchema).required()});return Wfe.validateBySchema(e,t)}o(jfe,"configureClusterValidator")});var IO=v((kxe,LK)=>{"use strict";var NK=(q(),M(z)),FT=Q(),Qfe=oe(),Jfe=me(),Xfe=Oh(),Zfe=Ah(),eme=uo(),tme=wK(),{handleHDBError:CK,hdbErrors:rme}=_e(),{HTTP_STATUS_CODES:OK}=rme,nme="Configure cluster complete.",sme="Failed to configure the cluster. Check the logs for more details.",ime="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";LK.exports=ome;async function ome(e){FT.trace("configure cluster called with:",e);let t=tme(e);if(t)throw CK(t,t.message,OK.BAD_REQUEST,void 0,void 0,!0);let r=await eme.getAllNodeRecords(),n=[];if(Jfe.get(NK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await PK(Xfe,{operation:NK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}FT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await PK(Zfe,f,f.node_name);s.push(m)}FT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(FT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Qfe.isEmptyOrZeroLength(a))return{message:nme,connections:c};if(l)return{message:ime,failed_nodes:a,connections:c};throw CK(new Error,sme,OK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(ome,"configureCluster");async function PK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(PK,"functionWrapper")});var UK=v((Gxe,vK)=>{"use strict";var Ph=require("joi"),ame=ft(),{validateSchemaExists:DK,validateTableExists:cme,validateSchemaName:MK}=Wi(),lme=Ph.object({operation:Ph.string().valid("purge_stream"),schema:Ph.string().custom(DK).custom(MK).optional(),database:Ph.string().custom(DK).custom(MK).optional(),table:Ph.string().custom(cme).required()});function ume(e){return ame.validateBySchema(e,lme)}o(ume,"purgeStreamValidator");vK.exports=ume});var wO=v(($xe,xK)=>{"use strict";var{handleHDBError:dme,hdbErrors:fme}=_e(),{HTTP_STATUS_CODES:mme}=fme,pme=UK(),hme=hr(),Eme=uo();xK.exports=_me;async function _me(e){e.schema=e.schema??e.database;let t=pme(e);if(t)throw dme(t,t.message,mme.BAD_REQUEST,void 0,void 0,!0);Eme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await hme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(_me,"purgeStream")});var GT=v((Kxe,VK)=>{"use strict";var CO=uo(),gme=hr(),HT=me(),cf=(q(),M(z)),Wl=Pt(),Sme=oe(),NO=Q(),{RemotePayloadObject:Tme}=Sh(),{ErrorCode:BK}=require("nats"),{parentPort:FK}=require("worker_threads"),{onMessageByType:yme}=nt(),{getThisNodeName:Rme}=(ps(),M(Xo)),{requestClusterStatus:bme}=(lh(),M(J$)),{getReplicationSharedStatus:Ame,getHDBNodeTable:Ime}=($d(),M(Y$)),{CONFIRMATION_STATUS_POSITION:wme,RECEIVED_VERSION_POSITION:kK,RECEIVED_TIME_POSITION:Nme,SENDING_TIME_POSITION:Cme,RECEIVING_STATUS_POSITION:Ome,RECEIVING_STATUS_RECEIVING:Pme,BACK_PRESSURE_RATIO_POSITION:Lme}=(FC(),M($V)),HK=HT.get(cf.CONFIG_PARAMS.CLUSTERING_ENABLED),GK=HT.get(cf.CONFIG_PARAMS.CLUSTERING_NODENAME);VK.exports={clusterStatus:Dme,buildNodeStatus:$K};var qK;yme("cluster-status",async e=>{qK(e)});async function Dme(){if(HT.get(cf.CONFIG_PARAMS.REPLICATION_URL)||HT.get(cf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(FK){FK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{qK=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Ame(u,l,a);c.lastCommitConfirmed=kT(d[wme]),c.lastReceivedRemoteTime=kT(d[kK]),c.lastReceivedLocalTime=kT(d[Nme]),c.lastReceivedVersion=d[kK],c.sendingMessage=kT(d[Cme]),c.backPressurePercent=d[Lme]*100,c.lastReceivedStatus=d[Ome]===Pme?"Receiving":"Waiting"}}}else n=bme();n.node_name=Rme();let s=Ime().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:GK,is_enabled:HK,connections:[]};if(!HK)return e;let t=await CO.getAllNodeRecords();if(Sme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push($K(t[n],e.connections));return await Promise.allSettled(r),e}o(Dme,"clusterStatus");function kT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(kT,"asDate");async function $K(e,t){let r=e.name,n=new Tme(cf.OPERATIONS_ENUM.CLUSTER_STATUS,GK,void 0,await CO.getSystemInfo()),s,i,a=Wl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await gme.request(Wl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Wl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Wl.CLUSTER_STATUS_STATUSES.CLOSED,NO.error(`Error getting node status from ${r} `,s))}catch(l){NO.warn(`Error getting node status from ${r}`,l),l.code===BK.NoResponders?a=Wl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===BK.Timeout?a=Wl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Wl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Mme(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==cf.PRE_4_0_0_VERSION&&await CO.upsertNodeRecord(l)}catch(l){NO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o($K,"buildNodeStatus");function Mme(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Mme,"NodeStatusObject")});var PO=v((Wxe,KK)=>{"use strict";var{handleHDBError:vme,hdbErrors:Ume}=_e(),{HTTP_STATUS_CODES:xme}=Ume,Bme=hr(),Fme=uo(),OO=oe(),qT=require("joi"),kme=ft(),Hme=2e3,Gme=qT.object({timeout:qT.number().min(1),connected_nodes:qT.boolean(),routes:qT.boolean()});KK.exports=qme;async function qme(e){Fme.checkClusteringEnabled();let t=kme.validateBySchema(e,Gme);if(t)throw vme(t,t.message,xme.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||OO.autoCastBoolean(n),a=s===void 0||OO.autoCastBoolean(s),c={nodes:[]},l=await Bme.getServerList(r??Hme),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:OO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(qme,"clusterNetwork")});var jK=v((jxe,zK)=>{"use strict";var LO=require("joi"),YK=ft(),{routeConstraints:WK}=Ib();zK.exports={setRoutesValidator:$me,deleteRoutesValidator:Vme};function $me(e){let t=LO.object({server:LO.valid("hub","leaf"),routes:WK.required()});return YK.validateBySchema(e,t)}o($me,"setRoutesValidator");function Vme(e){let t=LO.object({routes:WK.required()});return YK.validateBySchema(e,t)}o(Vme,"deleteRoutesValidator")});var $T=v((Jxe,rY)=>{"use strict";var sa=gt(),DO=oe(),Ks=(q(),M(z)),lf=me(),QK=jK(),{handleHDBError:JK,hdbErrors:Kme}=_e(),{HTTP_STATUS_CODES:XK}=Kme,ZK="cluster routes successfully set",eY="cluster routes successfully deleted";rY.exports={setRoutes:Wme,getRoutes:zme,deleteRoutes:jme};function Yme(e){let t=sa.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=DO.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?sa.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):sa.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:ZK,set:i,skipped:s}}o(Yme,"setRoutesNats");function Wme(e){let t=QK.setRoutesValidator(e);if(t)throw JK(t,t.message,XK.BAD_REQUEST,void 0,void 0,!0);if(lf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return Yme(e);let r=[],n=[],s=lf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{tY(s,i)?n.push(i):(s.push(i),r.push(i))}),sa.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:ZK,set:r,skipped:n}}o(Wme,"setRoutes");function tY(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(tY,"existsInArray");function zme(){if(lf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=sa.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return lf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(zme,"getRoutes");function jme(e){let t=QK.deleteRoutesValidator(e);if(t)throw JK(t,t.message,XK.BAD_REQUEST,void 0,void 0,!0);if(lf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return Qme(e);let r=[],n=[],s=lf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{tY(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),sa.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:eY,deleted:r,skipped:n}}o(jme,"deleteRoutes");function Qme(e){let t=sa.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=DO.isEmptyOrZeroLength(r)?null:r,sa.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=DO.isEmptyOrZeroLength(n)?null:n,sa.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:eY,deleted:s,skipped:i}}o(Qme,"deleteRoutesNats")});var sY=v((Zxe,nY)=>{"use strict";var Jme=Pt(),MO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+Jme.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};nY.exports=MO});var aY=v((tBe,oY)=>{"use strict";var iY=Pt(),vO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+iY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+iY.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};oY.exports=vO});var lY=v((nBe,cY)=>{"use strict";var UO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};cY.exports=UO});var dY=v((iBe,uY)=>{"use strict";var Xme=Pt(),xO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Xme.SERVER_SUFFIX.ADMIN,this.password=r}};uY.exports=xO});var WT=v((aBe,pY)=>{"use strict";var zl=require("path"),jl=require("fs-extra"),Zme=sY(),epe=aY(),tpe=lY(),rpe=dY(),BO=ds(),df=oe(),Vn=gt(),KT=(q(),M(z)),Lh=Pt(),{CONFIG_PARAMS:ir}=KT,ff=Q(),Dh=me(),fY=Zi(),FO=hr(),npe=Es(),uf="clustering",spe=1e4,mY=50;pY.exports={generateNatsConfig:ope,removeNatsConfig:ape,getHubConfigPath:ipe};function ipe(){let e=Dh.get(ir.ROOTPATH);return zl.join(e,uf,Lh.NATS_CONFIG_FILES.HUB_SERVER)}o(ipe,"getHubConfigPath");async function ope(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Dh.get(ir.ROOTPATH);jl.ensureDirSync(zl.join(r,"clustering","leaf")),Dh.initSync();let n=Vn.getConfigFromFile(ir.CLUSTERING_TLS_CERT_AUTH),s=Vn.getConfigFromFile(ir.CLUSTERING_TLS_PRIVATEKEY),i=Vn.getConfigFromFile(ir.CLUSTERING_TLS_CERTIFICATE);!await jl.exists(i)&&!await jl.exists(!n)&&await npe.createNatsCerts();let a=zl.join(r,uf,Lh.PID_FILES.HUB),c=zl.join(r,uf,Lh.PID_FILES.LEAF),l=Vn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=zl.join(r,uf,Lh.NATS_CONFIG_FILES.HUB_SERVER),d=zl.join(r,uf,Lh.NATS_CONFIG_FILES.LEAF_SERVER),f=Vn.getConfigFromFile(ir.CLUSTERING_TLS_INSECURE),m=Vn.getConfigFromFile(ir.CLUSTERING_TLS_VERIFY),p=Vn.getConfigFromFile(ir.CLUSTERING_NODENAME),h=Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await FO.checkNATSServerInstalled()||YT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await BO.listUsers(),g=Vn.getConfigFromFile(ir.CLUSTERING_USER),R=await BO.getClusterUser();(df.isEmpty(R)||R.active!==!0)&&YT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await VT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await VT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await VT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await VT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[X,W]of E.entries())W.role?.role===KT.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(S.push(new rpe(W.username,fY.decrypt(W.hash))),y.push(new tpe(W.username,fY.decrypt(W.hash))));let C=[],{hub_routes:I}=Vn.getClusteringRoutes();if(!df.isEmptyOrZeroLength(I))for(let X of I)C.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${X.host}:${X.port}`);let k=new Zme(Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NAME),Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),C,S,y);n==null&&(delete k.tls.ca_file,delete k.leafnodes.tls.ca_file),t=df.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===KT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await jl.writeJson(u,k),ff.trace(`Hub server config written to ${u}`));let J=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,G=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,H=new epe(Vn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[J],[G],S,y,i,s,n,f);n==null&&delete H.tls.ca_file,(t===void 0||t===KT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await jl.writeJson(d,H),ff.trace(`Leaf server config written to ${d}`))}o(ope,"generateNatsConfig");async function VT(e){let t=Dh.get(e);return df.isEmpty(t)&&YT(`port undefined for '${e}'`),await df.isPortTaken(t)&&YT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(VT,"isPortAvailable");function YT(e){let t=`Error generating clustering config: ${e}`;ff.error(t),console.error(t),process.exit(1)}o(YT,"generateNatsConfigError");async function ape(e){let{port:t,config_file:r}=FO.getServerConfig(e),{username:n,decrypt_hash:s}=await BO.getClusterUser(),i=0,a=2e3;for(;i<mY;){try{let d=await FO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){ff.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=mY)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&ff.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await df.asyncSetTimeout(u)}let c="0".repeat(spe),l=zl.join(Dh.get(ir.ROOTPATH),uf,r);await jl.writeFile(l,c),await jl.remove(l),ff.notify(e,"started.")}o(ape,"removeNatsConfig")});var TY=v((lBe,SY)=>{"use strict";var gs=me(),Xe=(q(),M(z)),Mh=Pt(),ia=require("path"),{PACKAGE_ROOT:jT}=Ct(),hY=me(),zT=oe(),mf="/dev/null",cpe=ia.join(jT,"launchServiceScripts"),EY=ia.join(jT,"utility/scripts"),lpe=ia.join(EY,Xe.HDB_RESTART_SCRIPT),_Y=ia.resolve(jT,"dependencies",`${process.platform}-${process.arch}`,Mh.NATS_BINARY_NAME);function gY(){let e={[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return zT.noBootFile()&&(e[Xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=zT.getEnvCliRootPath()),{name:Xe.PROCESS_DESCRIPTORS.HDB,script:Xe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:jT}}o(gY,"generateMainServerConfig");var upe=9930;function dpe(){gs.initSync(!0);let e=gs.get(Xe.CONFIG_PARAMS.ROOTPATH),t=ia.join(e,"clustering",Mh.NATS_CONFIG_FILES.HUB_SERVER),r=ia.join(gs.get(Xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Xe.LOG_NAMES.HDB),n=hY.get(Xe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Mh.LOG_LEVEL_FLAGS[gs.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==upe?"-"+n:""),binFile:_Y,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return gs.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mf,i.error_file=mf),i}o(dpe,"generateNatsHubServerConfig");var fpe=9940;function mpe(){gs.initSync(!0);let e=gs.get(Xe.CONFIG_PARAMS.ROOTPATH),t=ia.join(e,"clustering",Mh.NATS_CONFIG_FILES.LEAF_SERVER),r=ia.join(gs.get(Xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Xe.LOG_NAMES.HDB),n=hY.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Mh.LOG_LEVEL_FLAGS[gs.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==fpe?"-"+n:""),binFile:_Y,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return gs.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mf,i.error_file=mf),i}o(mpe,"generateNatsLeafServerConfig");function ppe(){gs.initSync();let e=ia.join(gs.get(Xe.CONFIG_PARAMS.LOGGING_ROOT),Xe.LOG_NAMES.HDB),t={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:Xe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:cpe,autorestart:!1};return gs.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=mf,t.error_file=mf),t}o(ppe,"generateClusteringUpgradeV4ServiceConfig");function hpe(){let e={[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.RESTART_HDB};return zT.noBootFile()&&(e[Xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=zT.getEnvCliRootPath()),{...{name:Xe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:EY},script:lpe}}o(hpe,"generateRestart");function Epe(){return{apps:[gY()]}}o(Epe,"generateAllServiceConfigs");SY.exports={generateAllServiceConfigs:Epe,generateMainServerConfig:gY,generateRestart:hpe,generateNatsHubServerConfig:dpe,generateNatsLeafServerConfig:mpe,generateClusteringUpgradeV4ServiceConfig:ppe}});var Ql=v((fBe,NY)=>{"use strict";var Cr=(q(),M(z)),dBe=oe(),aa=WT(),QT=hr(),oa=Pt(),hc=TY(),HO=me(),Ec=Q(),_pe=uo(),{startWorker:yY,onMessageFromWorkers:gpe}=nt(),RY=require("fs"),Spe=require("node:path"),Tpe=(q(),M(z)),{setTimeout:ype}=require("node:timers/promises"),{execFile:Rpe,fork:bpe}=require("node:child_process");NY.exports={start:_c,restart:Ipe,kill:Ope,startAllServices:Ppe,startService:AY,restartHdb:wpe,startClusteringProcesses:IY,startClusteringThreads:wY,isHdbRestartRunning:Npe,getHdbPid:Cpe,cleanupChildrenProcesses:vh,reloadClustering:Dpe,expectedRestartOfChildren:bY};gpe(e=>{e.type==="restart"&&HO.initSync(!0)});var fo=[],Ape=10,kO;function _c(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?bpe(e.script,r,e):Rpe(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(a,c)=>{console.error(a,c)}),n.on("exit",async a=>{let c=fo.indexOf(n);c>-1&&fo.splice(c,1),!kO&&a!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Ape&&(RY.existsSync(aa.getHubConfigPath())?_c(e):(await aa.generateNatsConfig(!0),_c(e),await new Promise(l=>setTimeout(l,3e3)),await aa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await aa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(a){let c=HO.get(Cr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(a);){if(u.index&&oa.LOG_LEVEL_HIERARCHY[c]>=oa.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===oa.LOG_LEVELS.ERR||f===oa.LOG_LEVELS.WRN?Ec.OUTPUTS.STDERR:Ec.OUTPUTS.STDOUT;Ec.logCustomLevel(f||"info",h,s,a.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=oa.LOG_LEVELS[p]}if(oa.LOG_LEVEL_HIERARCHY[c]>=oa.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===oa.LOG_LEVELS.ERR||f===oa.LOG_LEVELS.WRN?Ec.OUTPUTS.STDERR:Ec.OUTPUTS.STDOUT;Ec.logCustomLevel(f||"info",m,s,a.toString().slice(d).trim())}}o(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),fo.length===0&&(t||(process.on("exit",vh),process.on("SIGINT",vh),process.on("SIGQUIT",vh),process.on("SIGTERM",vh))),fo.push(n)}o(_c,"start");function vh(e=!0){if(!kO&&(kO=!0,fo.length!==0))if(Ec.info("Killing child processes..."),fo.map(t=>t.kill()),e)process.exit(0);else return ype(2e3)}o(vh,"cleanupChildrenProcesses");function Ipe(e){bY();for(let t of fo)t.name===e&&t.kill()}o(Ipe,"restart");function bY(){for(let e of fo)e.config&&(e.config.restarts=0)}o(bY,"expectedRestartOfChildren");async function wpe(){await _c(hc.generateRestart())}o(wpe,"restartHdb");async function Npe(){let e=await list();for(let t in e)if(e[t].name===Cr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Npe,"isHdbRestartRunning");function Cpe(){let e=HO.getHdbBasePath();if(!e)return;let t=Spe.join(e,Tpe.HDB_PID_FILE),r=Mpe(t);if(!(!r||r===process.pid)&&vpe(r))return r}o(Cpe,"getHdbPid");function Ope(){for(let e of fo)e.kill();fo=[]}o(Ope,"kill");async function Ppe(){await IY(),await wY(),await _c(hc.generateAllServiceConfigs())}o(Ppe,"startAllServices");async function AY(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Cr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=hc.generateMainServerConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=hc.generateNatsIngestServiceConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=hc.generateNatsReplyServiceConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=hc.generateNatsHubServerConfig(),await _c(r,t),await aa.removeNatsConfig(e);return;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=hc.generateNatsLeafServerConfig(),await _c(r,t),await aa.removeNatsConfig(e);return;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=hc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}_c(r,t)}o(AY,"startService");var Lpe;async function IY(e=!1){for(let t in Cr.CLUSTERING_PROCESSES){let r=Cr.CLUSTERING_PROCESSES[t];await AY(r,e)}}o(IY,"startClusteringProcesses");async function wY(){Lpe=yY(Cr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Cr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await QT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await QT.updateLocalStreams();let e=await _pe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Cr.PRE_4_0_0_VERSION){Ec.info("Starting clustering upgrade 4.0.0 process"),yY(Cr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(wY,"startClusteringThreads");async function Dpe(){await aa.generateNatsConfig(!0),await QT.reloadNATSHub(),await QT.reloadNATSLeaf(),await aa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await aa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Dpe,"reloadClustering");function Mpe(e){try{return Number.parseInt(RY.readFileSync(e,"utf8"),10)}catch{return null}}o(Mpe,"readPidFile");function vpe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(vpe,"isProcessRunning")});var $O={};Re($O,{compactOnStart:()=>Upe,copyDb:()=>MY});async function Upe(){gc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,GO.get)(F.ROOTPATH),t=new Map,r=at();(0,qO.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,JT.join)(e,"backup",n+".mdb"),a=(0,JT.join)(e,$c,n+"-copy.mdb"),c=0;try{c=await CY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){gc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await MY(n,a),console.log("Backing up",n,"to",i);try{await(0,Jl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{Rd()}catch(n){gc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Jl.move)(i,s,{overwrite:!0}),await(0,Jl.remove)((0,JT.join)(e,$c,`${n}-copy.mdb-lock`));try{Rd()}catch(n){gc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){gc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,qO.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Jl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw Rd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await CY(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
19
|
+
`)}function eue(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}var hT,QV,JV,ht,HC,ea,pT,ET=se(()=>{zV();hT=require("easy-ocsp"),QV=require("node:crypto"),JV=b(es());we();$a();ht=(0,JV.loggerWithTag)("cert-verification"),HC=class extends Hr{static{o(this,"CertificateVerificationSource")}async get(t){ht.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;ht.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??ea.timeout,l=await Promise.race([Zle(s,i,c),new Promise((m,p)=>setTimeout(()=>p(new Error("OCSP timeout")),c))]);if(ht.debug?.("OCSP check result:",l),l.status==="unknown"&&(l.reason==="ocsp-error"||l.reason==="timeout"||l.reason==="no-ocsp-url")){let m=a?.failureMode??ea.failureMode;if(ht.error?.("OCSP check failed:",l.reason),m==="fail-closed"){let p=a?.errorCacheTtl??ea.errorCacheTtl,h=Date.now()+p;return r&&(r.expiresAt=h),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:h,method:"ocsp"}}else return ht.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null}let d=a?.cacheTtl??ea.cacheTtl,f=Date.now()+d;return r&&(r.expiresAt=f),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:f,method:"ocsp"}}catch(c){if(ht.error?.("OCSP verification error:",c),(a?.failureMode??ea.failureMode)==="fail-closed"){let u=a?.errorCacheTtl??ea.errorCacheTtl,d=Date.now()+u;return r&&(r.expiresAt=d),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:d,method:"ocsp"}}return ht.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null}}},ea={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-open"};o(Qle,"getCertificateCacheTable");o(Jle,"getCertificateVerificationConfig");o(Qd,"verifyCertificate");o(Xle,"verifyOCSP");o(Zle,"performOCSPCheck");o(jV,"bufferToPem");o(eue,"extractCertificateChain")});var Xo={};Re(Xo,{clearThisNodeName:()=>lue,disableReplication:()=>sue,enabledDatabases:()=>cc,forEachReplicatedDatabase:()=>nc,getThisNodeId:()=>mT,getThisNodeName:()=>it,getThisNodeUrl:()=>sc,hostnameToUrl:()=>TT,lastTimeInAuditStore:()=>sh,monitorNodeCAs:()=>o1,replicateOperation:()=>due,replicationCertificateAuthorities:()=>Zo,sendOperationToNode:()=>Eh,servers:()=>rue,setReplicator:()=>c1,start:()=>nue,startOnMainThread:()=>hC,subscribeToNode:()=>ch,unsubscribeFromNode:()=>ZS,urlToNodeName:()=>Si});function nue(e){if(!e.port&&!e.securePort&&(e.port=$s.default.get(F.OPERATIONSAPI_NETWORK_PORT),e.securePort=$s.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),!it())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of oh(e))t.set(Si(s.url),s);iue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=ve.ws(async(s,i,a,c)=>{if(It.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),mh(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,ve.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=jt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,s1.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await Qd(s.peerCertificate,e);if(!u.valid){It.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else It.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:It.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(Zo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=ST.createSecureContext(u)}catch(l){It.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),$s.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1&&i()}o1(()=>{for(let s of n)s()})}function o1(e){let t=0;qd(r=>{r?.ca&&(Zo.add(r.ca),Zo.size!==t&&(t=Zo.size,e?.()))})}function sue(e=!0){i1=e}function iue(e){i1||(at(),cc=e.databases,nc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||lc;for(let[s,i]of gT){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];c1(r,s,e),BC.get(s)?.forEach(i=>i(s))}}))}function c1(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class a1 extends Hr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||lc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(It.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Zn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===ve.hostname)continue;let E=aue(h,a1.subscription,e);if(E?.isConnected){let g=Gd(t.auditStore,e,h)[dT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new r1.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:tue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",$l,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function oue(e,t,r,n,s){let i=gT.get(e);i||gT.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new jd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function aue(e,t,r){let n=XV.get($l);n||(n=new Map,XV.set($l,n));let s=n.get(r);if(s)return s;let i=jt().primaryStore.get(e);return i?.url&&(s=new jd(i.url,t,r,$l,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Eh(e,t,r){r||(r={}),r.serverName=e.name;let n=await fT(e.url,r),s=mh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function ch(e){try{n1.isMainThread&&It.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=lc.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,lc.set(e.database,t)}let r=oue(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>ih(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function ZS({name:e,url:t,database:r}){It.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(jt().primaryStore.getRange({})));let n=gT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function cue(){if(GC!==void 0)return GC;let e=$s.default.get(F.OPERATIONSAPI_TLS_CERTIFICATE)||$s.default.get(F.TLS_CERTIFICATE);if(e)return GC=new e1.X509Certificate((0,t1.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return $l||($l=$s.default.get("replication_hostname")??Si($s.default.get("replication_url"))??cue()??ZV("operationsapi_network_secureport")??ZV("operationsapi_network_port")??"127.0.0.1")}function lue(){$l=void 0}function ZV(e){let t=$s.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function _T(e){let t=$s.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function mT(e){return nh(e)?.[it()]}function sc(){let e=$s.default.get("replication_url");return e||TT(it())}function TT(e){let t=_T("replication_port");if(t)return`ws://${e}:${t}`;if(t=_T("replication_secureport"),t)return`wss://${e}:${t}`;if(t=_T("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=_T("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Si(e){if(e)return new URL(e).hostname}function nc(e,t){for(let n of Object.getOwnPropertyNames(De))r(n);return Hp(n=>{r(n)}),Ll((n,s)=>{r(n.databaseName)});function r(n){let s=De[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):uue(n)&&t(s,n,!1)}o(r,"forDatabase")}function uue(e){let t=De[e];for(let r in t)if(t[r].replicate)return!0}function sh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function due(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",ve.nodes.map(n=>n.name));let r=await Promise.allSettled(ve.nodes.map(n=>Eh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=ve.nodes[s]?.name,i})}return t}var $s,It,e1,t1,ST,r1,n1,s1,i1,tue,rue,Zo,cc,gT,XV,GC,$l,ps=se(()=>{we();$a();Pu();FC();Fr();$s=b(me()),It=b(Q()),e1=require("crypto");ET();t1=require("fs");lh();$d();q();pC();ST=b(require("node:tls")),r1=b(_e()),n1=require("worker_threads"),s1=b(Es()),tue=1,rue=[],Zo=$s.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(ST.rootCertificates):new Set;o(nue,"start");o(o1,"monitorNodeCAs");o(sue,"disableReplication");o(iue,"assignReplicationSource");o(c1,"setReplicator");gT=new Map;o(oue,"getSubscriptionConnection");XV=new Map;o(aue,"getRetrievalConnectionByName");o(Eh,"sendOperationToNode");o(ch,"subscribeToNode");o(ZS,"unsubscribeFromNode");o(cue,"getCommonNameFromCert");o(it,"getThisNodeName");o(lue,"clearThisNodeName");Object.defineProperty(ve,"hostname",{get(){return it()}});o(ZV,"getHostFromListeningPort");o(_T,"getPortFromListeningPort");o(mT,"getThisNodeId");ve.replication={getThisNodeId:mT,exportIdMapping:nh};o(sc,"getThisNodeUrl");o(TT,"hostnameToUrl");o(Si,"urlToNodeName");o(nc,"forEachReplicatedDatabase");o(uue,"hasExplicitlyReplicatedTable");o(sh,"lastTimeInAuditStore");o(due,"replicateOperation")});var IT=v((b0e,m1)=>{"use strict";var Jd=c$(),{validateBySchema:_h}=ft(),{commonValidators:Xd,schemaRegex:qC}=Wi(),_r=require("joi"),fue=Q(),mue=require("uuid").v4,bT=$o(),Zd=(q(),M(z)),pue=require("util"),uc=ls(),{handleHDBError:ta,hdbErrors:hue,ClientError:Vl}=_e(),{HDB_ERROR_MSGS:yT,HTTP_STATUS_CODES:ra}=hue,{SchemaEventMsg:AT}=os(),l1=hr(),{getDatabases:Eue}=(we(),M(mt)),{transformReq:ef}=oe(),{replicateOperation:u1}=(ps(),M(Xo)),{cleanupOrphans:_ue}=(ts(),M(v_)),RT=_r.string().min(1).max(Xd.schema_length.maximum).pattern(qC).messages({"string.pattern.base":"{:#label} "+Xd.schema_format.message}),gue=_r.string().min(1).max(Xd.schema_length.maximum).pattern(qC).messages({"string.pattern.base":"{:#label} "+Xd.schema_format.message}).required(),Sue=_r.string().min(1).max(Xd.schema_length.maximum).pattern(qC).messages({"string.pattern.base":"{:#label} "+Xd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();m1.exports={createSchema:Tue,createSchemaStructure:d1,createTable:yue,createTableStructure:f1,createAttribute:wue,dropSchema:Rue,dropTable:bue,dropAttribute:Aue,getBackup:Nue,cleanupOrphanBlobs:Cue};async function Tue(e){let t=await d1(e);return bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema)),t}o(Tue,"createSchema");async function d1(e){let t=_h(e,_r.object({database:RT,schema:RT}));if(t)throw new Vl(t.message);if(ef(e),!await Jd.checkSchemaExists(e.schema))throw ta(new Error,yT.SCHEMA_EXISTS_ERR(e.schema),ra.BAD_REQUEST,Zd.LOG_LEVELS.ERROR,yT.SCHEMA_EXISTS_ERR(e.schema),!0);return await uc.createSchema(e),`database '${e.schema}' successfully created`}o(d1,"createSchemaStructure");async function yue(e){return ef(e),e.hash_attribute=e.primary_key??e.hash_attribute,await f1(e)}o(yue,"createTable");async function f1(e){let t=_h(e,_r.object({database:RT,schema:RT,table:gue,residence:_r.array().items(_r.string().min(1)).optional(),hash_attribute:Sue}));if(t)throw new Vl(t.message);if(!await Jd.checkSchemaTableExists(e.schema,e.table))throw ta(new Error,yT.TABLE_EXISTS_ERR(e.schema,e.table),ra.BAD_REQUEST,Zd.LOG_LEVELS.ERROR,yT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:mue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await uc.createTable(n,e);else throw ta(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ra.BAD_REQUEST);else await uc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(f1,"createTableStructure");async function Rue(e){let t=_h(e,_r.object({database:_r.string(),schema:_r.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Vl(t.message);ef(e);let r=await Jd.checkSchemaExists(e.schema);if(r)throw ta(new Error,r,ra.NOT_FOUND,Zd.LOG_LEVELS.ERROR,r,!0);let n=await Jd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await uc.dropSchema(e),bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema)),await l1.purgeSchemaTableStreams(e.schema,s);let i=await u1(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Rue,"dropSchema");async function bue(e){let t=_h(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required()}));if(t)throw new Vl(t.message);ef(e);let r=await Jd.checkSchemaTableExists(e.schema,e.table);if(r)throw ta(new Error,r,ra.NOT_FOUND,Zd.LOG_LEVELS.ERROR,r,!0);await uc.dropTable(e),await l1.purgeTableStream(e.schema,e.table);let n=await u1(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(bue,"dropTable");async function Aue(e){let t=_h(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required(),attribute:_r.string().required()}));if(t)throw new Vl(t.message);ef(e);let r=await Jd.checkSchemaTableExists(e.schema,e.table);if(r)throw ta(new Error,r,ra.NOT_FOUND,Zd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ta(new Error,"You cannot drop a hash attribute",ra.BAD_REQUEST,void 0,void 0,!0);if(Zd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ta(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ra.BAD_REQUEST,void 0,void 0,!0);try{return await uc.dropAttribute(e),Iue(e),bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw fue.error(`Got an error deleting attribute ${pue.inspect(e)}.`),n}}o(Aue,"dropAttribute");function Iue(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(Iue,"dropAttributeFromGlobal");async function wue(e){ef(e);let t=Eue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw ta(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ra.BAD_REQUEST,void 0,void 0,!0);return await uc.createAttribute(e),bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(wue,"createAttribute");function Nue(e){return uc.getBackup(e)}o(Nue,"getBackup");function Cue(e){if(!e.database)throw new Vl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Vl(`Unknown database '${e.database}'`);return _ue(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(Cue,"cleanupOrphanBlobs")});var h1=v((I0e,p1)=>{"use strict";var{OPERATIONS_ENUM:Oue}=(q(),M(z)),$C=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Oue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};p1.exports=$C});var VC=v((C0e,T1)=>{"use strict";var Pue=ls(),N0e=h1(),wT=oe(),NT=(q(),M(z)),Lue=me(),{handleHDBError:E1,hdbErrors:Due}=_e(),{HDB_ERROR_MSGS:_1,HTTP_STATUS_CODES:g1}=Due,Mue=Object.values(NT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),S1="To use this operation audit log must be enabled in harperdb-config.yaml";T1.exports=vue;async function vue(e){if(wT.isEmpty(e.schema))throw new Error(_1.SCHEMA_REQUIRED_ERR);if(wT.isEmpty(e.table))throw new Error(_1.TABLE_REQUIRED_ERR);if(!Lue.get(NT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw E1(new Error,S1,g1.BAD_REQUEST,NT.LOG_LEVELS.ERROR,S1,!0);let t=wT.checkSchemaTableExist(e.schema,e.table);if(t)throw E1(new Error,t,g1.NOT_FOUND,NT.LOG_LEVELS.ERROR,t,!0);if(!wT.isEmpty(e.search_type)&&Mue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Pue.readAuditLog(e)}o(vue,"readAuditLog")});var R1=v((P0e,y1)=>{"use strict";var{OPERATIONS_ENUM:Uue}=(q(),M(z)),KC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Uue.GET_BACKUP,this.schema=t,this.table=r}};y1.exports=KC});var I1=v((v0e,A1)=>{"use strict";var xue=ls(),D0e=R1(),YC=oe(),Bue=(q(),M(z)),M0e=me(),{handleHDBError:Fue,hdbErrors:kue}=_e(),{HDB_ERROR_MSGS:b1,HTTP_STATUS_CODES:Hue}=kue;A1.exports=Gue;async function Gue(e){if(YC.isEmpty(e.schema))throw new Error(b1.SCHEMA_REQUIRED_ERR);if(YC.isEmpty(e.table))throw new Error(b1.TABLE_REQUIRED_ERR);let t=YC.checkSchemaTableExist(e.schema,e.table);if(t)throw Fue(new Error,t,Hue.NOT_FOUND,Bue.LOG_LEVELS.ERROR,t,!0);return await xue.getBackup(readAuditLogObject)}o(Gue,"getBackup")});var O1=v((x0e,C1)=>{"use strict";var que=me(),dc=require("joi"),$ue=ft(),w1=require("moment"),Vue=require("fs-extra"),WC=require("path"),Kue=require("lodash"),gh=(q(),M(z)),{LOG_LEVELS:Kl}=(q(),M(z)),Yue="YYYY-MM-DD hh:mm:ss",Wue=WC.resolve(__dirname,"../logs");C1.exports=function(e){return $ue.validateBySchema(e,zue)};var zue=dc.object({from:dc.custom(N1),until:dc.custom(N1),level:dc.valid(Kl.NOTIFY,Kl.FATAL,Kl.ERROR,Kl.WARN,Kl.INFO,Kl.DEBUG,Kl.TRACE),order:dc.valid("asc","desc"),limit:dc.number().min(1),start:dc.number().min(0),log_name:dc.custom(jue)});function N1(e,t){if(w1(e,w1.ISO_8601).format(Yue)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(N1,"validateDatetime");function jue(e,t){if(Kue.invert(gh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=que.get(gh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?gh.LOG_NAMES.HDB:e,i=s===gh.LOG_NAMES.INSTALL?WC.join(Wue,gh.LOG_NAMES.INSTALL):WC.join(n,s);return Vue.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(jue,"validateReadLogPath")});var jC=v((F0e,L1)=>{"use strict";var CT=(q(),M(z)),Que=Q(),Jue=me(),Xue=O1(),zC=require("path"),P1=require("fs-extra"),{once:Zue}=require("events"),{handleHDBError:ede,hdbErrors:tde}=_e(),{PACKAGE_ROOT:rde}=Ct(),{replicateOperation:nde}=(ps(),M(Xo)),sde=zC.join(rde,"logs"),ide=1e3,ode=200;L1.exports=ade;async function ade(e){let t=Xue(e);if(t)throw ede(t,t.message,tde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=nde(e),n=Jue.get(CT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?CT.LOG_NAMES.HDB:e.log_name,i=s===CT.LOG_NAMES.INSTALL?zC.join(sde,CT.LOG_NAMES.INSTALL):zC.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?ide:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(P1.statSync(i).size-(E+5)*ode,0));let R=P1.createReadStream(i,{start:g});R.on("error",G=>{Que.error(G)});let S=0,y=[],C="",I;R.on("data",G=>{let H=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=C+G;let X=0,W;for(;(W=H.exec(G))&&!R.destroyed;){I&&(I.message=G.slice(X,W.index),k(I));let[ue,ce,te]=W,ye=te.split("] ["),Ae=ye[0],Ye=ye[1];ye.splice(0,2),I={timestamp:ce,thread:Ae,level:Ye,tags:ye,message:""},X=W.index+ue.length}C=G.slice(X)}),R.on("end",G=>{R.destroyed||I&&(I.message=C.trim(),k(I))}),R.resume();function k(G){let H,X,W;switch(!0){case(a&&l&&d):H=new Date(G.timestamp),X=new Date(u),W=new Date(f),G.level===c&&H>=X&&H<=W&&S<h?S++:G.level===c&&H>=X&&H<=W&&(lo(G,p,y),S++,S===E&&R.destroy());break;case(a&&l):H=new Date(G.timestamp),X=new Date(u),G.level===c&&H>=X&&S<h?S++:G.level===c&&H>=X&&(lo(G,p,y),S++,S===E&&R.destroy());break;case(a&&d):H=new Date(G.timestamp),W=new Date(f),G.level===c&&H<=W&&S<h?S++:G.level===c&&H<=W&&(lo(G,p,y),S++,S===E&&R.destroy());break;case(l&&d):H=new Date(G.timestamp),X=new Date(u),W=new Date(f),H>=X&&H<=W&&S<h?S++:H>=X&&H<=W&&(lo(G,p,y),S++,S===E&&R.destroy());break;case a:G.level===c&&S<h?S++:G.level===c&&(lo(G,p,y),S++,S===E&&R.destroy());break;case l:H=new Date(G.timestamp),X=new Date(u),H>=X&&S<h?S++:H>=X&&S>=h&&(lo(G,p,y),S++,S===E&&R.destroy());break;case d:H=new Date(G.timestamp),W=new Date(f),H<=W&&S<h?S++:H<=W&&S>=h&&(lo(G,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(lo(G,p,y),S++,S===E&&R.destroy())}}o(k,"onLogMessage"),await Zue(R,"close");let J=await r;if(J.replicated){for(let G of y)G.node=server.hostname;for(let G of J.replicated){let H=G.node;if(G.status==="failed")lo({timestamp:new Date().toISOString(),level:"error",node:H,message:`Error retrieving logs: ${G.reason}`},p,y);else for(let X of G.results)X.node=H,lo(X,p,y)}}return y}o(ade,"readLog");function lo(e,t,r){t==="desc"?cde(e,r):t==="asc"?lde(e,r):r.push(e)}o(lo,"pushLineToResult");function cde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(cde,"insertDescending");function lde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(lde,"insertAscending")});var OT=v((V0e,U1)=>{"use strict";var QC=require("joi"),{string:tf,boolean:D1,date:ude}=QC.types(),dde=ft(),{validateSchemaExists:H0e,validateTableExists:G0e,validateSchemaName:q0e}=Wi(),fde=(q(),M(z)),mde=Pt(),M1=me();M1.initSync();var $0e=tf.invalid(M1.get(fde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(mde.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),v1={operation:tf.valid("add_node","update_node","set_node_replication"),node_name:tf.optional(),subscriptions:QC.array().items({table:tf.optional(),schema:tf.optional(),database:tf.optional(),subscribe:D1.required(),publish:D1.required().custom(hde),start_time:ude.iso()})};function pde(e){return dde.validateBySchema(e,QC.object(v1))}o(pde,"addUpdateNodeValidator");function hde(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(hde,"checkForFalsy");U1.exports={addUpdateNodeValidator:pde,validationSchema:v1}});var rf=v((Y0e,x1)=>{"use strict";var JC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},XC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};x1.exports={Node:JC,NodeSubscription:XC}});var F1=v((z0e,B1)=>{"use strict";var Ede=(q(),M(z)).OPERATIONS_ENUM,ZC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Ede.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};B1.exports=ZC});var Sh=v((Q0e,k1)=>{"use strict";var eO=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},tO=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};k1.exports={RemotePayloadObject:eO,RemotePayloadSubscription:tO}});var G1=v((X0e,H1)=>{"use strict";var rO=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};H1.exports=rO});var $1=v((sxe,q1)=>{"use strict";var _de=G1(),exe=Yt(),txe=St(),gde=Q(),{getSchemaPath:rxe,getTransactionAuditStorePath:nxe}=Rt(),{getDatabases:Sde}=(we(),M(mt));q1.exports=Tde;async function Tde(e){let t=new _de;try{let r=Sde()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){gde.warn(`unable to stat table dbi due to ${r}`)}return t}o(Tde,"lmdbGetTableSize")});var K1=v((oxe,V1)=>{"use strict";var nO=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};V1.exports=nO});var yh=v((fxe,j1)=>{"use strict";var yde=require("fs-extra"),Rde=require("path"),Rn=require("systeminformation"),fc=Q(),Y1=hr(),cxe=Pt(),nf=(q(),M(z)),bde=$1(),Ade=Ml(),{getThreadInfo:W1}=nt(),Th=me();Th.initSync();var Ide=K1(),{openEnvironment:lxe}=St(),{getSchemaPath:uxe}=Rt(),{database:dxe,databases:sO}=(we(),M(mt)),PT;j1.exports={getHDBProcessInfo:cO,getNetworkInfo:uO,getDiskInfo:lO,getMemoryInfo:aO,getCPUInfo:oO,getTimeInfo:iO,getSystemInformation:dO,systemInformation:wde,getTableSize:fO,getMetrics:mO};function iO(){return Rn.time()}o(iO,"getTimeInfo");async function oO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await Rn.cpu();d.cpu_speed=await Rn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:R,...S}=await Rn.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:C,rawLoadIdle:I,rawLoadIrq:k,rawLoadNice:J,rawLoadSystem:G,rawLoadUser:H,...X}=y;S.cpus.push(X)}),d.current_load=S,d}catch(e){return fc.error(`error in getCPUInfo: ${e}`),{}}}o(oO,"getCPUInfo");async function aO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Rn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return fc.error(`error in getMemoryInfo: ${e}`),{}}}o(aO,"getMemoryInfo");async function cO(){let e={core:[],clustering:[]};try{let t=await Rn.processes(),r;try{r=Number.parseInt(await yde.readFile(Rde.join(Th.get(nf.CONFIG_PARAMS.ROOTPATH),nf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===nf.NODE_ERROR_CODES.ENOENT)fc.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return fc.error(`error in getHDBProcessInfo: ${t}`),e}}o(cO,"getHDBProcessInfo");async function lO(){let e={};try{if(!Th.get(nf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Rn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await Rn.fsStats();return e.read_write=u,e.size=await Rn.fsSize(),e}catch(t){return fc.error(`error in getDiskInfo: ${t}`),e}}o(lO,"getDiskInfo");async function uO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Th.get(nf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Rn.networkInterfaceDefault(),e.latency=await Rn.inetChecksite("google.com"),(await Rn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await Rn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return fc.error(`error in getNetworkInfo: ${t}`),e}}o(uO,"getNetworkInfo");async function dO(){if(PT!==void 0)return PT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await Rn.osInfo();e=c;let l=await Rn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,PT=e,PT}catch(t){return fc.error(`error in getSystemInformation: ${t}`),e}}o(dO,"getSystemInformation");async function fO(){let e=[],t=await Ade.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await bde(n));return e}o(fO,"getTableSize");async function mO(){let e={};for(let t in sO){let r=e[t]={},n=r.tables={};for(let s in sO[t])try{let i=sO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){fc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(mO,"getMetrics");async function z1(){if(Th.get(nf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Y1.getNATSReferences(),t=await Y1.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(z1,"getNatsStreamInfo");async function wde(e){let t=new Ide;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await dO(),t.time=iO(),t.cpu=await oO(),t.memory=await aO(),t.disk=await lO(),t.network=await uO(),t.harperdb_processes=await cO(),t.table_size=await fO(),t.metrics=await mO(),t.threads=await W1(),t.replication=await z1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await dO();break;case"time":t.time=iO();break;case"cpu":t.cpu=await oO();break;case"memory":t.memory=await aO();break;case"disk":t.disk=await lO();break;case"network":t.network=await uO();break;case"harperdb_processes":t.harperdb_processes=await cO();break;case"table_size":t.table_size=await fO();break;case"database_metrics":case"metrics":t.metrics=await mO();break;case"threads":t.threads=await W1();break;case"replication":t.replication=await z1();break;default:break}return t}o(wde,"systemInformation")});var uo=v((_xe,Z1)=>{"use strict";var Nde=Gn(),pO=oe(),Cde=require("util"),Yl=(q(),M(z)),Q1=me();Q1.initSync();var Ode=UN(),J1=_n(),{Node:pxe,NodeSubscription:hxe}=rf(),Pde=nd(),Lde=F1(),{RemotePayloadObject:Dde,RemotePayloadSubscription:Mde}=Sh(),{handleHDBError:vde,hdbErrors:Ude}=_e(),{HTTP_STATUS_CODES:xde,HDB_ERROR_MSGS:Bde}=Ude,Fde=di(),kde=yh(),{packageJson:Hde}=Ct(),{getDatabases:Gde}=(we(),M(mt)),Exe=Cde.promisify(Ode.authorize),qde=J1.searchByHash,$de=J1.searchByValue;Z1.exports={isEmpty:Vde,getNodeRecord:Kde,upsertNodeRecord:Yde,buildNodePayloads:Wde,checkClusteringEnabled:zde,getAllNodeRecords:jde,getSystemInfo:Qde,reverseSubscription:X1};function Vde(e){return e==null}o(Vde,"isEmpty");async function Kde(e){let t=new Pde(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return qde(t)}o(Kde,"getNodeRecord");async function Yde(e){let t=new Lde(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Nde.upsert(t)}o(Yde,"upsertNodeRecord");function X1(e){if(pO.isEmpty(e.subscribe)||pO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(X1,"reverseSubscription");function Wde(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=pO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=X1(c),p=Gde()[l]?.[u],h=new Mde(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Dde(r,t,s,n)}o(Wde,"buildNodePayloads");function zde(){if(!Q1.get(Yl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vde(new Error,Bde.CLUSTERING_NOT_ENABLED,xde.BAD_REQUEST,void 0,void 0,!0)}o(zde,"checkClusteringEnabled");async function jde(){let e=new Fde(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await $de(e))}o(jde,"getAllNodeRecords");async function Qde(){let e=await kde.getSystemInformation();return{hdb_version:Hde.version,node_version:e.node_version,platform:e.platform}}o(Qde,"getSystemInfo")});var hO=v((Sxe,aK)=>{"use strict";var LT=hr(),eK=oe(),tK=Pt(),rK=(q(),M(z)),DT=Q(),nK=IT(),Jde=cp(),{RemotePayloadObject:Xde}=Sh(),{handleHDBError:sK,hdbErrors:Zde}=_e(),{HTTP_STATUS_CODES:iK}=Zde,{NodeSubscription:oK}=rf();aK.exports=efe;async function efe(e,t){let r;try{r=await LT.request(`${t}.${tK.REQUEST_SUFFIX}`,new Xde(rK.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),DT.trace("Response from remote describe all request:",r)}catch(a){DT.error(`addNode received error from describe all request to remote node: ${a}`);let c=LT.requestErrorHandler(a,"add_node",t);throw sK(new Error,c,iK.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===tK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw sK(new Error,a,iK.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===rK.SYSTEM_SCHEMA_NAME){await LT.createLocalTableStream(l,c);let h=new oK(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=eK.doesSchemaExist(l),d=n[l]!==void 0,f=c?eK.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(DT.trace(`addNode creating schema: ${l}`),await nK.createSchema({operation:"create_schema",schema:l})),!f&&m){DT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Jde(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await nK.createTable(h)}await LT.createLocalTableStream(l,c);let p=new oK(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(efe,"reviewSubscriptions")});var sf={};Re(sf,{addNodeBack:()=>EO,removeNodeBack:()=>_O,setNode:()=>sfe});async function sfe(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Si(t)):t=TT(r);let n=(0,lK.validateBySchema)(e,nfe);if(n)throw(0,na.handleHDBError)(n,n.message,rfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new na.ClientError("url or hostname is required for remove_node operation");let p=r,h=jt(),E=await h.get(p);if(!E)throw new na.ClientError(p+" does not exist");try{await Eh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){_s.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new na.ClientError("url required for this operation");let s=sc();if(s==null)throw new na.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Vs.getReplicationCert)();let p=await(0,Vs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Vs.createCsr)(),_s.info("Sending CSR to target node:",t)):p&&(c=p.certificate,_s.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,pc.get)(F.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,pc.get)(F.REPLICATION_SHARD)!==void 0&&(l.shard=(0,pc.get)(F.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(cK):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=cK(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Eh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,_s.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(_s.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Vs.setCertTable)({name:tfe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Vs.setCertTable)({name:it(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,pc.get)(F.REPLICATION_SHARD)!==void 0&&(p.shard=(0,pc.get)(F.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Qo(it(),p)}await Qo(u?u.nodeName:f.name??Si(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function EO(e){_s.trace("addNodeBack received request:",e);let t=await(0,Vs.signCertificate)(e),r;e.csr?(r=t.signingCA,_s.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,_s.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Vs.getReplicationCertAuth)();if(n.replicates){let i={url:sc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,pc.get)(F.REPLICATION_SHARD)!==void 0&&(i.shard=(0,pc.get)(F.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Qo(it(),i)}return await Qo(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,_s.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function _O(e){_s.trace("removeNodeBack received request:",e),await jt().delete(e.name)}function cK(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Vs,lK,mc,pc,_s,na,tfe,rfe,nfe,of=se(()=>{Vs=b(Es()),lK=b(ft()),mc=b(require("joi")),pc=b(me());q();lh();$d();ps();_s=b(Q()),na=b(_e()),{pki:tfe}=require("node-forge"),{HTTP_STATUS_CODES:rfe}=na.hdbErrors,nfe=mc.default.object({hostname:mc.default.string(),verify_tls:mc.default.boolean(),replicates:mc.default.boolean(),subscriptions:mc.default.array(),revoked_certificates:mc.default.array(),shard:mc.default.number()});o(sfe,"setNode");o(EO,"addNodeBack");o(_O,"removeNodeBack");o(cK,"reverseSubscription")});var Ah=v((Cxe,dK)=>{"use strict";var{handleHDBError:MT,hdbErrors:ife}=_e(),{HTTP_STATUS_CODES:vT}=ife,{addUpdateNodeValidator:ofe}=OT(),UT=Q(),xT=(q(),M(z)),uK=Pt(),afe=oe(),Rh=hr(),bh=uo(),gO=me(),cfe=hO(),{Node:lfe,NodeSubscription:ufe}=rf(),{broadcast:dfe}=nt(),{setNode:ffe}=(of(),M(sf)),wxe=me(),Nxe=(q(),M(z)),mfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",pfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hfe=gO.get(xT.CONFIG_PARAMS.CLUSTERING_NODENAME);dK.exports=Efe;async function Efe(e,t=!1){if(UT.trace("addNode called with:",e),gO.get(xT.CONFIG_PARAMS.REPLICATION_URL)||gO.get(xT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ffe(e);bh.checkClusteringEnabled();let r=ofe(e);if(r)throw MT(r,r.message,vT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await bh.getNodeRecord(n);if(!afe.isEmptyOrZeroLength(f))throw MT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,vT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await cfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=mfe,a;let c=bh.buildNodePayloads(s,hfe,xT.OPERATIONS_ENUM.ADD_NODE,await bh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new ufe(p.schema,p.table,p.publish,p.subscribe))}UT.trace("addNode sending remote payload:",c);let u;try{u=await Rh.request(`${n}.${uK.REQUEST_SUFFIX}`,c)}catch(f){UT.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await Rh.updateRemoteConsumer(E,n)}let m=Rh.requestErrorHandler(f,"add_node",n);throw MT(new Error,m,vT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===uK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw MT(new Error,f,vT.INTERNAL_SERVER_ERROR,"error",f)}UT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await Rh.updateRemoteConsumer(p,n),p.subscribe===!0&&await Rh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new lfe(n,l,u.system_info);return await bh.upsertNodeRecord(d),dfe({type:"nats_update"}),i.length>0?a.message=pfe:a.message=`Successfully added '${n}' to manifest`,a}o(Efe,"addNode")});var RO=v((Lxe,mK)=>{"use strict";var{handleHDBError:SO,hdbErrors:_fe}=_e(),{HTTP_STATUS_CODES:TO}=_fe,{addUpdateNodeValidator:gfe}=OT(),Ih=Q(),BT=(q(),M(z)),fK=Pt(),Pxe=oe(),wh=hr(),Nh=uo(),yO=me(),{cloneDeep:Sfe}=require("lodash"),Tfe=hO(),{Node:yfe,NodeSubscription:Rfe}=rf(),{broadcast:bfe}=nt(),{setNode:Afe}=(of(),M(sf)),Ife="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",wfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Nfe=yO.get(BT.CONFIG_PARAMS.CLUSTERING_NODENAME);mK.exports=Cfe;async function Cfe(e){if(Ih.trace("updateNode called with:",e),yO.get(BT.CONFIG_PARAMS.REPLICATION_URL)??yO.get(BT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Afe(e);Nh.checkClusteringEnabled();let t=gfe(e);if(t)throw SO(t,t.message,TO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Nh.getNodeRecord(r);s.length>0&&(n=Sfe(s));let{added:i,skipped:a}=await Tfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Ife,c;let l=Nh.buildNodePayloads(i,Nfe,BT.OPERATIONS_ENUM.UPDATE_NODE,await Nh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Ih.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Ih.trace("updateNode sending remote payload:",l);let u;try{u=await wh.request(`${r}.${fK.REQUEST_SUFFIX}`,l)}catch(d){Ih.error(`updateNode received error from request: ${d}`);let f=wh.requestErrorHandler(d,"update_node",r);throw SO(new Error,f,TO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===fK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw SO(new Error,d,TO.INTERNAL_SERVER_ERROR,"error",d)}Ih.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await wh.updateRemoteConsumer(m,r),m.subscribe===!0?await wh.updateConsumerIterator(m.schema,m.table,r,"start"):await wh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new yfe(r,[],u.system_info)]),await Ofe(n[0],i,u.system_info),a.length>0?c.message=wfe:c.message=`Successfully updated '${r}'`,c}o(Cfe,"updateNode");async function Ofe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new Rfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Nh.upsertNodeRecord(n),bfe({type:"nats_update"})}o(Ofe,"updateNodeTable")});var gK=v((Mxe,_K)=>{"use strict";var EK=require("joi"),{string:pK}=EK.types(),Pfe=ft(),hK=(q(),M(z)),Lfe=me(),Dfe=Pt();_K.exports=Mfe;function Mfe(e){let t=pK.invalid(Lfe.get(hK.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Dfe.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=EK.object({operation:pK.valid(hK.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Pfe.validateBySchema(e,r)}o(Mfe,"removeNodeValidator")});var Oh=v((Uxe,bK)=>{"use strict";var{handleHDBError:SK,hdbErrors:vfe}=_e(),{HTTP_STATUS_CODES:TK}=vfe,Ufe=gK(),Ch=Q(),yK=uo(),xfe=oe(),af=(q(),M(z)),RK=Pt(),bO=hr(),AO=me(),{RemotePayloadObject:Bfe}=Sh(),{NodeSubscription:Ffe}=rf(),kfe=ap(),Hfe=bl(),{broadcast:Gfe}=nt(),{setNode:qfe}=(of(),M(sf)),$fe=AO.get(af.CONFIG_PARAMS.CLUSTERING_NODENAME);bK.exports=Vfe;async function Vfe(e){if(Ch.trace("removeNode called with:",e),AO.get(af.CONFIG_PARAMS.REPLICATION_URL)??AO.get(af.CONFIG_PARAMS.REPLICATION_HOSTNAME))return qfe(e);yK.checkClusteringEnabled();let t=Ufe(e);if(t)throw SK(t,t.message,TK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await yK.getNodeRecord(r);if(xfe.isEmptyOrZeroLength(n))throw SK(new Error,`Node '${r}' was not found.`,TK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Bfe(af.OPERATIONS_ENUM.REMOVE_NODE,$fe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await bO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await bO.updateRemoteConsumer(new Ffe(d.schema,d.table,!1,!1),r)}catch(f){Ch.error(f)}}try{i=await bO.request(`${r}.${RK.REQUEST_SUFFIX}`,s),Ch.trace("Remove node reply from remote node:",r,i)}catch(l){Ch.error("removeNode received error from request:",l),a=!0}let c=new kfe(af.SYSTEM_SCHEMA_NAME,af.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Hfe.deleteRecord(c),Gfe({type:"nats_update"}),i?.status===RK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(Ch.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(Vfe,"removeNode")});var wK=v((Bxe,IK)=>{"use strict";var AK=require("joi"),{string:Kfe,array:Yfe}=AK.types(),Wfe=ft(),zfe=OT();IK.exports=jfe;function jfe(e){let t=AK.object({operation:Kfe.valid("configure_cluster").required(),connections:Yfe.items(zfe.validationSchema).required()});return Wfe.validateBySchema(e,t)}o(jfe,"configureClusterValidator")});var IO=v((kxe,LK)=>{"use strict";var NK=(q(),M(z)),FT=Q(),Qfe=oe(),Jfe=me(),Xfe=Oh(),Zfe=Ah(),eme=uo(),tme=wK(),{handleHDBError:CK,hdbErrors:rme}=_e(),{HTTP_STATUS_CODES:OK}=rme,nme="Configure cluster complete.",sme="Failed to configure the cluster. Check the logs for more details.",ime="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";LK.exports=ome;async function ome(e){FT.trace("configure cluster called with:",e);let t=tme(e);if(t)throw CK(t,t.message,OK.BAD_REQUEST,void 0,void 0,!0);let r=await eme.getAllNodeRecords(),n=[];if(Jfe.get(NK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await PK(Xfe,{operation:NK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}FT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await PK(Zfe,f,f.node_name);s.push(m)}FT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(FT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Qfe.isEmptyOrZeroLength(a))return{message:nme,connections:c};if(l)return{message:ime,failed_nodes:a,connections:c};throw CK(new Error,sme,OK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(ome,"configureCluster");async function PK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(PK,"functionWrapper")});var UK=v((Gxe,vK)=>{"use strict";var Ph=require("joi"),ame=ft(),{validateSchemaExists:DK,validateTableExists:cme,validateSchemaName:MK}=Wi(),lme=Ph.object({operation:Ph.string().valid("purge_stream"),schema:Ph.string().custom(DK).custom(MK).optional(),database:Ph.string().custom(DK).custom(MK).optional(),table:Ph.string().custom(cme).required()});function ume(e){return ame.validateBySchema(e,lme)}o(ume,"purgeStreamValidator");vK.exports=ume});var wO=v(($xe,xK)=>{"use strict";var{handleHDBError:dme,hdbErrors:fme}=_e(),{HTTP_STATUS_CODES:mme}=fme,pme=UK(),hme=hr(),Eme=uo();xK.exports=_me;async function _me(e){e.schema=e.schema??e.database;let t=pme(e);if(t)throw dme(t,t.message,mme.BAD_REQUEST,void 0,void 0,!0);Eme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await hme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(_me,"purgeStream")});var GT=v((Kxe,VK)=>{"use strict";var CO=uo(),gme=hr(),HT=me(),cf=(q(),M(z)),Wl=Pt(),Sme=oe(),NO=Q(),{RemotePayloadObject:Tme}=Sh(),{ErrorCode:BK}=require("nats"),{parentPort:FK}=require("worker_threads"),{onMessageByType:yme}=nt(),{getThisNodeName:Rme}=(ps(),M(Xo)),{requestClusterStatus:bme}=(lh(),M(J$)),{getReplicationSharedStatus:Ame,getHDBNodeTable:Ime}=($d(),M(Y$)),{CONFIRMATION_STATUS_POSITION:wme,RECEIVED_VERSION_POSITION:kK,RECEIVED_TIME_POSITION:Nme,SENDING_TIME_POSITION:Cme,RECEIVING_STATUS_POSITION:Ome,RECEIVING_STATUS_RECEIVING:Pme,BACK_PRESSURE_RATIO_POSITION:Lme}=(FC(),M($V)),HK=HT.get(cf.CONFIG_PARAMS.CLUSTERING_ENABLED),GK=HT.get(cf.CONFIG_PARAMS.CLUSTERING_NODENAME);VK.exports={clusterStatus:Dme,buildNodeStatus:$K};var qK;yme("cluster-status",async e=>{qK(e)});async function Dme(){if(HT.get(cf.CONFIG_PARAMS.REPLICATION_URL)||HT.get(cf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;FK?(FK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{qK=i})):n=bme();for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Ame(u,l,a);c.lastCommitConfirmed=kT(d[wme]),c.lastReceivedRemoteTime=kT(d[kK]),c.lastReceivedLocalTime=kT(d[Nme]),c.lastReceivedVersion=d[kK],c.sendingMessage=kT(d[Cme]),c.backPressurePercent=d[Lme]*100,c.lastReceivedStatus=d[Ome]===Pme?"Receiving":"Waiting"}}n.node_name=Rme();let s=Ime().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:GK,is_enabled:HK,connections:[]};if(!HK)return e;let t=await CO.getAllNodeRecords();if(Sme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push($K(t[n],e.connections));return await Promise.allSettled(r),e}o(Dme,"clusterStatus");function kT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(kT,"asDate");async function $K(e,t){let r=e.name,n=new Tme(cf.OPERATIONS_ENUM.CLUSTER_STATUS,GK,void 0,await CO.getSystemInfo()),s,i,a=Wl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await gme.request(Wl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Wl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Wl.CLUSTER_STATUS_STATUSES.CLOSED,NO.error(`Error getting node status from ${r} `,s))}catch(l){NO.warn(`Error getting node status from ${r}`,l),l.code===BK.NoResponders?a=Wl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===BK.Timeout?a=Wl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Wl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Mme(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==cf.PRE_4_0_0_VERSION&&await CO.upsertNodeRecord(l)}catch(l){NO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o($K,"buildNodeStatus");function Mme(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Mme,"NodeStatusObject")});var PO=v((Wxe,KK)=>{"use strict";var{handleHDBError:vme,hdbErrors:Ume}=_e(),{HTTP_STATUS_CODES:xme}=Ume,Bme=hr(),Fme=uo(),OO=oe(),qT=require("joi"),kme=ft(),Hme=2e3,Gme=qT.object({timeout:qT.number().min(1),connected_nodes:qT.boolean(),routes:qT.boolean()});KK.exports=qme;async function qme(e){Fme.checkClusteringEnabled();let t=kme.validateBySchema(e,Gme);if(t)throw vme(t,t.message,xme.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||OO.autoCastBoolean(n),a=s===void 0||OO.autoCastBoolean(s),c={nodes:[]},l=await Bme.getServerList(r??Hme),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:OO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(qme,"clusterNetwork")});var jK=v((jxe,zK)=>{"use strict";var LO=require("joi"),YK=ft(),{routeConstraints:WK}=Ib();zK.exports={setRoutesValidator:$me,deleteRoutesValidator:Vme};function $me(e){let t=LO.object({server:LO.valid("hub","leaf"),routes:WK.required()});return YK.validateBySchema(e,t)}o($me,"setRoutesValidator");function Vme(e){let t=LO.object({routes:WK.required()});return YK.validateBySchema(e,t)}o(Vme,"deleteRoutesValidator")});var $T=v((Jxe,rY)=>{"use strict";var sa=gt(),DO=oe(),Ks=(q(),M(z)),lf=me(),QK=jK(),{handleHDBError:JK,hdbErrors:Kme}=_e(),{HTTP_STATUS_CODES:XK}=Kme,ZK="cluster routes successfully set",eY="cluster routes successfully deleted";rY.exports={setRoutes:Wme,getRoutes:zme,deleteRoutes:jme};function Yme(e){let t=sa.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=DO.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?sa.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):sa.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:ZK,set:i,skipped:s}}o(Yme,"setRoutesNats");function Wme(e){let t=QK.setRoutesValidator(e);if(t)throw JK(t,t.message,XK.BAD_REQUEST,void 0,void 0,!0);if(lf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return Yme(e);let r=[],n=[],s=lf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{tY(s,i)?n.push(i):(s.push(i),r.push(i))}),sa.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:ZK,set:r,skipped:n}}o(Wme,"setRoutes");function tY(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(tY,"existsInArray");function zme(){if(lf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=sa.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return lf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(zme,"getRoutes");function jme(e){let t=QK.deleteRoutesValidator(e);if(t)throw JK(t,t.message,XK.BAD_REQUEST,void 0,void 0,!0);if(lf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return Qme(e);let r=[],n=[],s=lf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{tY(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),sa.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:eY,deleted:r,skipped:n}}o(jme,"deleteRoutes");function Qme(e){let t=sa.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=DO.isEmptyOrZeroLength(r)?null:r,sa.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=DO.isEmptyOrZeroLength(n)?null:n,sa.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:eY,deleted:s,skipped:i}}o(Qme,"deleteRoutesNats")});var sY=v((Zxe,nY)=>{"use strict";var Jme=Pt(),MO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+Jme.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};nY.exports=MO});var aY=v((tBe,oY)=>{"use strict";var iY=Pt(),vO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+iY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+iY.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};oY.exports=vO});var lY=v((nBe,cY)=>{"use strict";var UO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};cY.exports=UO});var dY=v((iBe,uY)=>{"use strict";var Xme=Pt(),xO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Xme.SERVER_SUFFIX.ADMIN,this.password=r}};uY.exports=xO});var WT=v((aBe,pY)=>{"use strict";var zl=require("path"),jl=require("fs-extra"),Zme=sY(),epe=aY(),tpe=lY(),rpe=dY(),BO=ds(),df=oe(),Vn=gt(),KT=(q(),M(z)),Lh=Pt(),{CONFIG_PARAMS:ir}=KT,ff=Q(),Dh=me(),fY=Zi(),FO=hr(),npe=Es(),uf="clustering",spe=1e4,mY=50;pY.exports={generateNatsConfig:ope,removeNatsConfig:ape,getHubConfigPath:ipe};function ipe(){let e=Dh.get(ir.ROOTPATH);return zl.join(e,uf,Lh.NATS_CONFIG_FILES.HUB_SERVER)}o(ipe,"getHubConfigPath");async function ope(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Dh.get(ir.ROOTPATH);jl.ensureDirSync(zl.join(r,"clustering","leaf")),Dh.initSync();let n=Vn.getConfigFromFile(ir.CLUSTERING_TLS_CERT_AUTH),s=Vn.getConfigFromFile(ir.CLUSTERING_TLS_PRIVATEKEY),i=Vn.getConfigFromFile(ir.CLUSTERING_TLS_CERTIFICATE);!await jl.exists(i)&&!await jl.exists(!n)&&await npe.createNatsCerts();let a=zl.join(r,uf,Lh.PID_FILES.HUB),c=zl.join(r,uf,Lh.PID_FILES.LEAF),l=Vn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=zl.join(r,uf,Lh.NATS_CONFIG_FILES.HUB_SERVER),d=zl.join(r,uf,Lh.NATS_CONFIG_FILES.LEAF_SERVER),f=Vn.getConfigFromFile(ir.CLUSTERING_TLS_INSECURE),m=Vn.getConfigFromFile(ir.CLUSTERING_TLS_VERIFY),p=Vn.getConfigFromFile(ir.CLUSTERING_NODENAME),h=Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await FO.checkNATSServerInstalled()||YT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await BO.listUsers(),g=Vn.getConfigFromFile(ir.CLUSTERING_USER),R=await BO.getClusterUser();(df.isEmpty(R)||R.active!==!0)&&YT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await VT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await VT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await VT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await VT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[X,W]of E.entries())W.role?.role===KT.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(S.push(new rpe(W.username,fY.decrypt(W.hash))),y.push(new tpe(W.username,fY.decrypt(W.hash))));let C=[],{hub_routes:I}=Vn.getClusteringRoutes();if(!df.isEmptyOrZeroLength(I))for(let X of I)C.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${X.host}:${X.port}`);let k=new Zme(Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NAME),Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),C,S,y);n==null&&(delete k.tls.ca_file,delete k.leafnodes.tls.ca_file),t=df.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===KT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await jl.writeJson(u,k),ff.trace(`Hub server config written to ${u}`));let J=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,G=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,H=new epe(Vn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[J],[G],S,y,i,s,n,f);n==null&&delete H.tls.ca_file,(t===void 0||t===KT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await jl.writeJson(d,H),ff.trace(`Leaf server config written to ${d}`))}o(ope,"generateNatsConfig");async function VT(e){let t=Dh.get(e);return df.isEmpty(t)&&YT(`port undefined for '${e}'`),await df.isPortTaken(t)&&YT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(VT,"isPortAvailable");function YT(e){let t=`Error generating clustering config: ${e}`;ff.error(t),console.error(t),process.exit(1)}o(YT,"generateNatsConfigError");async function ape(e){let{port:t,config_file:r}=FO.getServerConfig(e),{username:n,decrypt_hash:s}=await BO.getClusterUser(),i=0,a=2e3;for(;i<mY;){try{let d=await FO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){ff.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=mY)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&ff.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await df.asyncSetTimeout(u)}let c="0".repeat(spe),l=zl.join(Dh.get(ir.ROOTPATH),uf,r);await jl.writeFile(l,c),await jl.remove(l),ff.notify(e,"started.")}o(ape,"removeNatsConfig")});var TY=v((lBe,SY)=>{"use strict";var gs=me(),Xe=(q(),M(z)),Mh=Pt(),ia=require("path"),{PACKAGE_ROOT:jT}=Ct(),hY=me(),zT=oe(),mf="/dev/null",cpe=ia.join(jT,"launchServiceScripts"),EY=ia.join(jT,"utility/scripts"),lpe=ia.join(EY,Xe.HDB_RESTART_SCRIPT),_Y=ia.resolve(jT,"dependencies",`${process.platform}-${process.arch}`,Mh.NATS_BINARY_NAME);function gY(){let e={[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return zT.noBootFile()&&(e[Xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=zT.getEnvCliRootPath()),{name:Xe.PROCESS_DESCRIPTORS.HDB,script:Xe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:jT}}o(gY,"generateMainServerConfig");var upe=9930;function dpe(){gs.initSync(!0);let e=gs.get(Xe.CONFIG_PARAMS.ROOTPATH),t=ia.join(e,"clustering",Mh.NATS_CONFIG_FILES.HUB_SERVER),r=ia.join(gs.get(Xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Xe.LOG_NAMES.HDB),n=hY.get(Xe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Mh.LOG_LEVEL_FLAGS[gs.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==upe?"-"+n:""),binFile:_Y,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return gs.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mf,i.error_file=mf),i}o(dpe,"generateNatsHubServerConfig");var fpe=9940;function mpe(){gs.initSync(!0);let e=gs.get(Xe.CONFIG_PARAMS.ROOTPATH),t=ia.join(e,"clustering",Mh.NATS_CONFIG_FILES.LEAF_SERVER),r=ia.join(gs.get(Xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Xe.LOG_NAMES.HDB),n=hY.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Mh.LOG_LEVEL_FLAGS[gs.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==fpe?"-"+n:""),binFile:_Y,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return gs.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mf,i.error_file=mf),i}o(mpe,"generateNatsLeafServerConfig");function ppe(){gs.initSync();let e=ia.join(gs.get(Xe.CONFIG_PARAMS.LOGGING_ROOT),Xe.LOG_NAMES.HDB),t={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:Xe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:cpe,autorestart:!1};return gs.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=mf,t.error_file=mf),t}o(ppe,"generateClusteringUpgradeV4ServiceConfig");function hpe(){let e={[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.RESTART_HDB};return zT.noBootFile()&&(e[Xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=zT.getEnvCliRootPath()),{...{name:Xe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:EY},script:lpe}}o(hpe,"generateRestart");function Epe(){return{apps:[gY()]}}o(Epe,"generateAllServiceConfigs");SY.exports={generateAllServiceConfigs:Epe,generateMainServerConfig:gY,generateRestart:hpe,generateNatsHubServerConfig:dpe,generateNatsLeafServerConfig:mpe,generateClusteringUpgradeV4ServiceConfig:ppe}});var Ql=v((fBe,NY)=>{"use strict";var Cr=(q(),M(z)),dBe=oe(),aa=WT(),QT=hr(),oa=Pt(),hc=TY(),HO=me(),Ec=Q(),_pe=uo(),{startWorker:yY,onMessageFromWorkers:gpe}=nt(),RY=require("fs"),Spe=require("node:path"),Tpe=(q(),M(z)),{setTimeout:ype}=require("node:timers/promises"),{execFile:Rpe,fork:bpe}=require("node:child_process");NY.exports={start:_c,restart:Ipe,kill:Ope,startAllServices:Ppe,startService:AY,restartHdb:wpe,startClusteringProcesses:IY,startClusteringThreads:wY,isHdbRestartRunning:Npe,getHdbPid:Cpe,cleanupChildrenProcesses:vh,reloadClustering:Dpe,expectedRestartOfChildren:bY};gpe(e=>{e.type==="restart"&&HO.initSync(!0)});var fo=[],Ape=10,kO;function _c(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?bpe(e.script,r,e):Rpe(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(a,c)=>{console.error(a,c)}),n.on("exit",async a=>{let c=fo.indexOf(n);c>-1&&fo.splice(c,1),!kO&&a!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Ape&&(RY.existsSync(aa.getHubConfigPath())?_c(e):(await aa.generateNatsConfig(!0),_c(e),await new Promise(l=>setTimeout(l,3e3)),await aa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await aa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(a){let c=HO.get(Cr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(a);){if(u.index&&oa.LOG_LEVEL_HIERARCHY[c]>=oa.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===oa.LOG_LEVELS.ERR||f===oa.LOG_LEVELS.WRN?Ec.OUTPUTS.STDERR:Ec.OUTPUTS.STDOUT;Ec.logCustomLevel(f||"info",h,s,a.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=oa.LOG_LEVELS[p]}if(oa.LOG_LEVEL_HIERARCHY[c]>=oa.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===oa.LOG_LEVELS.ERR||f===oa.LOG_LEVELS.WRN?Ec.OUTPUTS.STDERR:Ec.OUTPUTS.STDOUT;Ec.logCustomLevel(f||"info",m,s,a.toString().slice(d).trim())}}o(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),fo.length===0&&(t||(process.on("exit",vh),process.on("SIGINT",vh),process.on("SIGQUIT",vh),process.on("SIGTERM",vh))),fo.push(n)}o(_c,"start");function vh(e=!0){if(!kO&&(kO=!0,fo.length!==0))if(Ec.info("Killing child processes..."),fo.map(t=>t.kill()),e)process.exit(0);else return ype(2e3)}o(vh,"cleanupChildrenProcesses");function Ipe(e){bY();for(let t of fo)t.name===e&&t.kill()}o(Ipe,"restart");function bY(){for(let e of fo)e.config&&(e.config.restarts=0)}o(bY,"expectedRestartOfChildren");async function wpe(){await _c(hc.generateRestart())}o(wpe,"restartHdb");async function Npe(){let e=await list();for(let t in e)if(e[t].name===Cr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Npe,"isHdbRestartRunning");function Cpe(){let e=HO.getHdbBasePath();if(!e)return;let t=Spe.join(e,Tpe.HDB_PID_FILE),r=Mpe(t);if(!(!r||r===process.pid)&&vpe(r))return r}o(Cpe,"getHdbPid");function Ope(){for(let e of fo)e.kill();fo=[]}o(Ope,"kill");async function Ppe(){await IY(),await wY(),await _c(hc.generateAllServiceConfigs())}o(Ppe,"startAllServices");async function AY(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Cr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=hc.generateMainServerConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=hc.generateNatsIngestServiceConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=hc.generateNatsReplyServiceConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=hc.generateNatsHubServerConfig(),await _c(r,t),await aa.removeNatsConfig(e);return;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=hc.generateNatsLeafServerConfig(),await _c(r,t),await aa.removeNatsConfig(e);return;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=hc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}_c(r,t)}o(AY,"startService");var Lpe;async function IY(e=!1){for(let t in Cr.CLUSTERING_PROCESSES){let r=Cr.CLUSTERING_PROCESSES[t];await AY(r,e)}}o(IY,"startClusteringProcesses");async function wY(){Lpe=yY(Cr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Cr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await QT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await QT.updateLocalStreams();let e=await _pe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Cr.PRE_4_0_0_VERSION){Ec.info("Starting clustering upgrade 4.0.0 process"),yY(Cr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(wY,"startClusteringThreads");async function Dpe(){await aa.generateNatsConfig(!0),await QT.reloadNATSHub(),await QT.reloadNATSLeaf(),await aa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await aa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Dpe,"reloadClustering");function Mpe(e){try{return Number.parseInt(RY.readFileSync(e,"utf8"),10)}catch{return null}}o(Mpe,"readPidFile");function vpe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(vpe,"isProcessRunning")});var $O={};Re($O,{compactOnStart:()=>Upe,copyDb:()=>MY});async function Upe(){gc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,GO.get)(F.ROOTPATH),t=new Map,r=at();(0,qO.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,JT.join)(e,"backup",n+".mdb"),a=(0,JT.join)(e,$c,n+"-copy.mdb"),c=0;try{c=await CY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){gc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await MY(n,a),console.log("Backing up",n,"to",i);try{await(0,Jl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{Rd()}catch(n){gc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Jl.move)(i,s,{overwrite:!0}),await(0,Jl.remove)((0,JT.join)(e,$c,`${n}-copy.mdb-lock`));try{Rd()}catch(n){gc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){gc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,qO.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Jl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw Rd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await CY(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
20
20
|
Total record count before compaction: ${i}, total after: ${c}.
|
|
21
21
|
Database backup has not been removed and can be found here: ${s}`;gc.error(l),console.error(l)}(0,GO.get)(F.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,Jl.remove)(s))}}async function CY(e){let t=await(0,DY.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function pf(){}async function MY(e,t){console.log(`Copying database ${e} to ${t}`);let r=at()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=pf,m.primaryStore.remove=pf;for(let p in m.indices){let h=m.indices[p];h.put=pf,h.remove=pf}m.auditStore&&(m.auditStore.put=pf,m.auditStore.remove=pf),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,a=(0,OY.open)(new PY.default(t)),c=a.openDB(XT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=uS(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let R=new LY.OpenDBIObject(!h,h);R.encoding="binary",R.compression=E;let S=n.openDB(m,R);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",R.compression=g;let y=a.openDB(m,R);y.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,y,h,d)}if(i){let m=n.openDB(XT.AUDIT_STORE_NAME,xm);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,R=0,S=1e7,y=null;for(;S-- >0;)try{for(let C of m.getKeys({start:y,transaction:E}))try{y=C;let{value:I,version:k}=m.getEntry(C,{transaction:E});l=p.put(C,I,h?k:void 0),g++,E.openTimer&&(E.openTimer=0),R+=(C?.length||10)+I.length,u++>5e3&&(await l,console.log("copied",g,"entries",R,"bytes"),u=0)}catch(I){console.error("Error copying record",typeof C=="symbol"?"symbol":C,"from",e,"to",t,I)}console.log("finish copying, copied",g,"entries",R,"bytes");return}catch{if(typeof y=="string"){if(y==="z")return console.error("Reached end of dbi",y,"for",e,"to",t);y=y.slice(0,-2)+"z"}else if(typeof y=="number")y++;else return console.error("Unknown key type",y,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var OY,JT,Jl,GO,PY,LY,XT,DY,qO,gc,VO=se(()=>{we();OY=require("lmdb"),JT=require("path"),Jl=require("fs-extra"),GO=b(me()),PY=b(jm()),LY=b(zm()),XT=b(Yt());q();Hi();DY=b(Ml()),qO=b(gt()),gc=b(Q());o(Upe,"compactOnStart");o(CY,"getTotalDBRecordCount");o(pf,"noop");o(MY,"copyDb")});var YO=v((gBe,vY)=>{"use strict";var Uh=me();Uh.initSync();var hf=require("fs-extra"),KO=require("path"),Ef=(q(),M(z)),xpe=require("crypto"),Bpe=require("uuid").v4;vY.exports=Fpe;function Fpe(){if(Uh.getHdbBasePath()!==void 0){let e=KO.join(Uh.getHdbBasePath(),Ef.LICENSE_KEY_DIR_NAME,Ef.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=KO.join(Uh.getHdbBasePath(),Ef.LICENSE_KEY_DIR_NAME,Ef.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=KO.join(Uh.getHdbBasePath(),Ef.LICENSE_KEY_DIR_NAME,Ef.JWT_ENUM.JWT_PASSPHRASE_NAME);try{hf.accessSync(r),hf.accessSync(e),hf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=Bpe(),i=xpe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});hf.writeFileSync(r,s),hf.writeFileSync(e,i.privateKey),hf.writeFileSync(t,i.publicKey)}else throw n}}}o(Fpe,"checkJWTTokenExist")});var xY=v((TBe,UY)=>{"use strict";var WO=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};UY.exports={HdbInfoInsertObject:WO}});var kY=v((RBe,FY)=>{"use strict";var BY=(q(),M(z)),zO=class{static{o(this,"UpgradeObject")}constructor(t,r){this[BY.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[BY.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};FY.exports={UpgradeObject:zO}});var ZT=v((ABe,GY)=>{"use strict";var Ys=require("prompt"),_f=require("chalk"),HY=Q(),Ri=require("os"),jO=Vc(),QO=["yes","y"];async function kpe(e){let t=`${Ri.EOL}`+_f.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ri.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ri.EOL}${Ri.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ri.EOL}`;Ys.override=jO(["CONFIRM_UPGRADE"]),Ys.start(),Ys.message=t;let r={properties:{CONFIRM_UPGRADE:{description:_f.magenta(`${Ri.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Ys.get([r])}catch(s){return HY.error("There was an error when prompting user about an upgrade."),HY.error(s),!1}return QO.includes(n.CONFIRM_UPGRADE)}o(kpe,"forceUpdatePrompt");async function Hpe(e){let t=`${Ri.EOL}`+_f.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ri.EOL}`);Ys.override=jO(["CONFIRM_DOWNGRADE"]),Ys.start(),Ys.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:_f.magenta(`${Ri.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Ys.get([r]);return QO.includes(n.CONFIRM_DOWNGRADE)}o(Hpe,"forceDowngradePrompt");async function Gpe(){let e=`${Ri.EOL}`+_f.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Ys.override=jO(["GENERATE_CERTS"]),Ys.start(),Ys.message=e;let t={properties:{GENERATE_CERTS:{description:_f.magenta(`${Ri.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Ys.get([t]);return QO.includes(r.GENERATE_CERTS)}o(Gpe,"upgradeCertsPrompt");GY.exports={forceUpdatePrompt:kpe,forceDowngradePrompt:Hpe,upgradeCertsPrompt:Gpe}});var ey=v((wBe,qY)=>{"use strict";var JO=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};qY.exports=JO});var VY=v((DBe,$Y)=>{"use strict";var qpe=oe(),$pe=gt(),CBe=Q(),OBe=require("path"),PBe=require("fs"),LBe=(q(),M(z));$Y.exports={getOldPropsValue:Vpe};function Vpe(e,t,r=!1){let n=t.getRaw(e);return qpe.isNotEmptyAndHasValue(n)?n:r?$pe.getDefaultConfig(e):""}o(Vpe,"getOldPropsValue")});var zY=v((vBe,WY)=>{"use strict";var Sc=require("path"),Tc=require("fs-extra"),Kpe=require("properties-reader"),Ype=ey(),gr=Q(),{getOldPropsValue:Tt}=VY(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:Xl}=(q(),M(z)),Zl=gt(),ty=me(),KY=oe(),mo=(q(),M(z)),XO=new Ype("3.1.0"),YY=[];function Wpe(){let e=Kpe(ty.get(Se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),gr.info(t);let r=` ;Settings for the HarperDB process.
|
|
22
22
|
|
|
@@ -130,7 +130,7 @@ Host ${s}
|
|
|
130
130
|
`)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Oe.appendFile(_a,a);let f=await Ni(e);return f.message=`Added ssh key: ${r}${d}`,f}o(GSe,"addSSHKey");async function qSe(e){let t=Yn.updateSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r,key:n}=e;Qt.trace("updating ssh key",r);let s=$e.join(Lc,r+".key");if(!await Oe.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Oe.outputFile(s,n);let i=await Ni(e);return i.message=`Updated ssh key: ${r}`,i}o(qSe,"updateSSHKey");async function $Se(e){let t=Yn.deleteSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r}=e;Qt.trace("deleting ssh key",r);let n=$e.join(Lc,r+".key"),s=$e.join(Lc,"config");if(!await Oe.pathExists(n))throw new Error("Key does not exist");let i=await Oe.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Oe.outputFile(s,i),Oe.removeSync(n);let c=await Ni(e);return c.message=`Deleted ssh key: ${r}`,c}o($Se,"deleteSSHKey");async function VSe(e){let t=[];return await Oe.pathExists(Lc)&&(await Oe.readdir(Lc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(VSe,"listSSHKeys");async function KSe(e){let t=Yn.setSSHKnownHostsValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{known_hosts:r}=e;await Oe.outputFile(_a,r);let n=await Ni(e);return n.message="Known hosts successfully set",n}o(KSe,"setSSHKnownHosts");async function YSe(e){return await Oe.pathExists(_a)?{known_hosts:await Oe.readFile(_a,"utf8")}:{known_hosts:null}}o(YSe,"getSSHKnownHosts");ar.customFunctionsStatus=NSe;ar.getCustomFunctions=CSe;ar.getCustomFunction=OSe;ar.setCustomFunction=PSe;ar.dropCustomFunction=LSe;ar.addComponent=DSe;ar.dropCustomFunctionProject=MSe;ar.packageComponent=vSe;ar.deployComponent=USe;ar.getComponents=BSe;ar.getComponentFile=FSe;ar.setComponentFile=kSe;ar.dropComponent=HSe;ar.addSSHKey=GSe;ar.updateSSHKey=qSe;ar.deleteSSHKey=$Se;ar.listSSHKeys=VSe;ar.setSSHKnownHosts=KSe;ar.getSSHKnownHosts=YSe});var pL=v((dke,Hj)=>{"use strict";var Qs=require("joi"),kj=ft();Hj.exports={readTransactionLogValidator:WSe,deleteTransactionLogsBeforeValidator:zSe};function WSe(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),from:Qs.date().timestamp(),to:Qs.date().timestamp(),limit:Qs.number().min(1)});return kj.validateBySchema(e,t)}o(WSe,"readTransactionLogValidator");function zSe(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),timestamp:Qs.date().timestamp().required()});return kj.validateBySchema(e,t)}o(zSe,"deleteTransactionLogsBeforeValidator")});var Yy=v((mke,Yj)=>{"use strict";var hL=(q(),M(z)),aE=hr(),Gj=oe(),qj=me(),$j=Zi(),Vj=Q(),{handleHDBError:Vy,hdbErrors:jSe}=_e(),{HTTP_STATUS_CODES:Ky}=jSe,{readTransactionLogValidator:QSe,deleteTransactionLogsBeforeValidator:JSe}=pL(),Kj=ls(),XSe="Logs successfully deleted from transaction log.",ZSe="All logs successfully deleted from transaction log.";Yj.exports={readTransactionLog:eTe,deleteTransactionLogsBefore:rTe};async function eTe(e){let t=QSe(e);if(t)throw Vy(t,t.message,Ky.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=Gj.checkSchemaTableExist(e.database,e.table);if(r)throw Vy(new Error,r,Ky.NOT_FOUND,void 0,void 0,!0);return qj.get(hL.CONFIG_PARAMS.CLUSTERING_ENABLED)?await tTe(e):(Vj.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),Kj.readAuditLog(e))}o(eTe,"readTransactionLog");async function*tTe(e){let t=$j.createNatsTableStreamName(e.database,e.table),r=await aE.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===hL.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(tTe,"readTransactionLogNats");async function rTe(e){let t=JSe(e);if(t)throw Vy(t,t.message,Ky.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!qj.get(hL.CONFIG_PARAMS.CLUSTERING_ENABLED))return Vj.info("Delete transaction logs called for Plexus"),Kj.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=Gj.checkSchemaTableExist(r,n);if(i)throw Vy(new Error,i,Ky.NOT_FOUND,void 0,void 0,!0);let a=$j.createNatsTableStreamName(r,n),{jsm:c}=await aE.getNATSReferences(),l=await aE.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=XSe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=ZSe):f=(await aE.viewStream(a,parseInt(s),1))[0].nats_sequence,await aE.purgeTableStream(r,n,{seq:f}),d}o(rTe,"deleteTransactionLogsBefore")});var EL=v((hke,zj)=>{"use strict";var Wy=require("joi"),nTe=require("path"),{handleHDBError:sTe,hdbErrors:iTe}=_e(),{HTTP_STATUS_CODES:oTe}=iTe,aTe=ft(),Wj=Q();zj.exports={installModules:dTe};var{CONFIG_PARAMS:cTe}=(q(),M(z)),{getConfigValue:lTe}=gt(),{nonInteractiveSpawn:uTe}=(qy(),M(Gy));async function dTe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";Wj.warn(t,e.projects);let r=mTe(e);if(r)throw sTe(r,r.message,oTe.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=lTe(cTe.COMPONENTSROOT),a={},c=["install","--force","--omit=dev","--json"];s&&c.push("--dry-run");for(let l of n){a[l]={npm_output:null,npm_error:null};let u=nTe.join(i,l);try{let{stdout:d,stderr:f}=uTe(l,"npm",c,u);d=d?d.replace(`
|
|
131
131
|
`,""):null,f=f?f.replace(`
|
|
132
132
|
`,""):null;try{a[l].npm_output=JSON.parse(d)}catch{a[l].npm_output=d}try{a[l].npm_error=JSON.parse(f)}catch{a[l].npm_error=f}}catch(d){d.stderr?a[l].npm_error=fTe(d.stderr):a[l].npm_error=d.message;continue}}return Wj.info(`finished installModules with response ${a}`),a.warning=t,a}o(dTe,"installModules");function fTe(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
133
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(fTe,"parseNPMStdErr");function mTe(e){let t=Wy.object({projects:Wy.array().min(1).items(Wy.string()).required(),dry_run:Wy.boolean().default(!1)});return aTe.validateBySchema(e,t)}o(mTe,"modulesValidator")});var TL={};Re(TL,{describeMetric:()=>e4,describeMetricOp:()=>SL,get:()=>Xj,getOp:()=>_L,listMetrics:()=>Zj,listMetricsOp:()=>gL});async function hTe(e){return(await K_().get(e)).hostname}function jj(e,t){return e.length===0||e.includes(t)}function _L(e){return cE.trace?.("get_analytics request:",e),Xj(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function Jj(e){return"conditions"in e?{...e,conditions:e.conditions.map(Jj)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function Xj(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(Jj));let a=t??[];jj(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i};return a.length>0&&(c.select=a),cE.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],jj(a,"node")&&(cE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await hTe(d)),cE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function gL(e){return Zj(e.metric_types)}async function Zj(e=["builtin"]){let t=[],r=Object.values(Fo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function SL(e){return e4(e.metric)}async function e4(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return cE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var Qj,pTe,cE,yL=se(()=>{Qj=b(Q());gA();SA();({forComponent:pTe}=Qj.default),cE=pTe("analytics").conditional;o(hTe,"lookupHostname");o(jj,"isSelected");o(_L,"getOp");o(Jj,"conformCondition");o(Xj,"get");o(gL,"listMetricsOp");o(Zj,"listMetrics");o(SL,"describeMetricOp");o(e4,"describeMetric")});var zy,jy,lE,Qy=se(()=>{zy={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},jy=Object.keys(zy),lE="primary"});function r4(e){return t4.validateBySchema(e,STe)}var uE,t4,ETe,_Te,gTe,STe,n4=se(()=>{uE=b(require("joi")),t4=b(ft());Qy();ETe=jy,_Te=Object.entries(zy).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),gTe=o(()=>{let e=uE.default.string().min(1).max(512);return Object.entries(zy).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:uE.default.string().valid(...r.allowedValues).messages({"any.only":_Te[t]})}))}),e.required()},"createStatusValidationSchema"),STe=uE.default.object({id:uE.default.string().valid(...ETe).required(),status:gTe()});o(r4,"validateStatus")});function s4(){RL||(RL=ga.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),bL=new Uint8Array(RL))}function i4(){s4(),bL[0]=1}function o4(){return s4(),bL[0]===1}var RL,bL,AL=se(()=>{dE();o(s4,"ensureInitialized");o(i4,"requestRestart");o(o4,"restartNeeded")});var OL={};Re(OL,{DEFAULT_STATUS_ID:()=>lE,STATUS_IDS:()=>jy,Status:()=>ga,clear:()=>wL,get:()=>NL,set:()=>CL});function mE(){return IL||(IL=Ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),IL}function wL({id:e}){return fE.debug?.("clearStatus",e),mE().delete(e)}async function yTe(){fE.debug?.("getAllStatus");let e=mE().get({}),t=await Ap.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=o4();return{systemStatus:e,componentStatus:r,restartRequired:n}}function NL({id:e}){return e?(fE.debug?.("getStatus",e),mE().get(e)):(fE.debug?.("getStatus","all"),yTe())}function CL({status:e,id:t=lE}){let r=r4({status:e,id:t});if(r)throw(0,Jy.handleHDBError)(r,r.message,TTe.BAD_REQUEST);return fE.debug?.("setStatus",t,e),mE().put(t,{status:e})}var Jy,a4,TTe,IL,ga,fE,dE=se(()=>{we();Jy=b(_e()),a4=b(es());n4();Qy();Ip();AL();Qy();({HTTP_STATUS_CODES:TTe}=Jy.hdbErrors);o(mE,"getStatusTable");ga={get primaryStore(){return mE().primaryStore}},fE=(0,a4.loggerWithTag)("status");o(wL,"clearStatus");o(yTe,"getAllStatus");o(NL,"getStatus");o(CL,"setStatus")});var ML={};Re(ML,{getFingerprint:()=>LL,getRegistrationInfo:()=>PL,setLicense:()=>DL});function PL(){return{version:c4.packageJson.version,deprecated:!0}}function LL(){return{message:"this-is-deprecated",deprecated:!0}}function DL(){return{deprecated:!0}}var c4,vL=se(()=>{c4=b(Ct());o(PL,"getRegistrationInfo");o(LL,"getFingerprint");o(DL,"setLicense")});var u4=v((Uke,l4)=>{"use strict";var pE=require("alasql"),lu=require("recursive-iterator"),Ci=Q(),RTe=oe(),hE=(q(),M(z)),UL=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,ATe(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>hE.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!hE.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][hE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=bTe(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!hE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new pE.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function bTe(e){return e.filter(t=>t[hE.PERMS_CRUD_ENUM.READ])}o(bTe,"filterReadRestrictedAttrs");function ATe(e,t,r,n,s){ITe(e,t,r,n,s)}o(ATe,"interpretAST");function EE(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(EE,"addSchemaTableToMap");function ITe(e,t,r,n,s){if(!e){Ci.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof pE.yy.Insert?OTe(e,t,r):e instanceof pE.yy.Select?wTe(e,t,r,n,s):e instanceof pE.yy.Update?NTe(e,t,r):e instanceof pE.yy.Delete?CTe(e,t,r):Ci.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(ITe,"getRecordAttributesAST");function wTe(e,t,r,n,s){if(!e){Ci.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(RTe.isEmptyOrZeroLength(i)){Ci.error("No schema specified");return}e.from.forEach(c=>{EE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),EE(c.table,t,r,n,s)});let a=new lu(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Ci.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new lu(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{Ci.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new lu(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{Ci.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new lu(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{Ci.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(wTe,"getSelectAttributes");function NTe(e,t,r){if(!e){Ci.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new lu(e.columns),s=e.table.databaseid;EE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&xL(e.table.tableid,s,i.columnid,t,r)}o(NTe,"getUpdateAttributes");function CTe(e,t,r){if(!e){Ci.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new lu(e.where),s=e.table.databaseid;EE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&xL(e.table.tableid,s,i.columnid,t,r)}o(CTe,"getDeleteAttributes");function OTe(e,t,r){if(!e){Ci.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new lu(e.columns),s=e.into.databaseid;EE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&xL(e.into.tableid,s,i.columnid,t,r)}o(OTe,"getInsertAttributes");function xL(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(xL,"pushAttribute");l4.exports=UL});var tR=v((Bke,N4)=>{"use strict";var BL=Gn(),Xy=_n(),As=IT(),SE=Ml(),FL=bl(),PTe=VC(),LTe=I1(),TE=ds(),Zy=qp(),Pr=Q(),DTe=jC(),MTe=Ah(),vTe=RO(),UTe=Oh(),xTe=IO(),BTe=wO(),FTe=GT(),kTe=PO(),kL=$T(),Sa=oe(),m4=Df(),wn=(q(),M(z)),p4=aj(),HTe=yh(),h4=(Dd(),M(zp)),E4=(Fy(),M(rE)),_4=gt(),yr=dL(),g4=Yy(),GTe=EL(),vf=Es(),S4=(of(),M(sf)),HL=(yL(),M(TL)),GL=(dE(),M(OL)),T4=(Kh(),M(gy)),qL=(vL(),M(ML)),y4=jN(),{handleHDBError:Wn,hdbErrors:R4}=_e(),{HDB_ERROR_MSGS:ln,HTTP_STATUS_CODES:_E}=R4,ee=new Map,b4="delete",Dc="insert",Js="read",uu="update",gE="describe",d4=SE.describeSchema.name,f4=SE.describeTable.name,A4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},qTe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},$Te="catchup",VTe="handleGetJob",KTe="handleGetJobsByStartDate",eR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},YTe=[As.createTable.name,As.createAttribute.name,As.dropTable.name,As.dropAttribute.name],I4={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};ee.set(BL.insert.name,new re(!1,[Dc]));ee.set(BL.update.name,new re(!1,[uu]));ee.set(BL.upsert.name,new re(!1,[Dc,uu]));ee.set(Xy.searchByConditions.name,new re(!1,[Js]));ee.set(Xy.searchByHash.name,new re(!1,[Js]));ee.set(Xy.searchByValue.name,new re(!1,[Js]));ee.set(Xy.search.name,new re(!1,[Js]));ee.set(As.createSchema.name,new re(!0,[]));ee.set(As.createTable.name,new re(!0,[]));ee.set(As.createAttribute.name,new re(!1,[Dc]));ee.set(As.dropSchema.name,new re(!0,[]));ee.set(As.dropTable.name,new re(!0,[]));ee.set(As.dropAttribute.name,new re(!0,[]));ee.set(SE.describeSchema.name,new re(!1,[Js]));ee.set(SE.describeTable.name,new re(!1,[Js]));ee.set(FL.deleteRecord.name,new re(!1,[b4]));ee.set(TE.addUser.name,new re(!0,[]));ee.set(TE.alterUser.name,new re(!0,[]));ee.set(TE.dropUser.name,new re(!0,[]));ee.set(TE.listUsersExternal.name,new re(!0,[]));ee.set(Zy.listRoles.name,new re(!0,[]));ee.set(Zy.addRole.name,new re(!0,[]));ee.set(Zy.alterRole.name,new re(!0,[]));ee.set(Zy.dropRole.name,new re(!0,[]));ee.set(DTe.name,new re(!0,[]));ee.set(MTe.name,new re(!0,[]));ee.set(vTe.name,new re(!0,[]));ee.set(UTe.name,new re(!0,[]));ee.set(xTe.name,new re(!0,[]));ee.set(BTe.name,new re(!0,[]));ee.set(kL.setRoutes.name,new re(!0,[]));ee.set(kL.getRoutes.name,new re(!0,[]));ee.set(kL.deleteRoutes.name,new re(!0,[]));ee.set(_4.setConfiguration.name,new re(!0,[]));ee.set(FTe.clusterStatus.name,new re(!0,[]));ee.set(kTe.name,new re(!0,[]));ee.set(FL.deleteFilesBefore.name,new re(!0,[]));ee.set(FL.deleteAuditLogsBefore.name,new re(!0,[]));ee.set(m4.restart.name,new re(!0,[]));ee.set(m4.restartService.name,new re(!0,[]));ee.set(PTe.name,new re(!0,[]));ee.set(LTe.name,new re(!0,[Js]));ee.set(As.cleanupOrphanBlobs.name,new re(!0,[]));ee.set(HTe.systemInformation.name,new re(!0,[]));ee.set(_4.getConfiguration.name,new re(!0,[]));ee.set(g4.readTransactionLog.name,new re(!0,[]));ee.set(g4.deleteTransactionLogsBefore.name,new re(!0,[]));ee.set(GTe.installModules.name,new re(!0,[]));ee.set(vf.createCsr.name,new re(!0,[]));ee.set(vf.signCertificate.name,new re(!0,[]));ee.set(vf.listCertificates.name,new re(!0,[]));ee.set(vf.addCertificate.name,new re(!0,[]));ee.set(vf.removeCertificate.name,new re(!0,[]));ee.set(vf.getKey.name,new re(!0,[]));ee.set(S4.addNodeBack.name,new re(!0,[]));ee.set(S4.removeNodeBack.name,new re(!0,[]));ee.set(HL.getOp.name,new re(!1,[Js]));ee.set(HL.listMetricsOp.name,new re(!1,[Js]));ee.set(HL.describeMetricOp.name,new re(!1,[Js]));ee.set(GL.clear.name,new re(!0,[]));ee.set(GL.get.name,new re(!0,[]));ee.set(GL.set.name,new re(!0,[]));ee.set(T4.installUsageLicenseOp.name,new re(!0,[]));ee.set(T4.getUsageLicensesOp.name,new re(!0,[]));ee.set(qL.getFingerprint.name,new re(!0,[]));ee.set(qL.setLicense.name,new re(!0,[]));ee.set(h4.createTokens.name,new re(!1,[]));ee.set(h4.refreshOperationToken.name,new re(!1,[]));ee.set(E4.login.name,new re(!1,[]));ee.set(E4.logout.name,new re(!1,[]));ee.set(yr.customFunctionsStatus.name,new re(!0,[]));ee.set(yr.getCustomFunctions.name,new re(!0,[]));ee.set(yr.getComponents.name,new re(!0,[]));ee.set(yr.getComponentFile.name,new re(!0,[]));ee.set(yr.setComponentFile.name,new re(!0,[]));ee.set(yr.dropComponent.name,new re(!0,[]));ee.set(yr.getCustomFunction.name,new re(!0,[]));ee.set(yr.setCustomFunction.name,new re(!0,[]));ee.set(yr.dropCustomFunction.name,new re(!0,[]));ee.set(yr.addComponent.name,new re(!0,[]));ee.set(yr.dropCustomFunctionProject.name,new re(!0,[]));ee.set(yr.packageComponent.name,new re(!0,[]));ee.set(yr.deployComponent.name,new re(!0,[]));ee.set(yr.addSSHKey.name,new re(!0,[]));ee.set(yr.updateSSHKey.name,new re(!0,[]));ee.set(yr.deleteSSHKey.name,new re(!0,[]));ee.set(yr.listSSHKeys.name,new re(!0,[]));ee.set(yr.setSSHKnownHosts.name,new re(!0,[]));ee.set(yr.getSSHKnownHosts.name,new re(!0,[]));ee.set(qL.getRegistrationInfo.name,new re(!1,[]));ee.set(TE.userInfo.name,new re(!1,[]));ee.set(SE.describeAll.name,new re(!1,[]));ee.set(VTe,new re(!1,[]));ee.set(KTe,new re(!0,[]));ee.set($Te,new re(!0,[]));ee.set(eR.CSV_DATA_LOAD,new re(!1,[Dc,uu]));ee.set(eR.CSV_URL_LOAD,new re(!1,[Dc,uu]));ee.set(eR.CSV_FILE_LOAD,new re(!1,[Dc,uu]));ee.set(eR.IMPORT_FROM_S3,new re(!1,[Dc,uu]));ee.set(I4.EXPORT_TO_S3,new re(!0,[]));ee.set(I4.EXPORT_LOCAL,new re(!0,[]));ee.set(wn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[b4]));ee.set(wn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[Js]));ee.set(wn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[Dc]));ee.set(wn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[uu]));N4.exports={verifyPerms:zTe,verifyPermsAst:WTe,verifyBulkLoadAttributePerms:QTe};function WTe(e,t,r){if(Sa.isEmptyOrZeroLength(e))throw Pr.info("verify_perms_ast has an empty user parameter"),Wn(new Error);if(Sa.isEmptyOrZeroLength(t))throw Pr.info("verify_perms_ast has an empty user parameter"),Wn(new Error);if(Sa.isEmptyOrZeroLength(r))throw Pr.info("verify_perms_ast has a null operation parameter"),Wn(new Error);try{let n=u4(),s=require("alasql"),i=new y4,a=new n(e),c=a.getSchemas(),l=new Map;if((!c||c.length===0)&&a.affected_attributes&&a.affected_attributes.size>0)throw Pr.info("No schemas defined in verifyPermsAst(), will not continue."),Wn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&A4[r])throw Wn(new Error,ln.DROP_SYSTEM,_E.FORBIDDEN);if(u&&!d)return null;let f=p4.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=a.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=a.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=w4(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let g=a.getAttributesBySchemaTableName(h,p[E]),R=VL(t.role.permission,h,p[E]);$L(g,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Wn(n)}}o(WTe,"verifyPermsAst");function zTe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Pr.info("null required parameter in verifyPerms"),Wn(new Error,ln.DEFAULT_INVALID_REQUEST,_E.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new y4;if(Sa.isEmptyOrZeroLength(e.hdb_user?.role)||Sa.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Pr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(ln.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(wn.SYSTEM_SCHEMA_NAME)||s===wn.SYSTEM_SCHEMA_NAME;if(l&&d&&qTe[e.operation]&&(i===wn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===wn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===wn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&A4[r])throw Wn(new Error,ln.DROP_SYSTEM,_E.FORBIDDEN);if(l&&!d||u===!0&&(r===As.createSchema.name||r===As.dropSchema.name))return null;if(YTe.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=p4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===d4||r===f4)&&!f.super_user){if(s===wn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(ln.SCHEMA_PERM_ERROR(s));if(r===d4&&(!f[s]||!f[s][gE]))return c.handleInvalidItem(ln.SCHEMA_NOT_FOUND(s));if(r===f4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][gE]))return c.handleInvalidItem(ln.TABLE_NOT_FOUND(s,i))}let m=w4(e.hdb_user,r,a,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&wn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[wn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[wn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=E)}let p=jTe(e),h=VL(e.hdb_user?.role?.permission,s,i);return $L(p,h,r,i,s,c,n),c.getPermsResponse()}o(zTe,"verifyPerms");function w4(e,t,r,n,s){if(Sa.arrayHasEmptyValues([e,t,r]))throw Pr.info("hasPermissions has an invalid parameter"),Wn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Pr.info(`operation ${t} not found.`),Wn(new Error,ln.OP_NOT_FOUND(t),_E.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Pr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(ln.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][gE]===!1){n.addInvalidItem(ln.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(ln.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[gE]===!1)n.addInvalidItem(ln.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!Sa.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Pr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=ln.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Pr.error(p),Pr.error(m),Wn(R4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(w4,"hasPermissions");function $L(e,t,r,n,s,i,a){if(!e||!t)throw Pr.info("no attributes specified in checkAttributePerms."),Wn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Pr.info(`no permissions found for ${r} in checkAttributePerms().`),Wn(new Error);if(Sa.isEmptyOrZeroLength(t))return Pr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[gE]===!1){i.addInvalidItem(ln.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(wn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Js)throw Wn(new Error,ln.SYSTEM_TIMESTAMP_PERMS_ERR,_E.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(ln.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o($L,"checkAttributePerms");function jTe(e){let t=new Set;try{if(e.action)return t;if(e.operation===wn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Pr.info(r)}return t}o(jTe,"getRecordAttributes");function VL(e,t,r){let n=new Map;if(Sa.isEmpty(e))return Pr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Pr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(VL,"getAttributePermissions");function QTe(e,t,r,n,s,i,a){let c=new Set(i),l=VL(e,n,s);$L(c,l,t,s,n,a,r)}o(QTe,"verifyBulkLoadAttributePerms")});var YL=v((kke,C4)=>{"use strict";var KL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};C4.exports=KL});var XL=v((Kke,K4)=>{"use strict";var rR=Gn(),sR=GN(),JTe=require("needle"),Oi=(q(),M(z)),Gke=Pt(),Uf=oe(),{handleHDBError:Zt,hdbErrors:B4}=_e(),{HTTP_STATUS_CODES:un,HDB_ERROR_MSGS:Lr,CHECK_LOGS_WRAPPER:fu}=B4,xf=Q(),WL=require("papaparse");Uf.promisifyPapaParse();var Pi=require("fs-extra"),XTe=require("path"),{chain:O4}=require("stream-chain"),P4=require("stream-json/streamers/StreamArray"),L4=require("stream-json/utils/Batch"),D4=require("stream-chain/utils/comp"),{finished:M4}=require("stream"),ZTe=me(),F4=qN(),eye=$N(),{BulkLoadFileObject:jL,BulkLoadDataObject:tye}=Wq(),QL=jN(),{verifyBulkLoadAttributePerms:k4}=tR(),qke=YL(),$ke=hr(),Vke=Zi(),{databases:rye}=(we(),M(mt)),{coerceType:nye}=(ag(),M(_G)),v4="No records parsed from csv file.",du=`${ZTe.get("HDB_ROOT")}/tmp`,{schemaRegex:sye}=Wi(),U4=1024*1024*2,x4=5e3,iye={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};K4.exports={csvDataLoad:oye,csvURLLoad:aye,csvFileLoad:cye,importFromS3:lye};async function oye(e,t){let r=sR.dataObject(e);if(r)throw Zt(r,r.message,un.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=q4(e.schema,e.table),i=WL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:zL.bind(null,s),dynamicTyping:!1}),a=new QL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&k4(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Zt(new Error,c,un.BAD_REQUEST,void 0,void 0,!0);let l=new tye(e.action,e.schema,e.table,i.data);return n=await F4.callOperationFunctionAsAwait($4,l,null),n.message===v4?v4:V4(n.records,n.number_written)}catch(s){throw mu(s)}}o(oye,"csvDataLoad");async function aye(e){let t=sR.urlObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${du}/${r}`;try{await uye(e,r)}catch(s){throw xf.error(Lr.DOWNLOAD_FILE_ERR(r)+" - "+s),Zt(s,fu(Lr.DOWNLOAD_FILE_ERR(r)))}try{let s=new jL(this.job_operation_function.name,e.action,e.schema,e.table,n,Oi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await JL(s);return await nR(n),i}catch(s){throw await nR(n),mu(s)}}o(aye,"csvURLLoad");async function cye(e){let t=sR.fileObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r=new jL(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Oi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await JL(r)}catch(n){throw mu(n)}}o(cye,"csvFileLoad");async function lye(e){let t=sR.s3FileObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=XTe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${du}/${s}`;let i=new jL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await dye(s,e);let a=await JL(i);return await nR(r),a}catch(n){throw await nR(r),mu(n)}}o(lye,"importFromS3");async function uye(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await JTe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw Zt(n,s,n.statusCode,Oi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}mye(r,e.csv_url),await fye(t,r.raw)}o(uye,"downloadCSVFile");async function dye(e,t){try{let r=`${du}/${e}`;await Pi.mkdirp(du),await Pi.writeFile(`${du}/${e}`,"",{flag:"a+"});let n=await Pi.createWriteStream(r),s=await eye.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){xf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw xf.error(Lr.S3_DOWNLOAD_ERR+" - "+r),Zt(r,fu(Lr.S3_DOWNLOAD_ERR))}}o(dye,"downloadFileFromS3");async function fye(e,t){try{await Pi.mkdirp(du),await Pi.writeFile(`${du}/${e}`,t)}catch(r){throw xf.error(Lr.WRITE_TEMP_FILE_ERR),Zt(r,fu(Lr.DEFAULT_BULK_LOAD_ERR))}}o(fye,"writeFileToTempFolder");async function nR(e){if(e)try{await Pi.access(e),await Pi.unlink(e)}catch{xf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(nR,"deleteTempFile");function mye(e,t){if(e.statusCode!==B4.HTTP_STATUS_CODES.OK)throw Zt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,un.BAD_REQUEST);if(!iye[e.headers["content-type"]])throw Zt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,un.BAD_REQUEST);if(!e.raw)throw Zt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,un.BAD_REQUEST)}o(mye,"validateURLResponse");async function JL(e){try{let t;switch(e.file_type){case Oi.VALID_S3_FILE_TYPES.CSV:t=await pye(e);break;case Oi.VALID_S3_FILE_TYPES.JSON:t=await hye(e);break;default:throw Zt(new Error,Lr.DEFAULT_BULK_LOAD_ERR,un.BAD_REQUEST,Oi.LOG_LEVELS.ERROR,Lr.INVALID_FILE_EXT_ERR(e))}return V4(t.records,t.number_written)}catch(t){throw mu(t)}}o(JL,"fileLoad");async function H4(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await rR.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&k4(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Zt(c);r(l)}}o(H4,"validateChunk");async function G4(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Uf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!Uf.isEmpty(c)&&!Uf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await F4.callOperationFunctionAsAwait($4,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Zt(c,fu(Lr.INSERT_CSV_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.INSERT_CSV_ERR+" - "+c);r(l)}}o(G4,"insertChunk");async function pye(e){let t={records:0,number_written:0},r=q4(e.schema,e.table);try{let n=new QL,s=Pi.createReadStream(e.file_path,{highWaterMark:U4});s.setEncoding("utf8"),await WL.parsePromise(s,H4.bind(null,e,n),zL.bind(null,r));let i=n.getPermsResponse();if(i)throw Zt(new Error,i,un.BAD_REQUEST);return s=Pi.createReadStream(e.file_path,{highWaterMark:U4}),s.setEncoding("utf8"),await WL.parsePromise(s,G4.bind(null,e,t),zL.bind(null,r)),s.destroy(),t}catch(n){throw Zt(n,fu(Lr.PAPA_PARSE_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.PAPA_PARSE_ERR+n)}}o(pye,"callPapaParse");function q4(e,t){let r=rye[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>nye(i,s));return n}o(q4,"createTransformMap");function zL(e,t,r){let n=e.get(r);return n?n(t):Uf.autoCast(t)}o(zL,"typeFunction");async function hye(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new QL,s=O4([Pi.createReadStream(e.file_path,{encoding:"utf-8"}),P4.withParser(),c=>c.value,new L4({batchSize:x4}),D4(async c=>{await H4(e,n,r,c)})]);await new Promise((c,l)=>{M4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Zt(new Error,i,un.BAD_REQUEST);let a=O4([Pi.createReadStream(e.file_path,{encoding:"utf-8"}),P4.withParser(),c=>c.value,new L4({batchSize:x4}),D4(async c=>{await G4(e,t,r,c)})]);return await new Promise((c,l)=>{M4(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Zt(n,fu(Lr.INSERT_JSON_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.INSERT_JSON_ERR+n)}}o(hye,"insertJson");async function $4(e){let t={};try{e.data&&e.data.length>0&&Eye(e.data[0])?t=await _ye(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",xf.info(t.message))}catch(r){throw mu(r)}return t}o($4,"callBulkFileLoad");function Eye(e){let t=Object.keys(e);for(let r of t)if(!sye.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(Eye,"validateColumnNames");async function _ye(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=rR.insert;break;case"update":i=rR.update;break;case"upsert":i=rR.upsert;break;default:throw Zt(new Error,Lr.INVALID_ACTION_PARAM_ERR(n),un.BAD_REQUEST,Oi.LOG_LEVELS.ERROR,Lr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Uf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw mu(a)}}o(_ye,"bulkFileLoad");function V4(e,t){return`successfully loaded ${t} of ${e} records`}o(V4,"buildResponseMsg");function mu(e){return Zt(e,fu(Lr.DEFAULT_BULK_LOAD_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(mu,"buildTopLevelErrMsg")});var j4=v((zke,z4)=>{"use strict";var gye=_n(),Sye=mi(),Y4=Q(),Tye=Gn(),Wke=kS(),yye=require("clone"),eD=require("alasql"),Rye=kg(),W4=require("util"),bye=W4.promisify(Sye.getTableSchema),Aye=W4.promisify(gye.search),Iye=(q(),M(z)),ZL=oe();Rye(eD);z4.exports={update:Nye};var wye="There was a problem performing this update. Please check the logs and try again.";async function Nye({statement:e,hdb_user:t}){let r=await bye(e.table.databaseid,e.table.tableid),n=Cye(e.columns);ZL.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=yye(s),c=ZL.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=eD.parse(l).statements[0],d=await Aye(u),f=Oye(n,d);return Pye(a,f,t)}o(Nye,"update");function Cye(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=eD.compile(`SELECT ${r.expression.toString()} AS [${Iye.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Y4.error(t),new Error(wye)}}o(Cye,"createUpdateRecord");function Oye(e,t){return ZL.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Oye,"buildUpdateRecords");async function Pye(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Tye.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Y4.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Pye,"updateRecords")});var J4=v((Xke,Q4)=>{var Lye=require("alasql"),Dye=_n(),Mye=Q(),vye=ls(),rD=require("util"),tD=oe(),Uye=(q(),M(z)),xye=mi(),Qke=kS(),Jke=Gn(),Bye="record",Fye="successfully deleted",kye=rD.callbackify($ye),Hye=rD.promisify(Dye.search),Gye=rD.promisify(xye.getTableSchema);Q4.exports={convertDelete:kye};function qye(e){return`${e.deleted_hashes.length} ${Bye}${e.deleted_hashes.length===1?"":"s"} ${Fye}`}o(qye,"generateReturnMessage");async function $ye({statement:e,hdb_user:t}){let r=await Gye(e.table.databaseid,e.table.tableid);tD.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=tD.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Lye.parse(a).statements[0],l={operation:Uye.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Hye(c);let u=await vye.deleteRecords(l);return tD.isEmptyOrZeroLength(u.message)&&(u.message=qye(u)),delete u.txn_time,u}catch(u){throw Mye.error(u),u.hdb_code?u.message:u}}o($ye,"convertDelete")});var RE=v((eHe,rQ)=>{"use strict";rQ.exports={evaluateSQL:rRe,processAST:tQ,convertSQLToAST:eQ,checkASTPermissions:Z4};var Vye=Gn(),X4=require("util"),Kye=X4.callbackify(Vye.insert),Yye=_n().search,Wye=j4().update,zye=X4.callbackify(Wye),jye=J4().convertDelete,Mc=require("alasql"),Qye=tR(),iR=Q(),Jye=kg(),Xye=oe(),yE=(q(),M(z)),{hdbErrors:Zye,handleHDBError:nD}=_e(),{HTTP_STATUS_CODES:sD}=Zye;Jye(Mc);var eRe=403,tRe="There was a problem performing this insert. Please check the logs and try again.",iD=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function rRe(e,t){let r=e.parsed_sql_object;if(!r){r=eQ(e.sql);let n,s=r.ast.statements[0];if(s instanceof Mc.yy.Insert?n=s.into.databaseid:s instanceof Mc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Mc.yy.Update||s instanceof Mc.yy.Delete?n=s.table.databaseid:iR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Mc.yy.Select)&&Xye.isEmptyOrZeroLength(n))return t("No schema specified",null)}tQ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(rRe,"evaluateSQL");function Z4(e,t){let r;try{r=Qye.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(Z4,"checkASTPermissions");function eQ(e){let t=new iD;if(!e)throw nD(new Error,"The 'sql' parameter is missing from the request body",sD.BAD_REQUEST);try{let r=e.trim(),n=Mc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
133
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(fTe,"parseNPMStdErr");function mTe(e){let t=Wy.object({projects:Wy.array().min(1).items(Wy.string()).required(),dry_run:Wy.boolean().default(!1)});return aTe.validateBySchema(e,t)}o(mTe,"modulesValidator")});var TL={};Re(TL,{describeMetric:()=>e4,describeMetricOp:()=>SL,get:()=>Xj,getOp:()=>_L,listMetrics:()=>Zj,listMetricsOp:()=>gL});async function hTe(e){return(await K_().get(e)).hostname}function jj(e,t){return e.length===0||e.includes(t)}function _L(e){return cE.trace?.("get_analytics request:",e),Xj(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function Jj(e){return"conditions"in e?{...e,conditions:e.conditions.map(Jj)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function Xj(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(Jj));let a=t??[];jj(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return a.length>0&&(c.select=a),cE.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],jj(a,"node")&&(cE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await hTe(d)),cE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function gL(e){return Zj(e.metric_types)}async function Zj(e=["builtin"]){let t=[],r=Object.values(Fo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function SL(e){return e4(e.metric)}async function e4(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return cE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var Qj,pTe,cE,yL=se(()=>{Qj=b(Q());gA();SA();({forComponent:pTe}=Qj.default),cE=pTe("analytics").conditional;o(hTe,"lookupHostname");o(jj,"isSelected");o(_L,"getOp");o(Jj,"conformCondition");o(Xj,"get");o(gL,"listMetricsOp");o(Zj,"listMetrics");o(SL,"describeMetricOp");o(e4,"describeMetric")});var zy,jy,lE,Qy=se(()=>{zy={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},jy=Object.keys(zy),lE="primary"});function r4(e){return t4.validateBySchema(e,STe)}var uE,t4,ETe,_Te,gTe,STe,n4=se(()=>{uE=b(require("joi")),t4=b(ft());Qy();ETe=jy,_Te=Object.entries(zy).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),gTe=o(()=>{let e=uE.default.string().min(1).max(512);return Object.entries(zy).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:uE.default.string().valid(...r.allowedValues).messages({"any.only":_Te[t]})}))}),e.required()},"createStatusValidationSchema"),STe=uE.default.object({id:uE.default.string().valid(...ETe).required(),status:gTe()});o(r4,"validateStatus")});function s4(){RL||(RL=ga.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),bL=new Uint8Array(RL))}function i4(){s4(),bL[0]=1}function o4(){return s4(),bL[0]===1}var RL,bL,AL=se(()=>{dE();o(s4,"ensureInitialized");o(i4,"requestRestart");o(o4,"restartNeeded")});var OL={};Re(OL,{DEFAULT_STATUS_ID:()=>lE,STATUS_IDS:()=>jy,Status:()=>ga,clear:()=>wL,get:()=>NL,set:()=>CL});function mE(){return IL||(IL=Ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),IL}function wL({id:e}){return fE.debug?.("clearStatus",e),mE().delete(e)}async function yTe(){fE.debug?.("getAllStatus");let e=mE().get({}),t=await Ap.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=o4();return{systemStatus:e,componentStatus:r,restartRequired:n}}function NL({id:e}){return e?(fE.debug?.("getStatus",e),mE().get(e)):(fE.debug?.("getStatus","all"),yTe())}function CL({status:e,id:t=lE}){let r=r4({status:e,id:t});if(r)throw(0,Jy.handleHDBError)(r,r.message,TTe.BAD_REQUEST);return fE.debug?.("setStatus",t,e),mE().put(t,{status:e})}var Jy,a4,TTe,IL,ga,fE,dE=se(()=>{we();Jy=b(_e()),a4=b(es());n4();Qy();Ip();AL();Qy();({HTTP_STATUS_CODES:TTe}=Jy.hdbErrors);o(mE,"getStatusTable");ga={get primaryStore(){return mE().primaryStore}},fE=(0,a4.loggerWithTag)("status");o(wL,"clearStatus");o(yTe,"getAllStatus");o(NL,"getStatus");o(CL,"setStatus")});var ML={};Re(ML,{getFingerprint:()=>LL,getRegistrationInfo:()=>PL,setLicense:()=>DL});function PL(){return{version:c4.packageJson.version,deprecated:!0}}function LL(){return{message:"this-is-deprecated",deprecated:!0}}function DL(){return{deprecated:!0}}var c4,vL=se(()=>{c4=b(Ct());o(PL,"getRegistrationInfo");o(LL,"getFingerprint");o(DL,"setLicense")});var u4=v((Uke,l4)=>{"use strict";var pE=require("alasql"),lu=require("recursive-iterator"),Ci=Q(),RTe=oe(),hE=(q(),M(z)),UL=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,ATe(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>hE.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!hE.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][hE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=bTe(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!hE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new pE.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function bTe(e){return e.filter(t=>t[hE.PERMS_CRUD_ENUM.READ])}o(bTe,"filterReadRestrictedAttrs");function ATe(e,t,r,n,s){ITe(e,t,r,n,s)}o(ATe,"interpretAST");function EE(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(EE,"addSchemaTableToMap");function ITe(e,t,r,n,s){if(!e){Ci.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof pE.yy.Insert?OTe(e,t,r):e instanceof pE.yy.Select?wTe(e,t,r,n,s):e instanceof pE.yy.Update?NTe(e,t,r):e instanceof pE.yy.Delete?CTe(e,t,r):Ci.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(ITe,"getRecordAttributesAST");function wTe(e,t,r,n,s){if(!e){Ci.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(RTe.isEmptyOrZeroLength(i)){Ci.error("No schema specified");return}e.from.forEach(c=>{EE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),EE(c.table,t,r,n,s)});let a=new lu(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Ci.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new lu(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{Ci.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new lu(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{Ci.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new lu(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{Ci.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(wTe,"getSelectAttributes");function NTe(e,t,r){if(!e){Ci.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new lu(e.columns),s=e.table.databaseid;EE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&xL(e.table.tableid,s,i.columnid,t,r)}o(NTe,"getUpdateAttributes");function CTe(e,t,r){if(!e){Ci.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new lu(e.where),s=e.table.databaseid;EE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&xL(e.table.tableid,s,i.columnid,t,r)}o(CTe,"getDeleteAttributes");function OTe(e,t,r){if(!e){Ci.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new lu(e.columns),s=e.into.databaseid;EE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&xL(e.into.tableid,s,i.columnid,t,r)}o(OTe,"getInsertAttributes");function xL(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(xL,"pushAttribute");l4.exports=UL});var tR=v((Bke,N4)=>{"use strict";var BL=Gn(),Xy=_n(),As=IT(),SE=Ml(),FL=bl(),PTe=VC(),LTe=I1(),TE=ds(),Zy=qp(),Pr=Q(),DTe=jC(),MTe=Ah(),vTe=RO(),UTe=Oh(),xTe=IO(),BTe=wO(),FTe=GT(),kTe=PO(),kL=$T(),Sa=oe(),m4=Df(),wn=(q(),M(z)),p4=aj(),HTe=yh(),h4=(Dd(),M(zp)),E4=(Fy(),M(rE)),_4=gt(),yr=dL(),g4=Yy(),GTe=EL(),vf=Es(),S4=(of(),M(sf)),HL=(yL(),M(TL)),GL=(dE(),M(OL)),T4=(Kh(),M(gy)),qL=(vL(),M(ML)),y4=jN(),{handleHDBError:Wn,hdbErrors:R4}=_e(),{HDB_ERROR_MSGS:ln,HTTP_STATUS_CODES:_E}=R4,ee=new Map,b4="delete",Dc="insert",Js="read",uu="update",gE="describe",d4=SE.describeSchema.name,f4=SE.describeTable.name,A4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},qTe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},$Te="catchup",VTe="handleGetJob",KTe="handleGetJobsByStartDate",eR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},YTe=[As.createTable.name,As.createAttribute.name,As.dropTable.name,As.dropAttribute.name],I4={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};ee.set(BL.insert.name,new re(!1,[Dc]));ee.set(BL.update.name,new re(!1,[uu]));ee.set(BL.upsert.name,new re(!1,[Dc,uu]));ee.set(Xy.searchByConditions.name,new re(!1,[Js]));ee.set(Xy.searchByHash.name,new re(!1,[Js]));ee.set(Xy.searchByValue.name,new re(!1,[Js]));ee.set(Xy.search.name,new re(!1,[Js]));ee.set(As.createSchema.name,new re(!0,[]));ee.set(As.createTable.name,new re(!0,[]));ee.set(As.createAttribute.name,new re(!1,[Dc]));ee.set(As.dropSchema.name,new re(!0,[]));ee.set(As.dropTable.name,new re(!0,[]));ee.set(As.dropAttribute.name,new re(!0,[]));ee.set(SE.describeSchema.name,new re(!1,[Js]));ee.set(SE.describeTable.name,new re(!1,[Js]));ee.set(FL.deleteRecord.name,new re(!1,[b4]));ee.set(TE.addUser.name,new re(!0,[]));ee.set(TE.alterUser.name,new re(!0,[]));ee.set(TE.dropUser.name,new re(!0,[]));ee.set(TE.listUsersExternal.name,new re(!0,[]));ee.set(Zy.listRoles.name,new re(!0,[]));ee.set(Zy.addRole.name,new re(!0,[]));ee.set(Zy.alterRole.name,new re(!0,[]));ee.set(Zy.dropRole.name,new re(!0,[]));ee.set(DTe.name,new re(!0,[]));ee.set(MTe.name,new re(!0,[]));ee.set(vTe.name,new re(!0,[]));ee.set(UTe.name,new re(!0,[]));ee.set(xTe.name,new re(!0,[]));ee.set(BTe.name,new re(!0,[]));ee.set(kL.setRoutes.name,new re(!0,[]));ee.set(kL.getRoutes.name,new re(!0,[]));ee.set(kL.deleteRoutes.name,new re(!0,[]));ee.set(_4.setConfiguration.name,new re(!0,[]));ee.set(FTe.clusterStatus.name,new re(!0,[]));ee.set(kTe.name,new re(!0,[]));ee.set(FL.deleteFilesBefore.name,new re(!0,[]));ee.set(FL.deleteAuditLogsBefore.name,new re(!0,[]));ee.set(m4.restart.name,new re(!0,[]));ee.set(m4.restartService.name,new re(!0,[]));ee.set(PTe.name,new re(!0,[]));ee.set(LTe.name,new re(!0,[Js]));ee.set(As.cleanupOrphanBlobs.name,new re(!0,[]));ee.set(HTe.systemInformation.name,new re(!0,[]));ee.set(_4.getConfiguration.name,new re(!0,[]));ee.set(g4.readTransactionLog.name,new re(!0,[]));ee.set(g4.deleteTransactionLogsBefore.name,new re(!0,[]));ee.set(GTe.installModules.name,new re(!0,[]));ee.set(vf.createCsr.name,new re(!0,[]));ee.set(vf.signCertificate.name,new re(!0,[]));ee.set(vf.listCertificates.name,new re(!0,[]));ee.set(vf.addCertificate.name,new re(!0,[]));ee.set(vf.removeCertificate.name,new re(!0,[]));ee.set(vf.getKey.name,new re(!0,[]));ee.set(S4.addNodeBack.name,new re(!0,[]));ee.set(S4.removeNodeBack.name,new re(!0,[]));ee.set(HL.getOp.name,new re(!1,[Js]));ee.set(HL.listMetricsOp.name,new re(!1,[Js]));ee.set(HL.describeMetricOp.name,new re(!1,[Js]));ee.set(GL.clear.name,new re(!0,[]));ee.set(GL.get.name,new re(!0,[]));ee.set(GL.set.name,new re(!0,[]));ee.set(T4.installUsageLicenseOp.name,new re(!0,[]));ee.set(T4.getUsageLicensesOp.name,new re(!0,[]));ee.set(qL.getFingerprint.name,new re(!0,[]));ee.set(qL.setLicense.name,new re(!0,[]));ee.set(h4.createTokens.name,new re(!1,[]));ee.set(h4.refreshOperationToken.name,new re(!1,[]));ee.set(E4.login.name,new re(!1,[]));ee.set(E4.logout.name,new re(!1,[]));ee.set(yr.customFunctionsStatus.name,new re(!0,[]));ee.set(yr.getCustomFunctions.name,new re(!0,[]));ee.set(yr.getComponents.name,new re(!0,[]));ee.set(yr.getComponentFile.name,new re(!0,[]));ee.set(yr.setComponentFile.name,new re(!0,[]));ee.set(yr.dropComponent.name,new re(!0,[]));ee.set(yr.getCustomFunction.name,new re(!0,[]));ee.set(yr.setCustomFunction.name,new re(!0,[]));ee.set(yr.dropCustomFunction.name,new re(!0,[]));ee.set(yr.addComponent.name,new re(!0,[]));ee.set(yr.dropCustomFunctionProject.name,new re(!0,[]));ee.set(yr.packageComponent.name,new re(!0,[]));ee.set(yr.deployComponent.name,new re(!0,[]));ee.set(yr.addSSHKey.name,new re(!0,[]));ee.set(yr.updateSSHKey.name,new re(!0,[]));ee.set(yr.deleteSSHKey.name,new re(!0,[]));ee.set(yr.listSSHKeys.name,new re(!0,[]));ee.set(yr.setSSHKnownHosts.name,new re(!0,[]));ee.set(yr.getSSHKnownHosts.name,new re(!0,[]));ee.set(qL.getRegistrationInfo.name,new re(!1,[]));ee.set(TE.userInfo.name,new re(!1,[]));ee.set(SE.describeAll.name,new re(!1,[]));ee.set(VTe,new re(!1,[]));ee.set(KTe,new re(!0,[]));ee.set($Te,new re(!0,[]));ee.set(eR.CSV_DATA_LOAD,new re(!1,[Dc,uu]));ee.set(eR.CSV_URL_LOAD,new re(!1,[Dc,uu]));ee.set(eR.CSV_FILE_LOAD,new re(!1,[Dc,uu]));ee.set(eR.IMPORT_FROM_S3,new re(!1,[Dc,uu]));ee.set(I4.EXPORT_TO_S3,new re(!0,[]));ee.set(I4.EXPORT_LOCAL,new re(!0,[]));ee.set(wn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[b4]));ee.set(wn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[Js]));ee.set(wn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[Dc]));ee.set(wn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[uu]));N4.exports={verifyPerms:zTe,verifyPermsAst:WTe,verifyBulkLoadAttributePerms:QTe};function WTe(e,t,r){if(Sa.isEmptyOrZeroLength(e))throw Pr.info("verify_perms_ast has an empty user parameter"),Wn(new Error);if(Sa.isEmptyOrZeroLength(t))throw Pr.info("verify_perms_ast has an empty user parameter"),Wn(new Error);if(Sa.isEmptyOrZeroLength(r))throw Pr.info("verify_perms_ast has a null operation parameter"),Wn(new Error);try{let n=u4(),s=require("alasql"),i=new y4,a=new n(e),c=a.getSchemas(),l=new Map;if((!c||c.length===0)&&a.affected_attributes&&a.affected_attributes.size>0)throw Pr.info("No schemas defined in verifyPermsAst(), will not continue."),Wn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&A4[r])throw Wn(new Error,ln.DROP_SYSTEM,_E.FORBIDDEN);if(u&&!d)return null;let f=p4.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=a.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=a.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=w4(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let g=a.getAttributesBySchemaTableName(h,p[E]),R=VL(t.role.permission,h,p[E]);$L(g,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Wn(n)}}o(WTe,"verifyPermsAst");function zTe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Pr.info("null required parameter in verifyPerms"),Wn(new Error,ln.DEFAULT_INVALID_REQUEST,_E.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new y4;if(Sa.isEmptyOrZeroLength(e.hdb_user?.role)||Sa.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Pr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(ln.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(wn.SYSTEM_SCHEMA_NAME)||s===wn.SYSTEM_SCHEMA_NAME;if(l&&d&&qTe[e.operation]&&(i===wn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===wn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===wn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&A4[r])throw Wn(new Error,ln.DROP_SYSTEM,_E.FORBIDDEN);if(l&&!d||u===!0&&(r===As.createSchema.name||r===As.dropSchema.name))return null;if(YTe.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=p4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===d4||r===f4)&&!f.super_user){if(s===wn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(ln.SCHEMA_PERM_ERROR(s));if(r===d4&&(!f[s]||!f[s][gE]))return c.handleInvalidItem(ln.SCHEMA_NOT_FOUND(s));if(r===f4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][gE]))return c.handleInvalidItem(ln.TABLE_NOT_FOUND(s,i))}let m=w4(e.hdb_user,r,a,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&wn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[wn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[wn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=E)}let p=jTe(e),h=VL(e.hdb_user?.role?.permission,s,i);return $L(p,h,r,i,s,c,n),c.getPermsResponse()}o(zTe,"verifyPerms");function w4(e,t,r,n,s){if(Sa.arrayHasEmptyValues([e,t,r]))throw Pr.info("hasPermissions has an invalid parameter"),Wn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Pr.info(`operation ${t} not found.`),Wn(new Error,ln.OP_NOT_FOUND(t),_E.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Pr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(ln.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][gE]===!1){n.addInvalidItem(ln.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(ln.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[gE]===!1)n.addInvalidItem(ln.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!Sa.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Pr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=ln.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Pr.error(p),Pr.error(m),Wn(R4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(w4,"hasPermissions");function $L(e,t,r,n,s,i,a){if(!e||!t)throw Pr.info("no attributes specified in checkAttributePerms."),Wn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Pr.info(`no permissions found for ${r} in checkAttributePerms().`),Wn(new Error);if(Sa.isEmptyOrZeroLength(t))return Pr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[gE]===!1){i.addInvalidItem(ln.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(wn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Js)throw Wn(new Error,ln.SYSTEM_TIMESTAMP_PERMS_ERR,_E.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(ln.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o($L,"checkAttributePerms");function jTe(e){let t=new Set;try{if(e.action)return t;if(e.operation===wn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Pr.info(r)}return t}o(jTe,"getRecordAttributes");function VL(e,t,r){let n=new Map;if(Sa.isEmpty(e))return Pr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Pr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(VL,"getAttributePermissions");function QTe(e,t,r,n,s,i,a){let c=new Set(i),l=VL(e,n,s);$L(c,l,t,s,n,a,r)}o(QTe,"verifyBulkLoadAttributePerms")});var YL=v((kke,C4)=>{"use strict";var KL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};C4.exports=KL});var XL=v((Kke,K4)=>{"use strict";var rR=Gn(),sR=GN(),JTe=require("needle"),Oi=(q(),M(z)),Gke=Pt(),Uf=oe(),{handleHDBError:Zt,hdbErrors:B4}=_e(),{HTTP_STATUS_CODES:un,HDB_ERROR_MSGS:Lr,CHECK_LOGS_WRAPPER:fu}=B4,xf=Q(),WL=require("papaparse");Uf.promisifyPapaParse();var Pi=require("fs-extra"),XTe=require("path"),{chain:O4}=require("stream-chain"),P4=require("stream-json/streamers/StreamArray"),L4=require("stream-json/utils/Batch"),D4=require("stream-chain/utils/comp"),{finished:M4}=require("stream"),ZTe=me(),F4=qN(),eye=$N(),{BulkLoadFileObject:jL,BulkLoadDataObject:tye}=Wq(),QL=jN(),{verifyBulkLoadAttributePerms:k4}=tR(),qke=YL(),$ke=hr(),Vke=Zi(),{databases:rye}=(we(),M(mt)),{coerceType:nye}=(ag(),M(_G)),v4="No records parsed from csv file.",du=`${ZTe.get("HDB_ROOT")}/tmp`,{schemaRegex:sye}=Wi(),U4=1024*1024*2,x4=5e3,iye={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};K4.exports={csvDataLoad:oye,csvURLLoad:aye,csvFileLoad:cye,importFromS3:lye};async function oye(e,t){let r=sR.dataObject(e);if(r)throw Zt(r,r.message,un.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=q4(e.schema,e.table),i=WL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:zL.bind(null,s),dynamicTyping:!1}),a=new QL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&k4(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Zt(new Error,c,un.BAD_REQUEST,void 0,void 0,!0);let l=new tye(e.action,e.schema,e.table,i.data);return n=await F4.callOperationFunctionAsAwait($4,l,null),n.message===v4?v4:V4(n.records,n.number_written)}catch(s){throw mu(s)}}o(oye,"csvDataLoad");async function aye(e){let t=sR.urlObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${du}/${r}`;try{await uye(e,r)}catch(s){throw xf.error(Lr.DOWNLOAD_FILE_ERR(r)+" - "+s),Zt(s,fu(Lr.DOWNLOAD_FILE_ERR(r)))}try{let s=new jL(this.job_operation_function.name,e.action,e.schema,e.table,n,Oi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await JL(s);return await nR(n),i}catch(s){throw await nR(n),mu(s)}}o(aye,"csvURLLoad");async function cye(e){let t=sR.fileObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r=new jL(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Oi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await JL(r)}catch(n){throw mu(n)}}o(cye,"csvFileLoad");async function lye(e){let t=sR.s3FileObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=XTe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${du}/${s}`;let i=new jL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await dye(s,e);let a=await JL(i);return await nR(r),a}catch(n){throw await nR(r),mu(n)}}o(lye,"importFromS3");async function uye(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await JTe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw Zt(n,s,n.statusCode,Oi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}mye(r,e.csv_url),await fye(t,r.raw)}o(uye,"downloadCSVFile");async function dye(e,t){try{let r=`${du}/${e}`;await Pi.mkdirp(du),await Pi.writeFile(`${du}/${e}`,"",{flag:"a+"});let n=await Pi.createWriteStream(r),s=await eye.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){xf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw xf.error(Lr.S3_DOWNLOAD_ERR+" - "+r),Zt(r,fu(Lr.S3_DOWNLOAD_ERR))}}o(dye,"downloadFileFromS3");async function fye(e,t){try{await Pi.mkdirp(du),await Pi.writeFile(`${du}/${e}`,t)}catch(r){throw xf.error(Lr.WRITE_TEMP_FILE_ERR),Zt(r,fu(Lr.DEFAULT_BULK_LOAD_ERR))}}o(fye,"writeFileToTempFolder");async function nR(e){if(e)try{await Pi.access(e),await Pi.unlink(e)}catch{xf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(nR,"deleteTempFile");function mye(e,t){if(e.statusCode!==B4.HTTP_STATUS_CODES.OK)throw Zt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,un.BAD_REQUEST);if(!iye[e.headers["content-type"]])throw Zt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,un.BAD_REQUEST);if(!e.raw)throw Zt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,un.BAD_REQUEST)}o(mye,"validateURLResponse");async function JL(e){try{let t;switch(e.file_type){case Oi.VALID_S3_FILE_TYPES.CSV:t=await pye(e);break;case Oi.VALID_S3_FILE_TYPES.JSON:t=await hye(e);break;default:throw Zt(new Error,Lr.DEFAULT_BULK_LOAD_ERR,un.BAD_REQUEST,Oi.LOG_LEVELS.ERROR,Lr.INVALID_FILE_EXT_ERR(e))}return V4(t.records,t.number_written)}catch(t){throw mu(t)}}o(JL,"fileLoad");async function H4(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await rR.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&k4(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Zt(c);r(l)}}o(H4,"validateChunk");async function G4(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Uf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!Uf.isEmpty(c)&&!Uf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await F4.callOperationFunctionAsAwait($4,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Zt(c,fu(Lr.INSERT_CSV_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.INSERT_CSV_ERR+" - "+c);r(l)}}o(G4,"insertChunk");async function pye(e){let t={records:0,number_written:0},r=q4(e.schema,e.table);try{let n=new QL,s=Pi.createReadStream(e.file_path,{highWaterMark:U4});s.setEncoding("utf8"),await WL.parsePromise(s,H4.bind(null,e,n),zL.bind(null,r));let i=n.getPermsResponse();if(i)throw Zt(new Error,i,un.BAD_REQUEST);return s=Pi.createReadStream(e.file_path,{highWaterMark:U4}),s.setEncoding("utf8"),await WL.parsePromise(s,G4.bind(null,e,t),zL.bind(null,r)),s.destroy(),t}catch(n){throw Zt(n,fu(Lr.PAPA_PARSE_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.PAPA_PARSE_ERR+n)}}o(pye,"callPapaParse");function q4(e,t){let r=rye[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>nye(i,s));return n}o(q4,"createTransformMap");function zL(e,t,r){let n=e.get(r);return n?n(t):Uf.autoCast(t)}o(zL,"typeFunction");async function hye(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new QL,s=O4([Pi.createReadStream(e.file_path,{encoding:"utf-8"}),P4.withParser(),c=>c.value,new L4({batchSize:x4}),D4(async c=>{await H4(e,n,r,c)})]);await new Promise((c,l)=>{M4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Zt(new Error,i,un.BAD_REQUEST);let a=O4([Pi.createReadStream(e.file_path,{encoding:"utf-8"}),P4.withParser(),c=>c.value,new L4({batchSize:x4}),D4(async c=>{await G4(e,t,r,c)})]);return await new Promise((c,l)=>{M4(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Zt(n,fu(Lr.INSERT_JSON_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.INSERT_JSON_ERR+n)}}o(hye,"insertJson");async function $4(e){let t={};try{e.data&&e.data.length>0&&Eye(e.data[0])?t=await _ye(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",xf.info(t.message))}catch(r){throw mu(r)}return t}o($4,"callBulkFileLoad");function Eye(e){let t=Object.keys(e);for(let r of t)if(!sye.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(Eye,"validateColumnNames");async function _ye(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=rR.insert;break;case"update":i=rR.update;break;case"upsert":i=rR.upsert;break;default:throw Zt(new Error,Lr.INVALID_ACTION_PARAM_ERR(n),un.BAD_REQUEST,Oi.LOG_LEVELS.ERROR,Lr.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Uf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw mu(a)}}o(_ye,"bulkFileLoad");function V4(e,t){return`successfully loaded ${t} of ${e} records`}o(V4,"buildResponseMsg");function mu(e){return Zt(e,fu(Lr.DEFAULT_BULK_LOAD_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(mu,"buildTopLevelErrMsg")});var j4=v((zke,z4)=>{"use strict";var gye=_n(),Sye=mi(),Y4=Q(),Tye=Gn(),Wke=kS(),yye=require("clone"),eD=require("alasql"),Rye=kg(),W4=require("util"),bye=W4.promisify(Sye.getTableSchema),Aye=W4.promisify(gye.search),Iye=(q(),M(z)),ZL=oe();Rye(eD);z4.exports={update:Nye};var wye="There was a problem performing this update. Please check the logs and try again.";async function Nye({statement:e,hdb_user:t}){let r=await bye(e.table.databaseid,e.table.tableid),n=Cye(e.columns);ZL.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=yye(s),c=ZL.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=eD.parse(l).statements[0],d=await Aye(u),f=Oye(n,d);return Pye(a,f,t)}o(Nye,"update");function Cye(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=eD.compile(`SELECT ${r.expression.toString()} AS [${Iye.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Y4.error(t),new Error(wye)}}o(Cye,"createUpdateRecord");function Oye(e,t){return ZL.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Oye,"buildUpdateRecords");async function Pye(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Tye.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Y4.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Pye,"updateRecords")});var J4=v((Xke,Q4)=>{var Lye=require("alasql"),Dye=_n(),Mye=Q(),vye=ls(),rD=require("util"),tD=oe(),Uye=(q(),M(z)),xye=mi(),Qke=kS(),Jke=Gn(),Bye="record",Fye="successfully deleted",kye=rD.callbackify($ye),Hye=rD.promisify(Dye.search),Gye=rD.promisify(xye.getTableSchema);Q4.exports={convertDelete:kye};function qye(e){return`${e.deleted_hashes.length} ${Bye}${e.deleted_hashes.length===1?"":"s"} ${Fye}`}o(qye,"generateReturnMessage");async function $ye({statement:e,hdb_user:t}){let r=await Gye(e.table.databaseid,e.table.tableid);tD.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=tD.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Lye.parse(a).statements[0],l={operation:Uye.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Hye(c);let u=await vye.deleteRecords(l);return tD.isEmptyOrZeroLength(u.message)&&(u.message=qye(u)),delete u.txn_time,u}catch(u){throw Mye.error(u),u.hdb_code?u.message:u}}o($ye,"convertDelete")});var RE=v((eHe,rQ)=>{"use strict";rQ.exports={evaluateSQL:rRe,processAST:tQ,convertSQLToAST:eQ,checkASTPermissions:Z4};var Vye=Gn(),X4=require("util"),Kye=X4.callbackify(Vye.insert),Yye=_n().search,Wye=j4().update,zye=X4.callbackify(Wye),jye=J4().convertDelete,Mc=require("alasql"),Qye=tR(),iR=Q(),Jye=kg(),Xye=oe(),yE=(q(),M(z)),{hdbErrors:Zye,handleHDBError:nD}=_e(),{HTTP_STATUS_CODES:sD}=Zye;Jye(Mc);var eRe=403,tRe="There was a problem performing this insert. Please check the logs and try again.",iD=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function rRe(e,t){let r=e.parsed_sql_object;if(!r){r=eQ(e.sql);let n,s=r.ast.statements[0];if(s instanceof Mc.yy.Insert?n=s.into.databaseid:s instanceof Mc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Mc.yy.Update||s instanceof Mc.yy.Delete?n=s.table.databaseid:iR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Mc.yy.Select)&&Xye.isEmptyOrZeroLength(n))return t("No schema specified",null)}tQ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(rRe,"evaluateSQL");function Z4(e,t){let r;try{r=Qye.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(Z4,"checkASTPermissions");function eQ(e){let t=new iD;if(!e)throw nD(new Error,"The 'sql' parameter is missing from the request body",sD.BAD_REQUEST);try{let r=e.trim(),n=Mc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
134
134
|
`);throw n[1]?nD(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,sD.BAD_REQUEST):nD(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",sD.BAD_REQUEST)}return t}o(eQ,"convertSQLToAST");function tQ(e,t,r){try{let n=nRe;if(!e.bypass_auth&&!t.permissions_checked){let i=Z4(e,t);if(i&&i.length>0)return r(eRe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case yE.VALID_SQL_OPS_ENUM.SELECT:n=Yye,s=t.ast.statements[0];break;case yE.VALID_SQL_OPS_ENUM.INSERT:n=sRe;break;case yE.VALID_SQL_OPS_ENUM.UPDATE:n=zye;break;case yE.VALID_SQL_OPS_ENUM.DELETE:n=jye;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(tQ,"processAST");function nRe(e,t){iR.info(e),t("unknown sql statement")}o(nRe,"nullFunction");function sRe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=iRe(i,e.values)}catch(a){return r(a)}Kye(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){iR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(sRe,"convertInsert");function iRe(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=Mc.compile(`SELECT ${s.toString()} AS [${yE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw iR.error(r),new Error(tRe)}}o(iRe,"createDataObjects")});var cD=v((rHe,uQ)=>{"use strict";var aD=_n(),oRe=$N(),{AsyncParser:aRe}=require("json2csv"),oR=require("stream"),Is=oe(),oD=require("fs-extra"),cRe=require("path"),Xs=Q(),{promisify:iQ}=require("util"),bE=oe(),{handleHDBError:Rr,hdbErrors:lRe}=_e(),{HDB_ERROR_MSGS:zn,HTTP_STATUS_CODES:br}=lRe,{streamAsJSON:uRe}=(Yb(),M(IU)),{Upload:dRe}=require("@aws-sdk/lib-storage"),{toCsvStream:fRe}=(Uo(),M(UU)),nQ=["search_by_value","search_by_hash","sql","search_by_conditions"],sQ=["json","csv"],oQ="json",aQ="csv",mRe="Successfully exported JSON locally.",pRe="Successfully exported CSV locally.",hRe=1e3,ERe=aD.searchByHash,_Re=aD.searchByValue,gRe=iQ(oR.finished);uQ.exports={export_to_s3:RRe,export_local:SRe};async function SRe(e){Xs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=cQ(e);if(!Is.isEmpty(t))throw Xs.error(t),Rr(new Error,t,br.BAD_REQUEST,void 0,void 0,!0);if(Is.isEmpty(e.path))throw Xs.error(zn.MISSING_VALUE("path")),Rr(new Error,zn.MISSING_VALUE("path"),br.BAD_REQUEST,void 0,void 0,!0);let r=(Is.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(cRe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Is.buildFolderPath(e.path,r);await TRe(e.path);let s=await lQ(e);return await yRe(n,e.format,s)}o(SRe,"export_local");async function TRe(e){if(Xs.trace("in confirmPath"),Is.isEmptyOrZeroLength(e))throw Rr(new Error,`Invalid path: ${e}`,br.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await oD.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,Xs.error(n),Rr(new Error,n,br.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw Xs.error(r),Rr(new Error,r,br.BAD_REQUEST,void 0,void 0,!0)}return!0}o(TRe,"confirmPath");async function yRe(e,t,r){if(Xs.trace("in saveToLocal"),bE.isEmptyOrZeroLength(e))throw Rr(new Error,zn.INVALID_VALUE("file_path"),br.BAD_REQUEST,void 0,void 0,!0);if(bE.isEmptyOrZeroLength(t))throw Rr(new Error,zn.INVALID_VALUE("Source format"),br.BAD_REQUEST,void 0,void 0,!0);if(bE.isEmpty(r))throw Rr(new Error,zn.NOT_FOUND("Data"),br.BAD_REQUEST,void 0,void 0,!0);if(t===oQ){let n=oD.createWriteStream(e);return uRe(r).pipe(n),await gRe(n),{message:mRe,path:e}}else if(t===aQ){let n=oD.createWriteStream(e),s=oR.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new aRe(i,c).fromInput(s).toOutput(n).promise(!1),{message:pRe,path:e}}throw Rr(new Error,zn.INVALID_VALUE("format"),br.BAD_REQUEST)}o(yRe,"saveToLocal");async function RRe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Rr(new Error,zn.MISSING_VALUE("S3 object"),br.BAD_REQUEST);if(Is.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Rr(new Error,zn.MISSING_VALUE("aws_access_key_id"),br.BAD_REQUEST);if(Is.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Rr(new Error,zn.MISSING_VALUE("aws_secret_access_key"),br.BAD_REQUEST);if(Is.isEmptyOrZeroLength(e.s3.bucket))throw Rr(new Error,zn.MISSING_VALUE("bucket"),br.BAD_REQUEST);if(Is.isEmptyOrZeroLength(e.s3.key))throw Rr(new Error,zn.MISSING_VALUE("key"),br.BAD_REQUEST);if(Is.isEmptyOrZeroLength(e.s3.region))throw Rr(new Error,zn.MISSING_VALUE("region"),br.BAD_REQUEST);let t=cQ(e);if(!Is.isEmpty(t))throw Rr(new Error,t,br.BAD_REQUEST);Xs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await lQ(e)}catch(l){throw Xs.error(l),l}let n,s=await oRe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new oR.PassThrough;if(e.format===aQ){i=e.s3.key+".csv";let l=fRe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===oQ){i=e.s3.key+".json";let l=new oR.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%hRe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw Rr(new Error,zn.INVALID_VALUE("format"),br.BAD_REQUEST);return new dRe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(RRe,"export_to_s3");function cQ(e){if(Xs.trace("in exportCoreValidation"),Is.isEmpty(e.format))return"format missing";if(sQ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${sQ.join(", ")}`;let t=e.search_operation.operation;if(Is.isEmpty(t))return"search_operation.operation missing";if(nQ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${nQ.join(", ")}`}o(cQ,"exportCoreValidation");async function lQ(e){Xs.trace("in getRecords");let t,r;if(bE.isEmpty(e.search_operation)||bE.isEmptyOrZeroLength(e.search_operation.operation))throw Rr(new Error,zn.INVALID_VALUE("Search operation"),br.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=_Re;break;case"search_by_hash":t=ERe;break;case"search_by_conditions":t=aD.searchByConditions;break;case"sql":{let n=RE();t=iQ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Xs.error(r),Rr(new Error,r,br.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(lQ,"getRecords")});var fQ=v((sHe,dQ)=>{"use strict";var lD=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};dQ.exports=lD});var hQ=v((oHe,pQ)=>{"use strict";var bRe=(q(),M(z)),mQ=require("moment"),ARe=require("uuid").v4,uD=class{static{o(this,"JobObject")}constructor(){this.id=ARe(),this.type=void 0,this.start_datetime=mQ().valueOf(),this.created_datetime=mQ().valueOf(),this.end_datetime=void 0,this.status=bRe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};pQ.exports=uD});var fD=v((cHe,bQ)=>{"use strict";var IRe=require("uuid").v4,TQ=Gn(),yQ=_n(),wRe=di(),NRe=nd(),CRe=fQ(),Mt=(q(),M(z)),ORe=hQ(),PRe=yS(),Li=Q(),LRe=Sm(),Bf=oe(),{promisify:DRe}=require("util"),pu=require("moment"),aR=GN(),EQ=ow(),{deleteTransactionLogsBeforeValidator:MRe}=pL(),{handleHDBError:_Q,hdbErrors:vRe,ClientError:URe}=_e(),{HTTP_STATUS_CODES:gQ}=vRe,SQ=yQ.searchByValue,xRe=yQ.searchByHash,BRe=TQ.insert,FRe=TQ.update,dD;bQ.exports={addJob:GRe,updateJob:$Re,handleGetJob:kRe,handleGetJobsByStartDate:HRe,getJobById:RQ};async function kRe(e){if(e.id===void 0)throw new URe("'id' is required");let t=await RQ(e.id);return Bf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(kRe,"handleGetJob");async function HRe(e){try{let t=await qRe(e);if(Li.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=pu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=pu(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Li.error(r),new Error(r)}}o(HRe,"handleGetJobsByStartDate");async function GRe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Bf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Li.info(d),t.error=d,t}if(!Mt.JOB_TYPE_ENUM[e.operation])return Li.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Mt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=aR.fileObject(e);break;case Mt.OPERATIONS_ENUM.CSV_URL_LOAD:n=aR.urlObject(e);break;case Mt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=aR.dataObject(e);break;case Mt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=aR.s3FileObject(e);break;case Mt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Mt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=EQ(e,"date");break;case Mt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=EQ(e,"timestamp");break;case Mt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=MRe(e);break;case Mt.OPERATIONS_ENUM.RESTART_SERVICE:if(Mt.HDB_PROCESS_SERVICES[e.service]===void 0)throw _Q(new Error,"Invalid service",gQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw _Q(n,n.message,gQ.BAD_REQUEST,void 0,void 0,!0);let s=new ORe;s.type=e.operation===Mt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Mt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new wRe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await SQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Li.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=IRe();try{a=await SQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Li.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Li.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new LRe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await BRe(l)}catch(d){return Li.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Li.trace(d)}return t}o(GRe,"addJob");async function qRe(e){let t=pu(e.from_date,pu.ISO_8601),r=pu(e.to_date,pu.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new CRe(n,e.hdb_user);try{if(!dD){let i=RE();dD=DRe(i.evaluateSQL)}return await dD(s)}catch(i){throw Li.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(qRe,"getJobsInDateRange");async function RQ(e){if(Bf.isEmptyOrZeroLength(e))return Bf.errorizeMessage("Invalid job ID specified.");let t=new NRe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await xRe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Li.error(n),Bf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(RQ,"getJobById");async function $Re(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Bf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Mt.JOB_STATUS_ENUM.COMPLETE||e.status===Mt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=pu().valueOf());let t=new PRe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await FRe(t),r}o($Re,"updateJob")});var LQ=v((uHe,PQ)=>{"use strict";var AQ=oe(),Dr=(q(),M(z)),VRe=require("moment"),cR=XL(),AE=Q(),IQ=fD(),wQ=cD(),NQ=bl(),CQ=nt(),KRe=Yy(),YRe=Df(),{parentPort:WRe,isMainThread:OQ}=require("worker_threads"),{onMessageByType:zRe}=nt(),mD=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function jRe(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(AQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(AQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Dr.JOB_TYPE_ENUM.csv_file_load:await So(e,cR.csvFileLoad);break;case Dr.JOB_TYPE_ENUM.csv_url_load:await So(e,cR.csvURLLoad);break;case Dr.JOB_TYPE_ENUM.csv_data_load:await So(e,cR.csvDataLoad);break;case Dr.JOB_TYPE_ENUM.import_from_s3:await So(e,cR.importFromS3);break;case Dr.JOB_TYPE_ENUM.empty_trash:break;case Dr.JOB_TYPE_ENUM.export_local:await So(e,wQ.export_local);break;case Dr.JOB_TYPE_ENUM.export_to_s3:await So(e,wQ.export_to_s3);break;case Dr.JOB_TYPE_ENUM.delete_files_before:case Dr.JOB_TYPE_ENUM.delete_records_before:await So(e,NQ.deleteFilesBefore);break;case Dr.JOB_TYPE_ENUM.delete_audit_logs_before:await So(e,NQ.deleteAuditLogsBefore);break;case Dr.JOB_TYPE_ENUM.delete_transaction_logs_before:await So(e,KRe.deleteTransactionLogsBefore);break;case Dr.JOB_TYPE_ENUM.restart_service:return await So(e,YRe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(jRe,"parseMessage");async function So(e,t){try{e.job.status=Dr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=VRe().valueOf(),await IQ.updateJob(e.job),await QRe(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):AE.error(`There was an error running ${t.name} job with id ${e.job.id}`),AE.error(n),e.job.message=n,e.job.status=Dr.JOB_STATUS_ENUM.ERROR;try{await IQ.updateJob(e.job)}catch(s){throw AE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(So,"runJob");async function QRe(e){AE.trace("launching job thread:",e),OQ?CQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Dr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):WRe.postMessage({type:Dr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(QRe,"launchJobThread");OQ&&zRe(Dr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{CQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Dr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){AE.error(r)}});PQ.exports={parseMessage:jRe,RunnerMessage:mD}});var MQ=v((fHe,DQ)=>{"use strict";var JRe=oe(),pD=me(),vc=(q(),M(z)),XRe=Pt(),ZRe=hr(),To=Q(),ebe=YL(),tbe=Zi();pD.initSync();DQ.exports={postOperationHandler:nbe,sendOperationTransaction:IE};async function IE(e,t,r,n){if(e.schema===vc.SYSTEM_SCHEMA_NAME)return;let s=rbe(e,t,r);s&&(To.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await ZRe.publishToStream(`${XRe.SUBJECT_PREFIXES.TXN}.${e.schema}`,tbe.createNatsTableStreamName(e.schema,e.table),n,s))}o(IE,"sendOperationTransaction");function rbe(e,t,r){if(JRe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===vc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(rbe,"convertCRUDOperationToTransaction");async function nbe(e,t,r){if(!pD.get(vc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;To.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=pD.get(vc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new ebe(t.txn_time,n,s);switch(e.operation){case vc.OPERATIONS_ENUM.INSERT:try{await IE(e,t.inserted_hashes,i,r)}catch(a){To.error("There was an error calling clustering postOperationHandler for insert."),To.error(a)}break;case vc.OPERATIONS_ENUM.DELETE:try{await IE(e,t.deleted_hashes,i,r)}catch(a){To.error("There was an error calling clustering postOperationHandler for delete."),To.error(a)}break;case vc.OPERATIONS_ENUM.UPDATE:try{await IE(e,t.update_hashes,i,r)}catch(a){To.error("There was an error calling clustering postOperationHandler for update."),To.error(a)}break;case vc.OPERATIONS_ENUM.UPSERT:try{await IE(e,t.upserted_hashes,i,r)}catch(a){To.error("There was an error calling clustering postOperationHandler for upsert."),To.error(a)}break;default:break}return t}o(nbe,"postOperationHandler")});var Z,vQ=se(()=>{Z=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var fL={};Re(fL,{chooseOperation:()=>e2,executeJob:()=>Zs,getOperationFunction:()=>t2,operation:()=>bD,processLocalTransaction:()=>ZQ});function obe(e){if(!hD){let t=RE();hD=RD.promisify(t.evaluateSQL)}return hD(e)}async function ZQ(e,t){try{if(e.body.operation!=="read_log"&&(OE.default.log_level===sm.INFO||OE.default.log_level===sm.DEBUG||OE.default.log_level===sm.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;Nn.info(c)}}catch(n){Nn.error(n)}let r=await JQ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return abe[e.body.operation]&&YQ.default.setSchemaDataToGlobal(n=>{n&&Nn.error(n)}),r}function e2(e){let t;try{t=t2(e)}catch(s){throw Nn.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=RE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,a=s.convertSQLToAST(i);if(e.parsed_sql_object=a,!e.bypass_auth){let c=s.checkASTPermissions(e,a);if(c)throw Nn.error(`${UQ.FORBIDDEN} from operation ${e.operation}`),Nn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,ei.handleHDBError)(new Error,c,ei.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=KQ.default.verifyPerms(i,s);if(a)throw Nn.error(`${UQ.FORBIDDEN} from operation ${e.operation}`),Nn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,ei.handleHDBError)(new Error,a,ei.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,ei.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function t2(e){if(Nn.trace(`getOperationFunction with operation: ${e.operation}`),xQ.has(e.operation))return xQ.get(e.operation);throw(0,ei.handleHDBError)(new Error,ei.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ei.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function bD(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=e2(e);return ZQ({body:e},n)}async function cbe(e){Nn.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[Tb]=!0;let a;switch(i.operation){case V.INSERT:a=await Eu.default.insert(i);break;case V.UPDATE:a=await Eu.default.update(i);break;case V.UPSERT:a=await Eu.default.upsert(i);break;case V.DELETE:a=await Hf.default.deleteRecord(i);break;default:Nn.warn("invalid operation in catchup");break}await sbe.postOperationHandler(i,a,e)}catch(a){Nn.info("Invalid operation in transaction"),Nn.error(a)}}async function Zs(e){(0,QQ.transformReq)(e);let t,r;try{if(r=await uR.default.addJob(e),r){t=r.createdJob,Nn.info("addJob result",r);let n=new SD.default.RunnerMessage(t,e);return{message:await SD.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Nn.error(i),(0,ei.handleHDBError)(n,i)}}function lbe(){let e=new Map;return e.set(V.INSERT,new Z(Eu.default.insert)),e.set(V.UPDATE,new Z(Eu.default.update)),e.set(V.UPSERT,new Z(Eu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(kf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(kf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(kf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(kf.default.searchByValue)),e.set(V.SEARCH,new Z(ibe)),e.set(V.SQL,new Z(obe)),e.set(V.CSV_DATA_LOAD,new Z(Zs,wE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(Zs,wE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(Zs,wE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(Zs,wE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(Di.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(Di.default.createSchema)),e.set(V.CREATE_TABLE,new Z(Di.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(Di.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(Di.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(Di.default.dropSchema)),e.set(V.DROP_TABLE,new Z(Di.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(Di.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(NE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(NE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(NE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(NE.default.describeAll)),e.set(V.DELETE,new Z(Hf.default.deleteRecord)),e.set(V.ADD_USER,new Z(Ff.default.addUser)),e.set(V.ALTER_USER,new Z(Ff.default.alterUser)),e.set(V.DROP_USER,new Z(Ff.default.dropUser)),e.set(V.LIST_USERS,new Z(Ff.default.listUsersExternal)),e.set(V.LIST_ROLES,new Z(CE.default.listRoles)),e.set(V.ADD_ROLE,new Z(CE.default.addRole)),e.set(V.ALTER_ROLE,new Z(CE.default.alterRole)),e.set(V.DROP_ROLE,new Z(CE.default.dropRole)),e.set(V.USER_INFO,new Z(Ff.default.userInfo)),e.set(V.READ_LOG,new Z(FQ.default)),e.set(V.ADD_NODE,new Z(kQ.default)),e.set(V.UPDATE_NODE,new Z(ED.default)),e.set(V.SET_NODE_REPLICATION,new Z(ED.default)),e.set(V.REMOVE_NODE,new Z(HQ.default)),e.set(V.CONFIGURE_CLUSTER,new Z(GQ.default)),e.set(V.PURGE_STREAM,new Z(qQ.default)),e.set(V.SET_CONFIGURATION,new Z(TD.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z($Q.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(VQ.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(lR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(lR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(lR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(Zs,_D.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(hu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(hu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(hu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(hu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(hu.default.removeCertificate)),e.set(V.GET_KEY,new Z(hu.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(EO)),e.set(V.REMOVE_NODE_BACK,new Z(_O)),e.set(V.DELETE_FILES_BEFORE,new Z(Zs,Hf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(Zs,Hf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(Zs,_D.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(uR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(uR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z(PL)),e.set(V.GET_FINGERPRINT,new Z(LL)),e.set(V.SET_LICENSE,new Z(DL)),e.set(V.RESTART,new Z(gD.default.restart)),e.set(V.RESTART_SERVICE,new Z(Zs,gD.default.restartService)),e.set(V.CATCHUP,new Z(cbe)),e.set(V.SYSTEM_INFORMATION,new Z(WQ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(Zs,Hf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(BQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(DN)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(MN)),e.set(V.LOGIN,new Z(aL)),e.set(V.LOGOUT,new Z(cL)),e.set(V.GET_CONFIGURATION,new Z(TD.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(vt.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(vt.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(vt.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(vt.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(vt.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(vt.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(vt.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(vt.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(vt.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(vt.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(vt.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(vt.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(vt.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(vt.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(vt.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(vt.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(yD.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(Zs,yD.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(zQ.default.installModules)),e.set(V.GET_BACKUP,new Z(Di.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new Z(Di.default.cleanupOrphanBlobs)),e.set(V.ADD_SSH_KEY,new Z(vt.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(vt.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(vt.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(vt.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(vt.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(vt.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(_L)),e.set(V.LIST_METRICS,new Z(gL)),e.set(V.DESCRIBE_METRIC,new Z(SL)),e.set(V.GET_STATUS,new Z(NL)),e.set(V.SET_STATUS,new Z(CL)),e.set(V.CLEAR_STATUS,new Z(wL)),e.set(V.INSTALL_USAGE_LICENSE,new Z(NP)),e.set(V.GET_USAGE_LICENSES,new Z(LP)),e}var kf,wE,Di,NE,Hf,BQ,Ff,CE,vt,OE,FQ,kQ,ED,HQ,GQ,qQ,$Q,VQ,lR,_D,KQ,uR,ei,gD,RD,Eu,YQ,WQ,SD,TD,yD,zQ,jQ,QQ,hu,JQ,XQ,UQ,Nn,sbe,ibe,hD,abe,xQ,mL=se(()=>{kf=b(_n()),wE=b(XL()),Di=b(IT()),NE=b(Ml()),Hf=b(bl()),BQ=b(VC()),Ff=b(ds()),CE=b(qp()),vt=b(dL()),OE=b(Q()),FQ=b(jC()),kQ=b(Ah()),ED=b(RO()),HQ=b(Oh()),GQ=b(IO()),qQ=b(wO()),$Q=b(GT()),VQ=b(PO()),lR=b($T()),_D=b(cD()),KQ=b(tR()),uR=b(fD());q();ei=b(_e()),gD=b(Df()),RD=b(require("util")),Eu=b(Gn()),YQ=b(mi()),WQ=b(yh()),SD=b(LQ());Dd();Fy();TD=b(gt()),yD=b(Yy()),zQ=b(EL()),jQ=b(ii()),QQ=b(oe());Fr();hu=b(Es());of();yL();JQ=b(qN()),XQ=b(MQ());dE();Kh();vL();vQ();({HTTP_STATUS_CODES:UQ}=ei.hdbErrors),Nn=OE.default.loggerWithTag("operation"),{transactToClusteringUtils:sbe}=XQ.default,ibe=RD.promisify(kf.default.search);o(obe,"evaluateSQL");abe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};o(ZQ,"processLocalTransaction");xQ=lbe();ve.operation=bD;o(e2,"chooseOperation");o(t2,"getOperationFunction");(0,jQ._assignPackageExport)("operation",bD);o(bD,"operation");o(cbe,"catchup");o(Zs,"executeJob");o(lbe,"initializeOperationFunctionMap")});var mR=v((SHe,s2)=>{"use strict";var dR=(q(),M(z)),ube=oe(),PE=Q(),{handleHDBError:AD,hdbErrors:fR}=_e(),{isMainThread:dbe}=require("worker_threads"),{Readable:fbe}=require("stream"),r2=require("os"),mbe=require("util"),pbe=UN(),hbe=mbe.promisify(pbe.authorize),n2=(mL(),M(fL)),{createGzip:Ebe,constants:_be}=require("zlib"),gbe=[dR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,dR.OPERATIONS_ENUM.LOGIN,dR.OPERATIONS_ENUM.LOGOUT];function Sbe(e){let t=`Found an uncaught exception with message: ${e.message}. ${r2.EOL}Stack: ${e.stack} ${r2.EOL}Terminating ${dbe?"HDB":"thread"}.`;console.error(t),PE.fatal(t),process.exit(1)}o(Sbe,"handleServerUncaughtException");function Tbe(e,t,r){if(PE[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:fR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(Tbe,"serverErrorHandler");function ybe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=AD(new Error,"Invalid JSON.",fR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(ube.isEmpty(e.body.operation)){let n=AD(new Error,"Request body must include an 'operation' property.",fR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(ybe,"reqBodyValidationHandler");function Rbe(e,t,r){let n;!gbe.includes(e.body.operation)||e.body.operation===dR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?hbe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{PE.warn(i),PE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(AD(i,a,fR.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(Rbe,"authHandler");async function bbe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=n2.chooseOperation(e.body);let s=await n2.processLocalTransaction(e,n);if(s instanceof fbe&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Ebe({level:_be.Z_BEST_SPEED})))}return s}catch(s){throw PE.error(s),s}}o(bbe,"handlePostRequest");s2.exports={authHandler:Rbe,handlePostRequest:bbe,handleServerUncaughtException:Sbe,serverErrorHandler:Tbe,reqBodyValidationHandler:ybe}});var c2=v((yHe,a2)=>{"use strict";var Abe=require("fastify-plugin"),{handlePostRequest:i2,authHandler:Ibe,reqBodyValidationHandler:wbe}=mR();async function Nbe(e){e.decorate("hdbCore",{preValidation:[wbe,Ibe],request:o(t=>o2(i2(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>o2(i2(t,r,!0)),"requestWithoutAuthentication")})}o(Nbe,"hdbCore");async function o2(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}o(o2,"convertAsyncIterators");a2.exports=Abe(Nbe)});var u2=v((AHe,l2)=>{"use strict";var bHe=require("fs"),pR=me();pR.initSync();var{CONFIG_PARAMS:ID}=(q(),M(z)),Cbe=1024*1024*1024;function Obe(e){let t=pR.get(ID.HTTP_TIMEOUT),r=pR.get(ID.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Cbe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:pR.get(ID.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(Obe,"getServerOptions");l2.exports=Obe});var m2=v((wHe,f2)=>{"use strict";var wD=me();wD.initSync();var{CONFIG_PARAMS:d2}=(q(),M(z));function Pbe(){let e=wD.get(d2.HTTP_CORSACCESSLIST),t=wD.get(d2.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(Pbe,"getCORSOptions");f2.exports=Pbe});var E2=v((CHe,h2)=>{"use strict";var p2=me();p2.initSync();var Lbe=(q(),M(z));function Dbe(){return p2.get(Lbe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(Dbe,"getHeaderTimeoutConfig");h2.exports=Dbe});var CD={};Re(CD,{customFunctionsServer:()=>Ube,ready:()=>P2,start:()=>vbe});function vbe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ta||(Ta=O2(t),ve.http((await Ta).server));let a=await Ta,c=(0,ND.dirname)(s),l=(0,ND.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!_2.has(c)){_2.add(c);try{a.register(Bbe(c,l))}catch(u){if(u.message==="Root plugin has already booted")yt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:P2}}async function Ube(){try{yt.info("In Custom Functions Fastify server"+process.cwd()),yt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),yt.debug(`Custom Functions server process ${process.pid} starting up.`),await xbe();let e=b2.get(F.HTTP_SECUREPORT)>0,t;try{t=Ta=await O2(e)}catch(r){throw yt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw yt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){yt.error(`Custom Functions ${process.pid} Error: ${e}`),yt.error(e),process.exit(1)}}async function xbe(){try{yt.info("Custom Functions starting configuration."),await A2.setUsersWithRolesCache(),yt.info("Custom Functions completed configuration.")}catch(e){yt.error(e)}}function Bbe(e,t){return async function(r){try{yt.info("Custom Functions starting buildRoutes"),yt.trace("Loading fastify routes folder "+e),(0,g2.existsSync)(e)&&r.register(R2.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:yt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?yt.error(s.message):s&&yt.error(s),a()})}catch(n){yt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function O2(e){yt.info("Custom Functions starting buildServer.");let t=(0,I2.default)(e),r=(0,S2.default)(t);r.server.headersTimeout=(0,N2.default)(),r.setErrorHandler(C2.serverErrorHandler);let n=(0,w2.default)();return n&&r.register(T2.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(y2.default),await r.register(Mbe),await r.after(),Nm(r),yt.info("Custom Functions completed buildServer."),r}function P2(){if(Ta)return Ta.then?Ta.then(e=>e.ready()):Ta.ready()}var ND,g2,S2,T2,y2,R2,b2,yt,Mbe,A2,I2,w2,N2,C2,Ta,_2,L2=se(()=>{ND=require("path"),g2=require("fs"),S2=b(require("fastify")),T2=b(require("@fastify/cors")),y2=b(CN()),R2=b(require("@fastify/autoload")),b2=b(me());q();yt=b(Q()),Mbe=b(c2()),A2=b(ds()),I2=b(u2()),w2=b(m2()),N2=b(E2()),C2=b(mR());Uo();Fr();_2=new Set;o(vbe,"start");o(Ube,"customFunctionsServer");o(xbe,"setUp");o(Bbe,"buildRouteFolder");o(O2,"buildServer");o(P2,"ready")});var PD={};Re(PD,{handleApplication:()=>Fbe,suppressHandleApplicationWarning:()=>kbe});function Fbe(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,qf.join)(n.absolutePath,"index.html");(0,Gf.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&r.set((0,qf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,qf.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let a=t.get(n.pathname);if(!a){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(a=r.get(n.pathname))}if(!a){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(a=t.get(`${n.pathname}.${f}`),a)break}if(a)return{handlesHeaders:!0,body:(0,OD.default)(n,(0,Gf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(Hbe(c),!c)return{status:404,body:"File not found"};let l=(0,qf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,Gf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,OD.default)(n,(0,Gf.realpathSync)(l))}},{runFirst:!0})}function Hbe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var Gf,qf,OD,kbe,D2=se(()=>{Gf=require("node:fs"),qf=require("node:path"),OD=b(require("send"));o(Fbe,"handleApplication");kbe=!0;o(Hbe,"validateNotFoundOption")});var LD={};Re(LD,{start:()=>Gbe});function Gbe({override:e}){return{handleFile:o((t,r,n)=>{hR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,M2.parse)(t))){if(process.env[s]!==void 0)if(hR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)hR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var M2,hR,v2=se(()=>{M2=require("dotenv"),hR=b(Q());o(Gbe,"start")});var DD={};Re(DD,{DataLoaderError:()=>ws,DataLoaderResult:()=>$f,EmptyFileError:()=>gR,FileParseError:()=>_R,InvalidPropertyTypeError:()=>SR,MissingRequiredPropertyError:()=>LE,RecordProcessingError:()=>DE,SystemDatabaseError:()=>TR,UnsupportedFileExtensionError:()=>ER,handleApplication:()=>$be,loadDataFile:()=>k2,suppressHandleApplicationWarning:()=>qbe});function $be(e){if((0,x2.getWorkerIndex)()!==0){yo.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||k2(t,Sn,De).then(r=>{yo.debug?.("Data loader processed file: %s: %s",(0,ya.basename)(t.absolutePath),r.message)})})}async function k2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,ya.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,U2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new ER(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof ws?f:new _R(t,f)}if(!a)throw new gR(t);let{database:c,table:l,records:u}=a;if(!l)throw new LE(t,"table");if(!u)throw new LE(t,"records");if(!Array.isArray(u))throw new SR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new TR(c,l);try{let f;if(c&&s[c]&&s[c][l])yo.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])yo.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{yo.debug?.(`Table ${d} not found, creating new table`);let R=[];if(u.length>0){let S=u[0];Object.keys(S).map(y=>{let C={name:y,type:typeof S[y]};return y==="id"&&(C.isPrimaryKey=!0),C}).forEach(y=>{R.push(y)})}f=await Ze({database:c,table:l,attributes:R})}let m=u.length,p=0,h=0,E=0,g=100;for(let R=0;R<u.length;R+=g){let S=u.slice(R,R+g),y=[];for(let C of S)y.push(async()=>{try{let I=null,k=C.id;if(k!==void 0&&(I=await f.get(k)),!I)return p++,f.put(C);let J=I.getUpdatedTime();return a.mtime>J?(h++,f.put(C)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(I){if(I instanceof ws)yo.error?.(`Record processing error: ${I.message}`);else{let k=new DE(d,I);yo.error?.(`Record processing error: ${k.message}`)}return Promise.resolve({inserted:0,updated:0,error:I.message})}});await Promise.all(y.map(C=>C()))}if(p>0||h>0){let R=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(R+=` (${E} records skipped)`),yo.info?.(R),new $f(t,c,l,"success",p+h,R)}else if(E>0){let R=`All ${E} records in ${d} already up-to-date`;return yo.info?.(R),new $f(t,c,l,"skipped",m,R)}else{let R=`No records to process in ${d}`;return yo.info?.(R),new $f(t,c,l,"success",0,R)}}catch(f){throw f instanceof ws?f:new DE(d,f)}}var ya,U2,x2,Ra,B2,F2,yo,qbe,ws,ER,_R,gR,LE,SR,TR,DE,$f,H2=se(()=>{ya=require("node:path"),U2=require("yaml");we();x2=b(nt()),Ra=b(zr()),B2=b(_e()),F2=b(Q()),yo=F2.default.forComponent("dataLoader"),qbe=!0;o($be,"handleApplication");o(k2,"loadDataFile");ws=class extends B2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=Ra.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},ER=class extends ws{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,ya.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},_R=class extends ws{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,ya.basename)(t)}: ${r.message}`,Ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},gR=class extends ws{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,ya.basename)(t)} is empty or invalid`,Ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},LE=class extends ws{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,ya.basename)(t)} is missing required "${r}" property`,Ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},SR=class extends ws{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,ya.basename)(t)} has invalid "${r}" property, expected ${n}`,Ra.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},TR=class extends ws{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ra.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},DE=class extends ws{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ra.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},$f=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var MD={};Re(MD,{hdbServer:()=>Wbe,start:()=>Wbe});async function Wbe(e){try{Ro.default.debug("In Fastify server"+process.cwd()),Ro.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ro.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=G2.default.isMaster,await zbe();let t=e.securePort>0;Vf=jbe(t),await Vf.ready(),e||(e={}),e.isOperationsServer=!0;try{ve.http(Vf.server,e),Vf.server.closeIdleConnections||await Vf.listen({port:0,host:"::"})}catch(r){throw Vf.close(),Ro.default.error(r),Ro.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ro.default.fatal(t),process.exit(1)}}async function zbe(){return Ro.default.trace("Configuring HarperDB process."),j2.default.setSchemaDataToGlobal(),J2.default.setUsersWithRolesCache()}function jbe(e){Ro.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Qbe(e),r=(0,q2.default)(t);r.server.headersTimeout=Xbe(),r.setErrorHandler(Uc.serverErrorHandler);let n=Jbe();n&&r.register($2.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(Y2.default),r.register(V2.default),r.register(K2.default,{root:W2.default.join(z2.PACKAGE_ROOT,"studio/web")}),Nm(r);let s=ba.default.get(om.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!Q2.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Uc.reqBodyValidationHandler,Uc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Uc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),Ro.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function Qbe(e){let t=ba.default.get(Kf.OPERATIONSAPI_NETWORK_TIMEOUT),r=ba.default.get(Kf.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Kbe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:ba.default.get(Kf.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function Jbe(){let e=ba.default.get(Kf.OPERATIONSAPI_NETWORK_CORS),t=ba.default.get(Kf.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Ybe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function Xbe(){return ba.default.get(Kf.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Vbe}var G2,ba,Ro,q2,$2,V2,K2,Y2,W2,z2,j2,Q2,J2,Uc,Vbe,Kbe,Ybe,Kf,Vf,X2=se(()=>{G2=b(require("cluster")),ba=b(me());q();Ro=b(Q()),q2=b(require("fastify")),$2=b(require("@fastify/cors")),V2=b(require("@fastify/compress")),K2=b(require("@fastify/static")),Y2=b(CN()),W2=b(require("path")),z2=b(Ct()),j2=b(mi()),Q2=b(oe()),J2=b(ds());Fr();Uc=b(mR());Uo();ba.default.initSync();Vbe=6e4,Kbe=1024*1024*1024,Ybe="TRUE",{CONFIG_PARAMS:Kf}=z;o(Wbe,"operationsServer");o(zbe,"setUp");o(jbe,"buildServer");o(Qbe,"getServerOptions");o(Jbe,"getCORSOpts");o(Xbe,"getHeaderTimeoutConfig")});var kD={};Re(kD,{disableNATS:()=>eAe,publishToStream:()=>bR,setNATSReplicator:()=>vD,setPublishToStream:()=>tAe,setSubscription:()=>FD,start:()=>Zbe});function Zbe(){ME.default.get(F.CLUSTERING_ENABLED)&&nAe()}function eAe(e=!0){nJ=e}function tAe(e,t){bR=e,FD=t}function nAe(){if(nJ||process.env._DISABLE_NATS)return;let e=at(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];vD(s,r,i)}}Ll((r,n)=>{vD(r.tableName,r.databaseName,r),n&&iJ(r)}),!Z2&&(Z2=!0)}function vD(e,t,r){if(t==="system"&&sAe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Hr{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){iJ(i)}static subscribe(){let i=new Zn;return FD(t,e,i),i}static subscribeOnThisThread(i){return i<(ME.default.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??rAe)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new yR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=sJ;return i}o(n,"getNATSTransaction")}function iJ(e){let t=ME.default.get(F.CLUSTERING_NODENAME);bR(`${xD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,BD.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var eJ,xD,BD,tJ,rJ,ME,RR,nJ,bR,FD,rAe,sJ,Z2,sAe,yR,UD,oJ=se(()=>{we();$a();eJ=b(hr()),xD=b(Pt()),BD=b(Zi());Pu();tJ=b(rC()),rJ=b(Mn()),ME=b(me());q();RR=b(Q());o(Zbe,"start");o(eAe,"disableNATS");bR=eJ.publishToStream,FD=tJ.setSubscription;o(tAe,"setPublishToStream");rAe=2;o(nAe,"assignReplicationSource");sAe=["hdb_job","hdb_raw_analytics","hdb_info"];o(vD,"setNATSReplicator");o(iJ,"publishSchema");yR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=ME.default.get(F.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(RR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(bR(`${xD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,BD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw RR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},UD=class extends yR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,rJ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};sJ=new UD});async function dJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await HD.get(e,{returnNonexistent:!0});i=new $D(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await HD.get(e);a&&a.delete()}i=new IR(e,t)}return n&&(n.id=e,n.user={username:t?.username},vE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function GD(){return AR++,AR>65500&&(AR=1),AR}function qD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Us.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new ci(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return bt(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var cJ,xc,lJ,uJ,aJ,HD,vE,AR,IR,$D,fJ=se(()=>{we();Va();cJ=b(Mn()),xc=b(Q());xa();lJ=b(nt()),uJ=b(qP());Fr();cg();aJ=100,HD=Ze({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),vE=Ze({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,lJ.getWorkerIndex)()===0&&(async()=>{await uJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of vE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await ve.getUser(r.user.username));try{await qD(r,t,r)}catch{(0,xc.warn)("Failed to publish will",t)}vE.delete(e.id)}})();o(dJ,"getSession");AR=1;o(GD,"getNextMessageId");IR=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,xc.trace)("Resuming subscription from",s,"from",a);let p=Us.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let y=S.split("/"),C;for(let J=0;J<y.length;J++)if(y[J].indexOf("+")>-1)if(y[J]==="+")C=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&C)throw new Error("Filters can not be combined");let I=!0;y[y.length-1]==="#"&&(y.length--,I=!1),C&&(n=o(J=>{let G=J.id;if(!Array.isArray(G))if(G?.indexOf?.("/")>-1)G=G.split("/");else return!1;if(I&&G.length!==y.length)return!1;for(let H=0;H<y.length;H++)if(y[H]!=="+"&&y[H]!==G[H])return!1;return!0},"filter"));let k=y.indexOf("+");m.url="/"+(k>-1?y.slice(0,k):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,R=await bt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await g.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let C=(async()=>{for await(let I of y)try{let k;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,k=this.needsAcknowledge(I)):(I.acknowledge?.(),k=GD());let J=I.id;if(Array.isArray(J)&&(J=Qu(J)),J==null&&(J=""),await this.listener(E+"/"+J,I.value,k,t)===!1)break;this.awaitingAcks?.size>aJ?await new Promise(H=>setTimeout(H,this.awaitingAcks.size-aJ)):await new Promise(setImmediate)}catch(k){(0,xc.warn)(k)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=GD();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return qD(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();bt(r,async()=>{try{if(!t){let n=await vE.get(this.sessionId);n?.doesExist()&&await qD(n,n.data,r)}}finally{await vE.delete(this.sessionId)}}).catch(n=>{(0,xc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(qD,"publish");$D=class extends IR{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=GD(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,xc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,cJ.getNextMonotonicTime)()),(0,xc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),HD.put(this.sessionRecord)}}});var VD={};Re(VD,{bypassAuth:()=>iAe,start:()=>aAe});function iAe(){SJ=!0}function aAe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new gJ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),er.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=pJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",p),u.on("close",h),u.on("error",E=>{er.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),er.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await Qd(p,l);if(!E.valid)throw er.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,Yf.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&NR.notify?.({username:d?.username,status:si.SUCCESS,type:Da.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Yf.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&NR.error?.({username:h,status:si.FAILURE,type:Da.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else er.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){a.events.emit("error",p,u),er.error?.(p)}else if(l.required)return er.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&oAe(u.remoteAddress)&&(d=await(0,hJ.getSuperUser)(),er.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=pJ(u,p=>u.write(p),null,d,a);u.on("data",f),u.on("close",m),u.on("error",p=>{er.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function pJ(e,t,r,n,s){mJ||(mJ=!0,$m(f=>{wR>0&&f.push({metric:"mqtt-connections",connections:wR,byThread:!0})}));let i;wR++;let a,c={protocolVersion:4},l=(0,CR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){wR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),Zr(!1,"connection","mqtt","disconnect"),er.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),er.info?.(y);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){er.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Ve(f.length,"bytes-received",E,R(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await ve.getUser(f.username,f.password.toString(),r),(0,Yf.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&NR.notify?.({username:n?.username,status:si.SUCCESS,type:Da.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(X){return(0,Yf.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&NR.error?.({username:f.username,status:si.FAILURE,type:Da.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,X),Zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),Zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let X=e.deserialize||(e.deserialize=vo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?X(f.will.payload):void 0,delete f.will.payload}a=dJ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(X){return er.error?.(X),s.events.emit("auth-failed",f,e,X),Zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:X.code||5,returnCode:X.code||128})}s.events.emit("connected",a,e),Zr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let y=o(async(X,W,ue,ce)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",X);let te=X.indexOf("/",1),ye=te>0?X.slice(0,te):X;g({cmd:"publish",topic:X,payload:await S(W),messageId:ue||Math.floor(Math.random()*1e8),qos:ce.qos},ye);let Ae=e._socket??e;return Ae.writableNeedDrain?new Promise(Ye=>Ae.once("drain",Ye)):!Ae.closed}catch(te){return er.error?.(te),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(y),a.sessionWasPresent&&await a.resume();break;case"subscribe":let C=[];for(let X of f.subscriptions){let W;try{let ue=await a.addSubscription(X,X.qos>=1);W=ue?ue.qos||0:c.protocolVersion<5?128:143}catch(ue){s.events.emit("error",ue,e,X,a),ue.statusCode?ue.statusCode===500?er.warn?.(ue):er.info?.(ue):er.error?.(ue),W=c.protocolVersion<5?128:ue.statusCode===403?135:ue.statusCode===404?143:128}C.push(W)}await a.committed,g({cmd:"suback",granted:C,messageId:f.messageId});break;case"unsubscribe":{let X=[];for(let W of f.unsubscriptions)X.push(a.removeSubscription(W)?0:17);g({cmd:"unsuback",granted:X,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let I=f.qos===2?"pubrec":"puback",k=e.deserialize||(e.deserialize=vo(r?.headers.get?.("content-type"))),G=(f.payload?.length||0)>0?k(f.payload):void 0,H;try{H=await a.publish(f,G)}catch(X){s.events.emit("error",X,e,f,a),er.warn?.(X),f.qos>0&&g({cmd:I,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:I,messageId:f.messageId,reasonCode:H===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),Zr(!0,"connection","mqtt","disconnect"),er.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,a),er.error?.(y),g({cmd:"disconnect"})}function g(y,C){let I=(0,CR.generate)(y,c);t(I),Ve(I.length,"bytes-sent",C,R(y),"mqtt")}o(g,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}o(R,"packetMethodName");function S(y){return Mo(y,r)}o(S,"serialize")}),l.on("error",f=>{er.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var CR,hJ,Yf,EJ,_J,gJ,NR,er,SJ,oAe,mJ,wR,TJ=se(()=>{CR=require("mqtt-packet");fJ();hJ=b(ds());Uo();rs();Fr();Yf=b(me());q();EJ=b(es()),_J=b(Q()),gJ=require("events");ET();NR=(0,EJ.loggerWithTag)("auth-event"),er=(0,_J.forComponent)("mqtt"),SJ=(0,Yf.get)(F.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(iAe,"bypassAuth");oAe=o(e=>SJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(aAe,"start");wR=0;o(pJ,"onSocket")});function OR(e,t){if(t?.includes(".."))throw new KD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var KD,YD=se(()=>{KD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(OR,"resolveBaseURLPath")});function yJ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var RJ=se(()=>{o(yJ,"deriveCommonPatternBase")});function PR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var WD=se(()=>{o(PR,"deriveGlobOptions")});var bJ,zD,UE,AJ=se(()=>{YD();RJ();WD();bJ=require("micromatch"),zD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},UE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=OR(this.name,this.config.urlPath),this.globOptions=PR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new zD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,bJ.scan)(s).base),this.commonPatternBase=yJ(this.patternBases)}}});function IJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function _u(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(IJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(IJ(n,t)){t=t.slice(n.length+1);break}}}return(0,wJ.join)(e.baseURLPath,t)}var wJ,jD=se(()=>{wJ=require("node:path");o(IJ,"pathStartsWithBase");o(_u,"deriveURLPath")});function NJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var DR,CJ,OJ,QD,PJ,LJ,LR,DJ=se(()=>{DR=require("node:events");AJ();CJ=b(Q()),OJ=b(require("chokidar")),QD=require("node:path"),PJ=require("node:fs/promises");jD();LJ=require("micromatch"),LR=class extends DR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new UE(t,r,NJ(n)),this.#r=s||CJ.default.loggerWithTag(t),this.ready=(0,DR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,LJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,QD.join)(this.directory,r);switch(t){case"add":case"change":{let i=_u(this.#e,r,"file");(0,PJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=_u(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=_u(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,QD.join)(this.#e.directory,r));return this.#t=OJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new UE(this.name,this.directory,NJ(t)),this.#a()}};o(NJ,"castConfig")});var MR,JD=se(()=>{MR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var UR,MJ,vJ,UJ,xJ,BJ,XD,ZD,eM,tM,rM,vR,FJ=se(()=>{UR=require("events"),MJ=b(require("yaml")),vJ=b(require("chokidar")),UJ=require("node:fs/promises"),xJ=require("util"),BJ=b(Q());JD();XD=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},ZD=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},eM=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},tM=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},rM=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},vR=class extends UR.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||BJ.default.loggerWithTag(t),this.ready=(0,UR.once)(this,"ready"),this.#t=vJ.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,UJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=MJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new XD(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=MR,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,xJ.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new ZD;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new eM(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new tM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new rM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var FR,kJ,xR,BR,HJ=se(()=>{FR=require("node:events");DJ();FJ();kJ=b(Q());AL();xR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},BR=class extends FR.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,kJ.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,FR.once)(this,"ready"),this.options=new vR(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new LR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new xR);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new xR);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),i4()}}});function gu(e){return typeof e=="string"&&e.trim()!==""}function nM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>gu(t))}function VJ(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function cAe(e){e.config.root&&xE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new uM(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(VJ(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,BE.join)(e.directory,i);kR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function KJ(e){let t=!1;if(t=await cAe(e),t)return t;let r=await(0,GJ.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,BE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=_u(e,n.path,"directory");kR.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=_u(e,n.path,"file"),a=await(0,qJ.readFile)(s);kR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else xE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var kR,GJ,xE,BE,qJ,$J,HR,Mi,sM,iM,oM,aM,cM,lM,uM,dM,fM,YJ=se(()=>{kR=require("node:worker_threads"),GJ=b(require("fast-glob")),xE=b(Q());YD();WD();BE=require("node:path"),qJ=require("node:fs/promises");jD();$J=require("micromatch"),HR=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!gu(this.config.files)&&!nM(this.config.files)&&!VJ(this.config.files))throw new sM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!nM(this.config.files.source)&&!gu(this.config.files.source))throw new iM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new oM(this);if(this.config.files.ignore!==void 0&&!nM(this.config.files.ignore)&&!gu(this.config.files.ignore))throw new aM(this)}if(this.config.root!==void 0&&!gu(this.config.root))throw new lM(this);if(this.config.path!==void 0&&!gu(this.config.path))throw new dM(this);if(this.config.path&&(xE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!gu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new fM(this);this.globOptions=PR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new cM(this,r);return r.startsWith("/")&&(xE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,$J.scan)(r).base),this.baseURLPath=OR(this.name,this.config.urlPath)}},Mi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,BE.basename)(r.directory)}) ${t}`)}},sM=class extends Mi{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},iM=class extends Mi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},oM=class extends Mi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},aM=class extends Mi{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},cM=class extends Mi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},lM=class extends Mi{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},uM=class extends Mi{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},dM=class extends Mi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},fM=class extends Mi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(gu,"isNonEmptyString");o(nM,"isArrayOfNonEmptyStrings");o(VJ,"isObject");o(cAe,"handleRoots");o(KJ,"processResourceExtensionComponent")});var Cy={};Re(Cy,{getComponentName:()=>Iy,loadComponent:()=>VR,loadComponentDirectories:()=>QJ,setErrorReporter:()=>uAe});function QJ(e,t){t&&(pM=t),e&&(gM=e);let r=[];if((0,Vt.existsSync)(mM)){let s=(0,Vt.readdirSync)(mM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,Kr.join)(mM,a);r.push(VR(c,pM,hb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(VR(n,pM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{jJ=!0})}function uAe(e){qR=e}function dAe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{ga.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(ga.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,Kr.join)(e,"node_modules");(0,Vt.existsSync)(s)||(0,Vt.mkdirSync)(s);let i=(0,Kr.join)(s,"harperdb");if((0,Vt.existsSync)(i)){if((0,Vt.realpathSync)(i)===(0,Vt.realpathSync)(_M.PACKAGE_ROOT))return t();(0,Vt.rmSync)(i,{recursive:!0,force:!0})}(0,Vt.symlinkSync)(_M.PACKAGE_ROOT,i,"dir"),t()}finally{ga.primaryStore.unlock(e,0)}})}function JJ(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return ga.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(JJ(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{ga.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function VR(e,t,r,n,s,i){let a=(0,Vt.realpathSync)(e);if(GR.has(a))return GR.get(a);GR.set(a,!0),s&&(gM=s);try{let c,l=(0,Kr.join)(e,"harperdb-config.yaml");if((0,Vt.existsSync)(l)?c=n?(0,KR.getConfigObj)():(0,EM.parseDocument)((0,Vt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Vt.existsSync)(l=(0,Kr.join)(e,"config.yaml"))?c=(0,EM.parseDocument)((0,Vt.readFileSync)(l,"utf8")).toJSON():c=MR,!n)try{await dAe(e)}catch(m){Aa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Aa.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=$R,d={};for(let m in c){let p=n?m:`${(0,Kr.basename)(e)}.${m}`;$R=m;let h=c[m];if(!h)continue;ro.loading(p);let E,g=h.package;try{if(g){let I=null;if(n)I=(0,Kr.join)(e,"components",m);else{let k=e;for(I=(0,Kr.join)(k,"node_modules",m);!(0,Vt.existsSync)(I);){if(k=(0,Kr.dirname)(k),k.length<(0,zJ.getHdbBasePath)().length){I=null;break}I=(0,Kr.join)(k,"node_modules",m)}}if(I)E=await VR(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=lAe[m];if(!E){ro.loaded(p,`Application component '${p}' processed`);continue}let R=o(I=>(I.origin=r,Ze(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,C=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let I=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw ro.failed(p,I,`Component '${p}' failed to load`),I}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Aa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new BR(m,e,l,t,ve);await JJ(I,E),ro.loaded(p,`Component '${p}' loaded successfully`);continue}if(hM.isMainThread&&(E=await E.startOnMainThread?.({server:ve,ensureTable:R,port:C,securePort:y,resources:t,...h})||E,n&&S))for(let I of[C,y])try{if(+I&&!WJ.includes(I)){let k=SM.get(F.HTTP_SESSIONAFFINITY);k&&Aa.default.warn("Session affinity is not recommended and may cause memory leaks"),(k||!_S)&&(WJ.push(I),YP(I,k))}}catch(k){console.error("Error listening on socket",I,k,m)}if(t.isWorker&&(E=await E.start?.({server:ve,ensureTable:R,port:C,securePort:y,resources:t,...h})||E),gM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new HR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await KJ(I)}ro.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,Kr.basename)(e)}' due to: ${R.message}`,qR?.(R),((0,FE.getWorkerIndex)()===0?console:Aa.default).error(R),t.set(h.path||"/",new ll(R),null,!0),ro.failed(p,R,`Could not load component '${p}'`)}}if($R=u,hM.isMainThread&&!jJ&&i&&(0,FE.watchDir)(e,async()=>QJ()),c.extensionModule||c.pluginModule){let m=await pS((0,Kr.join)(e,c.extensionModule||c.pluginModule));return GR.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;qR?.(new Error(m)),((0,FE.getWorkerIndex)()===0?console:Aa.default).error(m),ro.failed((0,Kr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Aa.default.warn(`Component ${m} from (${(0,Kr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,qR?.(c),t.set("",new ll(c))}}var Vt,Kr,hM,EM,SM,_M,Aa,FE,zJ,KR,mM,gM,jJ,pM,lAe,WJ,GR,qR,$R,Iy,Qh=se(()=>{Vt=require("node:fs"),Kr=require("node:path"),hM=require("node:worker_threads"),EM=require("yaml"),SM=b(me()),_M=b(Ct());q();DG();qG();rq();cq();lq();Aq();L2();D2();v2();Aa=b(Q());H2();FE=b(nt());_N();Fr();we();zP();zJ=b(me());X2();Fy();oJ();ps();TJ();KR=b(gt());Vp();HA();HJ();YJ();HP();dE();Ip();JD();mM=(0,KR.resolvePath)(SM.get(F.COMPONENTSROOT)),gM=new Map;o(QJ,"loadComponentDirectories");lAe={REST:SS,rest:SS,graphql:lN,graphqlSchema:aN,roles:EN,jsResource:gN,fastifyRoutes:CD,login:TN,static:PD,operationsApi:MD,customFunctions:{},http:Ay,clustering:kD,replication:Xo,authentication:rE,mqtt:VD,loadEnv:LD,logging:Aa.default,dataLoader:DD},WJ=[],GR=new Map;o(uAe,"setErrorReporter");Iy=o(()=>$R,"getComponentName");o(dAe,"symlinkHarperModule");o(JJ,"sequentiallyHandleApplication");o(VR,"loadComponent")});var Oy=v((cqe,XJ)=>{var{isMainThread:TM}=require("worker_threads"),{getTables:fAe}=(we(),M(mt)),{loadComponentDirectories:mAe,loadComponent:pAe}=(Qh(),M(Cy)),{resetResources:hAe}=(Va(),M(GA)),EAe=gt(),{dirname:_Ae}=require("path"),{getConnection:gAe}=hr(),SAe=me(),{CONFIG_PARAMS:TAe}=(q(),M(z)),{loadCertificates:yAe}=Es(),{installApplications:RAe}=(qy(),M(Gy)),{loadAndWatchLicensesDir:bAe}=(Kh(),M(gy)),yM=new Map;async function AAe(e=!1){!TM&&SAe.get(TAe.CLUSTERING_ENABLED)&&gAe();try{TM&&await RAe()}catch(n){console.error(n)}let t=hAe();fAe(),t.isWorker=e,TM&&bAe(),await yAe(),await pAe(_Ae(EAe.getConfigFilePath()),t,"hdb",!0,yM),await mAe(yM,t);let r=[];for(let[n]of yM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(AAe,"loadRootComponents");XJ.exports.loadRootComponents=AAe});var nt=v((uqe,Ui)=>{"use strict";vb();var{Worker:IAe,MessageChannel:wAe,parentPort:bo,isMainThread:wM,threadId:NAe,workerData:Ao}=require("worker_threads"),{PACKAGE_ROOT:CAe}=Ct(),{join:r3,isAbsolute:OAe,extname:PAe}=require("path"),{server:n3}=(Fr(),M(lm)),{watch:LAe,readdir:DAe}=require("fs/promises"),{totalmem:ZJ}=require("os"),Wf=(q(),M(z)),s3=me(),vi=Q(),{randomBytes:MAe}=require("crypto"),{_assignPackageExport:vAe}=ii(),e3=1024*1024,Ia=[],ti=[],UAe=50,NM=1e4,xAe="restart",i3="request_thread_info",o3="resource_report",a3="thread_info",c3="added-port",BAe="ack",RM;vAe("threads",ti);Ui.exports={startWorker:bM,restartWorkers:OM,shutdownWorkers:p3,shutdownWorkersNow:qAe,workers:Ia,setMonitorListener:QAe,onMessageFromWorkers:$Ae,onMessageByType:E3,broadcast:KAe,broadcastWithAcknowledgement:WAe,setChildListenerByType:GAe,getWorkerIndex:l3,getWorkerCount:u3,getTicketKeys:f3,setMainIsWorker:kAe,setTerminateTimeout:FAe,restartNumber:Ao?.restartNumber||1};ti.onMessageByType=E3;ti.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ti.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Ui.exports.whenThreadsStarted=new Promise(e=>{Ui.exports.threadsHaveStarted=e});var CM;function FAe(e){NM=e}o(FAe,"setTerminateTimeout");function l3(){return Ao?Ao.workerIndex:CM?0:void 0}o(l3,"getWorkerIndex");function u3(){return Ao?Ao.workerCount:CM?1:void 0}o(u3,"getWorkerCount");function kAe(e){CM=e,Ui.exports.threadsHaveStarted()}o(kAe,"setMainIsWorker");var d3=1,YR;function f3(){return YR||(YR=wM?MAe(48):Ao.ticketKeys,YR)}o(f3,"getTicketKeys");Object.defineProperty(n3,"workerIndex",{get(){return l3()}});Object.defineProperty(n3,"workerCount",{get(){return u3()}});var m3={[i3](e,t){zAe(t)},[o3](e,t){jAe(t,e)}};function bM(e,t={}){let r=process.constrainedMemory?.()||ZJ();r=Math.min(r,ZJ(),2e4*e3);let n=s3.get(Wf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/e3/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of ti){let u=new wAe;u.existingPort=l,i.push(u),a.push(u.port2)}PAe(e)||(e+=".js");let c=new IAe(OAe(e)?e:r3(CAe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:d3=t.threadCount,name:t.name,restartNumber:Ui.exports.restartNumber,ticketKeys:f3()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:c3,port:l,threadId:c.threadId},[l]);return zR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>bM(e,t),c.on("error",l=>{vi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Ia.splice(Ia.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<UAe?(t.unexpectedRestarts=c.unexpectedRestarts+1,bM(e,t)):vi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{m3[l.type]?.(l,c)}),Ia.push(c),XAe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(bM,"startWorker");var HAe=[Wf.THREAD_TYPES.HTTP];async function OM(e=null,t=Math.max(d3>3,1),r=!0){if(wM){try{process.chdir(process.cwd())}catch(a){vi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=Oy();await a()}Ui.exports.restartNumber++,t<1&&(t=t*Ia.length);let n=[],s=[];for(let a of Ia.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;vi.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Ui.exports.restartNumber,type:Wf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=HAe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{vi.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},NM*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===Wf.ITC_EVENT_TYPES.CHILD_STARTED&&(vi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");vi.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Df();r&&(e==="http"||!e)&&s3.get(Wf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else bo.postMessage({type:xAe,workerType:e})}o(OM,"restartWorkers");function GAe(e,t){m3[e]=t}o(GAe,"setChildListenerByType");function p3(e){return OM(e,1/0,!1)}o(p3,"shutdownWorkers");function qAe(e){return p3(e),Promise.all(Ia.map(t=>t.terminate()))}o(qAe,"shutdownWorkersNow");var h3=[];function $Ae(e){h3.push(e)}o($Ae,"onMessageFromWorkers");var AM=new Map;function E3(e,t){let r=AM.get(e);r||AM.set(e,r=[]),r.push(t)}o(E3,"onMessageByType");var VAe=10;async function KAe(e,t){let r=0;for(let n of ti)try{n.postMessage(e),r++>VAe&&(r=0,await new Promise(setImmediate))}catch(s){vi.error("Unable to send message to worker",s)}t&&g3(e,null)}o(KAe,"broadcast");var WR=new Map,YAe=1;function WAe(e){return new Promise(t=>{let r=0;for(let n of ti)try{let s=YAe++,i=o(()=>{WR.delete(s),--r===0&&t(),n!==bo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,WR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of WR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){vi.error("Unable to send message to worker",s)}r===0&&t()})}o(WAe,"broadcastWithAcknowledgement");function zAe(e){e.postMessage({type:a3,workers:_3()})}o(zAe,"sendThreadInfo");function _3(){let e=Date.now();return Ia.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(_3,"getChildWorkerInfo");function jAe(e,t){e.resources=t,e.resources.updated=Date.now()}o(jAe,"recordResourceReport");var IM;function QAe(e){IM=e}o(QAe,"setMonitorListener");var JAe=1e3,t3=!1;function XAe(){t3||(t3=!0,setInterval(()=>{for(let e of Ia){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}IM&&IM()},JAe).unref())}o(XAe,"startMonitoring");var ZAe=1e3;if(bo&&Ao?.addPorts){zR(bo);for(let e=0,t=Ao.addPorts.length;e<t;e++){let r=Ao.addPorts[e];r.threadId=Ao.addThreadIds[e],zR(r)}setInterval(()=>{let e=process.memoryUsage();bo.postMessage({type:o3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},ZAe).unref(),RM=o(()=>new Promise((e,t)=>{bo.on("message",r),bo.postMessage({type:i3});function r(n){n.type===a3&&(bo.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else RM=_3;Ui.exports.getThreadInfo=RM;function zR(e,t){ti.push(e),e.on("message",r=>{if(r.type===c3)r.port.threadId=r.threadId,zR(r.port);else if(r.type===BAe){let n=WR.get(r.id);n&&n()}else g3(r,e)}).on("close",()=>{ti.splice(ti.indexOf(e),1)}).on("exit",()=>{ti.splice(ti.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(zR,"addPort");function g3(e,t){for(let n of h3)n(e,t);let r=AM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){vi.error(s)}}o(g3,"notifyMessageListeners");if(wM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await DAe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(r3(s,a.name));try{for await(let{filename:a}of LAe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await OM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Ui.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else bo.on("message",async e=>{let{type:t}=e;t===Wf.ITC_EVENT_TYPES.SHUTDOWN&&(Ui.exports.restartNumber=e.restartNumber,bo.unref(),setTimeout(()=>{vi.warn("Thread did not voluntarily terminate",NAe),process.exit(0)},NM).unref())})});var A3=v((pqe,b3)=>{"use strict";var{promises:zf,createReadStream:eIe,createWriteStream:tIe}=require("fs"),{createGzip:rIe}=require("zlib"),{promisify:nIe}=require("util"),{pipeline:sIe}=require("stream"),iIe=nIe(sIe),LM=require("path"),R3=me();R3.initSync();var jR=Q(),{CONFIG_PARAMS:oIe,ITC_EVENT_TYPES:fqe}=(q(),M(z)),{onMessageFromWorkers:mqe}=nt(),{convertToMS:S3}=oe(),{onStorageReclamation:aIe}=(F_(),M(JU)),cIe=6e4,lIe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",uIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",PM,T3;b3.exports=dIe;function dIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(aIe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(lIe);if(!i)throw new Error(uIe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=S3(r));let d;return PM=Date.now(),jR.trace("Log rotate enabled, maxSize:",t,"interval:",r),T3=setInterval(async()=>{if(l){let f;f=await zf.stat(e.path),f.size>=l&&(d=await y3(e.path,i))}if(u&&Date.now()-PM>=u&&(d=await y3(e.path,i),PM=Date.now()),n||c){let f=S3(n??"1M")/(1+c);c=0;let m=await zf.readdir(i);for(let p of m)try{let h=await zf.stat(LM.join(i,p));Date.now()-h.mtimeMs>f&&await zf.unlink(LM.join(i,p))}catch(h){jR.error("Error trying to remove log",p,h)}}},a??cIe).unref(),{end(){clearInterval(T3)},getLastRotatedLogPath(){return d}}}o(dIe,"logRotator");async function y3(e,t){let r=R3.get(oIe.LOGGING_ROTATION_COMPRESS),n=LM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await zf.rename(e,n),r&&(e=n,n+=".gz",await iIe(eIe(e),rIe(),tIe(n)),await zf.unlink(e)),jR.closeLogFile(),jR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(y3,"moveLogFile")});var O3={};Re(O3,{RootConfigWatcher:()=>DM});var I3,w3,N3,QR,C3,DM,P3=se(()=>{I3=b(require("chokidar")),w3=require("node:fs/promises"),N3=b(gt()),QR=require("node:stream"),C3=require("yaml"),DM=class extends QR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,N3.getConfigFilePath)(),this.ready=(0,QR.once)(this,"ready"),this.#t=I3.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,w3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,C3.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=v((Sqe,sb)=>{"use strict";var wa=require("fs-extra"),{workerData:fIe,threadId:mIe,isMainThread:x3}=require("worker_threads"),GE=require("path"),B3=require("yaml"),F3=require("properties-reader"),Yr=(q(),M(z)),L3=Vc(),pIe=require("os"),{PACKAGE_ROOT:HM}=Ct(),{_assignPackageExport:hIe}=ii(),{Console:EIe}=require("console"),vM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),D3=new Map,{join:Na}=GE,M3=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},_Ie={STDOUT:"stdOut",STDERR:"stdErr"},gqe=Na(HM,"logs"),gIe=Na(HM,"config/yaml/",Yr.HDB_DEFAULT_CONFIG_FILE),SIe=1e4,qE,$E,JR,Io,UM,MM,ZR,Ut,Ns,eb,tb,jf,HE,kE;function XR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=GE.dirname(n)):t.root?n=Na(t.root,UM):(n=Ut.path,t.root||(t.root=GE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Ut?.level??cr.info,k3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Ut.path===e.path&&r)}o(XR,"updateLogger");function k3(e){let t=e.conditional??(e.conditional={});t.notify=cr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=cr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=cr.error>=e.level?e.error.bind(e):void 0,t.warn=cr.warn>=e.level?e.warn.bind(e):void 0,t.info=cr.info>=e.level?e.info.bind(e):void 0,t.debug=cr.debug>=e.level?e.debug.bind(e):void 0,t.trace=cr.trace>=e.level?e.trace.bind(e):void 0}o(k3,"updateConditional");async function xM(){kE||(kE=new kIe,await kE.ready,kE.on("change",xM));let e=kE.config,t=e.logging??{};XR(Ut,t),ZR=Ut.path,qE=t.console??!1,t.external&&XR(Ns,t.external);for(let r in e){let n=e[r];n.logging?XR(Ut.forComponent(r),n.logging,r):Ut.hasComponent(r)&&XR(Ut.forComponent(r),t,r)}}o(xM,"updateLogSettings");var BM=class extends EIe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){Cn="trace",this.level<=cr.trace&&super.info(...t),Cn="info"}debug(...t){Cn="debug",this.level<=cr.debug&&super.info(...t),Cn="info"}info(...t){Cn="info",this.level<=cr.info&&super.info(...t),Cn="info"}warn(...t){Cn="warn",this.level<=cr.warn&&super.warn(...t),Cn="info"}error(...t){Cn="error",this.level<=cr.error&&super.error(...t),Cn="info"}fatal(...t){jf=!0;try{Cn="fatal",this.level<=cr.fatal&&super.error(...t),Cn="info"}finally{jf=!1}}notify(...t){jf=!0;try{Cn="notify",this.level<=cr.notify&&super.info(...t),Cn="info"}finally{jf=!1}}withTag(t){return G3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};HE===void 0&&H3();sb.exports={notify:CIe,fatal:OIe,error:kM,warn:PIe,info:IIe,debug:NIe,trace:wIe,logLevel:Io,loggerWithTag:G3,suppressLogging:bIe,initLogSettings:H3,logCustomLevel:LIe,closeLogFile:q3,createLogger:nb,logsAtLevel:yIe,getLogFilePath:o(()=>ZR,"getLogFilePath"),forComponent:o(e=>Ut.forComponent(e),"forComponent"),setMainLogger:BIe,setLogLevel:MIe,OUTPUTS:_Ie,AuthAuditLog:FIe,start:xM,startOnMainThread:xM,errorToString:xIe,disableStdio:TIe};function TIe(){vM=o(function(){},"nativeStdWrite")}o(TIe,"disableStdio");sb.exports.externalLogger={notify(...e){Ns.notify(...e)},fatal(...e){Ns.fatal(...e)},error(...e){Ns.error(...e)},warn(...e){Ns.warn(...e)},info(...e){Ns.info(...e)},debug(...e){Ns.debug(...e)},trace(...e){Ns.trace(...e)},withTag(e){return Ns.withTag(e)}};hIe("logger",sb.exports.externalLogger);function yIe(e){return cr[Io]<=cr[e]}o(yIe,"logsAtLevel");function H3(e=!1){try{if(HE===void 0||e){q3();let t=DIe(),r=L3(["ROOTPATH"]);try{HE=F3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!wa.pathExistsSync(Na(r.ROOTPATH,Yr.HDB_CONFIG_FILE)))throw s}let n;if({level:Io,configLogPath:MM,toFile:$E,logConsole:qE,rotation:n,toStream:JR}=vIe(r.ROOTPATH?Na(r.ROOTPATH,Yr.HDB_CONFIG_FILE):HE.get("settings_path")),UM=Yr.LOG_NAMES.HDB,ZR=Na(MM,UM),Ut=nb({path:ZR,level:Io,stdStreams:JR,rotation:n}),Ns=Ut.forComponent("external"),Ns.tag=null,x3)try{require("segfault-handler").registerHandler(Na(MM,"crash.log"))}catch{}}}catch(t){if(HE=void 0,t.code===Yr.NODE_ERROR_CODES.ENOENT||t.code===Yr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=L3(Object.keys(Yr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=Yr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===Yr.CONFIG_PARAMS.LOGGING_LEVEL){Io=a;continue}i===Yr.CONFIG_PARAMS.LOGGING_CONSOLE&&(qE=i)}let{defaultLevel:n}=UIe();$E=!1,JR=!0,Io=Io===void 0?n:Io,Ut=nb({level:Io}),Ns=Ut.forComponent("external"),Ns.tag=null;return}throw kM("Error initializing log settings"),kM(t),t}process.env.DEV_MODE&&(JR=!0),RIe()}o(H3,"initLogSettings");var Bc=!0;function RIe(){$E&&(process.stdout.write=function(e){return typeof e=="string"&&Bc&&qE&&(e=e.toString(),e[e.length-1]===`
|
|
135
135
|
`&&(e=e.slice(0,-1)),tb(e)),vM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Bc&&qE&&(e[e.length-1]===`
|
|
136
136
|
`&&(e=e.slice(0,-1)),tb(e)),vM.apply(process.stderr,arguments)})}o(RIe,"stdioLogging");function G3(e,t,r=Ut){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=cr[i]?function(...a){rb=e;try{return s.call(r,...a)}finally{rb=void 0}}:null}o(n,"logWithTag")}o(G3,"loggerWithTag");function bIe(e){try{Bc=!1,e()}finally{Bc=!0}}o(bIe,"suppressLogging");var AIe=fIe?.name?.replace(/ /g,"-")||"main",Cn="info",FM,rb;function nb({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=cr[t],l;function u(p){if($E)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),Bc=!1;try{process.stdout.write(p)}finally{Bc=!0}}else f(p);else r&&process.stdout.write(p)}o(u,"logStdOut");function d(p){if($E){if(f(p),r){Bc=!1;try{process.stderr.write(p)}finally{Bc=!0}}}else r&&process.stderr.write(p)}o(d,"logStdErr");let f=e&&U3(e,n,s);function m(p){return{write(h){let E=[Cn];E.unshift(FM||AIe+"/"+mIe),rb&&E.push(rb),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(o(m,"logPrepend"),s&&(tb=f),l=new BM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),k3(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=U3(e,l.rotation,s),s&&(tb=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=nb({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}o(nb,"createLogger");var v3=100;function U3(e,t,r){let n=D3.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,D3.set(e,n)),x3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=A3();try{n.rotator=h({logger:n,...t})}catch(E){n("Error initializing log rotator",E)}},100));let u=0;return n;function d(h){u++;let E=`${new Date().toISOString()} ${h}${h.endsWith(`
|