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.
@@ -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()}});xU={type:"application/json",serializeStream:Am,serialize:Im,deserialize:I8,q:.5};pn.set("*/*",xU);pn.set("",xU);o(I8,"tryJSONParse");o(Nm,"registerContentHandlers");w8=(0,vU.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");OU=Jb.default.get(F.HTTP_COMPRESSIONTHRESHOLD);o(Cm,"serialize");o(Lo,"serializeMessage");o(tA,"asyncSerialization");o(rA,"hasAsyncSerialization");o(N8,"streamToBuffer");C8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(O8,"isBufferEncoding");o(P8,"parseContentType");o(Do,"getDeserializer");o(L8,"deserializerUnknownType");o(D8,"transformIterable");o(A_,"toCsvStream")});var v_={};Re(v_,{Blob:()=>Ds,blobsWereEncoded:()=>Xc,cleanupOrphans:()=>Y8,databasePaths:()=>sA,decodeBlobsWithWrites:()=>M_,decodeFromDatabase:()=>Uo,decodeWithBlobCallback:()=>Dm,deleteBlob:()=>P_,deleteBlobsInObject:()=>xa,deleteRootBlobPathsForDB:()=>aA,encodeBlobsAsBuffers:()=>$8,encodeBlobsWithFilePath:()=>D_,findBlobsInObject:()=>Jc,getFileId:()=>L_,getFilePathForBlob:()=>WU,getRootBlobPathsForDB:()=>Mu,isSaving:()=>B8,saveBlob:()=>Lm,setDeletionDelay:()=>x8,startPreCommitBlobsForRecord:()=>cA});function KU(){}function P_(e){let t=WU(e);t&&setTimeout(()=>{(0,tt.unlink)(t,r=>{r&&fr.default.debug?.("Error trying to remove blob file",r)})},YU)}function x8(e){YU=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 k8(t),t.source?nA(e,t.source,t):t.contentBuffer?F8(e,t):nA(e,Pm.Readable.from(e.stream()),t),t}function nA(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(v8),p=(0,C_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(M8),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?oA:VU)<<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 B8(e){return jr.get(e)?.saving}function WU(e){let t=jr.get(e);return t?.fileId&&Du(t)}function Mu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=sA.get(e);if(!t){if(!e.databaseName)return fr.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,qi.join)(n,e.databaseName)):t=[(0,qi.join)((0,O_.getHdbBasePath)(),"blobs",e.databaseName)],sA.set(e,t)}return t}async function aA(e){let t=Mu(e);t&&await Promise.all(t.map(r=>zU(r)))}async function zU(e){if((0,tt.existsSync)(e)){for(let t of await(0,Un.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await zU((0,qi.join)(e,t.name));else try{await(0,Un.unlink)((0,qi.join)(e,t.name))}catch(r){fr.default.warn?.("Error deleting file",r)}try{await(0,Un.rmdir)(e)}catch(t){fr.default.warn?.("Error deleting directory",t)}}}function Du({storageIndex:e,fileId:t,store:r}){let n=Mu(r);return(0,qi.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function F8(e,t){let r=t.contentBuffer,n=r.length;if(!(n<$U))return e.size=n,nA(e,Pm.Readable.from([r]),t)}function k8(e){let t=Mu(e.store),r=H8(),n=t?.length>1?G8(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Du(e),a=(0,qi.dirname)(i);(0,tt.existsSync)(a)||(0,iA.ensureDirSync)(a),e.filePath=i}function H8(){let e=GU.get(vn);if(!e){let t=0,r=Mu(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,qi.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)),GU.set(vn,e)}return Number(Atomics.add(e,0,1n))}function G8(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,q8(e)),e.frequencyTable[t%N_]}async function q8(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,iA.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){Pu=t,vn=r,Xc=!1;try{return e()}finally{Pu=void 0,vn=void 0}}function $8(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=[],vo=r,vn=t,e()}catch(s){throw vo=void 0,Qr=void 0,s}vo=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 vo=t,e()}finally{vo=void 0}}function Uo(e,t){return vn=t,e()}function xa(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 cA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Lu&&s.saveBeforeCommit){vn=t;let i=Lm(s).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function K8(){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 Y8(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=Mu(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,qi.join)(u,d.name);if(d.isDirectory())await a(f);else if(s.size%1e6===0&&fr.default.info?.("Finding all blobs for orphan check, paths accumulated",s.size),s.add(f),s.size%2===0){let m=(0,qU.getHeapStatistics)();m.used_heap_size>m.heap_size_limit*.8&&await c()}}}catch(d){fr.default.error?.("Error searching path for blobs",u,d)}}o(a,"searchPath");async function c(){for(let u in e){fr.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){fr.default.error?.("Error searching table",u," for references to potential orphaned blobs failed",m)}}fr.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){fr.default.error?.("Error searching audit log for references to potential orphaned blobs failed",d)}fr.default.warn?.("Deleting",s.size,"orphaned blobs"),n+=s.size;for(let u of s)try{await(0,Un.unlink)(u)}catch(d){fr.default.warn?.("Error deleting file",d)}fr.default.warn?.("Finished deleting",s.size,"orphaned blobs"),s.clear()}o(c,"removePathsThatAreNotReferenced");function l(u){Jc(u,d=>{if(d instanceof Lu){let f=jr.get(d);if(f.fileId!=null){let m=Du(f);s.has(m)&&s.delete(m)}}})}o(l,"checkObjectForReferences")}var Gi,Un,tt,C_,Pm,iA,O_,qi,fr,qU,$U,wr,VU,oA,FU,M8,v8,kU,jr,vo,Ds,Pu,Qr,vn,Xc,Om,w_,U8,HU,Lu,YU,sA,GU,N_,V8,rs=se(()=>{Gi=require("msgpackr"),Un=require("node:fs/promises"),tt=require("node:fs"),C_=require("node:zlib"),Pm=require("node:stream"),iA=require("fs-extra"),O_=b(me());q();qi=require("path"),fr=b(ts());Mo();ki();qU=require("node:v8"),$U=8192,wr=8,VU=0,oA=1,FU=255,M8=new Uint8Array([0,VU,255,255,255,255,255,255]),v8=new Uint8Array([0,oA,255,255,255,255,255,255]),kU=0xffffffffffff,jr=new WeakMap,Ds=global.Blob||K8(),Xc=!1,Om=new Uint8Array(8),w_=new DataView(Om.buffer),U8=6e4;o(KU,"InstanceOfBlobWithNoConstructor");KU.prototype=Ds.prototype;HU=!1,Lu=class e extends KU{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):(rA()&&tA(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=Du(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)===FU)throw new Error("Error in blob: "+buffer.subarray(wr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<kU&&(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]===oA?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=Du(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&&(fr.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(),fr.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,C),20).unref()):(fr.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)===FU)return I(new Error("Error in blob: "+H.subarray(wr)));if(g=Number(X&0xffffffffffffn),g<kU&&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}`))},U8).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 fr.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 HU||(HU=!0,fr.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}},YU=500;o(P_,"deleteBlob");o(x8,"setDeletionDelay");global.createBlob=function(e,t){let r=new Lu(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(nA,"writeBlobWithStream");o(L_,"getFileId");o(B8,"isSaving");o(WU,"getFilePathForBlob");sA=new Map;o(Mu,"getRootBlobPathsForDB");o(aA,"deleteRootBlobPathsForDB");o(zU,"rimrafSteadily");o(Du,"getFilePath");o(F8,"writeBlobWithBuffer");o(k8,"generateFilePath");GU=new Map;o(H8,"getNextFileId");N_=128;o(G8,"getNextStorageIndex");o(q8,"createFrequencyTableForStoragePaths");o(D_,"encodeBlobsWithFilePath");o($8,"encodeBlobsAsBuffers");o(M_,"decodeBlobsWithWrites");o(Dm,"decodeWithBlobCallback");o(Uo,"decodeFromDatabase");o(xa,"deleteBlobsInObject");o(Jc,"findBlobsInObject");o(cA,"startPreCommitBlobsForRecord");V8=new Gi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Gi.addExtension)({Class:Ds,type:11,unpack:o(function(e){let t=V8.unpack(e),r=new Lu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(jr.set(r,{storageIndex:t[1],fileId:t[2],store:vn}),vo)return vo(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(Pu!==void 0&&(Xc=!0,t?.recordId!==void 0&&t.recordId!==Pu))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<$U)return r.size=t.contentBuffer.length,(0,Gi.pack)([r,t.contentBuffer])}if(Pu!==void 0){if(t=Lm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Pu,(0,Gi.pack)([r,t.storageIndex,t.fileId])}if(t){if(vo)return vo(e),(0,Gi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,tt.readFileSync)(Du(t));if(n.length>=wr&&(n.copy(Om,0,0,wr),Number(w_.getBigUint64(0)&0xffffffffffffn)===n.length-wr))return Buffer.concat([(0,Gi.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,Gi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(K8,"polyfillBlob");o(Y8,"cleanupOrphans")});var ZU={};Re(ZU,{onStorageReclamation:()=>Mm,runReclamationHandlers:()=>fA,setAvailableSpaceRatioGetter:()=>z8});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}),dA||(dA=setTimeout(fA,QU).unref()))}async function fA(){for(let[e,t]of U_)try{let r=await XU(e),n=W8/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&&(uA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){uA.default.error?.("Error running storage reclamation handlers",r)}dA=setTimeout(fA,QU).unref()}function z8(e){XU=e??JU}var lA,x_,uA,B_,jU,U_,W8,QU,dA,JU,XU,F_=se(()=>{lA=require("node:fs/promises"),x_=b(nt()),uA=b(ts());q();B_=b(me()),jU=b(oe());B_.default.initSync();U_=new Map,W8=B_.default.get(F.STORAGE_RECLAMATION_THRESHOLD)??.4,QU=(0,jU.convertToMS)(B_.default.get(F.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Mm,"onStorageReclamation");JU=o(async e=>{if(lA.statfs){let t=await(0,lA.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"),XU=JU;o(fA,"runReclamationHandlers");o(z8,"setAvailableSpaceRatioGetter")});var fx={};Re(fx,{ACTION_32_BIT:()=>$_,ACTION_64_BIT:()=>X8,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:()=>Q8,openAuditStore:()=>G_,readAuditEntry:()=>At,removeAuditEntry:()=>q_,setAuditRetention:()=>J8,transactionKeyEncoder:()=>cx});function G_(e){let t=e.auditStore=e.openDB(mA.AUDIT_STORE_NAME,{create:!1,...xm});t||(t=e.auditStore=e.openDB(mA.AUDIT_STORE_NAME,xm),tx(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=hA;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()-pA/(1+i*i)})){try{m=q_(t,h,E)}catch(g){vu.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=j8){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,pA/10):(tx(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&&!ex)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(ex=!0,vu.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=Z8(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)&&Uo(()=>xa(s.getValue(i)),i.rootStore)}}if((n&15)===EA){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 tx(e,t){_A[0]=t,e.put(Symbol.for("last-removed"),lx)}function Q8(e){let t=e.get(Symbol.for("last-removed"));if(t)return lx.set(t),_A[0]}function J8(e,t=hA){pA=e,hA=t}function nl(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=ux[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Ba.setFloat64(0,n):Ms.set(gA),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),g(r),Ba.setFloat64(h,e),h+=8,l&tl&&R(u),l&rl&&R(d),l&km&&(Ba.setFloat64(h,f),h+=8),l&Fm&&R(dx[m]),i?g(i):Ms[h++]=0,l?Ba.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?(vu.error("Key or username was too large for audit entry",S),h=y+1,Ms[y]=0):(Ms.copyWithin(y+2,y+1,h),Ba.setUint16(y,C|32768),h++):Ms[y]=C}function R(S){S<128?Ms[h++]=S:S<16384?(Ba.setUint16(h,S|32768),h+=2):S<1056964608?(Ba.setUint32(h,S|3221225472),h+=4):(Ms[h]=255,Ba.setUint32(h+1,S),h+=5)}}function Z8(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=dx[y]}l=n.readInt();let g=n.position,R=n.position+=l,S;return{type:ux[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=Uo(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&vm&&I)return Kb(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 vu.error("Reading audit entry error",n,e),{}}}var Zc,H_,mA,Um,ax,vu,Ms,Ba,cx,xm,pA,j8,_A,lx,hA,ex,k_,vm,rx,EA,nx,sx,ix,ox,$_,X8,V_,tl,rl,Fm,km,Jr,ux,dx,el,ki=se(()=>{Zc=require("ordered-binary"),H_=b(me()),mA=b(Yt());q();Um=b(nt()),ax=b(oe());sl();vu=b(Q());y_();rs();F_();(0,H_.initSync)();Ms=Buffer.alloc(2816),Ba=new DataView(Ms.buffer,Ms.byteOffset,2816),cx={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:cx},pA=(0,ax.convertToMS)((0,H_.get)(F.LOGGING_AUDITRETENTION))||86400*3,j8=1e3,_A=new Float64Array(1),lx=new Uint8Array(_A.buffer),hA=1e4,ex=!1;o(G_,"openAuditStore");o(q_,"removeAuditEntry");o(tx,"updateLastRemoved");o(Q8,"getLastRemoved");o(J8,"setAuditRetention");k_=16,vm=32,rx=1,EA=2,nx=3,sx=4,ix=5,ox=6,$_=14,X8=15,V_=11,tl=512,rl=1024,Fm=2048,km=4096,Jr=8192,ux={put:rx|k_,[rx]:"put",delete:EA,[EA]:"delete",message:nx|k_,[nx]:"message",invalidate:sx|vm,[sx]:"invalidate",patch:ix|vm,[ix]:"patch",relocate:ox,[ox]:"relocate"},dx={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(nl,"createAuditEntry");o(Z8,"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 SA||(SA=Ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),SA}function tZ(e){return e=e.replace(eZ,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 rZ(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 yA(e){let t=mx.default.createHash("shake128",{outputLength:4}),r;return(0,px.isIPv6)(e)?r=tZ(e):r=e.toLowerCase(),rZ(Uint8Array.from(t.update(r).digest()))}var mx,px,TA,SA,eZ,RA=se(()=>{we();mx=b(require("crypto")),px=require("node:net"),TA=new Map;o(K_,"getAnalyticsHostnameTable");eZ=/(\d{1,3}\.){3}\d{1,3}$/;o(tZ,"normalizeIPv6");o(rZ,"nodeHashToNumber");o(yA,"stableNodeId")});var xo,bA=se(()=>{xo={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 yx={};Re(yx,{profile:()=>Tx,userCodeFolders:()=>z_});async function Tx(){let e=(0,W_.pathToFileURL)(_x.PACKAGE_ROOT).toString(),t=new Map,r=100,n=Sx/1e6,s=0,i=0;try{let{profile:u}=await Uu.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){gx.error?.("analytics profiler error:",u)}finally{await Uu.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 Ex,Y_,_x,W_,gx,hx,z_,Sx,Uu,Rx=se(()=>{Ex=require("node:inspector/promises");ns();Y_=b(me());q();_x=b(Ct()),W_=require("node:url"),gx=b(Q()),hx=(0,Y_.getHdbBasePath)(),z_=hx?[(0,W_.pathToFileURL)(hx).toString()]:[];process.env.RUN_HDB_APP&&z_.push((0,W_.pathToFileURL)(process.env.RUN_HDB_APP).toString());Sx=1e3,Uu=new Ex.Session;Uu.connect();(async()=>{if(z_.length===0)return;await Uu.post("Profiler.enable"),await Uu.post("Profiler.setSamplingInterval",{interval:Sx}),await Uu.post("Profiler.start");let e=(0,Y_.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;setInterval(()=>{Tx()},e).unref()})();o(Tx,"profile")});var J_={};Re(J_,{addAnalyticsListener:()=>$m,analyticsDelay:()=>NA,calculateCPUUtilization:()=>Hx,diffResourceUsage:()=>Gx,onAnalyticsAggregate:()=>PA,recordAction:()=>Ve,recordActionBinary:()=>Zr,recordHostname:()=>CA,setAnalyticsEnabled:()=>iZ});function iZ(e){Ux=e,clearTimeout(Gm),Gm=null}function oZ(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 aZ(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(!Ux)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=Q_.get(i);a?oZ(e,a):aZ(i,e,t,r,n,s),Gm||cZ()}function Zr(e,t,r,n,s){Ve(!!e,t,r,n,s)}function $m(e){Bx.push(e)}function cZ(){AA||=performance.now(),Gm=setTimeout(async()=>{Gm=null;let e=performance.now()-AA;AA=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 kx){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 qx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:il.threadId,byThread:!0,...n});for(let s of Bx)s(t);Q_=new Map,il.parentPort?il.parentPort.postMessage({type:xx,report:r}):Kx({report:r})},NA).unref()}async function CA(){let e=ve.hostname;Xr.trace?.("recordHostname server.hostname:",e);let t=yA(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 xu(e,t){let r=ve.hostname,n=TA.get(r);n?Xr.trace?.("storeMetric cached nodeId:",n):(n=yA(r),Xr.trace?.("storeMetric new nodeId:",n),TA.set(r,n));let s={id:[(0,wA.getNextMonotonicTime)(),n],...t};Xr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Hx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Xr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function Gx(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 lZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:xo.TABLE_SIZE,database:t,table:s,size:c};Xr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),xu(e,l),n+=c}return n}function bx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=vx.statSync(s.primaryStore.env.path).size,c=lZ(e,r,n),l=a-c,u={metric:xo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};xu(e,u),Xr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Xr.warn?.("Error getting DB size metrics",s)}}function Ax(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:xo.STORAGE_VOLUME,database:r,...i};xu(e,a),Xr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Xr.warn?.("Error getting DB volume metrics",s)}}async function uZ(e,t=6e4){let r=OA(),n=$x(),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 qx()}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 kx){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,xu(n,y),f=!0;if(f)for(let y of Fx)y(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let y={metric:xo.MAIN_THREAD_UTILIZATION,idle:p-Ix,active:h-wx,taskQueueLatency:await s,time:m,...process.memoryUsage()};xu(n,y)}Ix=p,wx=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=Gx(j_,E);Xr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=j_.time?m-j_.time:t,g.cpuUtilization=Hx(g,g.period);let R={metric:xo.RESOURCE_USAGE,...g};xu(n,R),j_=E;let S=at();bx(n,S),bx(n,{system:S.system}),Ax(n,S),Ax(n,{system:S.system})}async function Nx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function OA(){return Cx||(Cx=Ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function $x(){return Ox||(Ox=Ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function mZ(){Vx=!0;let e=(0,qm.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await uZ(NA,e),await Nx(OA(),dZ),await Nx($x(),fZ)},Math.min(e/2,2147483647)).unref()}function Kx(e,t){let r=e.report;r.threadId=t?.threadId||il.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Px+=n.mean*n.count);r.totalBytesProcessed=Px,t&&(r.metrics.push({metric:xo.UTILIZATION,...t.performance.eventLoopUtilization(Lx.get(t))}),Lx.set(t,t.performance.eventLoopUtilization())),r.id=(0,wA.getNextMonotonicTime)(),OA().primaryStore.put(r.id,r),Vx||mZ(),pZ&&(Yx=EZ(r))}async function EZ(e){if(await Yx,!Fa){let r=(0,Hm.dirname)(nZ());try{Fa=await(0,IA.open)((0,Hm.join)(r,"analytics.log"),"r+")}catch{Fa=await(0,IA.open)((0,Hm.join)(r,"analytics.log"),"w+")}}let t=(await Fa.stat()).size;if(t>hZ){let r=Buffer.alloc(t);await Fa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Fa.write(r,{position:0}),await Fa.truncate(r.length),t=r.length}await Fa.write(JSON.stringify(e)+`
14
14
  `,t)}function PA(e){e&&Fx.push(e)}var il,Dx,Mx,Hm,IA,wA,qm,vx,nZ,sZ,Xr,Q_,Ux,Gm,AA,NA,xx,Bx,Fx,kx,Ix,wx,j_,qx,dZ,fZ,Cx,Ox,Vx,Px,Lx,pZ,Yx,Fa,hZ,ns=se(()=>{il=require("worker_threads"),Dx=b(nt());we();Mx=b(Q()),Hm=require("path"),IA=require("fs/promises"),wA=b(Mn()),qm=b(me());q();Fr();vx=b(require("node:fs"));RA();bA();({getLogFilePath:nZ,forComponent:sZ}=Mx.default);setTimeout(()=>{Promise.resolve().then(()=>Rx())},1e3);Xr=sZ("analytics").conditional;(0,qm.initSync)();Q_=new Map,Ux=(0,qm.get)(F.ANALYTICS_AGGREGATEPERIOD)>-1;o(iZ,"setAnalyticsEnabled");o(oZ,"recordExistingAction");o(aZ,"recordNewAction");o(Ve,"recordAction");ve.recordAnalytics=Ve;o(Zr,"recordActionBinary");AA=0,NA=1e3,xx="analytics-report",Bx=[],Fx=[];o($m,"addAnalyticsListener");kx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(cZ,"sendAnalytics");o(CA,"recordHostname");o(xu,"storeMetric");o(Hx,"calculateCPUUtilization");o(Gx,"diffResourceUsage");o(lZ,"storeTableSizeMetrics");o(bx,"storeDBSizeMetrics");o(Ax,"storeVolumeMetrics");o(uZ,"aggregation");Ix=0,wx=0,j_={userCPUTime:0,systemCPUTime:0},qx=o(()=>new Promise(setImmediate),"rest");o(Nx,"cleanup");dZ=36e5,fZ=31536e6;o(OA,"getRawAnalyticsTable");o($x,"getAnalyticsTable");(0,Dx.setChildListenerByType)(xx,Kx);o(mZ,"startScheduledTasks");Px=0,Lx=new Map,pZ=!1;o(Kx,"recordAnalytics");hZ=1e6;o(EZ,"logAnalytics");o(PA,"onAnalyticsAggregate")});var Jx={};Re(Jx,{ENTRY:()=>gZ,HAS_EXPIRATION:()=>eg,HAS_RESIDENCY_ID:()=>xA,HAS_STRUCTURE_UPDATE:()=>tg,LAST_TIMESTAMP_PLACEHOLDER:()=>Bm,LOCAL_TIMESTAMP:()=>_Z,METADATA:()=>ku,NEW_TIMESTAMP_PLACEHOLDER:()=>zx,NO_TIMESTAMP:()=>LA,PENDING_LOCAL_TIME:()=>BA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>gA,RecordEncoder:()=>UA,TIMESTAMP_ASSIGN_LAST:()=>TZ,TIMESTAMP_ASSIGN_NEW:()=>jx,TIMESTAMP_ASSIGN_PREVIOUS:()=>Qx,TIMESTAMP_PLACEHOLDER:()=>X_,TIMESTAMP_RECORD_PREVIOUS:()=>DA,entryMap:()=>ka,handleLocalTimeForGets:()=>rg,lastMetadata:()=>ct,recordUpdater:()=>FA,removeEntry:()=>al});function bZ(){return Km[0]=Km[0]^64,SZ.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[ku],l.localTime=ct.localTime,l.residencyId=ct.residencyId,l.size=ct.size,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l.value&&ka.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&&(ka.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[ku],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 FA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Fu=i?.localTime?DA|Qx:LA:Fu=l?i?.localTime?DA|16384:jx|16384:LA;let p=u?.expiresAt;if(p>=0&&(c|=eg),Vm=c,MA=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Fu>0},E,g=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(vA=S,Vm|=xA,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)||xa(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,Bu,g,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?zx:Bm,nl(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,C,d,Bu,g,S,R,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&yZ.has(d)&&Ve(Bu?.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)&&xa(t.value),e.remove(t.key,r)}var Wx,Z_,X_,Bm,gA,zx,_Z,ku,gZ,Km,SZ,LA,jx,TZ,Qx,DA,eg,xA,BA,tg,yZ,ka,RZ,Bu,Fu,Vm,MA,vA,ct,UA,ol,sl=se(()=>{Wx=require("msgpackr");ki();Z_=b(Q());rs();rs();ns();X_=new Uint8Array([1,1,1,1,4,64,0,0]),Bm=new Uint8Array([1,1,1,1,1,0,0,0]),gA=new Uint8Array([1,1,1,1,3,64,0,0]),zx=new Uint8Array([1,1,1,1,0,64,0,0]),_Z=Symbol("local-timestamp"),ku=Symbol("metadata"),gZ=Symbol("entry"),Km=new Uint8Array(8),SZ=new DataView(Km.buffer,0,8),LA=0,jx=0,TZ=1,Qx=3,DA=4,eg=16,xA=32,BA=1,tg=256,yZ=new Set(["put","patch","delete","message","publish"]),ka=new WeakMap,Fu=0,Vm=-1,MA=-1,vA=0,ct=null,UA=class extends Wx.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return ka.get(this)?.version}getExpiresAt(){return ka.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Fu||Vm>=0){let c=0,l=Fu;l&&(c+=8,Fu=0);let u=Vm,d=MA,f=vA;u>=0&&(c+=4,Vm=-1,d>=0&&(c+=8,MA=-1),f&&(c+=4,vA=0));let m=RZ=n.call(this,i,a|2048|c);Bu=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 Bu=n.call(this,i,a),Bu};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=bZ(),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&xA&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Uo(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ct={localTime:l,[ku]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Uo(()=>super.decode(t,r),this.rootStore)}catch(c){return Z_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(bZ,"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(FA,"recordUpdater");o(al,"removeEntry")});function GA(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?GA(f.conditions,f.operator,r,n,s,i,a,c):$u(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=DZ(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}o(d,"mapConditionsToFilters")}function $u(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=Vi(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=$u({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=!!Vi(I.attributes,C.relationship.to)?.elements;J=CZ(J,C,I.primaryStore,G,k)}if(C.relationship.from){let G=o(H=>(H?.key!==void 0&&(H=H.key),$u({attribute:C.relationship.from,value:H},t,r,n,s,k)),"searchEntry");C.elements?(i[c[0]]=k,J=OZ(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(qA[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]=$i.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:Ha.SKIP:new Promise((k,J)=>setImmediate(()=>{try{k(I&&R(I)?C:Ha.SKIP)}catch(G){J(G)}}))}:C=>C.value==null&&!(C.metadataFlags&(xn|Ga))?Ha.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:Ha.SKIP:new Promise((k,J)=>setImmediate(()=>{try{k(R(I)?C:Ha.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:Ha.SKIP:new Promise((I,k)=>setImmediate(()=>{try{I(C&&R(C)?y:Ha.SKIP)}catch(J){k(J)}}))})}function Vi(e,t){if(Array.isArray(t))if(t.length>1){let r=Vi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Vi(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 CZ(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 OZ(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=Vi(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()),qA[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,$i.compareKeys)(d,l[0])>=0&&(0,$i.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,$i.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,$i.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,$i.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,$i.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,$i.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=$u(e,r.transaction.getReadTxn(),!1,t),k;R.to?k=I.flatMap(G=>t.primaryStore.get(G)[R.to]):k=I.map(Vu);let J=new Set(k);R.idFilter=G=>J.has(Vu(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/Bo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=qA[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=Vi(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*Bo(e.indices[i.relationship.from])/(Bo(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=Bo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=wZ*Bo(e.primaryStore)+1;else if(n==="between")r.estimated_count=IZ*Bo(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=Bo(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=AZ*Bo(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(Fo=e,Hu.lastIndex=0,PZ.test(e))try{if(t&&(t.conditions=[]),ai=t??new qu,Ym(ai,""),kr!==Fo.length&&Wt("Unable to parse query, unexpected end of query"),ai.parseErrorMessage&&(ai.parseError=new kA(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 '${Fo}'`,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=Hu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(Fo);){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=Xx):(l=decodeURIComponent,i="equals",d||Wt("attribute must be specified before equality comparator"),s=Gu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=NZ[f],l=HA[i]?Xx:decodeURIComponent,d||Wt(`attribute must be specified before comparator ${f}`),s=Gu(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"&&Zx(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(Gu(d)),s=void 0;break;case"(":Hu.lastIndex=kr;let p=Ym(d?[]:new qu,")");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=e0(p);break;default:Wt(`unknown query function call ${d}`)}Fo[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"),Hu.lastIndex=kr,m=Ym([],"}"),m.name=d,e.push(m),Fo[kr]===","?r.lastIndex=++kr:a=!0;break;case"[":if(Hu.lastIndex=kr,d?(m=Ym(new qu,"]"),m.name=d):m=Ym(e.conditions?new qu:[],"]"),e.conditions)if(ng(e,u),Fo[kr]==="="){l=decodeURIComponent,i="equals",s=Gu(d),r.lastIndex=++kr;break}else e.conditions.push(m),s=null;else e.push(m);Fo[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"&&Zx(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(Gu(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?LZ:Hu,r.lastIndex=kr),kr===Fo.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 Gu(e){return e.indexOf(".")>-1?e.split(".").map(Gu):decodeURIComponent(e)}function Xx(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 Zx(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 e0(e){let t=t0(e[0]);return e.length>1&&(t.next=e0(e.slice(1))),t}function t0(e){if(Array.isArray(e)){let t=t0(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 Vu(e){return Array.isArray(e)?e.join("\0"):e}function Bo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function DZ(e,t,r){return t*r/Bo(e)}var en,vs,$i,Ha,AZ,IZ,wZ,NZ,HA,qA,kA,PZ,Hu,LZ,kr,ai,Fo,qu,og=se(()=>{en=b(_e()),vs=b(Yt()),$i=require("ordered-binary"),Ha=require("lmdb");ag();sl();AZ=.3,IZ=.1,wZ=.05,NZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},HA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(GA,"executeConditions");o($u,"searchByIndex");o(Vi,"findAttribute");o(CZ,"joinTo");o(OZ,"joinFrom");qA={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");kA=class extends en.Violation{static{o(this,"SyntaxViolation")}},PZ=/[()[\]|!<>.]|(=\w*=)/,Hu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,LZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(ig,"parseQuery");o(Wt,"recordError");o(Ym,"parseBlock");o(ng,"assignOperator");o(Gu,"decodeProperty");o(Xx,"typedDecoding");o(Zx,"wildcardDecoding");o(e0,"toSortObject");o(t0,"toSortEntry");qu=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(Vu,"flattenKey");o(Bo,"estimatedEntryCount");o(DZ,"intersectionEstimate")});var r0,ci,cg=se(()=>{r0=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,r0._assignPackageExport)("Resource",Resource)});var a0={};Re(a0,{MultiPartId:()=>lg,Resource:()=>Hr,contextStorage:()=>Yu,snakeCase:()=>vZ,transformForSelect:()=>Wu});function vZ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function n0(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 Co?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Ku.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=Yu.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=>Yu.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 Ku.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 Ku.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 ss(e,t){let r=new Ku.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 $A(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 Wu(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):$A(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($A(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($A(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]=Wu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var s0,i0,Ku,o0,Yu,MZ,Hr,cl,lg,qa=se(()=>{s0=require("crypto");Rm();Ou();i0=b(ii()),Ku=b(_e());Ua();og();o0=require("async_hooks");cg();Yu=new o0.AsyncLocalStorage,MZ={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=Wu(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):ss(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):ss(t,"patch")},{hasContent:!0,type:"update"});static delete=Bn(function(t,r,n,s){return t.delete?t.delete(r):ss(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,s0.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Yu.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):ss(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):ss(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):ss(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Bn(function(t,r,n,s){return t.subscribe?t.subscribe(r):ss(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):ss(t,"publish")},{hasContent:!0,type:"create"});static search=Bn(function(t,r,n){let s=t.search?t.search(r):ss(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Wu(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):ss(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):ss(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):ss(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;ss(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&&MZ[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:n0(t,this),isCollection:cl}}let i=n0(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 es}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new es}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,i0._assignPackageExport)("Resource",Hr);o(vZ,"snakeCase");o(n0,"pathToId");lg=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Bn,"transactional");o(ss,"missingMethod");o($A,"selectFromObject");o(Wu,"transformForSelect")});var ll,VA=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 KA={};Re(KA,{Resources:()=>zu,keyArrayToString:()=>ju,resetResources:()=>UZ,resources:()=>Us});function UZ(){return Us=new zu,ve.resources=Us,Us}function ju(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var c0,l0,zu,Us,$a=se(()=>{Ua();VA();c0=b(Q()),l0=b(_e());Fr();zu=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 l0.ServerError(`Conflicting paths for ${t}`);c0.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(UZ,"resetResources");o(ju,"keyArrayToString")});function zA(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=d0,xZ(e.primaryStore,e.auditStore)):(c=u0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{f0(u0[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=ju(t);let d=new WA(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 f0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),m0(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=ju(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,YA.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,YA.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 xZ(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=d0[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{f0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function m0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function p0(e){return e.nextTransaction||(zA({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),m0(e)),e.nextTransaction}var YA,u0,d0,WA,jA=se(()=>{YA=b(Q());Ou();$a();ki();u0=Object.create(null),d0=Object.create(null);o(zA,"addSubscription");WA=class extends es{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(f0,"notifyFromTransactionData");o(xZ,"listenToCommits");o(m0,"nextTransaction");o(p0,"whenNextTransaction")});var E0=v((KCe,h0)=>{"use strict";var QA=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};h0.exports=QA});var g0=v((WCe,_0)=>{"use strict";var JA=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};_0.exports=JA});var zm=v(T0=>{"use strict";var S0=me(),BZ=(q(),M(z)),{RecordEncoder:FZ}=(sl(),M(Jx));S0.initSync();var kZ=S0.get(BZ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,XA=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=kZ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:FZ})}};T0.OpenDBIObject=XA});var jm=v((JCe,y0)=>{"use strict";var is=me(),xs=(q(),M(z));is.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=is.get(xs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||is.get(xs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||is.get(xs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",is.get(xs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=is.get(xs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),is.get(xs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=is.get(xs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),is.get(xs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=is.get(xs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),is.get(xs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=is.get(xs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=is.get(xs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};y0.exports=ug;ug.MAX_DBS=1e4});var St=v((ZCe,L0)=>{"use strict";var eI=require("lmdb"),li=require("fs-extra"),os=require("path"),dg=Mn(),A0=Q(),Fn=zr().LMDB_ERRORS_ENUM,fg=g0(),{OpenDBIObject:tI}=zm(),I0=jm(),Va=Yt(),R0=(q(),M(z)),{table:HZ,resetDatabases:GZ}=(we(),M(mt)),b0=me(),ui=Va.INTERNAL_DBIS_NAME,w0=Va.DBI_DEFINITION_NAME,qZ="data.mdb",$Z="lock.mdb",Qm=".mdb",VZ="-lock",ZA=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Bs(t,r),this.key_type=this.dbi[Va.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Va.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new eI.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 rI(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=os.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(os.join(e,t,qZ),li.constants.R_OK|li.constants.F_OK),os.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(rI,"validateEnvironmentPath");function pg(e,t){if(dg.validateEnv(e),t===void 0)throw new Error(Fn.DBI_NAME_REQUIRED)}o(pg,"validateEnvDBIName");async function KZ(e,t,r=!1,n=!1){mg(e,t);let s=os.basename(e);t=t.toString();let i=b0.get(R0.CONFIG_PARAMS.DATABASES);i||b0.setProperty(R0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await rI(e,t,n),N0(e,t,r)}catch(a){if(a.message===Fn.INVALID_ENVIRONMENT){let c=os.join(e,t);await li.mkdirp(n?c:e);let l=new I0(n?c:c+Qm,!1),u=eI.open(l);u.dbis=Object.create(null);let d=new tI(!1);u.openDB(ui,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=nI(e,t,r);return u[Va.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(KZ,"createEnvironment");async function YZ(e,t,r,n=!0){mg(e,t),t=t.toString();let s=os.join(e,t);return HZ({table:t,database:os.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(YZ,"copyEnvironment");async function N0(e,t,r=!1){mg(e,t),t=t.toString();let n=nI(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 rI(e,t),i=os.join(e,t+Qm),a=s!=i,c=new I0(s,a),l=eI.open(c);l.dbis=Object.create(null);let u=O0(l);for(let d=0;d<u.length;d++)Bs(l,u[d]);return l[Va.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(N0,"openEnvironment");async function WZ(e,t,r=!1){mg(e,t),t=t.toString();let n=os.join(e,t+Qm),s=await rI(e,t);if(global.lmdb_map!==void 0){let i=nI(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await C0(a),delete global.lmdb_map[i]}}await li.remove(s),await li.remove(s===n?s+VZ:os.join(os.dirname(s),$Z))}o(WZ,"deleteEnvironment");async function C0(e){dg.validateEnv(e);let t=e[Va.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(C0,"closeEnvironment");function nI(e,t,r=!1){let s=`${os.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(nI,"getCachedEnvironmentName");function zZ(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{A0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(zZ,"listDBIDefinitions");function O0(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(O0,"listDBIs");function jZ(e,t){let n=Bs(e,ui).getEntry(t),s=new fg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{A0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(jZ,"getDBIDefinition");function P0(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 tI(r,n===!0),a=e.openDB(t,i),c=new fg(r===!0,n);return a[w0]=c,Bs(e,ui).putSync(t,c),e.dbis[t]=a,a}throw s}}o(P0,"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=jZ(e,t):r=new fg,r===void 0)throw new Error(Fn.DBI_DOES_NOT_EXIST);let n;try{let s=new tI(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[w0]=r,e.dbis[t]=n,n}o(Bs,"openDBI");function QZ(e,t){pg(e,t),t=t.toString();let r=Bs(e,t),n=r.getStats();return r[Va.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(QZ,"statDBI");async function JZ(e,t){try{let r=os.join(e,t+Qm);return(await li.stat(r)).size}catch{throw new Error(Fn.INVALID_ENVIRONMENT)}}o(JZ,"environmentDataSize");function XZ(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(XZ,"dropDBI");function ZZ(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)P0(e,i,i!==t,i===t),n=!0;else throw a}}n&&GZ()}o(ZZ,"initializeDBIs");L0.exports={openDBI:Bs,openEnvironment:N0,createEnvironment:KZ,listDBIs:O0,listDBIDefinitions:zZ,createDBI:P0,dropDBI:XZ,statDBI:QZ,deleteEnvironment:WZ,initializeDBIs:ZZ,TransactionCursor:ZA,environmentDataSize:JZ,copyEnvironment:YZ,closeEnvironment:C0}});var v0=v((tOe,M0)=>{"use strict";var sI=St(),e9=Q(),D0=zr().LMDB_ERRORS_ENUM;M0.exports=t9;async function t9(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 sI.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==D0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await sI.closeEnvironment(global.lmdb_map[n]),await sI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==D0.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){e9.error(t)}}o(t9,"cleanLMDBMap")});var Yi=v((nOe,x0)=>{"use strict";var U0=oe(),r9=(q(),M(z)),Qu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ki=require("joi"),Ka={schema_format:{pattern:Qu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},n9=Ki.alternatives(Ki.string().min(1).max(Ka.schema_length.maximum).pattern(Qu).messages({"string.pattern.base":"{:#label} "+Ka.schema_format.message}),Ki.number(),Ki.array()).required(),s9=Ki.alternatives(Ki.string().min(1).max(Ka.schema_length.maximum).pattern(Qu).messages({"string.pattern.base":"{:#label} "+Ka.schema_format.message}),Ki.number()),i9=Ki.alternatives(Ki.string().min(1).max(Ka.schema_length.maximum).pattern(Qu).messages({"string.pattern.base":"{:#label} "+Ka.schema_format.message}),Ki.number()).required();function o9(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Ka.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Qu.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(o9,"checkValidTable");function a9(e,t){return U0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(a9,"validateSchemaExists");function c9(e,t){let r=t.state.ancestors[0].schema;return U0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(c9,"validateTableExists");function l9(e,t){return e.toLowerCase()===r9.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(l9,"validateSchemaName");x0.exports={commonValidators:Ka,schemaRegex:Qu,hdbSchemaTable:n9,validateSchemaExists:a9,validateTableExists:c9,validateSchemaName:l9,checkValidTable:o9,hdbDatabase:s9,hdbTable:i9}});var oI=v((iOe,F0)=>{var{hdbTable:u9,hdbDatabase:B0}=Yi(),d9=ft(),iI=require("joi"),f9={undefined:"undefined",null:"null"},m9=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||f9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),p9=iI.object({database:B0,schema:B0,table:u9,records:iI.array().items(iI.object().custom(m9)).required()});F0.exports=function(e){return d9.validateBySchema(e,p9)}});var H0=v((aOe,k0)=>{"use strict";var aI=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")}};k0.exports=aI});var q0=v((lOe,G0)=>{"use strict";var cI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};G0.exports=cI});var V0=v((dOe,$0)=>{"use strict";var lI=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}};$0.exports=lI});var Y0=v((mOe,K0)=>{"use strict";var uI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};K0.exports=uI});var dl=v((gOe,j0)=>{"use strict";var h9=St(),E9=q0(),_9=V0(),g9=Y0(),Wi=Mn(),Jm=zr().LMDB_ERRORS_ENUM,S9=Yt(),ko=(q(),M(z)),T9=oe(),y9=require("uuid"),hOe=require("lmdb"),{handleHDBError:R9,hdbErrors:b9}=_e(),{OVERFLOW_MARKER:EOe,MAX_SEARCH_KEY_LENGTH:_Oe}=S9,W0=me();W0.initSync();var hg=W0.get(ko.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),dI=ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ul=ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function A9(e,t,r,n,s=Wi.getNextMonotonicTime()){hI(e,t,r,n),fI(e,t,r);let i=new E9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];z0(u,!0,s);let d=I9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return mI(a,c,n,i,s)}o(A9,"insertRecords");function I9(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][ko.FUNC_VAL],n[a]=c)}let l=Wi.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(I9,"insertRecord");function w9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(w9,"removeSkippedRecords");function z0(e,t,r){let n=r>0;(n||!Number.isInteger(e[ul]))&&(e[ul]=r||(r=Wi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[dI]))&&(e[dI]=r||Wi.getNextMonotonicTime()):delete e[dI]}o(z0,"setTimestamps");function fI(e,t,r){r.indexOf(ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),h9.initializeDBIs(e,t,r)}o(fI,"initializeTransaction");async function N9(e,t,r,n,s=Wi.getNextMonotonicTime()){hI(e,t,r,n),fI(e,t,r);let i=new _9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=pI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return mI(c,l,n,i,s,a)}o(N9,"updateRecords");async function C9(e,t,r,n,s=Wi.getNextMonotonicTime()){try{hI(e,t,r,n)}catch(l){throw R9(l,l.message,b9.HTTP_STATUS_CODES.BAD_REQUEST)}fI(e,t,r);let i=new g9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;T9.isEmpty(u[t])?(d=y9.v4(),u[t]=d):d=u[t];let f=pI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return mI(a,c,n,i,s)}o(C9,"upsertRecords");async function mI(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||Wi.getNextMonotonicTime(),w9(r,i),n}o(mI,"finalizeWrite");function pI(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(z0(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][ko.FUNC_VAL],r[h]=E)}if(E===R)continue;let S=Wi.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=Wi.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:pI(e,t,r,n,s,i,a))}o(pI,"updateUpsertRecord");function O9(e,t,r){if(Wi.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(O9,"validateBasic");function hI(e,t,r,n){if(O9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Jm.RECORDS_REQUIRED):new Error(Jm.RECORDS_MUST_BE_ARRAY)}o(hI,"validateWrite");function Eg(){}o(Eg,"noop");j0.exports={insertRecords:A9,updateRecords:N9,upsertRecords:C9}});var zi=v((TOe,P9)=>{P9.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 J0=v((yOe,Q0)=>{"use strict";var L9=require("uuid"),EI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||L9.v4(),this.schema_table=`${this.schema}.${this.table}`}};Q0.exports=EI});var _g=v((bOe,X0)=>{"use strict";var D9=J0(),_I=class extends D9{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}};X0.exports=_I});var eB=v((IOe,Z0)=>{"use strict";Z0.exports=v9;var M9="inserted";function v9(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===M9?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(v9,"returnObject")});var gg=v((COe,rB)=>{"use strict";var U9=(q(),M(z)),gI=St(),x9=dl(),{getSystemSchemaPath:B9,getSchemaPath:F9}=Rt(),NOe=zi(),{validateBySchema:k9}=ft(),Xm=require("joi"),H9=_g(),G9=eB(),{handleHDBError:q9,hdbErrors:$9,ClientError:V9}=_e(),tB=oe(),{HTTP_STATUS_CODES:K9}=$9,Y9="inserted";rB.exports=W9;async function W9(e){let t=k9(e,Xm.object({database:Xm.string(),schema:Xm.string(),table:Xm.string().required(),attribute:Xm.string().required()}));if(t)throw new V9(t.message);let r=!e.skip_table_check&&tB.checkGlobalSchemaTable(e.schema,e.table);if(r)throw q9(new Error,r,K9.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=tB.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 H9(e.schema,e.table,e.attribute,e.id);try{let i=await gI.openEnvironment(F9(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}`);gI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await gI.openEnvironment(B9(),U9.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await x9.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return G9(Y9,c,{records:[s]},l)}catch(i){throw i}}o(W9,"lmdbCreateAttribute")});var Zm=v((LOe,sB)=>{"use strict";var Ho=oe(),nB=Q(),POe=oI(),{getDatabases:z9}=(we(),M(mt)),{ClientError:fl}=_e();sB.exports=j9;function j9(e){if(Ho.isEmpty(e))throw new fl("invalid update parameters defined.");if(Ho.isEmptyOrZeroLength(e.schema))throw new fl("invalid schema specified.");if(Ho.isEmptyOrZeroLength(e.table))throw new fl("invalid table specified.");if(!Array.isArray(e.records))throw new fl("records must be an array");let t=z9()[e.schema]?.[e.table];if(Ho.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&&Ho.isEmptyOrZeroLength(a[r]))throw nB.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(!Ho.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw nB.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`);!Ho.isEmpty(a[r])&&a[r]!==""&&n.has(Ho.autoCast(a[r]))&&(a.skip=!0),n.add(Ho.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(j9,"insertUpdateValidate")});var Sg=v((MOe,oB)=>{"use strict";var iB=oe(),Q9=(q(),M(z)),J9=Q(),X9=gg(),Z9=_g(),e7=Go(),{SchemaEventMsg:t7}=as(),r7="already exists in";oB.exports=n7;async function n7(e,t,r){if(iB.isEmptyOrZeroLength(r))return r;let n=[];iB.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 s7(e,t.schema,t.name,i)})),s}o(n7,"lmdbCheckForNewAttributes");async function s7(e,t,r,n){let s=new Z9(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await i7(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(r7))J9.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(s7,"createNewAttribute");async function i7(e){let t;return t=await X9(e),e7.signalSchemaChange(new t7(process.pid,Q9.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(i7,"createAttribute")});var Ju=v((UOe,aB)=>{"use strict";var SI=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}};aB.exports=SI});var lB=v((BOe,cB)=>{"use strict";var o7=Ju(),a7=(q(),M(z)).OPERATIONS_ENUM,TI=class extends o7{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(a7.INSERT,r,n,s,i),this.records=t}};cB.exports=TI});var dB=v((kOe,uB)=>{"use strict";var c7=Ju(),l7=(q(),M(z)).OPERATIONS_ENUM,yI=class extends c7{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(l7.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};uB.exports=yI});var mB=v((GOe,fB)=>{"use strict";var u7=Ju(),d7=(q(),M(z)).OPERATIONS_ENUM,RI=class extends u7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(d7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};fB.exports=RI});var hB=v(($Oe,pB)=>{"use strict";var f7=Ju(),m7=(q(),M(z)).OPERATIONS_ENUM,bI=class extends f7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(m7.DELETE,n,s,t,i),this.original_records=r}};pB.exports=bI});var ep=v((YOe,SB)=>{"use strict";var KOe=require("path"),EB=St(),p7=lB(),h7=dB(),E7=mB(),_7=hB(),Xu=Yt(),_B=oe(),{CONFIG_PARAMS:g7}=(q(),M(z)),gB=me();gB.initSync();var Tg=(q(),M(z)).OPERATIONS_ENUM,{getTransactionAuditStorePath:S7}=Rt();SB.exports=T7;async function T7(e,t){if(gB.get(g7.LOGGING_AUDITLOG)===!1)return;let r=S7(e.schema,e.table),n=await EB.openEnvironment(r,e.table,!0),s=y7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){EB.initializeDBIs(n,Xu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Xu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Xu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Xu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),_B.isEmpty(s.user_name)||n.dbis[Xu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Xu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(T7,"writeTransaction");function y7(e,t){let r=_B.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Tg.INSERT)return new p7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Tg.UPDATE)return new h7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Tg.UPSERT)return new E7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Tg.DELETE)return new _7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(y7,"createTransactionObject")});var AI=v((jOe,TB)=>{"use strict";var R7=Zm(),zOe=Sm(),tp=(q(),M(z)),b7=Tm(),A7=dl().insertRecords,I7=St(),w7=Q(),N7=Sg(),{getSchemaPath:C7}=Rt(),O7=ep();TB.exports=P7;async function P7(e){try{let{schemaTable:t,attributes:r}=R7(e);b7(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 N7(e.hdb_auth_header,t,r),s=C7(e.schema,e.table),i=await I7.openEnvironment(s,e.table),a=await A7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await O7(e,a)}catch(c){w7.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(P7,"lmdbCreateRecords")});var bB=v((JOe,RB)=>{"use strict";var yB=(q(),M(z)),L7=AI(),D7=Sm(),M7=require("fs-extra"),{getSchemaPath:v7}=Rt();RB.exports=U7;async function U7(e){let t=[{name:e.schema,createddate:Date.now()}],r=new D7(yB.SYSTEM_SCHEMA_NAME,yB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await L7(r),await M7.mkdirp(v7(e.schema))}o(U7,"lmdbCreateSchema")});var IB=v((ZOe,AB)=>{"use strict";var II=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}};AB.exports=II});var OB=v((sPe,CB)=>{"use strict";var wB=St(),wI=Mn(),NI=zr().LMDB_ERRORS_ENUM,x7=Yt(),NB=Q(),tPe=oe(),B7=require("lmdb"),F7=IB(),k7=(q(),M(z)),{OVERFLOW_MARKER:rPe,MAX_SEARCH_KEY_LENGTH:nPe}=x7,H7=k7.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function G7(e,t,r,n){if(wI.validateEnv(e),t===void 0)throw new Error(NI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(NI.IDS_REQUIRED):new Error(NI.IDS_MUST_BE_ITERABLE);try{let s=wB.listDBIs(e);wB.initializeDBIs(e,t,s);let i=new F7,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[H7]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,B7.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=wI.getIndexedValues(y);if(C)for(let I=0,k=C.length;I<k;I++)S.remove(C[I],a)}catch{NB.warn(`cannot delete from attribute: ${R}, ${y}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){NB.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=wI.getNextMonotonicTime(),i}catch(s){throw s}}o(G7,"deleteRecords");CB.exports={deleteRecords:G7}});var rp=v((oPe,LB)=>{"use strict";var Zu=oe(),q7=OB(),$7=St(),{getSchemaPath:V7}=Rt(),K7=ep(),Y7=Q();LB.exports=W7;async function W7(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Zu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Zu.isEmptyOrZeroLength(e.hash_values)&&!Zu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Zu.isEmpty(l)||e.hash_values.push(l)}}if(Zu.isEmptyOrZeroLength(e.hash_values))return PB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Zu.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=V7(e.schema,e.table),i=await $7.openEnvironment(s,e.table),a=await q7.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await K7(e,a)}catch(c){Y7.error(`unable to write transaction due to ${c.message}`)}return PB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(W7,"lmdbDeleteRecords");function PB(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(PB,"createDeleteResponse")});var OI=v((lPe,DB)=>{"use strict";var z7=(q(),M(z)),cPe=Mn();function CI(e,t){let r=Object.create(null);if(t.length===1&&z7.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(CI,"parseRow");function j7(e,t,r,n){let s=CI(r,e);n.push(s)}o(j7,"searchAll");function Q7(e,t,r,n){let s=CI(r,e);n[t]=s}o(Q7,"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 X7(e,t,r,n,s,i){t.toString().endsWith(e)&&ml(t,r,n,s,i)}o(X7,"endsWith");function Z7(e,t,r,n,s,i){t.toString().includes(e)&&ml(t,r,n,s,i)}o(Z7,"contains");function eee(e,t,r,n,s,i){t>e&&ml(t,r,n,s,i)}o(eee,"greaterThanCompare");function tee(e,t,r,n,s,i){t>=e&&ml(t,r,n,s,i)}o(tee,"greaterThanEqualCompare");function ree(e,t,r,n,s,i){t<e&&ml(t,r,n,s,i)}o(ree,"lessThanCompare");function nee(e,t,r,n,s,i){t<=e&&ml(t,r,n,s,i)}o(nee,"lessThanEqualCompare");DB.exports={parseRow:CI,searchAll:j7,searchAllToMap:Q7,iterateDBI:J7,endsWith:X7,contains:Z7,greaterThanCompare:eee,greaterThanEqualCompare:tee,lessThanCompare:ree,lessThanEqualCompare:nee,pushResults:ml}});var ed=v((pPe,kB)=>{"use strict";var Ya=St(),dPe=Q(),cs=Mn(),yg=Yt(),nr=zr().LMDB_ERRORS_ENUM,fPe=oe(),see=(q(),M(z)),Rg=OI(),{parseRow:iee}=Rg,mPe=require("lmdb"),{OVERFLOW_MARKER:MB,MAX_SEARCH_KEY_LENGTH:oee}=yg;function vB(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(vB,"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=Ya.openDBI(s,r);i[yg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ya.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 UB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(MB)){if(!s)if(r)s=Ya.openDBI(e,r);else{let l=Ya.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Ya.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(UB,"getOverflowCheck");function aee(e,t,r,n=!1,s=void 0,i=void 0){if(cs.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=>iee(u.value,r))))}o(aee,"searchAll");function cee(e,t,r,n=!1,s=void 0,i=void 0){if(cs.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 vB(e,t,t,n,s,i))a.set(c,Rg.parseRow(l,r));return a}o(cee,"searchAllToMap");function lee(e,t,r=!1,n=void 0,s=void 0){if(cs.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=vB(e,void 0,t,r,n,s),c=a.transaction,l=UB(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(lee,"iterateDBI");function uee(e,t){if(cs.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return Ya.statDBI(e,t).entryCount}o(uee,"countAll");function dee(e,t,r,n,s=!1,i=void 0,a=void 0){return Wa(e,r,n),pl(e,t,r,(c,l,u,d)=>(n=cs.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(dee,"equals");function fee(e,t,r){return Wa(e,t,r),Ya.openDBI(e,t).getValuesCount(r)}o(fee,"count");function mee(e,t,r,n,s=!1,i=void 0,a=void 0){return Wa(e,r,n),pl(e,null,r,(c,l)=>{n=cs.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(mee,"startsWith");function pee(e,t,r,n,s=!1,i=void 0,a=void 0){return xB(e,t,r,n,s,i,a,!0)}o(pee,"endsWith");function xB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return Wa(e,r,n),pl(e,null,r,(l,u,d,f)=>{let m=UB(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(MB)?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(xB,"contains");function hee(e,t,r,n,s=!1,i=void 0,a=void 0){Wa(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(hee,"greaterThan");function Eee(e,t,r,n,s=!1,i=void 0,a=void 0){Wa(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(Eee,"greaterThanEqual");function _ee(e,t,r,n,s=!1,i=void 0,a=void 0){Wa(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(_ee,"lessThan");function gee(e,t,r,n,s=!1,i=void 0,a=void 0){Wa(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(gee,"lessThanEqual");function See(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(cs.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=cs.convertKeyValueToWrite(n),s=cs.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(See,"between");function Tee(e,t,r,n){cs.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(Tee,"searchByHash");function yee(e,t,r){cs.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(yee,"checkHashExists");function Ree(e,t,r,n,s=[]){return FB(e,t,r,n,s),BB(e,t,r,n,s).map(i=>i[1])}o(Ree,"batchSearchByHash");function bee(e,t,r,n,s=[]){FB(e,t,r,n,s);let i=new Map;for(let[a,c]of BB(e,t,r,n,s))i.set(a,c);return i}o(bee,"batchSearchByHashToMap");function BB(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(BB,"batchHashSearch");function FB(e,t,r,n,s){if(cs.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(FB,"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 Wa(e,t,r){if(cs.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>oee)throw new Error(nr.SEARCH_VALUE_TOO_LARGE)}o(Wa,"validateComparisonFunctions");function sp(e,t){return t.length===1&&see.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ya.listDBIs(e)),t}o(sp,"setGetWholeRowAttributes");kB.exports={searchAll:aee,searchAllToMap:cee,count:fee,countAll:uee,equals:dee,startsWith:mee,endsWith:pee,contains:xB,searchByHash:Tee,setGetWholeRowAttributes:sp,batchSearchByHash:Ree,batchSearchByHashToMap:bee,checkHashExists:yee,iterateDBI:lee,greaterThan:hee,greaterThanEqual:Eee,lessThan:_ee,lessThanEqual:gee,between:See}});var td=v((EPe,VB)=>{var HB=require("lodash"),GB=ft(),ze=require("joi"),Aee=oe(),{hdbSchemaTable:ip,checkValidTable:qB,hdbTable:$B,hdbDatabase:Ag}=Yi(),{handleHDBError:Iee,hdbErrors:wee}=_e(),{getDatabases:Nee}=(we(),M(mt)),{HTTP_STATUS_CODES:Cee}=wee,Oee=ze.object({database:Ag,schema:Ag,table:$B,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)}),Pee=ze.object({database:Ag,schema:Ag,table:$B,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()});VB.exports=function(e,t){let r=null;switch(t){case"value":r=GB.validateBySchema(e,Oee);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(qB("database",e.schema)),i(qB("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=GB.validateBySchema(e,Pee);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Aee.checkGlobalSchemaTable(e.schema,e.table);if(s)return Iee(new Error,s,Cee.NOT_FOUND);let a=Nee()[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=HB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!HB.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 PI=v((gPe,KB)=>{"use strict";var Lee=St(),Dee=td(),{getSchemaPath:Mee}=Rt();KB.exports=vee;function vee(e){let t=Dee(e,"hashes");if(t)throw t;let r=Mee(e.schema,e.table);return Lee.openEnvironment(r,e.table)}o(vee,"initialize")});var LI=v((TPe,YB)=>{"use strict";var Uee=ed(),xee=PI();YB.exports=Bee;async function Bee(e){let t=await xee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Uee.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(Bee,"lmdbGetDataByHash")});var rd=v((RPe,WB)=>{"use strict";var DI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};WB.exports=DI});var jB=v((IPe,zB)=>{"use strict";var APe=rd(),Fee=ed(),kee=PI();zB.exports=Hee;async function Hee(e){let t=await kee(e),r=global.hdb_schema[e.schema][e.table];return Fee.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(Hee,"lmdbSearchByHash")});var di=v((NPe,QB)=>{"use strict";var MI=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}};QB.exports=MI});var Ig=v((OPe,rF)=>{"use strict";var hn=ed(),Gee=St(),qee=oe(),je=Yt(),hl=(q(),M(z)),$ee=zi(),JB=zr().LMDB_ERRORS_ENUM,{getSchemaPath:Vee}=Rt(),qo=hl.SEARCH_WILDCARDS;async function Kee(e,t,r){let n;e.schema===hl.SYSTEM_SCHEMA_NAME?n=$ee[e.table]:n=global.hdb_schema[e.schema][e.table];let s=tF(e,n.hash_attribute,r,t);return ZB(e,s,n.hash_attribute,r)}o(Kee,"prepSearch");async function ZB(e,t,r,n){let s=Vee(e.schema,e.table),i=await Gee.openEnvironment(s,e.table),a=eF(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(Yee(e,r)===!1){let d=e.attribute;if(d===r)return n?XB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?XB(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(ZB,"executeSearch");function eF(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(eF,"searchByType");function XB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(XB,"createMapFromIterable");function Yee(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(Yee,"checkToFetchMore");function tF(e,t,r,n){if(qee.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),qo.indexOf(s)>-1)return r===!0?je.SEARCH_TYPES.SEARCH_ALL_TO_MAP:je.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(qo[0])<0&&s.indexOf(qo[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(qo.indexOf(i)>=0&&qo.indexOf(a)>=0)return e.value=e.value.slice(1,-1),je.SEARCH_TYPES.CONTAINS;if(qo.indexOf(i)>=0)return e.value=e.value.substr(1),je.SEARCH_TYPES.ENDS_WITH;if(qo.indexOf(a)>=0)return e.value=e.value.slice(0,-1),je.SEARCH_TYPES.STARTS_WITH;if(s.includes(qo[0])||s.includes(qo[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(tF,"createSearchTypeFromSearchObject");rF.exports={executeSearch:ZB,createSearchTypeFromSearchObject:tF,prepSearch:Kee,searchByType:eF}});var sF=v((DPe,nF)=>{"use strict";var LPe=di(),Wee=td(),zee=oe(),jee=(q(),M(z)),Qee=Ig();nF.exports=Jee;function Jee(e,t){if(!zee.isEmpty(t)&&jee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Wee(e,"value");if(n)throw n;return Qee.prepSearch(e,t,!0)}o(Jee,"lmdbGetDataByValue")});var op=v((UPe,iF)=>{"use strict";var vPe=di(),Xee=td(),Zee=oe(),ete=(q(),M(z)),tte=Ig();iF.exports=rte;async function rte(e,t){if(!Zee.isEmpty(t)&&ete.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Xee(e,"value");if(n)throw n;return tte.prepSearch(e,t,!1)}o(rte,"lmdbSearchByValue")});var aF=v((FPe,oF)=>{"use strict";var BPe=Yt(),vI=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}},UI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},xI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};oF.exports={SearchByConditionsObject:vI,SearchCondition:UI,SortAttribute:xI}});var fF=v(($Pe,dF)=>{"use strict";var{SearchByConditionsObject:HPe,SearchCondition:GPe}=aF(),nte=di(),ste=td(),BI=ed(),wg=Yt(),{Resource:qPe}=(qa(),M(a0)),uF=Ig(),ite=OI(),ote=require("lodash"),{getSchemaPath:ate}=Rt(),cF=St(),{handleHDBError:cte,hdbErrors:lte}=_e(),{HTTP_STATUS_CODES:ute}=lte,dte=1e8;dF.exports=fte;async function fte(e){let t=ste(e,"conditions");if(t)throw cte(t,t.message,ute.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=ate(e.schema,e.table),n=await cF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)cF.openDBI(n,u.attribute);let i=ote.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===wg.SEARCH_TYPES.EQUALS?u.estimated_count=BI.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=dte}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await lF(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(uF.filterByType),f=d.length,m=BI.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=>ite.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await lF(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=BI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(fte,"lmdbSearchByConditions");async function lF(e,t,r,n){let s=new nte(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,uF.searchByType(e,s,i,n).map(a=>a.value)}o(lF,"executeConditionSearch")});var ap=v((KPe,mF)=>{"use strict";var mte=(q(),M(z)).OPERATIONS_ENUM,FI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=mte.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};mF.exports=FI});var kI=v((WPe,yF)=>{"use strict";var _F=di(),gF=ap(),SF=op(),TF=rp(),kn=(q(),M(z)),pF=oe(),hF=St(),{getTransactionAuditStorePath:pte,getSchemaPath:hte}=Rt(),EF=Q();yF.exports=Ete;async function Ete(e){try{if(pF.isEmpty(global.hdb_schema[e.schema])||pF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await _te(e),await gte(e);let t=hte(e.schema,e.table);try{await hF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")EF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=pte(e.schema,e.table);await hF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")EF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(Ete,"lmdbDropTable");async function _te(e){let t=new _F(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 SF(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 gF(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await TF(s)}o(_te,"deleteAttributesFromSystem");async function gte(e){let t=new _F(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 SF(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 gF(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await TF(s)}catch(i){throw i}}o(gte,"dropTableFromSystem")});var bF=v((jPe,RF)=>{"use strict";var Ste=require("fs-extra"),Tte=di(),yte=rd(),Rte=ap(),bte=kI(),Ate=rp(),Ite=LI(),wte=op(),$o=(q(),M(z)),{getSchemaPath:Nte}=Rt(),{handleHDBError:Cte,hdbErrors:Ote}=_e(),{HDB_ERROR_MSGS:Pte,HTTP_STATUS_CODES:Lte}=Ote;RF.exports=Dte;async function Dte(e){let t;try{t=await Mte(e.schema);let r=new Tte($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,$o.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[$o.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await wte(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await bte(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Rte($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Ate(s);let i=Nte(t);await Ste.remove(i)}catch(r){throw r}}o(Dte,"lmdbDropSchema");async function Mte(e){let t=new yte($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[$o.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Ite(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw Cte(new Error,Pte.SCHEMA_NOT_FOUND(e),Lte.NOT_FOUND,void 0,void 0,!0);return n}o(Mte,"validateDropSchema")});var cp=v((JPe,AF)=>{"use strict";var HI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};AF.exports=HI});var qI=v((eLe,IF)=>{"use strict";var vte=require("fs-extra"),Ng=St(),{getTransactionAuditStorePath:Ute}=Rt(),GI=Yt(),ZPe=cp();IF.exports=xte;async function xte(e){let t;try{let r=Ute(e.schema,e.table);await vte.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,GI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Ng.createDBI(t,GI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Ng.createDBI(t,GI.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(xte,"createTransactionsAuditEnvironment")});var CF=v((nLe,NF)=>{"use strict";var $I=(q(),M(z)),wF=St(),Bte=dl(),{getSystemSchemaPath:Fte,getSchemaPath:kte}=Rt(),rLe=zi(),Hte=gg(),VI=_g(),Gte=Q(),qte=qI();NF.exports=$te;async function $te(e,t){let r=kte(t.schema,t.table),n=new VI(t.schema,t.table,$I.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new VI(t.schema,t.table,$I.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new VI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await wF.createEnvironment(r,t.table),e!==void 0){let a=await wF.openEnvironment(Fte(),$I.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Bte.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 KI(n),await KI(s),await KI(i)}await qte(t)}catch(a){throw a}}o($te,"lmdbCreateTable");async function KI(e){try{await Hte(e)}catch(t){Gte.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(KI,"createAttribute")});var PF=v((iLe,OF)=>{"use strict";var Vte=Zm(),Kte=Tm(),Yte=Sg(),lp=(q(),M(z)),Wte=dl().updateRecords,zte=St(),{getSchemaPath:jte}=Rt(),Qte=ep(),Jte=Q();OF.exports=Xte;async function Xte(e){try{let{schemaTable:t,attributes:r}=Vte(e);Kte(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 Yte(e.hdb_auth_header,t,r),s=jte(e.schema,e.table),i=await zte.openEnvironment(s,e.table),a=await Wte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Qte(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(Xte,"lmdbUpdateRecords")});var DF=v((aLe,LF)=>{"use strict";var Zte=(q(),M(z)).OPERATIONS_ENUM,YI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Zte.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};LF.exports=YI});var vF=v((uLe,MF)=>{"use strict";var lLe=DF(),ere=Zm(),tre=Tm(),rre=Sg(),up=(q(),M(z)),nre=dl().upsertRecords,sre=St(),{getSchemaPath:ire}=Rt(),ore=ep(),are=Q(),{handleHDBError:cre,hdbErrors:lre}=_e();MF.exports=ure;async function ure(e){let t;try{t=ere(e)}catch(l){throw cre(l,l.message,lre.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;tre(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 rre(e.hdb_auth_header,r,n),i=ire(e.schema,e.table),a=await sre.openEnvironment(i,e.table),c=await nre(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await ore(e,c)}catch(l){are.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(ure,"lmdbUpsertRecords")});var xF=v((fLe,UF)=>{"use strict";var WI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};UF.exports=WI});var FF=v((pLe,BF)=>{"use strict";var zI=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}};BF.exports=zI});var GF=v((_Le,HF)=>{"use strict";var jI=St(),{getTransactionAuditStorePath:dre}=Rt(),ELe=xF(),dp=Yt(),fre=oe(),kF=FF(),mre=require("util").promisify,pre=mre(setTimeout),hre=1e4,Ere=100;HF.exports=_re;async function _re(e){let t=dre(e.schema,e.table),r=await jI.openEnvironment(t,e.table,!0),n=jI.listDBIs(r);jI.initializeDBIs(r,dp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new kF;do s=await gre(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 pre(Ere);while(s.transactions_deleted>0);return i}o(_re,"deleteAuditLogsBefore");async function gre(e,t){let r=new kF;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];fre.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>hre)break}return await s,r}catch(n){throw n}}o(gre,"deleteTransactions")});var $F=v((SLe,qF)=>{"use strict";var QI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};qF.exports=QI});var KF=v((RLe,VF)=>{"use strict";var Sre=di(),Tre=ap(),yLe=$F(),ji=(q(),M(z)),yre=oe(),JI=St(),Rre=zi(),bre=op(),Are=rp(),{getSchemaPath:Ire}=Rt();VF.exports=wre;async function wre(e,t=!0){let r;e.schema===ji.SYSTEM_SCHEMA_NAME?r=Rre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Cre(e),s=Ire(e.schema,e.table),i=await JI.openEnvironment(s,e.table);return t===!0&&await Nre(e,i,r.hash_attribute),JI.dropDBI(i,e.attribute),n}o(wre,"lmdbDropAttribute");async function Nre(e,t,r){let n=JI.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(Nre,"removeAttributeFromAllObjects");async function Cre(e){let t=new Sre(ji.SYSTEM_SCHEMA_NAME,ji.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ji.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ji.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ji.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await bre(t)).filter(a=>a[ji.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(yre.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[ji.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Tre(ji.SYSTEM_SCHEMA_NAME,ji.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Are(i)}o(Cre,"dropAttributeFromSystem")});var JF=v((ILe,QF)=>{"use strict";var XI=St(),nd=Yt(),ALe=Mn(),ZI=(q(),M(z)),YF=oe(),{getTransactionAuditStorePath:Ore}=Rt(),Pre=ed(),Cg=Ju(),Lre=Q();QF.exports=Dre;async function Dre(e){let t=Ore(e.schema,e.table),r=await XI.openEnvironment(t,e.table,!0),n=XI.listDBIs(r);XI.initializeDBIs(r,nd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case ZI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return WF(r,e.search_values);case ZI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,vre(r,e.search_values,s);case ZI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Mre(r,e.search_values);default:return WF(r)}}o(Dre,"readAuditLog");function WF(e,t=[0,Date.now()]){YF.isEmpty(t[0])&&(t[0]=0),YF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[nd.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(WF,"searchTransactionsByTimestamp");function Mre(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[nd.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,jF(e,i))}return Object.fromEntries(r)}o(Mre,"searchTransactionsByUsername");function vre(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Pre.equals(e,nd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,nd.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=jF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);zF(l,"records",r,d,a),zF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(vre,"searchTransactionsByHashValues");function zF(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(zF,"loopRecords");function jF(e,t){let r=[];try{let n=e.dbis[nd.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){Lre.warn(i)}return r}catch(n){throw n}}o(jF,"batchSearchTransactions")});var ZF=v((OLe,XF)=>{"use strict";var{getSchemaPath:NLe}=Rt(),CLe=St(),{database:Ure}=(we(),M(mt));XF.exports={writeTransaction:xre};async function xre(e,t,r){return Ure({database:e,table:t}).transaction(r)}o(xre,"writeTransaction")});var nk=v((LLe,rk)=>{"use strict";var{getSchemaPath:ek}=Rt(),tk=St();rk.exports={flush:Bre,resetReadTxn:Fre};async function Bre(e,t){return(await tk.openEnvironment(ek(e,t),t.toString())).flushed}o(Bre,"flush");async function Fre(e,t){try{(await tk.openEnvironment(ek(e,t),t.toString())).resetReadTxn()}catch{}}o(Fre,"resetReadTxn")});var ak=v((MLe,ok)=>{"use strict";var{Readable:kre}=require("stream"),{getDatabases:Hre}=(we(),M(mt)),{readSync:Gre,openSync:qre,createReadStream:sk}=require("fs"),{open:$re}=require("lmdb"),{OpenDBIObject:ik}=zm(),Vre=jm(),{AUDIT_STORE_OPTIONS:Kre}=(ki(),M(fx)),{INTERNAL_DBIS_NAME:Yre,AUDIT_STORE_NAME:Wre}=Yt();ok.exports=jre;var ew=32768,zre=100;async function jre(e){let t=e.database||e.schema||"data",r=Hre()[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=$re({noSync:!0,maxDbs:Vre.MAX_DBS}),m,p=f.openDB(Yre,new ik(!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++%zre===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 ik(!I,I);await g(S,k)}e.include_audit&&await g(Wre,{...Kre}),await m;let R=sk(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let a=r[Object.keys(r)[0]].primaryStore,c=qre(a.path);return a.transaction(()=>{let u=Buffer.alloc(ew);Gre(c,u,0,ew),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=sk(null,{fd:c,start:ew}),m=new kre.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(jre,"getBackup")});var uk=v((ULe,lk)=>{"use strict";var Qre=Q(),{handleHDBError:Jre}=_e(),Xre=H0(),Zre=gg(),ene=AI(),tne=bB(),rne=rp(),nne=LI(),sne=jB(),ine=sF(),one=op(),ane=fF(),cne=bF(),lne=CF(),une=PF(),dne=vF(),fne=GF(),mne=kI(),pne=KF(),hne=JF(),Ene=ZF(),ck=nk(),_ne=ak(),tw=class extends Xre{static{o(this,"LMDBBridge")}async searchByConditions(t){return ane(t)}async getDataByHash(t){return await nne(t)}async searchByHash(t){return await sne(t)}async getDataByValue(t,r){return await ine(t,r)}async searchByValue(t){return await one(t)}async createSchema(t){return await tne(t)}async dropSchema(t){return await cne(t)}async createTable(t,r){return await lne(t,r)}async dropTable(t){return await mne(t)}async createAttribute(t){return await Zre(t)}async createRecords(t){return await ene(t)}async updateRecords(t){return await une(t)}async upsertRecords(t){try{return await dne(t)}catch(r){throw Jre(r,null,null,Qre.ERR,r)}}async deleteRecords(t){return await rne(t)}async dropAttribute(t){return await pne(t)}async deleteAuditLogsBefore(t){return await fne(t)}async readAuditLog(t){return await hne(t)}writeTransaction(t,r,n){return Ene.writeTransaction(t,r,n)}flush(t,r){return ck.flush(t,r)}resetReadTxn(t,r){return ck.resetReadTxn(t,r)}getBackup(t){return _ne(t)}};lk.exports=tw});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 ls.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 ls.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 ls.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 ls.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 ls.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 ls.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 ls.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 ls.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 ls.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 ls.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 ls.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=rw(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 ls.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?mk:fk);break}c=l}while(c&&c!==fk&&c!==mk)}function pk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(dk[t])return dk[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=rw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function gne(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 rw(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=rw(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=Yb[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)Sne.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 ls,dk,fk,mk,_l,Sne,El,Pg,fp,nw=se(()=>{ls=b(_e());y_();rs();o(Hn,"getChanges");o(mp,"assignTrackedAccessors");dk=Object.prototype,fk=new Proxy({},{get:pk}),mk=new Proxy({},{get:pk,set:gne});o(pk,"getProxiedProperty");o(gne,"setProxiedProperty");o(rw,"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");Sne=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 Rk={};Re(Rk,{ResourceBridge:()=>ow});function aw({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 hk(e,t){let r=Qi(e),n=aw(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,yk.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 Qi(e){let t=e.database||e.schema||yne,r=at()[t];if(!r)throw(0,fi.handleHDBError)(new Error,Tne.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Ek(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*_k(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 gk,Dg,fi,Sk,sw,iw,Tk,yk,Tne,yne,Rne,bne,ow,bk=se(()=>{gk=b(uk()),Dg=b(td()),fi=b(_e());we();Sk=b(Zm());q();sw=b(Go()),iw=b(as()),Tk=b(oe());Ua();nw();yk=b(Q()),{HDB_ERROR_MSGS:Tne}=fi.hdbErrors,yne="data",Rne=1e4,bne=10,ow=class extends gk.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=Qi(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:aw(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 Qi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Qi(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 Qi(t).dropTable()}createSchema(t){return sd({database:t.schema,table:null}),sw.signalSchemaChange(new iw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await cw(t.schema),sw.signalSchemaChange(new iw.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,Sk.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 Ek(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,Tk.asyncSetTimeout)(bne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Rne===0&&await u();return l.length>0&&await u(),s?Ek(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 hk(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of hk(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&wb[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=Qi(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:aw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Qi(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){Qi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Qi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Qi(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 _k(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return _k(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(aw,"getSelect");o(hk,"getRecords");o(Qi,"getTable");o(Ek,"createDeleteResponse");o(_k,"groupRecordsInHistory")});var us=v((YLe,Ak)=>{"use strict";var{ResourceBridge:Ane}=(bk(),M(Rk)),Ine=me();Ine.initSync();var Mg;function wne(){return Mg||(Mg=new Ane,Mg)}o(wne,"getBridge");Ak.exports=wne()});var mi=v((zLe,Nk)=>{var Nne=zi(),{promisify:Cne}=require("util"),{getDatabases:wk}=(we(),M(mt));Nk.exports={setSchemaDataToGlobal:Ik,getTableSchema:One,getSystemSchema:Pne,setSchemaDataToGlobalAsync:Cne(Ik)};function Ik(e){global.hdb_schema=wk(),e&&e()}o(Ik,"setSchemaDataToGlobal");function One(e,t,r){let n=wk()[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(One,"getTableSchema");function Pne(){return Nne}o(Pne,"getSystemSchema")});var Gn=v((QLe,Lk)=>{"use strict";var Ug=oI(),tn=oe(),Lne=require("util"),xg=us(),Dne=mi(),Ck=Q(),{handleHDBError:Sl,hdbErrors:Mne}=_e(),{HTTP_STATUS_CODES:Tl}=Mne,vne=Lne.promisify(Dne.getTableSchema),Une="updated",Ok="inserted",Pk="upserted";Lk.exports={insert:Bne,update:Fne,upsert:kne,validation:xne,flush:Hne};async function xne(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 vne(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 Ck.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 Ck.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(xne,"validation");async function Bne(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(Ok,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Bne,"insertData");async function Fne(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(Une,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(Fne,"updateData");async function kne(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(Pk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(kne,"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===Ok?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===Pk?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(vg,"returnObject");function Hne(e){return tn.transformReq(e),xg.flush(e.schema,e.table)}o(Hne,"flush")});var uw=v((XLe,vk)=>{var Gne=ft(),lw=require("joi"),{hdbTable:qne,hdbDatabase:Dk}=Yi(),Mk={schema:Dk,database:Dk,table:qne},$ne={date:lw.date().iso().required()},Vne={timestamp:lw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};vk.exports=function(e,t){let r=t==="timestamp"?{...Mk,...Vne}:{...Mk,...$ne},n=lw.object(r);return Gne.validateBySchema(e,n)}});var Bk=v((ZLe,xk)=>{var Kne=ft(),dw=require("joi"),{hdbTable:Yne,hdbDatabase:Uk}=Yi(),Wne=dw.object({schema:Uk,database:Uk,table:Yne,hash_values:dw.array().required(),ids:dw.array()});xk.exports=function(e){return Kne.validateBySchema(e,Wne)}});var hw=v((eDe,Fk)=>{"use strict";var fw=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}},mw=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}},pw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Fk.exports={InsertObject:fw,NoSQLSeachObject:mw,DeleteResponseObject:pw}});var bl=v((rDe,$k)=>{"use strict";var Hk=uw(),zne=Bk(),yl=oe(),kk=require("moment"),Gk=Q(),{promisify:jne,callbackify:Qne}=require("util"),Rl=(q(),M(z)),Jne=mi(),Ew=jne(Jne.getTableSchema),_w=us(),{DeleteResponseObject:Xne}=hw(),{handleHDBError:za,hdbErrors:Zne}=_e(),{HDB_ERROR_MSGS:Bg,HTTP_STATUS_CODES:ja}=Zne,ese="records successfully deleted",tse=Qne(qk);$k.exports={delete:tse,deleteRecord:qk,deleteFilesBefore:rse,deleteAuditLogsBefore:nse};async function rse(e){let t=Hk(e,"date");if(t)throw za(t,t.message,ja.BAD_REQUEST,void 0,void 0,!0);if(yl.transformReq(e),!kk(e.date,kk.ISO_8601).isValid())throw za(new Error,Bg.INVALID_DATE,ja.BAD_REQUEST,Rl.LOG_LEVELS.ERROR,Bg.INVALID_DATE,!0);let n=yl.checkSchemaTableExist(e.schema,e.table);if(n)throw za(new Error,n,ja.NOT_FOUND,Rl.LOG_LEVELS.ERROR,n,!0);let s=await _w.deleteRecordsBefore(e);if(await Ew(e.schema,e.table),Gk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(rse,"deleteFilesBefore");async function nse(e){let t=Hk(e,"timestamp");if(t)throw za(t,t.message,ja.BAD_REQUEST,void 0,void 0,!0);if(yl.transformReq(e),isNaN(e.timestamp))throw za(new Error,Bg.INVALID_VALUE("Timestamp"),ja.BAD_REQUEST,Rl.LOG_LEVELS.ERROR,Bg.INVALID_VALUE("Timestamp"),!0);let r=yl.checkSchemaTableExist(e.schema,e.table);if(r)throw za(new Error,r,ja.NOT_FOUND,Rl.LOG_LEVELS.ERROR,r,!0);let n=await _w.deleteAuditLogsBefore(e);return await Ew(e.schema,e.table),Gk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(nse,"deleteAuditLogsBefore");async function qk(e){e.ids&&(e.hash_values=e.ids);let t=zne(e);if(t)throw za(t,t.message,ja.BAD_REQUEST,void 0,void 0,!0);yl.transformReq(e);let r=yl.checkSchemaTableExist(e.schema,e.table);if(r)throw za(new Error,r,ja.NOT_FOUND,Rl.LOG_LEVELS.ERROR,r,!0);try{await Ew(e.schema,e.table);let n=await _w.deleteRecords(e);return yl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${ese}`),n}catch(n){if(n.message===Rl.SEARCH_NOT_FOUND_MESSAGE){let s=new Xne;return s.message=Rl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(qk,"deleteRecord")});var Rw={};Re(Rw,{HASH_FUNCTION:()=>Gr,hash:()=>Tw,validate:()=>yw});function gw(e=hp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(pp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Tw(e,t=Gr[Kk?.toUpperCase()]??Gr.SHA256){return Sw[t](e)}function yw(e,t,r=Gr[Kk?.toUpperCase()]??Gr.SHA256){return e?sse[r](e,t):!1}var pp,id,Vk,Kk,hp,Yk,Gr,Sw,sse,bw=se(()=>{pp=b(require("node:crypto")),id=b(require("argon2")),Vk=b(me());q();Kk=(0,Vk.get)(F.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),hp=16,Yk=9,Gr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(gw,"generateSalt");Sw={[Gr.MD5]:(e,t=void 0)=>{t=t??gw(Yk);let r=pp.createHash(Gr.MD5).update(e+t).digest("hex");return t+r},[Gr.SHA256]:(e,t=void 0)=>{t=t??gw(hp);let r=pp.createHash(Gr.SHA256).update(e+t).digest("hex");return t+r},[Gr.ARGON2ID]:async e=>{let t=gw(hp),r=await id.hash(e,{type:id.argon2id,salt:Buffer.from(t)});return t+r}},sse={[Gr.MD5]:(e,t)=>{let r=e.slice(0,Yk);return e===Sw[Gr.MD5](t,r)},[Gr.SHA256]:(e,t)=>{let r=e.slice(0,hp);return e===Sw[Gr.SHA256](t,r)},[Gr.ARGON2ID]:async(e,t)=>await id.verify(e.slice(hp),t)};o(Tw,"hash");o(yw,"validate")});var zk=v((oDe,Wk)=>{var Aw=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 ise(e){return En.password.presence=!0,En.username.presence=!0,En.role.presence=!0,En.active.presence=!0,Aw.validateObject(e,En)}o(ise,"addUserValidation");function ose(e){return En.password.presence=!1,En.username.presence=!0,En.role.presence=!1,En.active.presence=!1,Aw.validateObject(e,En)}o(ose,"alterUserValidation");function ase(e){return En.password.presence=!1,En.username.presence=!0,En.role.presence=!1,En.active.presence=!1,Aw.validateObject(e,En)}o(ase,"dropUserValidation");Wk.exports={addUserValidation:ise,alterUserValidation:ose,dropUserValidation:ase}});var aH=v((lDe,oH)=>{"use strict";var Iw=require("recursive-iterator"),cse=require("alasql"),ww=require("clone"),jk=oe(),{handleHDBError:Qk,hdbErrors:lse}=_e(),{HDB_ERROR_MSGS:Jk,HTTP_STATUS_CODES:Xk}=lse,{getDatabases:use}=(we(),M(mt)),dse=["DISTINCT_ARRAY"],Zk=Symbol("validateTables"),Nw=Symbol("validateTable"),cDe=Symbol("getAllColumns"),eH=Symbol("validateAllColumns"),Fg=Symbol("findColumn"),tH=Symbol("validateOrderBy"),Ep=Symbol("validateSegment"),Cw=Symbol("validateColumn"),rH=Symbol("setColumnsForTable"),nH=Symbol("checkColumnsForAsterisk"),sH=Symbol("validateGroupBy"),iH=Symbol("hasColumns"),Ow=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Zk](),this[nH](),this[eH]()}[Zk](){if(this[iH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Nw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Nw](t.table)})}}[iH](){let t=!1,r=new Iw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Nw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=use();if(!r[t.databaseid])throw Qk(new Error,Jk.SCHEMA_NOT_FOUND(t.databaseid),Xk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Qk(new Error,Jk.TABLE_NOT_FOUND(t.databaseid,t.tableid),Xk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=ww(s);i.table=ww(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)}[nH](){let t=new Iw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[rH](r.tableid)}[rH](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new cse.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[eH](){this[Ep](this.statement.columns,!1),this[Ep](this.statement.joins,!1),this[Ep](this.statement.where,!1),this[sH](this.statement.group,!1),this[Ep](this.statement.order,!0)}[Ep](t,r){if(!t)return;let n=new Iw(t),s=[];for(let{node:i,path:a}of n)!jk.isEmpty(i)&&!jk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[tH](i):s.push(this[Cw](i)));return s}[sH](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&dse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=ww(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`}[tH](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[Cw](t)}[Cw](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]}};oH.exports=Ow});var dH=v((dDe,uH)=>{"use strict";var cH=require("lodash"),_p=require("mathjs"),fse=require("jsonata"),lH=oe();uH.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?cH.uniqWith(e,cH.isEqual):e,"distinct_array"),searchJSON:mse,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 mse(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(lH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),lH.isEmpty(this.__ala__.res[r])){let n=fse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(mse,"searchJSON")});var mH=v((mDe,fH)=>{"use strict";var mr=require("moment"),Pw="YYYY-MM-DDTHH:mm:ss.SSSZZ";mr.suppressDeprecationWarnings=!0;fH.exports={current_date:o(()=>mr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>mr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return mr(e).utc().format("YYYY");case"month":return mr(e).utc().format("MM");case"day":return mr(e).utc().format("DD");case"hour":return mr(e).utc().format("HH");case"minute":return mr(e).utc().format("mm");case"second":return mr(e).utc().format("ss");case"millisecond":return mr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>mr(e).utc().format(Pw),"date"),date_format:o((e,t)=>mr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>mr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>mr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=mr(e).utc(),s=mr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>mr().utc().valueOf(),"now"),get_server_time:o(()=>mr().format(Pw),"get_server_time"),offset_utc:o((e,t)=>mr(e).utc().utcOffset(t).format(Pw),"offset_utc")}});var _H=v((hDe,EH)=>{"use strict";var pse=require("@turf/area"),hse=require("@turf/length"),Ese=require("@turf/circle"),_se=require("@turf/difference"),gse=require("@turf/distance"),Sse=require("@turf/boolean-contains"),Tse=require("@turf/boolean-equal"),yse=require("@turf/boolean-disjoint"),Rse=require("@turf/helpers"),pH=(q(),M(z)),Je=oe(),Vo=Q();EH.exports={geoArea:bse,geoLength:Ase,geoCircle:Ise,geoDifference:wse,geoDistance:hH,geoNear:Nse,geoContains:Cse,geoEqual:Ose,geoCrosses:Pse,geoConvert:Lse};function bse(e){if(Je.isEmpty(e))return NaN;typeof e=="string"&&(e=Je.autoCastJSON(e));try{return pse.default(e)}catch(t){return Vo.trace(t,e),NaN}}o(bse,"geoArea");function Ase(e,t){if(Je.isEmpty(e))return NaN;typeof e=="string"&&(e=Je.autoCastJSON(e));try{return hse.default(e,{units:t||"kilometers"})}catch(r){return Vo.trace(r,e),NaN}}o(Ase,"geoLength");function Ise(e,t,r){if(Je.isEmpty(e))return NaN;if(Je.isEmpty(t))return NaN;typeof e=="string"&&(e=Je.autoCastJSON(e));try{return Ese.default(e,t,{units:r||"kilometers"})}catch(n){return Vo.trace(n,e,t),NaN}}o(Ise,"geoCircle");function wse(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 _se(e,t)}catch(r){return Vo.trace(r,e,t),NaN}}o(wse,"geoDifference");function hH(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 gse.default(e,t,{units:r||"kilometers"})}catch(n){return Vo.trace(n,e,t),NaN}}o(hH,"geoDistance");function Nse(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 hH(e,t,n)<=r}catch(s){return Vo.trace(s,e,t),!1}}o(Nse,"geoNear");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 Vo.trace(r,e,t),!1}}o(Cse,"geoContains");function Ose(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 Tse.default(e,t)}catch(r){return Vo.trace(r,e,t),!1}}o(Ose,"geoEqual");function Pse(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!yse.default(e,t)}catch(r){return Vo.trace(r,e,t),!1}}o(Pse,"geoCrosses");function Lse(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(pH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(pH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Je.autoCastJSON(e)),Rse[t](e,r)}o(Lse,"geoConvert")});var kg=v((_De,gH)=>{var Al=dH(),ds=mH(),Ji=_H();gH.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=ds.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ds.current_time,e.fn.extract=e.fn.EXTRACT=ds.extract,e.fn.date=e.fn.DATE=ds.date,e.fn.date_format=e.fn.DATE_FORMAT=ds.date_format,e.fn.date_add=e.fn.DATE_ADD=ds.date_add,e.fn.date_sub=e.fn.DATE_SUB=ds.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ds.date_diff,e.fn.now=e.fn.NOW=ds.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ds.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ds.get_server_time,e.fn.getdate=e.fn.GETDATE=ds.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ds.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ji.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ji.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ji.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ji.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ji.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ji.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ji.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ji.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ji.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ji.geoNear}});var RH=v((gDe,yH)=>{"use strict";var Sp=require("lodash"),qn=require("alasql");qn.options.cache=!1;var Dse=kg(),SH=require("clone"),Hg=require("recursive-iterator"),Ke=Q(),st=oe(),od=us(),Mse=(q(),M(z)),{hdbErrors:vse}=_e(),{getDatabases:TH}=(we(),M(mt)),Use="IS NULL",pi="There was a problem performing this search. Please check the logs and try again.";Dse(qn);var Lw=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(SH(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=TH()[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(Mse.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(SH(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(Use)>-1&&this.tables.forEach(s=>{let i={columnid:TH()[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 od.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 od.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 od.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 od.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 od.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(vse.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 od.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)}};yH.exports=Lw});var _n=v((TDe,bH)=>{"use strict";bH.exports={searchByConditions:xse,searchByHash:Bse,searchByValue:Fse,search:kse};var Dw=us(),{transformReq:Mw}=oe();async function xse(e){return Mw(e),Dw.searchByConditions(e)}o(xse,"searchByConditions");async function Bse(e){Mw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Dw.searchByHash(e))r&&t.push(r);return t}o(Bse,"searchByHash");async function Fse(e){Mw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Dw.searchByValue(e))t.push(r);return t}o(Fse,"searchByValue");function kse(e,t){try{let r=aH(),n=RH(),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(kse,"search")});var Xi=v((RDe,NH)=>{"use strict";var Tp=require("crypto"),Hse=me(),{CONFIG_PARAMS:Gse}=(q(),M(z)),IH="aes-256-cbc",qse=32,$se=16,vw=64,wH=32,Vse=vw+wH,AH=new Map;NH.exports={encrypt:Kse,decrypt:Yse,createNatsTableStreamName:Wse};function Kse(e){let t=Tp.randomBytes(qse),r=Tp.randomBytes($se),n=Tp.createCipheriv(IH,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(Kse,"encrypt");function Yse(e){let t=e.substr(0,vw),r=e.substr(vw,wH),n=e.substr(Vse,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=Tp.createDecipheriv(IH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(Yse,"decrypt");function Wse(e,t){let r=Hse.get(Gse.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=AH.get(r);return n||(n=Tp.createHash("md5").update(r).digest("hex"),AH.set(r,n)),n}o(Wse,"createNatsTableStreamName")});var Pt=v((IDe,OH)=>{"use strict";var{platform:ADe}=require("os"),zse="nats-server.zip",Uw="nats-server",jse=process.platform==="win32"?`${Uw}.exe`:Uw,Qse=/^[^\s.,*>]+$/,CH="__request__",Jse=o(e=>`${e}.${CH}`,"REQUEST_SUBJECT"),Xse={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Zse={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},eie={HUB:"hub.pid",LEAF:"leaf.pid"},tie={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},rie={SUCCESS:"success",ERROR:"error"},nie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},sie={TXN:"txn",MSGID:"msgid"},ad={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},iie={[ad.ERR]:1,[ad.WRN]:2,[ad.INF]:3,[ad.DBG]:4,[ad.TRC]:5},oie={debug:"-D",trace:"-DVV"};OH.exports={NATS_SERVER_ZIP:zse,NATS_SERVER_NAME:Uw,NATS_BINARY_NAME:jse,PID_FILES:eie,NATS_CONFIG_FILES:Zse,SERVER_SUFFIX:tie,NATS_TERM_CONSTRAINTS_RX:Qse,REQUEST_SUFFIX:CH,UPDATE_REMOTE_RESPONSE_STATUSES:rie,CLUSTER_STATUS_STATUSES:nie,REQUEST_SUBJECT:Jse,SUBJECT_PREFIXES:sie,MSG_HEADERS:Xse,LOG_LEVELS:ad,LOG_LEVEL_FLAGS:oie,LOG_LEVEL_HIERARCHY:iie}});var $n=v((NDe,qr)=>{"use strict";var DH="username is required",MH="nothing to update, must supply active, role or password to update",vH="password cannot be an empty string",UH="If role is specified, it cannot be empty.",xH="active must be true or false";qr.exports.addUser=hie;qr.exports.alterUser=Eie;qr.exports.dropUser=gie;qr.exports.getSuperUser=bie;qr.exports.userInfo=Sie;qr.exports.listUsers=qg;qr.exports.listUsersExternal=Tie;qr.exports.setUsersWithRolesCache=Il;qr.exports.findAndValidateUser=Vw;qr.exports.getClusterUser=Aie;qr.exports.getUsersWithRolesCache=Rie;qr.exports.USERNAME_REQUIRED=DH;qr.exports.ALTERUSER_NOTHING_TO_UPDATE=MH;qr.exports.EMPTY_PASSWORD=vH;qr.exports.EMPTY_ROLE=UH;qr.exports.ACTIVE_BOOLEAN=xH;var BH=Gn(),aie=bl(),yp=(bw(),M(Rw)),FH=zk(),Rp=_n(),Hw=Go(),Zi=oe(),kH=require("validate.js"),Gw=Q(),{promisify:cie}=require("util"),qw=Xi(),Bw=(q(),M(z)),PH=Pt(),lie=gt(),uie=me(),die=zi(),{hdbErrors:fie,ClientError:hi}=_e(),{HTTP_STATUS_CODES:Ko,AUTHENTICATION_ERROR_MSGS:xw,HDB_ERROR_MSGS:cd}=fie,{UserEventMsg:$w}=as(),Fw=require("lodash"),{server:Gg}=(Fr(),M(lm)),mie=Q();Gg.getUser=(e,t)=>Vw(e,t,t!=null);Gg.authenticateUser=(e,t)=>Vw(e,t);var HH={username:!0,active:!0,role:!0,password:!0},LH=new Map,pie=cie(aie.delete),kw=uie.get(Bw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??yp.HASH_FUNCTION.SHA256,eo;async function hie(e){let t=kH.cleanAttributes(e,HH),r=FH.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(cd.ROLE_NAME_NOT_FOUND(t.role),Ko.NOT_FOUND);if(n.length>1)throw new hi(cd.DUP_ROLES_FOUND(t.role),Ko.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=qw.encrypt(t.password)),t.password=await yp.hash(t.password,kw),t.hash_function=kw,t.role=n[0].id;let s=await BH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Gw.debug(s),await Il(),s.skipped_hashes.length===1)throw new hi(cd.USER_ALREADY_EXISTS(t.username),Ko.CONFLICT);return Hw.signalUserChange(new $w(process.pid)),`${t.username} successfully added`}o(hie,"addUser");async function Eie(e){let t=kH.cleanAttributes(e,HH);if(Zi.isEmptyOrZeroLength(t.username))throw new Error(DH);if(Zi.isEmptyOrZeroLength(t.password)&&Zi.isEmptyOrZeroLength(t.role)&&Zi.isEmptyOrZeroLength(t.active))throw new Error(MH);if(!Zi.isEmpty(t.password)&&Zi.isEmptyOrZeroLength(t.password.trim()))throw new Error(vH);if(!Zi.isEmpty(t.active)&&!Zi.isBoolean(t.active))throw new Error(xH);if(!Zi.isEmpty(t.password)&&!Zi.isEmptyOrZeroLength(t.password.trim())&&(_ie(t.username)&&(t.hash=qw.encrypt(t.password)),t.password=await yp.hash(t.password,kw)),t.role==="")throw new Error(UH);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(cd.ALTER_USER_ROLE_NOT_FOUND(t.role),Ko.NOT_FOUND);if(n.length>1)throw new hi(cd.DUP_ROLES_FOUND(t.role),Ko.CONFLICT);t.role=n[0].id}let r=await BH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Il(),Hw.signalUserChange(new $w(process.pid)),r}o(Eie,"alterUser");function _ie(e){let t=!1,r=eo.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(_ie,"isClusterUser");async function gie(e){let t=FH.dropUserValidation(e);if(t)throw new hi(t.message);if(eo.get(e.username)===void 0)throw new hi(cd.USER_NOT_EXIST(e.username),Ko.NOT_FOUND);let r=await pie({table:"hdb_user",schema:"system",hash_values:[e.username]});return Gw.debug(r),await Il(),Hw.signalUserChange(new $w(process.pid)),`${e.username} successfully deleted`}o(gie,"dropUser");async function Sie(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Fw.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(Sie,"userInfo");async function Tie(){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(Tie,"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]=Fw.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=Fw.cloneDeep(s),s.role=t[s.role],yie(s.role),n.set(s.username,s);return n}o(qg,"listUsers");function yie(e){if(!e){Gw.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(die)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(yie,"appendSystemTablesToRole");async function Il(e=void 0){e?eo=e:eo=await qg()}o(Il,"setUsersWithRolesCache");async function Rie(){return eo||await Il(),eo}o(Rie,"getUsersWithRolesCache");async function Vw(e,t,r=!0){eo||await Il();let n=eo.get(e);if(!n){if(!r)return{username:e};throw new hi(xw.GENERIC_AUTH_FAIL,Ko.UNAUTHORIZED)}if(n&&!n.active)throw new hi(xw.USER_INACTIVE,Ko.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(LH.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)LH.set(t,n.password);else throw new hi(xw.GENERIC_AUTH_FAIL,Ko.UNAUTHORIZED)}}return s}o(Vw,"findAndValidateUser");async function bie(){eo||await Il();for(let[,e]of eo)if(e.role.role==="super_user")return e}o(bie,"getSuperUser");async function Aie(){let e=await qg(),t=lie.getConfigFromFile(Bw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==Bw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=qw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+PH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+PH.SERVER_SUFFIX.ADMIN,r}o(Aie,"getClusterUser");var GH=[];Gg.invalidateUser=function(e){for(let t of GH)try{t(e)}catch(r){mie.error("Error invalidating user",r)}};Gg.onInvalidatedUser=function(e){GH.push(e)}});var Ie,ld=se(()=>{Ie={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var ud,Kw=se(()=>{ld();ud=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,Qa,Yw,dd,Ww,fd,zw,$g=se(()=>{wl=b(zr()),Qa=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)}},Yw=class extends Qa{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}},dd=class extends Qa{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}},Ww=class extends Qa{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}},fd=class extends Qa{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}},zw=class extends Qa{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 qH,Nl,$H,Ja,bp,md,Iie,Vg,jw=se(()=>{qH=b(as()),Nl=b(nt());q();$H=b(ts());ld();$g();Ja=(0,$H.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}`;Ja.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&&(Ja.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(),Ja.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),Ja.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,qH.sendItcEvent)({type:n_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new dd("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 Ja.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof dd?Ja.error?.(`ITC failure during component status collection: ${r.message}`):Ja.warn?.("Failed to collect component status from all threads:",r),Ja.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)}},md=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}},Iie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Vg=new bp(Iie)});var Xa,Kg=se(()=>{Kw();ld();jw();$g();Xa=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 fd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ie).includes(r))throw new fd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ie).join(", ")}`);this.statusMap.set(t,new ud(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 md.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 pr,Yg=se(()=>{Kg();pr=new Xa});function KH(e){let t=VH.get(e);return t||(t=new Qw(e),VH.set(e,t)),t}function YH(){pr.reset()}var Qw,VH,to,WH,zH=se(()=>{Yg();ld();Qw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return pr.setStatus(this.componentName,Ie.HEALTHY,t),this}warning(t){return pr.setStatus(this.componentName,Ie.WARNING,t),this}error(t,r){return pr.setStatus(this.componentName,Ie.ERROR,t,r),this}loading(t){return pr.setStatus(this.componentName,Ie.LOADING,t||"Loading..."),this}unknown(t){return pr.setStatus(this.componentName,Ie.UNKNOWN,t),this}get(){return pr.getStatus(this.componentName)}},VH=new Map;o(KH,"statusForComponent");to={loading(e,t){pr.initializeLoading(e,t)},loaded(e,t){pr.markLoaded(e,t)},failed(e,t,r){pr.markFailed(e,t,r)}};o(YH,"reset");WH=Ie});var Ap={};Re(Ap,{AggregationError:()=>Ww,COMPONENT_STATUS_LEVELS:()=>Ie,ComponentStatus:()=>ud,ComponentStatusError:()=>Qa,ComponentStatusOperationError:()=>fd,ComponentStatusRegistry:()=>Xa,CrossThreadCollectionError:()=>zw,CrossThreadStatusCollector:()=>bp,CrossThreadTimeoutError:()=>Yw,ITCError:()=>dd,StatusAggregator:()=>md,componentStatusRegistry:()=>pr,crossThreadCollector:()=>Vg,query:()=>wie});var wie,jH=se(()=>{Yg();Kg();Kw();Kg();jw();Yg();$g();ld();wie={get(e){return pr.getStatus(e)},all(){return pr.getAllStatuses()},byStatus(e){return pr.getComponentsByStatus(e)},summary(){return pr.getStatusSummary()},async allThreads(){return Xa.getAggregatedFromAllThreads(pr)}}});var Jw={};Re(Jw,{STATUS:()=>WH,internal:()=>Ap,lifecycle:()=>to,reset:()=>YH,statusForComponent:()=>KH});var Ip=se(()=>{zH();jH()});var Np=v((aMe,XH)=>{"use strict";var fs=Q(),gn=(q(),M(z)),Nie=v0(),Cie=$n(),{validateEvent:Xw}=as(),wp=us(),Oie=require("process"),{resetDatabases:Pie}=(we(),M(mt)),Lie={[gn.ITC_EVENT_TYPES.SCHEMA]:Die,[gn.ITC_EVENT_TYPES.USER]:JH,[gn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:vie};async function Die(e){let t=Xw(e);if(t){fs.error(t);return}fs.trace("ITC schemaHandler received schema event:",e),await Nie(e.message),await Mie(e.message)}o(Die,"schemaHandler");async function Mie(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=Pie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fs.error(t)}}o(Mie,"syncSchemaMetadata");var QH=[];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=Xw(e);if(t){fs.error(t);return}fs.trace(`ITC userHandler ${gn.HDB_ITC_CLIENT_PREFIX}${Oie.pid} received user event:`,e),await Cie.setUsersWithRolesCache();for(let r of QH)r()}catch(t){fs.error(t)}}o(JH,"userHandler");JH.addListener=function(e){QH.push(e)};async function vie(e){try{let t=Xw(e);if(t){fs.error(t);return}fs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Ip(),M(Jw)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=as(),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(vie,"componentStatusRequestHandler");XH.exports=Lie});var as=v((mMe,eG)=>{"use strict";var lMe=Q(),Zw=oe(),Uie=(q(),M(z)),{ITC_ERRORS:Cp}=zr(),{parentPort:uMe,threadId:xie,isMainThread:Bie,workerData:dMe}=require("worker_threads"),{onMessageFromWorkers:Fie,broadcast:fMe,broadcastWithAcknowledgement:kie}=nt();eG.exports={sendItcEvent:Hie,validateEvent:ZH,SchemaEventMsg:Gie,UserEventMsg:qie};var Wg;Fie(async(e,t)=>{Wg=Wg||Np(),ZH(e),Wg[e.type]&&await Wg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Hie(e){return!Bie&&e.message&&(e.message.originator=xie),kie(e)}o(Hie,"sendItcEvent");function ZH(e){if(typeof e!="object")return Cp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Zw.isEmpty(e.type))return Cp.MISSING_TYPE;if(!e.hasOwnProperty("message")||Zw.isEmpty(e.message))return Cp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Zw.isEmpty(e.message.originator))return Cp.MISSING_ORIGIN;if(Uie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Cp.INVALID_EVENT(e.type)}o(ZH,"validateEvent");function Gie(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(Gie,"SchemaEventMsg");function qie(e){this.originator=e}o(qie,"UserEventMsg")});var Go=v((EMe,sG)=>{"use strict";var tG=(q(),M(z)),hMe=oe(),zg=Q(),rG=E0(),pd,{sendItcEvent:nG}=as();function $ie(e){try{zg.debug("signalSchemaChange called with message:",e),pd=pd||Np();let t=new rG(tG.ITC_EVENT_TYPES.SCHEMA,e);return pd.schema(t),nG(t)}catch(t){zg.error(t)}}o($ie,"signalSchemaChange");function Vie(e){try{zg.trace("signalUserChange called with message:",e),pd=pd||Np();let t=new rG(tG.ITC_EVENT_TYPES.USER,e);return pd.user(t),nG(t)}catch(t){zg.error(t)}}o(Vie,"signalUserChange");sG.exports={signalSchemaChange:$ie,signalUserChange:Vie}});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 iG(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(iG,"mergeHeaders")});function jg(e,t,r=Yie){let n;return function(...i){return n?n.length*eN>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();eN=(eN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var cG,Kie,Yie,oG,Wie,tN,aG,eN,rN=se(()=>{cG=b(ts()),Kie=3e3,Yie=2e4,oG=0,Wie=3e4,tN=3e3,aG=performance.now()+tN,eN=0;o(jg,"throttle");setInterval(()=>{let e=performance.now();e-aG-tN>Kie&&oG+Wie<e&&(cG.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"),oG=e),aG=e},tN).unref()});var SG={};Re(SG,{EVICTED:()=>Ga,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=FA(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,gu=!1,kc,xt,ri,Na=Ol.get(F.REPLICATION_DATABASES);if(Array.isArray(Na)){for(let K of Na)if(K.name===c&&K.replicateTo>=0){ri=K.replicateTo;break}}let $E=i.getRange({start:!1,end:!1}).constructor,Qf=10,VE=6;g&&tm(),Mm(i.env.path,K=>{if(I)return Oa(K)});class Jf extends _l{static{o(this,"Updatable")}getUpdatedTime(){return ka.get(this.getRecord())?.version}getExpiresAt(){return ka.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===Au.ROLE_TABLE_NAME||w.table===Au.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){xi(_);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 Io(_,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&&(!ioe(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,Oa()}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&&xa(_.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(),sN.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(_);xi(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 Io(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?Wu(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||gu&&O){if(T||(T={}),O){let x=P?.length>0&&nN(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=nN(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 Ca(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=nN(O,"insert");for(let L in T)if(!x[L])return!1;return Ca(this.getContext())}else return Ca(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return On(_,T)?.delete&&Ca(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===uG?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();xi(_),Ur(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.invalidate?.bind(this,P,_),beforeIntermediate:Ru(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();xi(_),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=Pa(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,Ga,null,null,null,!0)}if(i.ifVersion(_,N,()=>{Su(_,T,null)}),g)return y(_,null,O,N,Ga,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);xi(_);let L=this.#n??i.getEntry(_);this.#s=N?uG:toe;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:Ru(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=Pa(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""}})()),Su(_,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&&Oa()},"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());xi(_);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)&&(Su(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||Oa()):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:Vi(S,ke);if(Be)(Be.type||HA[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"?zie(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=>Vu(xe.attribute)===Vu(ie)),!x){let xe=Vi(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=GA(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 $E;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=Tu(de,ne.attribute,P),Be=Tu(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=Tu(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 ec.SKIP;if(w=Io(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|Ga)||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?ec.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]:Vu(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=zA(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||pG(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>fG&&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||pG(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>fG&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let w=this.#n?.localTime;if(w===BA&&(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&&xi(_);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:Ru(T,Ye.publish?.bind(this,O,_,T)),commit:o((x,L,A)=>{L===void 0&&R&&!g&&Oa(),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");jie(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=sN.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 Za(),!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 Za();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)"),gu=!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?$u({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(hG)):$.filter(hG):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,Yu.getStore())},set(N){return _.set(this,N)},configurable:!0})}}static setComputedAttribute(_,T){let N=Vi(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 Za(),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 Za(),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 Za();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 Za();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 KE=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 mb=Pe.prototype;return h&&Pe.setTTLExpiration(h/1e3),X&&YE(),Pe;function Su(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)&&lG){let j=$.concat(D).map(B=>({key:B,value:K}));O.prefetch(j,mG)}for(let j=0,B=$.length;j<B;j++)O.remove($[j],K)}else D?.length>0&&lG&&O.prefetch(D.map(Y=>({key:Y,value:K})),mG);if(D)for(let Y=0,j=D.length;Y<j;Y++)O.put(D[Y],K)}return N}o(Su,"updateIndices");function xi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>dG)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,roe,0)>dG)throw new Error("Primary key size is too large: "+K.length);return!0}o(xi,"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 Io(K,_,T,N,P){if(Pe.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let x=Pa(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")&&(gG.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>VE&&(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(Io,"loadLocalRecord");function On(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return noe;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|Ga)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(P=!0):P=!0,Zr(!P,"cache-hit",s)),P){let O=yu(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 Co,_.lmdbDb=i,_;_=T}while(!0)}else return new g_}o(Ur,"txnForContext");function Tu(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(Tu,"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 ec.SKIP;for(let $=0;$<O;$++)if(!L?.includes($)&&!P[$](D,U))return ec.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 ec.SKIP;for(let D=0;D<O;D++){let Y=P[D].idFilter;if(Y){if(!Y(w))return ec.SKIP;L||(L=[]),L.push(D)}}return Io(w,T,x,!1,A)});return Array.isArray(K)&&(U=U.filter(w=>w!==ec.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 yu(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|Ga)?O(yu(K,i.getEntry(K),T)):O(w)}))return new Promise(w=>{O=w,x=setTimeout(()=>{i.unlock(K,P)},eoe)});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 KE(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:Ru(B),commit:o((ne,ie)=>{if(ie?.version!==P)return;let xe=Su(K,L,B);if(B){Ye.put?.(A,K,B),ie&&(T.previousResidency=Pe.getResidencyRecord(ie.residencyId));let de,ae=!1,ke,Be=Pa(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(yu,"getFromSource");function Ca(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(Ca,"checkContextPermissions");function Oa(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+Zie<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 Za()}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(Oa,"scheduleCleanup");function tm(){W=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(tm,"addDeleteRemoval");function YE(){(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 Za()}}catch(K){Fe.default.error?.("Error in evicting old records",K)}finally{kc=!1}}},Xie).unref()}o(YE,"runRecordExpirationEviction");function Pa(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(Pa,"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 Ru(K,_){let T=cA(K,i.rootStore);if(T){let N=_;return N?async()=>{await N(),await T}:()=>T}return _}o(Ru,"preCommitBlobsForRecordBefore")}function nN(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 mG(){}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;soe.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 pG(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 hG(e){return e!=null}function Hs(e){try{return JSON.stringify(e)}catch{return e}}function ioe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var ec,Lp,EG,_G,Ol,lt,Dp,Mp,Fe,Pl,Cl,Xg,sN,gG,zie,jie,Qie,Jie,Xie,Zie,lG,eoe,uG,toe,xn,Ga,roe,dG,fG,noe,FMe,soe,Za,ag=se(()=>{q();ec=require("lmdb"),Lp=b(Mn()),EG=b(require("lodash")),_G=b(Tm());qa();Rm();Ol=b(me());jA();lt=b(_e()),Dp=b(Go()),Mp=b(as());we();og();Fe=b(ts());nw();Ua();Pl=require("ordered-binary"),Cl=b(nt());ki();Xg=b(oe());sl();ns();y_();Pp();sN=b(require("node:fs"));rs();F_();gG=b(Q());rN();({sortBy:zie}=EG.default),{validateAttribute:jie}=_G.default,Qie=new Uint8Array(9);Qie[8]=192;Jie=1/0,Xie=6e4,Zie=864e5;Ol.initSync();lG=Ol.get(F.STORAGE_PREFETCHWRITES),eoe=1e4,uG=1,toe=2,xn=1,Ga=8,roe=Buffer.allocUnsafeSlow(8192),dG=1978,fG=100,noe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},FMe=(0,Xg.convertToMS)(Ol.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Zg,"makeTable");o(nN,"attributesAsObject");o(mG,"noop");soe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Jg,"coerceType");o(Qg,"rejectNaN");o(pG,"isDescendantId");Za=o(()=>new Promise(setImmediate),"rest");o(ks,"when");o(hG,"exists");o(Hs,"stringify");o(ioe,"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 TG=se(()=>{o(eS,"euclideanDistance");o(tS,"cosineDistance")});var yG,RG,Ed,ro,hd,ooe,aoe,rS,bG=se(()=>{TG();yG=require("msgpackr"),RG=b(ts()),Ed=b(_e()),ro=(0,RG.loggerWithTag)("HNSW"),hd=Symbol.for("entryPoint"),ooe=Symbol.for("key"),aoe=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=yG.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"?[ooe,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(hd);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);ro.debug?.("setting entry point to",i),this.indexStore.put(hd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),aoe),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);ro.debug?.("setting entry point to",i),this.indexStore.put(hd,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&&ro.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(hd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);ro.debug?.("setting entry point to",l),this.indexStore.put(hd,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&&(ro.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(hd);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 Ed.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Ed.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 Ed.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Ed.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Ed.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){ro.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||ro.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)){ro.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&&ro.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?ro.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 iN,AG=se(()=>{bG();iN={HNSW:rS}});var mt={};Re(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>nS,database:()=>sd,databaseEnvs:()=>Yo,databases:()=>De,dropDatabase:()=>cw,dropTableMeta:()=>moe,getDatabases:()=>at,getDefaultCompression:()=>uS,getTables:()=>loe,onRemovedDB:()=>Hp,onUpdatedTable:()=>Ll,readMetaDb:()=>vp,resetDatabases:()=>yd,table:()=>Ze,tables:()=>Sn});function kp(e,t){let r=cS.OpenDBIObject??cS.default.OpenDBIObject;return new r(e,t)}function loe(){return aS||at(),Sn||{}}function at(){if(aS)return De;aS=!0,Sd=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,gd.getBaseSchemaPath)())){for(let r of(0,ms.readdirSync)((0,gd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ht.join)((0,gd.getBaseSchemaPath)(),r.name),s=(0,Ht.join)((0,gd.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=Sd.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 Sd=null,De}}function yd(){aS=!1;for(let[,e]of Yo)e.needsDeletion=!0;at();for(let[e,t]of Yo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Yo.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=cN,n,s){let i=new oN.default(e,!1);try{let a=Yo.get(e);a?a.needsDeletion=!1:(a=(0,Td.open)(i),Yo.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,Td.open)(i),u.isLegacy=!0):u=G_(a));let d=OG(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(_d)||0)&&(l.putSync(_d,C+1),Nr.info(`Updating next table id (it was out of sync) to ${C+1} for ${p}`)):(g.tableId=C=l.get(_d),C||(C=1),Nr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(_d,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)||CG;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=LG(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=PG(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 OG(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)),Sd&&!Sd.has(e)){let r=new Set;t[lS]=r,Sd.set(e,r)}return t}function PG(e,t,r){return e[t]=r,r}function sd({database:e,table:t}){e||(e=cN),at();let r=OG(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=Yo.get(a);if(!c||c.status==="closed"){let l=new oN.default(a,!1);c=(0,Td.open)(l),Yo.set(a,c)}return c.auditStore||(c.auditStore=G_(c)),c}async function cw(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,Yo.delete(r.path),r.status==="open"&&(await r.close(),await Bp.remove(r.path));if(r||(r=sd({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 aA(r)}function LG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&iN[r.indexed.type]?.useObjectStore,s=new kp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=iN[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=cN);let h=sd({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(),yd(),Ze(e);let te=rg(h.openDB(ce,ue),h);h.databaseName=r,te.tableId=y.get(_d),Nr.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(_d,te.tableId+1),S.tableId=te.tableId,g=PG(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=LG(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=foe(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 foe(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,Td.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,IG.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!==NG.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>uoe?await s:d>doe&&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 moe({table:e,database:t}){let r=sd({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)||CG,n={startingOffset:32};return t&&(n.dictionary=Bp.readFileSync(t)),r&&(n.threshold=r),e&&n}var zt,sS,Td,Ht,ms,gd,oN,Bp,aN,IG,iS,oS,Fp,wG,NG,cS,coe,Nr,cN,lS,CG,nS,Sn,De,_d,Up,xp,aS,Yo,Sd,uoe,doe,we=se(()=>{zt=b(me()),sS=b(Yt()),Td=require("lmdb"),Ht=require("path"),ms=require("fs"),gd=b(Rt());ag();oN=b(jm());q();Bp=b(require("fs-extra")),aN=b(ii()),IG=b(Mn()),iS=b(Go()),oS=b(as()),Fp=require("worker_threads"),wG=b(Q()),NG=b(nt());ki();sl();rs();AG();cS=b(zm()),{forComponent:coe}=wG.default;o(kp,"OpenDBIObject");Nr=coe("storage"),cN="data",lS=Symbol("defined-tables"),CG=((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,aN._assignPackageExport)("databases",De);(0,aN._assignPackageExport)("tables",Sn);_d=Symbol.for("next-table-id"),Up=[],xp=[],Yo=new Map;o(loe,"getTables");o(at,"getDatabases");o(yd,"resetDatabases");o(vp,"readMetaDb");o(OG,"ensureDB");o(PG,"setTable");o(sd,"database");o(cw,"dropDatabase");o(LG,"openIndex");o(Ze,"table");uoe=1e3,doe=10;o(foe,"runIndexing");o(moe,"dropTableMeta");o(Ll,"onUpdatedTable");o(Hp,"onRemovedDB");o(uS,"getDefaultCompression")});var dN={};Re(dN,{loadGQLSchema:()=>Eoe,start:()=>uN,startOnMainThread:()=>hoe});function uN({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):poe.includes(R.type)||(0,MG.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,lN.dirname)(n),R.tableClass):i.set((0,lN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,S,y){return new DG.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 lN,DG,MG,poe,hoe,Eoe,vG=se(()=>{lN=require("path"),DG=require("node:vm");we();MG=b(nt());$a();poe=["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(uN,"start");hoe=uN,Eoe=o(e=>uN({ensureTable:Ze}).handleFile(e,null,null,new zu),"loadGQLSchema")});var mN={};Re(mN,{start:()=>Ioe});function _oe(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 UG(e){if(typeof e!="object"||e===null)throw new no("Request body must be an object.");if(!("query"in e))throw new no("Request body must contain a `query` field.");if(typeof e.query!="string")throw new no("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new no("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new no("Request body `operationName` field must be a string.")}function fN(e){return parseInt(e.value,10)}function BG(e){return parseFloat(e.value)}function FG(e,t,r){let n=r.get(e.name.value);return kG(n)?HG(n,t):{attribute:t,value:n}}function kG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function HG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],kG(n)?HG(n,t):{attribute:t,value:n}))}function goe(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:fN(e.value)};case Ge.Kind.FLOAT:return{attribute:t,value:BG(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:t,value:e.value.value};case Ge.Kind.VARIABLE:return FG(e.value,t,r);case Ge.Kind.OBJECT:return GG(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 GG(e,t,r){return e.fields.flatMap(n=>goe(n,t,r))}function Soe(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:fN(e.value)};case Ge.Kind.FLOAT:return{attribute:e.name.value,value:BG(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Ge.Kind.VARIABLE:return FG(e.value,e.name.value,t);case Ge.Kind.OBJECT:return GG(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 Toe(e,t){return e.flatMap(r=>Soe(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 qG(e,t){return dS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:qG(r.selectionSet,t)}:r.name.value)}async function yoe(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:qG(e.selectionSet,r),conditions:Toe(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 $G(e){switch(e.kind){case Ge.Kind.NULL:return null;case Ge.Kind.INT:return fN(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]:$G(r.value),...t}),{});case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new $r(`Value type, ${e.kind}, is not supported.`)}}function Roe(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=$G(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 boe(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=Roe(e.variableDefinitions,t),i=await Promise.all(dS(e.selectionSet,r).map(c=>yoe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function xG({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(_oe(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 boe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Aoe(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 UG(r),xG(r,e)}case"POST":{let r=await Do(e.headers.get("content-type"),!0)(e._nodeRequest);return UG(r),xG(r,e)}default:throw new no("Method Not Allowed",405,{Allow:"GET, POST"})}}function Ioe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Aoe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof no)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 no)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,no,VG=se(()=>{Ge=b(require("graphql"));Mo();$a();o(_oe,"assertExecutableDefinitionNode");o(UG,"assertRequestParams");o(fN,"processIntValueNode");o(BG,"processFloatValueNode");o(FG,"processVariableNode");o(kG,"isObject");o(HG,"transformObjectIntoQueryCondition");o(goe,"processObjectFieldNode");o(GG,"processObjectValueNode");o(Soe,"processArgumentNode");o(Toe,"buildConditionsQuery");o(dS,"fillInFragments");o(qG,"buildSelectQuery");o(yoe,"processFieldNode");o($G,"processConstValueNode");o(Roe,"resolveVariables");o(boe,"executeOperation");o(xG,"resolver");$r=class extends Error{static{o(this,"GraphQLQueryingError")}},no=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Aoe,"graphqlQueryingHandler");o(Ioe,"start")});var QG=v((ove,jG)=>{var Rd=require("validate.js"),YG=ft(),bd=(q(),M(z)),{handleHDBError:woe,hdbErrors:Noe}=_e(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:Coe}=Noe,pN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Ooe={STRUCTURE_USER:"structure_user"},KG=Object.values(bd.ROLE_TYPES_ENUM),Poe="attribute_permissions",Loe="attribute_name",{PERMS_CRUD_ENUM:Ad}=bd,Doe=[Poe,...Object.values(Ad)],WG=[Ad.READ,Ad.INSERT,Ad.UPDATE],Moe=[Loe,...WG];function voe(e){let t=pN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,zG(e,t)}o(voe,"addRoleValidation");function Uoe(e){let t=pN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,zG(e,t)}o(Uoe,"alterRoleValidation");function xoe(e){let t=pN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,YG.validateObject(e,t)}o(xoe,"dropRoleValidation");var Boe=["operation","role","id","permission","hdb_user","access"];function zG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Boe.includes(n[a])||s.push(n[a]);s.length>0&&hr(sr.INVALID_ROLE_JSON_KEYS(s),r);let i=YG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{hr(a,r)}),e.permission){let a=Foe(e);a&&hr(a,r),KG.forEach(c=>{e.permission[c]&&!Rd.isBoolean(e.permission[c])&&hr(sr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(KG.indexOf(a)<0){if(a===Ooe.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]||hr(sr.SCHEMA_NOT_FOUND(f),r)}continue}hr(sr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){hr(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]){hr(sr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Doe.includes(d)||hr(sr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(Ad).forEach(d=>{Rd.isDefined(u[d])?Rd.isBoolean(u[d])||hr(sr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):hr(sr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){hr(sr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){hr(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=>{!Moe.includes(E)&&E!==Ad.DELETE&&hr(sr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!Rd.isDefined(p.attribute_name)){hr(sr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){hr(sr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}WG.forEach(E=>{Rd.isDefined(p[E])?Rd.isBoolean(p[E])||hr(sr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):hr(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}`;hr(sr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return koe(r)}o(zG,"customValidate");jG.exports={addRoleValidation:voe,alterRoleValidation:Uoe,dropRoleValidation:xoe};function Foe(e){let{operation:t,permission:r}=e;if(t===bd.OPERATIONS_ENUM.ADD_ROLE||t===bd.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?bd.ROLE_TYPES_ENUM.SUPER_USER:bd.ROLE_TYPES_ENUM.CLUSTER_USER;return sr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Foe,"validateNoSUPerms");function koe(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 woe(new Error,n,Coe.BAD_REQUEST)}else return null}o(koe,"generateRolePermResponse");function hr(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(hr,"addPermError")});var qp=v((lve,eq)=>{"use strict";var JG=Gn(),XG=_n(),Hoe=bl(),EN=QG(),_N=Go(),cve=require("uuid").v4,Goe=require("util"),fS=(q(),M(z)),qoe=oe(),gN=XG.searchByValue,$oe=XG.searchByHash,Voe=Goe.promisify(Hoe.delete),Koe=di(),Yoe=rd(),{hdbErrors:Woe,handleHDBError:Dl}=_e(),{HDB_ERROR_MSGS:ZG,HTTP_STATUS_CODES:Gp}=Woe,{UserEventMsg:SN}=as();eq.exports={addRole:zoe,alterRole:joe,dropRole:Qoe,listRoles:Joe};function hN(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(hN,"scrubRoleDetails");async function zoe(e){let t=EN.addRoleValidation(e);if(t)throw t;e=hN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await gN(r)||[])}catch(i){throw Dl(i)}if(n&&n.length>0)throw Dl(new Error,ZG.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),_N.signalUserChange(new SN(process.pid)),e=hN(e),e}o(zoe,"addRole");async function joe(e){let t=EN.alterRoleValidation(e);if(t)throw t;e=hN(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 _N.signalUserChange(new SN(process.pid)),e}o(joe,"alterRole");async function Qoe(e){let t=EN.dropRoleValidation(e);if(t)throw Dl(new Error,t,Gp.BAD_REQUEST,void 0,void 0,!0);let r=new Yoe(fS.SYSTEM_SCHEMA_NAME,fS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await $oe(r));if(n.length===0)throw Dl(new Error,ZG.ROLE_NOT_FOUND,Gp.NOT_FOUND,void 0,void 0,!0);let s=new Koe(fS.SYSTEM_SCHEMA_NAME,fS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await gN(s)),a=!1;if(qoe.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 Voe(c),_N.signalUserChange(new SN(process.pid)),`${n[0].role} successfully deleted`}o(Qoe,"dropRole");async function Joe(){return gN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(Joe,"listRoles")});var TN={};Re(TN,{start:()=>nq,startOnMainThread:()=>eae});function nq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,tq.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(Xoe.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 Zoe(i)}}}async function Zoe(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,rq.isEqual)(i,e)?void 0:(e.id=r.id,(0,mS.alterRole)(e))}return(0,mS.addRole)(e)}var mS,tq,rq,Xoe,eae,sq=se(()=>{we();mS=b(qp()),tq=require("yaml"),rq=require("lodash"),Xoe=["super_user","cluster_user","structure_user"];o(nq,"start");o(Zoe,"ensureRole");eae=nq});async function pS(e){let t=(0,aq.pathToFileURL)(e).toString();if(tae)return $p||($p=rae(sae)),(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 rae(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:nae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,oq.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,iq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),$p}function nae(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 sae(){return{Resource:Hr,tables:Sn}}var iq,oq,aq,tae,$p,yN=se(()=>{qa();we();iq=require("fs/promises"),oq=require("path"),aq=require("url"),tae=!1;o(pS,"secureImport");o(rae,"getCompartment");o(nae,"secureOnlyFetch");o(sae,"getGlobalVars")});var RN={};Re(RN,{handleApplication:()=>iae,suppressHandleApplicationWarning:()=>oae});function cq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function iae(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);cq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),lq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function lq(e,t,r){for(let n in t){let s=t[n],i=(0,hS.join)(r,n);cq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&lq(e,s,i)}}var hS,oae,uq=se(()=>{yN();hS=require("path");o(cq,"isResource");o(iae,"handleApplication");o(lq,"recurseForResources");oae=!0});var AN={};Re(AN,{start:()=>aae});function aae({resources:e}){e.set("login",bN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var bN,dq=se(()=>{qa();o(aae,"start");bN=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 _q(e){let t={openapi:cae,info:{title:"HarperDB HTTP REST interface",version:hq.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 wN(ES[c.type],c.type):c.properties?(i[c.name]=new gq(c.type),n(c)):c.elements?.properties&&(i[c.name]=new pae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new pq(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 wN(ES[H.type],H.type)}:J==="Any"?f[G]={format:J}:f[G]=new wN(ES[J],J),m.push(new NN(G,"query",f[G]))}let h=Object.keys(f),E=new NN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new NN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new pq(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 lae(a,r,{200:new Id({$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 IN(m,r,{200:new Id({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 uae(m,r,{200:new dae},"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 mq(m,r,"delete all the records that match the provided query",{204:new fq})),k="/"+i+"/{"+d+"}",y&&(t.paths[k]={},t.paths[k].get=new IN([E],r,{200:new Id({$ref:Gs+a})},"retrieve a record by its primary key")),S&&(t.paths[k]||(t.paths[k]={}),t.paths[k].put=new fae([E],r,a,{200:new Id({$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 mae([E],r,a,{200:new Id({$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 mq([E],r,"delete a record with the given primary key",{204:new fq})),y&&g.schema.enum.length>0&&(k="/"+i+"/{"+d+"}.{property}",t.paths[k]={},t.paths[k].get=new IN([E,g],r,{200:new Id({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 lae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Gs+e}}}},this.security=t,this.responses=r}function IN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function uae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function dae(){this.description=Eq,this.headers={},this.content={}}function Id(e,t){this.description=Eq,this.content={"application/json":{schema:e}},this.headers=t}function fq(){this.description="successfully processed request, no content returned to client"}function fae(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 mae(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 mq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function pq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function wN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function gq(e){this.$ref=`#/components/schemas/${e}`}function pae(e){this.type="array",this.items=new gq(e)}function NN(e,t,r){this.name=e,this.in=t,this.schema=r}var hq,cae,ES,Gs,Eq,Sq=se(()=>{hq=b(Ct()),cae="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/",Eq="successful operation";o(_q,"generateJsonApi");o(lae,"Post");o(IN,"Get");o(uae,"Options");o(dae,"ResponseOptions200");o(Id,"Response200");o(fq,"Response204");o(fae,"Put");o(mae,"Patch");o(mq,"Delete");o(pq,"ResourceSchema");o(wN,"Type");o(gq,"Ref");o(pae,"ArrayRef");o(NN,"Parameter")});var yq={};Re(yq,{Request:()=>tc,createReuseportFd:()=>_S});var Tq,tc,CN,ON,_S,Vp=se(()=>{Tq=require("os"),tc=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 ON(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 CN(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)}},CN=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)}},ON=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,Tq.platform)()!="win32"&&(_S=require("node-unix-socket").createReuseportFd)});var SS={};Re(SS,{parseHeaderValue:()=>LN,start:()=>_ae});async function Eae(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!==Rq){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=LN(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=LN(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=Do(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new wd.ClientError(g,400)}if(e.authorize=!0,a===Rq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return _q(gS);throw new wd.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 wd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new wd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,PN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=iG(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)){hae[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),PN.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:Iq(a),e,c),c}}function _ae(e){PN=e,e.includeExpensiveRecordCountEstimates&&(tc.prototype.includeExpensiveRecordCountEstimates=!0),!bq&&(bq=!0,gS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Eae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Kp++;let s=new es;Aq||(Aq=!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=Do(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 Lo(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(gae[l.statusCode]||1011,Iq(l))}t.close()},e))}function LN(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,wd,Iq,rn,hae,PN,Rq,bq,gS,Aq,Kp,gae,wq=se(()=>{Mo();ns();Ei=b(Q()),wd=b(_e());og();Ou();Ua();Pp();Sq();Vp();cg();({errorToString:Iq}=Ei),rn=new Uint8Array(8),hae=new Float64Array(rn.buffer,0,1),PN={},Rq="openapi";o(Eae,"http");Kp=0;o(_ae,"start");gae={401:3e3,403:3003};o(LN,"parseHeaderValue")});var DN=v((Uve,Cq)=>{var{recordAction:TS,recordActionBinary:Nq}=(ns(),M(J_)),Sae=require("fastify-plugin"),Tae=200;Cq.exports=Sae(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),Nq(s.raw.statusCode<400,"success",u,f,d),Nq(1,"response_"+s.raw.statusCode,u,f,d);let m=Tae;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 Pq=v((xve,Oq)=>{var yae=ft(),Rae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Oq.exports=function(e){return yae.validateObject(e,Rae)}});var yS=v((Bve,Lq)=>{"use strict";var bae=(q(),M(z)).OPERATIONS_ENUM,MN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=bae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Lq.exports=MN});var zp={};Re(zp,{createTokens:()=>xN,getJWTRSAKeys:()=>wS,refreshOperationToken:()=>BN,validateOperationToken:()=>FN,validateRefreshToken:()=>NS});async function wS(){if(RS)return RS;try{let e=Yp.default.join(Wp.default.getHdbBasePath(),bb),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(Cd.NO_ENCRYPTION_KEYS,Nd.INTERNAL_SERVER_ERROR)}}async function xN(e){let t=(0,vN.validateBySchema)(e,so.default.object({username:so.default.string().optional(),password:so.default.string().optional(),role:so.default.string().optional(),expires_in:so.default.alternatives(so.default.string(),so.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,UN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw IS.default.error(f),new _i.ClientError(Cd.INVALID_CREDENTIALS,Nd.UNAUTHORIZED)}if(!r)throw new _i.ClientError(Cd.INVALID_CREDENTIALS,Nd.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 Od.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??xq,algorithm:AS,subject:Pd.OPERATION}),l=await Od.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Aae,algorithm:AS,subject:Pd.REFRESH}),u=Tw(l,Gr.SHA256);if((await(0,Dq.update)(new Mq.default(im,Au.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new _i.ClientError(Cd.REFRESH_TOKEN_SAVE_FAILED,Nd.INTERNAL_SERVER_ERROR);return vq.default.signalUserChange(new Uq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function BN(e){let t=(0,vN.validateBySchema)(e,so.default.object({refresh_token:so.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 Od.default.decode(r);return{operation_token:await Od.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:xq,algorithm:AS,subject:Pd.OPERATION})}}async function FN(e){return Bq(e,Pd.OPERATION)}async function NS(e){return Bq(e,Pd.REFRESH)}async function Bq(e,t){try{let r=await wS(),n=await Od.default.verify(e,r.publicKey,{algorithms:AS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,UN.findAndValidateUser)(n.username,void 0,!1);if(t===Pd.REFRESH&&!yw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw IS.default.warn(r),r?.name==="TokenExpiredError"?new _i.ClientError(Cd.TOKEN_EXPIRED,Nd.FORBIDDEN):new _i.ClientError(Cd.INVALID_TOKEN,Nd.UNAUTHORIZED)}}var Od,bS,Yp,so,vN,_i,IS,UN,Dq,Mq,vq,Uq,Wp,Nd,Cd,xq,Aae,AS,Pd,RS,Ld=se(()=>{Od=b(require("jsonwebtoken")),bS=b(require("fs-extra")),Yp=b(require("node:path")),so=b(require("joi")),vN=b(ft());q();_i=b(_e()),IS=b(Q());bw();UN=b($n()),Dq=b(Gn()),Mq=b(yS()),vq=b(Go()),Uq=b(as()),Wp=b(me()),{HTTP_STATUS_CODES:Nd,AUTHENTICATION_ERROR_MSGS:Cd}=_i.hdbErrors;Wp.default.initSync();xq=Wp.default.get(F.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Aae=Wp.default.get(F.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",AS="RS256",Pd={OPERATION:"operation",REFRESH:"refresh"};o(wS,"getJWTRSAKeys");o(xN,"createTokens");o(BN,"refreshOperationToken");o(FN,"validateOperationToken");o(NS,"validateRefreshToken");o(Bq,"validateToken")});var kN=v((qve,Hq)=>{"use strict";var Iae=Pq(),Dd=require("passport"),wae=require("passport-local").Strategy,Nae=require("passport-http").BasicStrategy,Cae=require("util"),Oae=$n(),kq=Cae.callbackify(Oae.findAndValidateUser),Gve=zr(),Pae=(q(),M(z)),Fq=(Ld(),M(zp));Dd.use(new wae(function(e,t,r){kq(e,t,r)}));Dd.use(new Nae(function(e,t,r){kq(e,t,r)}));Dd.serializeUser(function(e,t){t(null,e)});Dd.deserializeUser(function(e,t){t(null,e)});function Lae(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":Dd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Pae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Fq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):Fq.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Dd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(Lae,"authorize");function Dae(e,t){let r=Iae(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(Dae,"checkPermissions");Hq.exports={authorize:Lae,checkPermissions:Dae}});var KN=v((Yve,Vq)=>{var LS=require("clone"),DS=ft(),Mae=oe(),OS=(q(),M(z)),Vve=Q(),HN=require("fs"),qN=require("joi"),{string:PS}=qN.types(),{hdbErrors:vae,handleHDBError:CS}=_e(),{HDB_ERROR_MSGS:Kve,HTTP_STATUS_CODES:GN}=vae,{commonValidators:Md}=Yi(),Gq=" is required",Uae=["insert","update","upsert"],$N={database:{presence:!1,format:Md.schema_format,length:Md.schema_length},schema:{presence:!1,format:Md.schema_format,length:Md.schema_length},table:{presence:!0,format:Md.schema_format,length:Md.schema_length},action:{inclusion:{within:Uae,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},xae={schema:PS.required(),table:PS.required(),action:PS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Bae,AWS_SECRET:Fae,AWS_BUCKET:kae,AWS_FILE_KEY:Hae,REGION:Gae}=OS.S3_BUCKET_AUTH_KEYS,qae={s3:{presence:!0},[`s3.${Bae}`]:{presence:!0,type:"String"},[`s3.${Fae}`]:{presence:!0,type:"String"},[`s3.${kae}`]:{presence:!0,type:"String"},[`s3.${Hae}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Gae}`]:{presence:!0,type:"String"}},qq=LS($N);qq.data.presence={message:Gq};var $q=LS($N);$q.file_path.presence={message:Gq};var $ae=Object.assign(LS($N),qae),VN=LS(xae);VN.csv_url=PS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();VN.passthrough_headers=qN.object();function Vae(e){let t=DS.validateObject(e,qq);return MS(e,t)}o(Vae,"dataObject");function Kae(e){let t=DS.validateBySchema(e,qN.object(VN));return MS(e,t)}o(Kae,"urlObject");function Yae(e){let t=DS.validateObject(e,$q);return MS(e,t)}o(Yae,"fileObject");function Wae(e){let t=DS.validateObject(e,$ae);return MS(e,t)}o(Wae,"s3FileObject");function MS(e,t){if(!t){let r=Mae.checkGlobalSchemaTable(e.schema,e.table);if(r)return CS(new Error,r,GN.BAD_REQUEST);if(e.operation===OS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{HN.accessSync(e.file_path,HN.constants.R_OK|HN.constants.F_OK)}catch(n){return n.code===OS.NODE_ERROR_CODES.ENOENT?CS(n,`No such file or directory ${n.path}`,GN.BAD_REQUEST):n.code===OS.NODE_ERROR_CODES.EACCES?CS(n,`Permission denied ${n.path}`,GN.BAD_REQUEST):CS(n)}}return t}o(MS,"postValidateChecks");Vq.exports={dataObject:Vae,urlObject:Kae,fileObject:Yae,s3FileObject:Wae}});var YN=v((zve,Kq)=>{"use strict";var jp=Q(),vS=(q(),M(z));async function zae(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(zae,"callOperationFunctionAsAwait");Kq.exports={callOperationFunctionAsAwait:zae}});var WN=v((Qve,Wq)=>{"use strict";var{S3:jae,GetObjectCommand:Qae}=require("@aws-sdk/client-s3");Wq.exports={getFileStreamFromS3:Jae,getS3AuthObj:Yq};async function Jae(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Yq(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Qae(r))).Body}o(Jae,"getFileStreamFromS3");function Yq(e,t,r){return new jae({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(Yq,"getS3AuthObj")});var jq=v((Xve,zq)=>{"use strict";var zN=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}},jN=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};zq.exports={BulkLoadFileObject:zN,BulkLoadDataObject:jN}});var Jq=v((eUe,Qq)=>{"use strict";var QN=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}};Qq.exports=QN});var Zq=v((rUe,Xq)=>{"use strict";var JN=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};Xq.exports=JN});var ZN=v((sUe,t$)=>{"use strict";var e$=Jq(),Xae=Zq(),{HDB_ERROR_MSGS:Zae}=zr(),XN=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=Zae.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 e$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Xae(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 e$(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}};t$.exports=XN});var Ml=v((aUe,i$)=>{"use strict";var oUe=_n(),Qp=Q(),{validateBySchema:r$}=ft(),Wo=require("joi"),ece=Xi(),US=oe(),{handleHDBError:xS,hdbErrors:tce,ClientError:n$}=_e(),{HDB_ERROR_MSGS:BS,HTTP_STATUS_CODES:eC}=tce,s$=me();s$.initSync();var{getDatabases:tC}=(we(),M(mt)),rce=require("fs-extra"),nce=(q(),M(z));i$.exports={describeAll:sce,describeTable:FS,describeSchema:ice};async function sce(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=tC(),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(sce,"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=r$(e,Wo.object({database:Wo.string(),table:Wo.string().required(),exact_count:Wo.boolean().strict(),include_computed:Wo.boolean().strict()}));if(i)throw new n$(i.message);let c=tC()[r];if(!c)throw xS(new Error,BS.SCHEMA_NOT_FOUND(e.schema),eC.NOT_FOUND);let l=c[n];if(!l)throw xS(new Error,BS.TABLE_NOT_FOUND(e.schema,e.table),eC.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 rce.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")),s$.get(nce.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=ece.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 ice(e){US.transformReq(e);let t=r$(e,Wo.object({database:Wo.string(),exact_count:Wo.boolean().strict(),include_computed:Wo.boolean().strict()}));if(t)throw new n$(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=tC()[n];if(!i)throw xS(new Error,BS.SCHEMA_NOT_FOUND(e.schema),eC.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(ice,"describeSchema")});var u$=v((lUe,l$)=>{"use strict";var oce=Ml(),{hdbErrors:o$}=_e(),{getDatabases:a$}=(we(),M(mt));l$.exports={checkSchemaExists:c$,checkSchemaTableExists:ace,schemaDescribe:oce};async function c$(e){if(!a$()[e])return o$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(c$,"checkSchemaExists");async function ace(e,t){let r=await c$(e);if(r)return r;if(!a$()[e][t])return o$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(ace,"checkSchemaTableExists")});var kS=v((dUe,d$)=>{"use strict";var cce=us();d$.exports={writeTransaction:lce};function lce(e,t,r){return cce.writeTransaction(e,t,r)}o(lce,"writeTransaction")});var oC=v((EUe,b$)=>{"use strict";var{decode:uce}=require("msgpackr"),{isMainThread:mUe,parentPort:pUe,threadId:hUe}=require("worker_threads"),qS=ir(),vd=Pt(),sC=(q(),M(z)),Tn=Q(),nC=me(),dce=(q(),M(z)),{onMessageByType:fce}=nt(),h$=Xi(),{recordAction:f$,recordActionBinary:mce}=(ns(),M(J_)),{publishToStream:pce}=qS,{ConsumerEvents:m$}=require("nats"),hce=_n(),{promisify:Ece}=require("util"),{decodeBlobsWithWrites:_ce}=(rs(),M(v_)),E$=Ece(setTimeout),$S=1e4,VS,GS,gce,Sce,_$,Jp=new Map,Ud=new Map;b$.exports={initialize:g$,ingestConsumer:iC,setSubscription:Tce,setIgnoreOrigin:bce,getDatabaseSubscriptions:Rce,updateConsumer:S$};async function g$(){fce(sC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await S$(n)}),_$=!0,Tn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await qS.getNATSReferences();VS=e,GS=e.info.server_name,gce=t,Sce=r}o(g$,"initialize");async function S$(e){if(e.status==="start"){let{js:t,jsm:r}=await T$(e.node_domain_name);iC(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")),Ud.get(e.node_domain_name)==="failed"&&Ud.set(e.node_domain_name,"close")}}o(S$,"updateConsumer");var KS=new Map;function Tce(e,t,r){let n=KS.get(e);n||KS.set(e,n=new Map),n.set(t,r),_$||g$().then(yce)}o(Tce,"setSubscription");async function yce(){let e=await hce.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+vd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await T$(r),!n))break;let{schema:a,table:c}=i,l=h$.createNatsTableStreamName(a,c);iC(l,n,s,r)}}}o(yce,"accessConsumers");async function T$(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(Ud.get(e)==="close")break;Ud.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 E$(i)}return{js:t,jsm:r}}o(T$,"connectToRemoteJS");function Rce(){return KS}o(Rce,"getDatabaseSubscriptions");var y$;function bce(e){y$=e}o(bce,"setIgnoreOrigin");var R$=100,p$=new Array(R$),HS=0;async function iC(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(Ud.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 E$(d)}let c=!1,l;for(;!c;){if(Jp.get(e+n)==="close"||Ud.get(n)==="close"){Jp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:nC.get(sC.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===m$.ConsumerDeleted&&(await l.close(),c=!0),d.type===m$.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 p$[HS],p$[HS]=Ace(d).catch(f=>{Tn.error(f)}),++HS>=R$&&(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(iC,"ingestConsumer");async function Ace(e){let t;await _ce(()=>{t=uce(e.data)}),f$(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=nC.get(sC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(vd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(vd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(vd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!y$),mce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(vd.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(vd.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:rC(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:rC(a),value:k,expiresAt:p,id:f?.[J],table:u}));for(;l;)I.push({type:rC(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})}nC.get(dce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&pce(e.subject.split(".").slice(0,-1).join("."),h$.createNatsTableStreamName(c,u),e.headers,e.data),await E;let C=Date.now()-g;g&&f$(C,"replication-latency",e.subject,a,"ingest")}catch(a){Tn.error(a)}e.ack()}o(Ace,"messageProcessor");function rC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(rC,"convertOperation")});var ir=v((bUe,H$)=>{"use strict";var Vr=me();Vr.initSync();var Ice=require("fs-extra"),wce=require("semver"),eh=require("path"),{monotonicFactory:Nce}=require("ulidx"),I$=Nce(),Cce=require("util"),w$=require("child_process"),Oce=Cce.promisify(w$.exec),Pce=w$.spawn,nn=Pt(),rt=(q(),M(z)),{packageJson:Lce,PACKAGE_ROOT:Dce}=Ct(),YS=oe(),gi=Q(),WS=Xi(),Mce=kS(),Xp=gt(),{broadcast:vce,onMessageByType:Uce,getWorkerIndex:xce}=nt(),{isMainThread:N$}=require("worker_threads"),{Encoder:Bce,decode:uC}=require("msgpackr"),C$=new Bce,{isEmpty:Bl}=YS,O$=$n(),gUe=48*36e11;N$&&Uce(rt.ITC_EVENT_TYPES.RESTART,()=>{yn=void 0,xl=void 0});var{connect:Fce,StorageType:kce,RetentionPolicy:Hce,AckPolicy:dC,DeliverPolicy:fC,DiscardPolicy:Gce,NatsConnection:SUe,JetStreamManager:TUe,JetStreamClient:yUe,StringCodec:RUe,JSONCodec:qce,createInbox:mC,headers:$ce,ErrorCode:A$}=require("nats"),{recordAction:Vce}=(ns(),M(J_)),{encodeBlobsAsBuffers:Kce}=(rs(),M(v_)),P$=qce(),Yce="clustering",Wce=Lce.engines[nn.NATS_SERVER_NAME],zce=eh.join(Dce,"dependencies"),lC=eh.join(zce,`${process.platform}-${process.arch}`,nn.NATS_BINARY_NAME),aC,cC,Zp,vl,Ul;H$.exports={runCommand:L$,checkNATSServerInstalled:jce,createConnection:pC,getConnection:th,getJetStreamManager:rh,getJetStream:M$,getNATSReferences:io,getServerList:Jce,createLocalStream:hC,listStreams:v$,deleteLocalStream:Xce,getServerConfig:xd,listRemoteStreams:Zce,viewStream:ele,viewStreamIterator:tle,publishToStream:rle,request:ile,reloadNATS:EC,reloadNATSHub:ole,reloadNATSLeaf:ale,extractServerName:sle,requestErrorHandler:cle,createLocalTableStream:F$,createTableStreams:dle,purgeTableStream:k$,purgeSchemaTableStreams:fle,getStreamInfo:mle,updateLocalStreams:hle,closeConnection:Qce,getJsmServerName:zS,addNatsMsgHeader:U$,clearClientCache:D$,updateRemoteConsumer:lle,createConsumer:x$,updateConsumerIterator:ule};async function L$(e,t=void 0){let{stdout:r,stderr:n}=await Oce(e,{cwd:t});if(n)throw new Error(n.replace(`
15
+ `)}}});var qH,Nl,$H,Ja,bp,md,Iie,Vg,jw=se(()=>{qH=b(as()),Nl=b(nt());q();$H=b(ts());ld();$g();Ja=(0,$H.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}`;Ja.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&&(Ja.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(),Ja.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),Ja.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,qH.sendItcEvent)({type:n_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new dd("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 Ja.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof dd?Ja.error?.(`ITC failure during component status collection: ${r.message}`):Ja.warn?.("Failed to collect component status from all threads:",r),Ja.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)}},md=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}},Iie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Vg=new bp(Iie)});var Xa,Kg=se(()=>{Kw();ld();jw();$g();Xa=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 fd(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ie).includes(r))throw new fd(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ie).join(", ")}`);this.statusMap.set(t,new ud(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 md.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 pr,Yg=se(()=>{Kg();pr=new Xa});function KH(e){let t=VH.get(e);return t||(t=new Qw(e),VH.set(e,t)),t}function YH(){pr.reset()}var Qw,VH,to,WH,zH=se(()=>{Yg();ld();Qw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return pr.setStatus(this.componentName,Ie.HEALTHY,t),this}warning(t){return pr.setStatus(this.componentName,Ie.WARNING,t),this}error(t,r){return pr.setStatus(this.componentName,Ie.ERROR,t,r),this}loading(t){return pr.setStatus(this.componentName,Ie.LOADING,t||"Loading..."),this}unknown(t){return pr.setStatus(this.componentName,Ie.UNKNOWN,t),this}get(){return pr.getStatus(this.componentName)}},VH=new Map;o(KH,"statusForComponent");to={loading(e,t){pr.initializeLoading(e,t)},loaded(e,t){pr.markLoaded(e,t)},failed(e,t,r){pr.markFailed(e,t,r)}};o(YH,"reset");WH=Ie});var Ap={};Re(Ap,{AggregationError:()=>Ww,COMPONENT_STATUS_LEVELS:()=>Ie,ComponentStatus:()=>ud,ComponentStatusError:()=>Qa,ComponentStatusOperationError:()=>fd,ComponentStatusRegistry:()=>Xa,CrossThreadCollectionError:()=>zw,CrossThreadStatusCollector:()=>bp,CrossThreadTimeoutError:()=>Yw,ITCError:()=>dd,StatusAggregator:()=>md,componentStatusRegistry:()=>pr,crossThreadCollector:()=>Vg,query:()=>wie});var wie,jH=se(()=>{Yg();Kg();Kw();Kg();jw();Yg();$g();ld();wie={get(e){return pr.getStatus(e)},all(){return pr.getAllStatuses()},byStatus(e){return pr.getComponentsByStatus(e)},summary(){return pr.getStatusSummary()},async allThreads(){return Xa.getAggregatedFromAllThreads(pr)}}});var Jw={};Re(Jw,{STATUS:()=>WH,internal:()=>Ap,lifecycle:()=>to,reset:()=>YH,statusForComponent:()=>KH});var Ip=se(()=>{zH();jH()});var Np=v((aMe,XH)=>{"use strict";var fs=Q(),gn=(q(),M(z)),Nie=v0(),Cie=$n(),{validateEvent:Xw}=as(),wp=us(),Oie=require("process"),{resetDatabases:Pie}=(we(),M(mt)),Lie={[gn.ITC_EVENT_TYPES.SCHEMA]:Die,[gn.ITC_EVENT_TYPES.USER]:JH,[gn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:vie};async function Die(e){let t=Xw(e);if(t){fs.error(t);return}fs.trace("ITC schemaHandler received schema event:",e),await Nie(e.message),await Mie(e.message)}o(Die,"schemaHandler");async function Mie(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=Pie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fs.error(t)}}o(Mie,"syncSchemaMetadata");var QH=[];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=Xw(e);if(t){fs.error(t);return}fs.trace(`ITC userHandler ${gn.HDB_ITC_CLIENT_PREFIX}${Oie.pid} received user event:`,e),await Cie.setUsersWithRolesCache();for(let r of QH)r()}catch(t){fs.error(t)}}o(JH,"userHandler");JH.addListener=function(e){QH.push(e)};async function vie(e){try{let t=Xw(e);if(t){fs.error(t);return}fs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Ip(),M(Jw)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=as(),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(vie,"componentStatusRequestHandler");XH.exports=Lie});var as=v((mMe,eG)=>{"use strict";var lMe=Q(),Zw=oe(),Uie=(q(),M(z)),{ITC_ERRORS:Cp}=zr(),{parentPort:uMe,threadId:xie,isMainThread:Bie,workerData:dMe}=require("worker_threads"),{onMessageFromWorkers:Fie,broadcast:fMe,broadcastWithAcknowledgement:kie}=nt();eG.exports={sendItcEvent:Hie,validateEvent:ZH,SchemaEventMsg:Gie,UserEventMsg:qie};var Wg;Fie(async(e,t)=>{Wg=Wg||Np(),ZH(e),Wg[e.type]&&await Wg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Hie(e){return!Bie&&e.message&&(e.message.originator=xie),kie(e)}o(Hie,"sendItcEvent");function ZH(e){if(typeof e!="object")return Cp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Zw.isEmpty(e.type))return Cp.MISSING_TYPE;if(!e.hasOwnProperty("message")||Zw.isEmpty(e.message))return Cp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Zw.isEmpty(e.message.originator))return Cp.MISSING_ORIGIN;if(Uie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Cp.INVALID_EVENT(e.type)}o(ZH,"validateEvent");function Gie(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(Gie,"SchemaEventMsg");function qie(e){this.originator=e}o(qie,"UserEventMsg")});var Go=v((EMe,sG)=>{"use strict";var tG=(q(),M(z)),hMe=oe(),zg=Q(),rG=E0(),pd,{sendItcEvent:nG}=as();function $ie(e){try{zg.debug("signalSchemaChange called with message:",e),pd=pd||Np();let t=new rG(tG.ITC_EVENT_TYPES.SCHEMA,e);return pd.schema(t),nG(t)}catch(t){zg.error(t)}}o($ie,"signalSchemaChange");function Vie(e){try{zg.trace("signalUserChange called with message:",e),pd=pd||Np();let t=new rG(tG.ITC_EVENT_TYPES.USER,e);return pd.user(t),nG(t)}catch(t){zg.error(t)}}o(Vie,"signalUserChange");sG.exports={signalSchemaChange:$ie,signalUserChange:Vie}});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 iG(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(iG,"mergeHeaders")});function jg(e,t,r=Yie){let n;return function(...i){return n?n.length*eN>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();eN=(eN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var cG,Kie,Yie,oG,Wie,tN,aG,eN,rN=se(()=>{cG=b(ts()),Kie=3e3,Yie=2e4,oG=0,Wie=3e4,tN=3e3,aG=performance.now()+tN,eN=0;o(jg,"throttle");setInterval(()=>{let e=performance.now();e-aG-tN>Kie&&oG+Wie<e&&(cG.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"),oG=e),aG=e},tN).unref()});var SG={};Re(SG,{EVICTED:()=>Ga,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=FA(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,gu=!1,kc,xt,ri,Na=Ol.get(F.REPLICATION_DATABASES);if(Array.isArray(Na)){for(let K of Na)if(K.name===c&&K.replicateTo>=0){ri=K.replicateTo;break}}let $E=i.getRange({start:!1,end:!1}).constructor,Qf=10,VE=6;g&&tm(),Mm(i.env.path,K=>{if(I)return Oa(K)});class Jf extends _l{static{o(this,"Updatable")}getUpdatedTime(){return ka.get(this.getRecord())?.version}getExpiresAt(){return ka.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===Au.ROLE_TABLE_NAME||w.table===Au.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){xi(_);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 Io(_,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&&(!ioe(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,Oa()}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&&xa(_.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(),sN.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(_);xi(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 Io(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?Wu(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||gu&&O){if(T||(T={}),O){let x=P?.length>0&&nN(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=nN(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 Ca(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=nN(O,"insert");for(let L in T)if(!x[L])return!1;return Ca(this.getContext())}else return Ca(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return On(_,T)?.delete&&Ca(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===uG?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();xi(_),Ur(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Ae.invalidate?.bind(this,P,_),beforeIntermediate:Ru(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();xi(_),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=Pa(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,Ga,null,null,null,!0)}if(i.ifVersion(_,N,()=>{Su(_,T,null)}),g)return y(_,null,O,N,Ga,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);xi(_);let L=this.#n??i.getEntry(_);this.#s=N?uG:toe;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:Ru(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=Pa(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""}})()),Su(_,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&&Oa()},"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());xi(_);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)&&(Su(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||Oa()):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:Vi(S,ke);if(Be)(Be.type||HA[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"?zie(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=>Vu(xe.attribute)===Vu(ie)),!x){let xe=Vi(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=GA(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 $E;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=Tu(de,ne.attribute,P),Be=Tu(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=Tu(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 ec.SKIP;if(w=Io(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|Ga)||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?ec.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]:Vu(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=zA(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||pG(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>fG&&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||pG(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>fG&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let w=this.#n?.localTime;if(w===BA&&(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&&xi(_);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:Ru(T,Ye.publish?.bind(this,O,_,T)),commit:o((x,L,A)=>{L===void 0&&R&&!g&&Oa(),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");jie(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=sN.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 Za(),!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 Za();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)"),gu=!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?$u({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(hG)):$.filter(hG):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,Yu.getStore())},set(N){return _.set(this,N)},configurable:!0})}}static setComputedAttribute(_,T){let N=Vi(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 Za(),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 Za(),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 Za();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 Za();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 KE=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 mb=Pe.prototype;return h&&Pe.setTTLExpiration(h/1e3),X&&YE(),Pe;function Su(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)&&lG){let j=$.concat(D).map(B=>({key:B,value:K}));O.prefetch(j,mG)}for(let j=0,B=$.length;j<B;j++)O.remove($[j],K)}else D?.length>0&&lG&&O.prefetch(D.map(Y=>({key:Y,value:K})),mG);if(D)for(let Y=0,j=D.length;Y<j;Y++)O.put(D[Y],K)}return N}o(Su,"updateIndices");function xi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>dG)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,roe,0)>dG)throw new Error("Primary key size is too large: "+K.length);return!0}o(xi,"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 Io(K,_,T,N,P){if(Pe.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let x=Pa(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")&&(gG.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>VE&&(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(Io,"loadLocalRecord");function On(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return noe;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|Ga)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(P=!0):P=!0,Zr(!P,"cache-hit",s)),P){let O=yu(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 Co,_.lmdbDb=i,_;_=T}while(!0)}else return new g_}o(Ur,"txnForContext");function Tu(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(Tu,"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 ec.SKIP;for(let $=0;$<O;$++)if(!L?.includes($)&&!P[$](D,U))return ec.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 ec.SKIP;for(let D=0;D<O;D++){let Y=P[D].idFilter;if(Y){if(!Y(w))return ec.SKIP;L||(L=[]),L.push(D)}}return Io(w,T,x,!1,A)});return Array.isArray(K)&&(U=U.filter(w=>w!==ec.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 yu(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|Ga)?O(yu(K,i.getEntry(K),T)):O(w)}))return new Promise(w=>{O=w,x=setTimeout(()=>{i.unlock(K,P)},eoe)});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 KE(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:Ru(B),commit:o((ne,ie)=>{if(ie?.version!==P)return;let xe=Su(K,L,B);if(B){Ye.put?.(A,K,B),ie&&(T.previousResidency=Pe.getResidencyRecord(ie.residencyId));let de,ae=!1,ke,Be=Pa(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(yu,"getFromSource");function Ca(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(Ca,"checkContextPermissions");function Oa(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+Zie<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 Za()}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(Oa,"scheduleCleanup");function tm(){W=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(tm,"addDeleteRemoval");function YE(){(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 Za()}}catch(K){Fe.default.error?.("Error in evicting old records",K)}finally{kc=!1}}},Xie).unref()}o(YE,"runRecordExpirationEviction");function Pa(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(Pa,"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 Ru(K,_){let T=cA(K,i.rootStore);if(T){let N=_;return N?async()=>{await N(),await T}:()=>T}return _}o(Ru,"preCommitBlobsForRecordBefore")}function nN(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 mG(){}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;soe.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 pG(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 hG(e){return e!=null}function Hs(e){try{return JSON.stringify(e)}catch{return e}}function ioe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var ec,Lp,EG,_G,Ol,lt,Dp,Mp,Fe,Pl,Cl,Xg,sN,gG,zie,jie,Qie,Jie,Xie,Zie,lG,eoe,uG,toe,xn,Ga,roe,dG,fG,noe,FMe,soe,Za,ag=se(()=>{q();ec=require("lmdb"),Lp=b(Mn()),EG=b(require("lodash")),_G=b(Tm());qa();Rm();Ol=b(me());jA();lt=b(_e()),Dp=b(Go()),Mp=b(as());we();og();Fe=b(ts());nw();Ua();Pl=require("ordered-binary"),Cl=b(nt());ki();Xg=b(oe());sl();ns();y_();Pp();sN=b(require("node:fs"));rs();F_();gG=b(Q());rN();({sortBy:zie}=EG.default),{validateAttribute:jie}=_G.default,Qie=new Uint8Array(9);Qie[8]=192;Jie=1/0,Xie=6e4,Zie=864e5;Ol.initSync();lG=Ol.get(F.STORAGE_PREFETCHWRITES),eoe=1e4,uG=1,toe=2,xn=1,Ga=8,roe=Buffer.allocUnsafeSlow(8192),dG=1978,fG=100,noe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},FMe=(0,Xg.convertToMS)(Ol.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Zg,"makeTable");o(nN,"attributesAsObject");o(mG,"noop");soe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Jg,"coerceType");o(Qg,"rejectNaN");o(pG,"isDescendantId");Za=o(()=>new Promise(setImmediate),"rest");o(ks,"when");o(hG,"exists");o(Hs,"stringify");o(ioe,"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 TG=se(()=>{o(eS,"euclideanDistance");o(tS,"cosineDistance")});var yG,RG,Ed,ro,hd,ooe,aoe,rS,bG=se(()=>{TG();yG=require("msgpackr"),RG=b(ts()),Ed=b(_e()),ro=(0,RG.loggerWithTag)("HNSW"),hd=Symbol.for("entryPoint"),ooe=Symbol.for("key"),aoe=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=yG.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"?[ooe,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(hd);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);ro.debug?.("setting entry point to",i),this.indexStore.put(hd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),aoe),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);ro.debug?.("setting entry point to",i),this.indexStore.put(hd,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&&ro.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(hd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);ro.debug?.("setting entry point to",l),this.indexStore.put(hd,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&&(ro.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(hd);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 Ed.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Ed.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 Ed.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Ed.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Ed.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){ro.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||ro.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)){ro.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&&ro.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?ro.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 iN,AG=se(()=>{bG();iN={HNSW:rS}});var mt={};Re(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>nS,database:()=>sd,databaseEnvs:()=>Yo,databases:()=>De,dropDatabase:()=>cw,dropTableMeta:()=>moe,getDatabases:()=>at,getDefaultCompression:()=>uS,getTables:()=>loe,onRemovedDB:()=>Hp,onUpdatedTable:()=>Ll,readMetaDb:()=>vp,resetDatabases:()=>yd,table:()=>Ze,tables:()=>Sn});function kp(e,t){let r=cS.OpenDBIObject??cS.default.OpenDBIObject;return new r(e,t)}function loe(){return aS||at(),Sn||{}}function at(){if(aS)return De;aS=!0,Sd=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,gd.getBaseSchemaPath)())){for(let r of(0,ms.readdirSync)((0,gd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Ht.join)((0,gd.getBaseSchemaPath)(),r.name),s=(0,Ht.join)((0,gd.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=Sd.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 Sd=null,De}}function yd(){aS=!1;for(let[,e]of Yo)e.needsDeletion=!0;at();for(let[e,t]of Yo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Yo.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=cN,n,s){let i=new oN.default(e,!1);try{let a=Yo.get(e);a?a.needsDeletion=!1:(a=(0,Td.open)(i),Yo.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,Td.open)(i),u.isLegacy=!0):u=G_(a));let d=OG(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(_d)||0)&&(l.putSync(_d,C+1),Nr.info(`Updating next table id (it was out of sync) to ${C+1} for ${p}`)):(g.tableId=C=l.get(_d),C||(C=1),Nr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(_d,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)||CG;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=LG(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=PG(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 OG(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)),Sd&&!Sd.has(e)){let r=new Set;t[lS]=r,Sd.set(e,r)}return t}function PG(e,t,r){return e[t]=r,r}function sd({database:e,table:t}){e||(e=cN),at();let r=OG(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=Yo.get(a);if(!c||c.status==="closed"){let l=new oN.default(a,!1);c=(0,Td.open)(l),Yo.set(a,c)}return c.auditStore||(c.auditStore=G_(c)),c}async function cw(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,Yo.delete(r.path),r.status==="open"&&(await r.close(),await Bp.remove(r.path));if(r||(r=sd({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 aA(r)}function LG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&iN[r.indexed.type]?.useObjectStore,s=new kp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=iN[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=cN);let h=sd({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(),yd(),Ze(e);let te=rg(h.openDB(ce,ue),h);h.databaseName=r,te.tableId=y.get(_d),Nr.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(_d,te.tableId+1),S.tableId=te.tableId,g=PG(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=LG(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=foe(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 foe(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,Td.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,IG.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!==NG.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>uoe?await s:d>doe&&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 moe({table:e,database:t}){let r=sd({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)||CG,n={startingOffset:32};return t&&(n.dictionary=Bp.readFileSync(t)),r&&(n.threshold=r),e&&n}var zt,sS,Td,Ht,ms,gd,oN,Bp,aN,IG,iS,oS,Fp,wG,NG,cS,coe,Nr,cN,lS,CG,nS,Sn,De,_d,Up,xp,aS,Yo,Sd,uoe,doe,we=se(()=>{zt=b(me()),sS=b(Yt()),Td=require("lmdb"),Ht=require("path"),ms=require("fs"),gd=b(Rt());ag();oN=b(jm());q();Bp=b(require("fs-extra")),aN=b(ii()),IG=b(Mn()),iS=b(Go()),oS=b(as()),Fp=require("worker_threads"),wG=b(Q()),NG=b(nt());ki();sl();rs();AG();cS=b(zm()),{forComponent:coe}=wG.default;o(kp,"OpenDBIObject");Nr=coe("storage"),cN="data",lS=Symbol("defined-tables"),CG=((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,aN._assignPackageExport)("databases",De);(0,aN._assignPackageExport)("tables",Sn);_d=Symbol.for("next-table-id"),Up=[],xp=[],Yo=new Map;o(loe,"getTables");o(at,"getDatabases");o(yd,"resetDatabases");o(vp,"readMetaDb");o(OG,"ensureDB");o(PG,"setTable");o(sd,"database");o(cw,"dropDatabase");o(LG,"openIndex");o(Ze,"table");uoe=1e3,doe=10;o(foe,"runIndexing");o(moe,"dropTableMeta");o(Ll,"onUpdatedTable");o(Hp,"onRemovedDB");o(uS,"getDefaultCompression")});var dN={};Re(dN,{loadGQLSchema:()=>Eoe,start:()=>uN,startOnMainThread:()=>hoe});function uN({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):poe.includes(R.type)||(0,MG.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,lN.dirname)(n),R.tableClass):i.set((0,lN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,S,y){return new DG.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 lN,DG,MG,poe,hoe,Eoe,vG=se(()=>{lN=require("path"),DG=require("node:vm");we();MG=b(nt());$a();poe=["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(uN,"start");hoe=uN,Eoe=o(e=>uN({ensureTable:Ze}).handleFile(e,null,null,new zu),"loadGQLSchema")});var mN={};Re(mN,{start:()=>Ioe});function _oe(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 UG(e){if(typeof e!="object"||e===null)throw new no("Request body must be an object.");if(!("query"in e))throw new no("Request body must contain a `query` field.");if(typeof e.query!="string")throw new no("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new no("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new no("Request body `operationName` field must be a string.")}function fN(e){return parseInt(e.value,10)}function BG(e){return parseFloat(e.value)}function FG(e,t,r){let n=r.get(e.name.value);return kG(n)?HG(n,t):{attribute:t,value:n}}function kG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function HG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],kG(n)?HG(n,t):{attribute:t,value:n}))}function goe(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:fN(e.value)};case Ge.Kind.FLOAT:return{attribute:t,value:BG(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:t,value:e.value.value};case Ge.Kind.VARIABLE:return FG(e.value,t,r);case Ge.Kind.OBJECT:return GG(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 GG(e,t,r){return e.fields.flatMap(n=>goe(n,t,r))}function Soe(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:fN(e.value)};case Ge.Kind.FLOAT:return{attribute:e.name.value,value:BG(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Ge.Kind.VARIABLE:return FG(e.value,e.name.value,t);case Ge.Kind.OBJECT:return GG(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 Toe(e,t){return e.flatMap(r=>Soe(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 qG(e,t){return dS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:qG(r.selectionSet,t)}:r.name.value)}async function yoe(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:qG(e.selectionSet,r),conditions:Toe(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 $G(e){switch(e.kind){case Ge.Kind.NULL:return null;case Ge.Kind.INT:return fN(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]:$G(r.value),...t}),{});case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new $r(`Value type, ${e.kind}, is not supported.`)}}function Roe(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=$G(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 boe(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=Roe(e.variableDefinitions,t),i=await Promise.all(dS(e.selectionSet,r).map(c=>yoe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function xG({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(_oe(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 boe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Aoe(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 UG(r),xG(r,e)}case"POST":{let r=await Do(e.headers.get("content-type"),!0)(e._nodeRequest);return UG(r),xG(r,e)}default:throw new no("Method Not Allowed",405,{Allow:"GET, POST"})}}function Ioe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Aoe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof no)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 no)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,no,VG=se(()=>{Ge=b(require("graphql"));Mo();$a();o(_oe,"assertExecutableDefinitionNode");o(UG,"assertRequestParams");o(fN,"processIntValueNode");o(BG,"processFloatValueNode");o(FG,"processVariableNode");o(kG,"isObject");o(HG,"transformObjectIntoQueryCondition");o(goe,"processObjectFieldNode");o(GG,"processObjectValueNode");o(Soe,"processArgumentNode");o(Toe,"buildConditionsQuery");o(dS,"fillInFragments");o(qG,"buildSelectQuery");o(yoe,"processFieldNode");o($G,"processConstValueNode");o(Roe,"resolveVariables");o(boe,"executeOperation");o(xG,"resolver");$r=class extends Error{static{o(this,"GraphQLQueryingError")}},no=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Aoe,"graphqlQueryingHandler");o(Ioe,"start")});var QG=v((ove,jG)=>{var Rd=require("validate.js"),YG=ft(),bd=(q(),M(z)),{handleHDBError:woe,hdbErrors:Noe}=_e(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:Coe}=Noe,pN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Ooe={STRUCTURE_USER:"structure_user"},KG=Object.values(bd.ROLE_TYPES_ENUM),Poe="attribute_permissions",Loe="attribute_name",{PERMS_CRUD_ENUM:Ad}=bd,Doe=[Poe,...Object.values(Ad)],WG=[Ad.READ,Ad.INSERT,Ad.UPDATE],Moe=[Loe,...WG];function voe(e){let t=pN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,zG(e,t)}o(voe,"addRoleValidation");function Uoe(e){let t=pN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,zG(e,t)}o(Uoe,"alterRoleValidation");function xoe(e){let t=pN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,YG.validateObject(e,t)}o(xoe,"dropRoleValidation");var Boe=["operation","role","id","permission","hdb_user","access"];function zG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Boe.includes(n[a])||s.push(n[a]);s.length>0&&hr(sr.INVALID_ROLE_JSON_KEYS(s),r);let i=YG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{hr(a,r)}),e.permission){let a=Foe(e);a&&hr(a,r),KG.forEach(c=>{e.permission[c]&&!Rd.isBoolean(e.permission[c])&&hr(sr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(KG.indexOf(a)<0){if(a===Ooe.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]||hr(sr.SCHEMA_NOT_FOUND(f),r)}continue}hr(sr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){hr(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]){hr(sr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Doe.includes(d)||hr(sr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(Ad).forEach(d=>{Rd.isDefined(u[d])?Rd.isBoolean(u[d])||hr(sr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):hr(sr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){hr(sr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){hr(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=>{!Moe.includes(E)&&E!==Ad.DELETE&&hr(sr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!Rd.isDefined(p.attribute_name)){hr(sr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){hr(sr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}WG.forEach(E=>{Rd.isDefined(p[E])?Rd.isBoolean(p[E])||hr(sr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):hr(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}`;hr(sr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return koe(r)}o(zG,"customValidate");jG.exports={addRoleValidation:voe,alterRoleValidation:Uoe,dropRoleValidation:xoe};function Foe(e){let{operation:t,permission:r}=e;if(t===bd.OPERATIONS_ENUM.ADD_ROLE||t===bd.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?bd.ROLE_TYPES_ENUM.SUPER_USER:bd.ROLE_TYPES_ENUM.CLUSTER_USER;return sr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Foe,"validateNoSUPerms");function koe(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 woe(new Error,n,Coe.BAD_REQUEST)}else return null}o(koe,"generateRolePermResponse");function hr(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(hr,"addPermError")});var qp=v((lve,eq)=>{"use strict";var JG=Gn(),XG=_n(),Hoe=bl(),EN=QG(),_N=Go(),cve=require("uuid").v4,Goe=require("util"),fS=(q(),M(z)),qoe=oe(),gN=XG.searchByValue,$oe=XG.searchByHash,Voe=Goe.promisify(Hoe.delete),Koe=di(),Yoe=rd(),{hdbErrors:Woe,handleHDBError:Dl}=_e(),{HDB_ERROR_MSGS:ZG,HTTP_STATUS_CODES:Gp}=Woe,{UserEventMsg:SN}=as();eq.exports={addRole:zoe,alterRole:joe,dropRole:Qoe,listRoles:Joe};function hN(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(hN,"scrubRoleDetails");async function zoe(e){let t=EN.addRoleValidation(e);if(t)throw t;e=hN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await gN(r)||[])}catch(i){throw Dl(i)}if(n&&n.length>0)throw Dl(new Error,ZG.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),_N.signalUserChange(new SN(process.pid)),e=hN(e),e}o(zoe,"addRole");async function joe(e){let t=EN.alterRoleValidation(e);if(t)throw t;e=hN(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 _N.signalUserChange(new SN(process.pid)),e}o(joe,"alterRole");async function Qoe(e){let t=EN.dropRoleValidation(e);if(t)throw Dl(new Error,t,Gp.BAD_REQUEST,void 0,void 0,!0);let r=new Yoe(fS.SYSTEM_SCHEMA_NAME,fS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await $oe(r));if(n.length===0)throw Dl(new Error,ZG.ROLE_NOT_FOUND,Gp.NOT_FOUND,void 0,void 0,!0);let s=new Koe(fS.SYSTEM_SCHEMA_NAME,fS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await gN(s)),a=!1;if(qoe.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 Voe(c),_N.signalUserChange(new SN(process.pid)),`${n[0].role} successfully deleted`}o(Qoe,"dropRole");async function Joe(){return gN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(Joe,"listRoles")});var TN={};Re(TN,{start:()=>nq,startOnMainThread:()=>eae});function nq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,tq.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(Xoe.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 Zoe(i)}}}async function Zoe(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,rq.isEqual)(i,e)?void 0:(e.id=r.id,(0,mS.alterRole)(e))}return(0,mS.addRole)(e)}var mS,tq,rq,Xoe,eae,sq=se(()=>{we();mS=b(qp()),tq=require("yaml"),rq=require("lodash"),Xoe=["super_user","cluster_user","structure_user"];o(nq,"start");o(Zoe,"ensureRole");eae=nq});async function pS(e){let t=(0,aq.pathToFileURL)(e).toString();if(tae)return $p||($p=rae(sae)),(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 rae(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:nae,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,oq.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,iq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),$p}function nae(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 sae(){return{Resource:Hr,tables:Sn}}var iq,oq,aq,tae,$p,yN=se(()=>{qa();we();iq=require("fs/promises"),oq=require("path"),aq=require("url"),tae=!1;o(pS,"secureImport");o(rae,"getCompartment");o(nae,"secureOnlyFetch");o(sae,"getGlobalVars")});var RN={};Re(RN,{handleApplication:()=>iae,suppressHandleApplicationWarning:()=>oae});function cq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function iae(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);cq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),lq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function lq(e,t,r){for(let n in t){let s=t[n],i=(0,hS.join)(r,n);cq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&lq(e,s,i)}}var hS,oae,uq=se(()=>{yN();hS=require("path");o(cq,"isResource");o(iae,"handleApplication");o(lq,"recurseForResources");oae=!0});var AN={};Re(AN,{start:()=>aae});function aae({resources:e}){e.set("login",bN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var bN,dq=se(()=>{qa();o(aae,"start");bN=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 _q(e){let t={openapi:cae,info:{title:"HarperDB HTTP REST interface",version:hq.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 wN(ES[c.type],c.type):c.properties?(i[c.name]=new gq(c.type),n(c)):c.elements?.properties&&(i[c.name]=new pae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new pq(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 wN(ES[H.type],H.type)}:J==="Any"?f[G]={format:J}:f[G]=new wN(ES[J],J),m.push(new NN(G,"query",f[G]))}let h=Object.keys(f),E=new NN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new NN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new pq(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 lae(a,r,{200:new Id({$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 IN(m,r,{200:new Id({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 uae(m,r,{200:new dae},"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 mq(m,r,"delete all the records that match the provided query",{204:new fq})),k="/"+i+"/{"+d+"}",y&&(t.paths[k]={},t.paths[k].get=new IN([E],r,{200:new Id({$ref:Gs+a})},"retrieve a record by its primary key")),S&&(t.paths[k]||(t.paths[k]={}),t.paths[k].put=new fae([E],r,a,{200:new Id({$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 mae([E],r,a,{200:new Id({$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 mq([E],r,"delete a record with the given primary key",{204:new fq})),y&&g.schema.enum.length>0&&(k="/"+i+"/{"+d+"}.{property}",t.paths[k]={},t.paths[k].get=new IN([E,g],r,{200:new Id({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 lae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Gs+e}}}},this.security=t,this.responses=r}function IN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function uae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function dae(){this.description=Eq,this.headers={},this.content={}}function Id(e,t){this.description=Eq,this.content={"application/json":{schema:e}},this.headers=t}function fq(){this.description="successfully processed request, no content returned to client"}function fae(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 mae(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 mq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function pq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function wN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function gq(e){this.$ref=`#/components/schemas/${e}`}function pae(e){this.type="array",this.items=new gq(e)}function NN(e,t,r){this.name=e,this.in=t,this.schema=r}var hq,cae,ES,Gs,Eq,Sq=se(()=>{hq=b(Ct()),cae="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/",Eq="successful operation";o(_q,"generateJsonApi");o(lae,"Post");o(IN,"Get");o(uae,"Options");o(dae,"ResponseOptions200");o(Id,"Response200");o(fq,"Response204");o(fae,"Put");o(mae,"Patch");o(mq,"Delete");o(pq,"ResourceSchema");o(wN,"Type");o(gq,"Ref");o(pae,"ArrayRef");o(NN,"Parameter")});var yq={};Re(yq,{Request:()=>tc,createReuseportFd:()=>_S});var Tq,tc,CN,ON,_S,Vp=se(()=>{Tq=require("os"),tc=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 ON(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 CN(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)}},CN=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)}},ON=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,Tq.platform)()!="win32"&&(_S=require("node-unix-socket").createReuseportFd)});var SS={};Re(SS,{parseHeaderValue:()=>LN,start:()=>_ae});async function Eae(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!==Rq){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=LN(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=LN(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=Do(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new wd.ClientError(g,400)}if(e.authorize=!0,a===Rq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return _q(gS);throw new wd.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 wd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new wd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,PN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=iG(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)){hae[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),PN.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:Iq(a),e,c),c}}function _ae(e){PN=e,e.includeExpensiveRecordCountEstimates&&(tc.prototype.includeExpensiveRecordCountEstimates=!0),!bq&&(bq=!0,gS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Eae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Kp++;let s=new es;Aq||(Aq=!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=Do(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 Lo(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(gae[l.statusCode]||1011,Iq(l))}t.close()},e))}function LN(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,wd,Iq,rn,hae,PN,Rq,bq,gS,Aq,Kp,gae,wq=se(()=>{Mo();ns();Ei=b(Q()),wd=b(_e());og();Ou();Ua();Pp();Sq();Vp();cg();({errorToString:Iq}=Ei),rn=new Uint8Array(8),hae=new Float64Array(rn.buffer,0,1),PN={},Rq="openapi";o(Eae,"http");Kp=0;o(_ae,"start");gae={401:3e3,403:3003};o(LN,"parseHeaderValue")});var DN=v((Uve,Cq)=>{var{recordAction:TS,recordActionBinary:Nq}=(ns(),M(J_)),Sae=require("fastify-plugin"),Tae=200;Cq.exports=Sae(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),Nq(s.raw.statusCode<400,"success",u,f,d),Nq(1,"response_"+s.raw.statusCode,u,f,d);let m=Tae;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 Pq=v((xve,Oq)=>{var yae=ft(),Rae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Oq.exports=function(e){return yae.validateObject(e,Rae)}});var yS=v((Bve,Lq)=>{"use strict";var bae=(q(),M(z)).OPERATIONS_ENUM,MN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=bae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Lq.exports=MN});var zp={};Re(zp,{createTokens:()=>xN,getJWTRSAKeys:()=>wS,refreshOperationToken:()=>BN,validateOperationToken:()=>FN,validateRefreshToken:()=>NS});async function wS(){if(RS)return RS;try{let e=Yp.default.join(Wp.default.getHdbBasePath(),bb),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(Cd.NO_ENCRYPTION_KEYS,Nd.INTERNAL_SERVER_ERROR)}}async function xN(e){let t=(0,vN.validateBySchema)(e,so.default.object({username:so.default.string().optional(),password:so.default.string().optional(),role:so.default.string().optional(),expires_in:so.default.alternatives(so.default.string(),so.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,UN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw IS.default.error(f),new _i.ClientError(Cd.INVALID_CREDENTIALS,Nd.UNAUTHORIZED)}if(!r)throw new _i.ClientError(Cd.INVALID_CREDENTIALS,Nd.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 Od.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??xq,algorithm:AS,subject:Pd.OPERATION}),l=await Od.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Aae,algorithm:AS,subject:Pd.REFRESH}),u=Tw(l,Gr.SHA256);if((await(0,Dq.update)(new Mq.default(im,Au.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new _i.ClientError(Cd.REFRESH_TOKEN_SAVE_FAILED,Nd.INTERNAL_SERVER_ERROR);return vq.default.signalUserChange(new Uq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function BN(e){let t=(0,vN.validateBySchema)(e,so.default.object({refresh_token:so.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 Od.default.decode(r);return{operation_token:await Od.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:xq,algorithm:AS,subject:Pd.OPERATION})}}async function FN(e){return Bq(e,Pd.OPERATION)}async function NS(e){return Bq(e,Pd.REFRESH)}async function Bq(e,t){try{let r=await wS(),n=await Od.default.verify(e,r.publicKey,{algorithms:AS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,UN.findAndValidateUser)(n.username,void 0,!1);if(t===Pd.REFRESH&&!yw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw IS.default.warn(r),r?.name==="TokenExpiredError"?new _i.ClientError(Cd.TOKEN_EXPIRED,Nd.FORBIDDEN):new _i.ClientError(Cd.INVALID_TOKEN,Nd.UNAUTHORIZED)}}var Od,bS,Yp,so,vN,_i,IS,UN,Dq,Mq,vq,Uq,Wp,Nd,Cd,xq,Aae,AS,Pd,RS,Ld=se(()=>{Od=b(require("jsonwebtoken")),bS=b(require("fs-extra")),Yp=b(require("node:path")),so=b(require("joi")),vN=b(ft());q();_i=b(_e()),IS=b(Q());bw();UN=b($n()),Dq=b(Gn()),Mq=b(yS()),vq=b(Go()),Uq=b(as()),Wp=b(me()),{HTTP_STATUS_CODES:Nd,AUTHENTICATION_ERROR_MSGS:Cd}=_i.hdbErrors;Wp.default.initSync();xq=Wp.default.get(F.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Aae=Wp.default.get(F.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",AS="RS256",Pd={OPERATION:"operation",REFRESH:"refresh"};o(wS,"getJWTRSAKeys");o(xN,"createTokens");o(BN,"refreshOperationToken");o(FN,"validateOperationToken");o(NS,"validateRefreshToken");o(Bq,"validateToken")});var kN=v((qve,Hq)=>{"use strict";var Iae=Pq(),Dd=require("passport"),wae=require("passport-local").Strategy,Nae=require("passport-http").BasicStrategy,Cae=require("util"),Oae=$n(),kq=Cae.callbackify(Oae.findAndValidateUser),Gve=zr(),Pae=(q(),M(z)),Fq=(Ld(),M(zp));Dd.use(new wae(function(e,t,r){kq(e,t,r)}));Dd.use(new Nae(function(e,t,r){kq(e,t,r)}));Dd.serializeUser(function(e,t){t(null,e)});Dd.deserializeUser(function(e,t){t(null,e)});function Lae(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":Dd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Pae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Fq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):Fq.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Dd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(Lae,"authorize");function Dae(e,t){let r=Iae(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(Dae,"checkPermissions");Hq.exports={authorize:Lae,checkPermissions:Dae}});var KN=v((Yve,Vq)=>{var LS=require("clone"),DS=ft(),Mae=oe(),OS=(q(),M(z)),Vve=Q(),HN=require("fs"),qN=require("joi"),{string:PS}=qN.types(),{hdbErrors:vae,handleHDBError:CS}=_e(),{HDB_ERROR_MSGS:Kve,HTTP_STATUS_CODES:GN}=vae,{commonValidators:Md}=Yi(),Gq=" is required",Uae=["insert","update","upsert"],$N={database:{presence:!1,format:Md.schema_format,length:Md.schema_length},schema:{presence:!1,format:Md.schema_format,length:Md.schema_length},table:{presence:!0,format:Md.schema_format,length:Md.schema_length},action:{inclusion:{within:Uae,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},xae={schema:PS.required(),table:PS.required(),action:PS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Bae,AWS_SECRET:Fae,AWS_BUCKET:kae,AWS_FILE_KEY:Hae,REGION:Gae}=OS.S3_BUCKET_AUTH_KEYS,qae={s3:{presence:!0},[`s3.${Bae}`]:{presence:!0,type:"String"},[`s3.${Fae}`]:{presence:!0,type:"String"},[`s3.${kae}`]:{presence:!0,type:"String"},[`s3.${Hae}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Gae}`]:{presence:!0,type:"String"}},qq=LS($N);qq.data.presence={message:Gq};var $q=LS($N);$q.file_path.presence={message:Gq};var $ae=Object.assign(LS($N),qae),VN=LS(xae);VN.csv_url=PS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();VN.passthrough_headers=qN.object();function Vae(e){let t=DS.validateObject(e,qq);return MS(e,t)}o(Vae,"dataObject");function Kae(e){let t=DS.validateBySchema(e,qN.object(VN));return MS(e,t)}o(Kae,"urlObject");function Yae(e){let t=DS.validateObject(e,$q);return MS(e,t)}o(Yae,"fileObject");function Wae(e){let t=DS.validateObject(e,$ae);return MS(e,t)}o(Wae,"s3FileObject");function MS(e,t){if(!t){let r=Mae.checkGlobalSchemaTable(e.schema,e.table);if(r)return CS(new Error,r,GN.BAD_REQUEST);if(e.operation===OS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{HN.accessSync(e.file_path,HN.constants.R_OK|HN.constants.F_OK)}catch(n){return n.code===OS.NODE_ERROR_CODES.ENOENT?CS(n,`No such file or directory ${n.path}`,GN.BAD_REQUEST):n.code===OS.NODE_ERROR_CODES.EACCES?CS(n,`Permission denied ${n.path}`,GN.BAD_REQUEST):CS(n)}}return t}o(MS,"postValidateChecks");Vq.exports={dataObject:Vae,urlObject:Kae,fileObject:Yae,s3FileObject:Wae}});var YN=v((zve,Kq)=>{"use strict";var jp=Q(),vS=(q(),M(z));async function zae(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(zae,"callOperationFunctionAsAwait");Kq.exports={callOperationFunctionAsAwait:zae}});var WN=v((Qve,Wq)=>{"use strict";var{S3:jae,GetObjectCommand:Qae}=require("@aws-sdk/client-s3");Wq.exports={getFileStreamFromS3:Jae,getS3AuthObj:Yq};async function Jae(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Yq(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Qae(r))).Body}o(Jae,"getFileStreamFromS3");function Yq(e,t,r){return new jae({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(Yq,"getS3AuthObj")});var jq=v((Xve,zq)=>{"use strict";var zN=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}},jN=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};zq.exports={BulkLoadFileObject:zN,BulkLoadDataObject:jN}});var Jq=v((eUe,Qq)=>{"use strict";var QN=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}};Qq.exports=QN});var Zq=v((rUe,Xq)=>{"use strict";var JN=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};Xq.exports=JN});var ZN=v((sUe,t$)=>{"use strict";var e$=Jq(),Xae=Zq(),{HDB_ERROR_MSGS:Zae}=zr(),XN=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=Zae.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 e$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Xae(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 e$(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}};t$.exports=XN});var Ml=v((aUe,i$)=>{"use strict";var oUe=_n(),Qp=Q(),{validateBySchema:r$}=ft(),Wo=require("joi"),ece=Xi(),US=oe(),{handleHDBError:xS,hdbErrors:tce,ClientError:n$}=_e(),{HDB_ERROR_MSGS:BS,HTTP_STATUS_CODES:eC}=tce,s$=me();s$.initSync();var{getDatabases:tC}=(we(),M(mt)),rce=require("fs-extra"),nce=(q(),M(z));i$.exports={describeAll:sce,describeTable:FS,describeSchema:ice};async function sce(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=tC(),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(sce,"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=r$(e,Wo.object({database:Wo.string(),table:Wo.string().required(),exact_count:Wo.boolean().strict(),include_computed:Wo.boolean().strict()}));if(i)throw new n$(i.message);let c=tC()[r];if(!c)throw xS(new Error,BS.SCHEMA_NOT_FOUND(e.schema),eC.NOT_FOUND);let l=c[n];if(!l)throw xS(new Error,BS.TABLE_NOT_FOUND(e.schema,e.table),eC.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 rce.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")),s$.get(nce.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=ece.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 ice(e){US.transformReq(e);let t=r$(e,Wo.object({database:Wo.string(),exact_count:Wo.boolean().strict(),include_computed:Wo.boolean().strict()}));if(t)throw new n$(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=tC()[n];if(!i)throw xS(new Error,BS.SCHEMA_NOT_FOUND(e.schema),eC.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(ice,"describeSchema")});var u$=v((lUe,l$)=>{"use strict";var oce=Ml(),{hdbErrors:o$}=_e(),{getDatabases:a$}=(we(),M(mt));l$.exports={checkSchemaExists:c$,checkSchemaTableExists:ace,schemaDescribe:oce};async function c$(e){if(!a$()[e])return o$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(c$,"checkSchemaExists");async function ace(e,t){let r=await c$(e);if(r)return r;if(!a$()[e][t])return o$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(ace,"checkSchemaTableExists")});var kS=v((dUe,d$)=>{"use strict";var cce=us();d$.exports={writeTransaction:lce};function lce(e,t,r){return cce.writeTransaction(e,t,r)}o(lce,"writeTransaction")});var oC=v((EUe,b$)=>{"use strict";var{decode:uce}=require("msgpackr"),{isMainThread:mUe,parentPort:pUe,threadId:hUe}=require("worker_threads"),qS=ir(),vd=Pt(),sC=(q(),M(z)),Tn=Q(),nC=me(),dce=(q(),M(z)),{onMessageByType:fce}=nt(),h$=Xi(),{recordAction:f$,recordActionBinary:mce}=(ns(),M(J_)),{publishToStream:pce}=qS,{ConsumerEvents:m$}=require("nats"),hce=_n(),{promisify:Ece}=require("util"),{decodeBlobsWithWrites:_ce}=(rs(),M(v_)),E$=Ece(setTimeout),$S=1e4,VS,GS,gce,Sce,_$,Jp=new Map,Ud=new Map;b$.exports={initialize:g$,ingestConsumer:iC,setSubscription:Tce,setIgnoreOrigin:bce,getDatabaseSubscriptions:Rce,updateConsumer:S$};async function g$(){fce(sC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await S$(n)}),_$=!0,Tn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await qS.getNATSReferences();VS=e,GS=e.info.server_name,gce=t,Sce=r}o(g$,"initialize");async function S$(e){if(e.status==="start"){let{js:t,jsm:r}=await T$(e.node_domain_name);iC(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")),Ud.get(e.node_domain_name)==="failed"&&Ud.set(e.node_domain_name,"close")}}o(S$,"updateConsumer");var KS=new Map;function Tce(e,t,r){let n=KS.get(e);n||KS.set(e,n=new Map),n.set(t,r),_$||g$().then(yce)}o(Tce,"setSubscription");async function yce(){let e=await hce.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+vd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await T$(r),!n))break;let{schema:a,table:c}=i,l=h$.createNatsTableStreamName(a,c);iC(l,n,s,r)}}}o(yce,"accessConsumers");async function T$(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(Ud.get(e)==="close")break;Ud.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 E$(i)}return{js:t,jsm:r}}o(T$,"connectToRemoteJS");function Rce(){return KS}o(Rce,"getDatabaseSubscriptions");var y$;function bce(e){y$=e}o(bce,"setIgnoreOrigin");var R$=100,p$=new Array(R$),HS=0;async function iC(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(Ud.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 E$(d)}let c=!1,l;for(;!c;){if(Jp.get(e+n)==="close"||Ud.get(n)==="close"){Jp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:nC.get(sC.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===m$.ConsumerDeleted&&(await l.close(),c=!0),d.type===m$.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 p$[HS],p$[HS]=Ace(d).catch(f=>{Tn.error(f)}),++HS>=R$&&(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(iC,"ingestConsumer");async function Ace(e){let t;await _ce(()=>{t=uce(e.data)}),f$(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=nC.get(sC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(vd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(vd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(vd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!y$),mce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(vd.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(vd.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:rC(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:rC(a),value:k,expiresAt:p,id:f?.[J],table:u}));for(;l;)I.push({type:rC(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})}nC.get(dce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&pce(e.subject.split(".").slice(0,-1).join("."),h$.createNatsTableStreamName(c,u),e.headers,e.data),await E;let C=Date.now()-g;g&&f$(C,"replication-latency",e.subject,a,"ingest")}catch(a){Tn.error(a)}e.ack()}o(Ace,"messageProcessor");function rC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(rC,"convertOperation")});var ir=v((bUe,H$)=>{"use strict";var Vr=me();Vr.initSync();var Ice=require("fs-extra"),wce=require("semver"),eh=require("path"),{monotonicFactory:Nce}=require("ulidx"),I$=Nce(),Cce=require("util"),w$=require("child_process"),Oce=Cce.promisify(w$.exec),Pce=w$.spawn,nn=Pt(),rt=(q(),M(z)),{packageJson:Lce,PACKAGE_ROOT:Dce}=Ct(),YS=oe(),gi=Q(),WS=Xi(),Mce=kS(),Xp=gt(),{broadcast:vce,onMessageByType:Uce,getWorkerIndex:xce}=nt(),{isMainThread:N$}=require("worker_threads"),{Encoder:Bce,decode:uC}=require("msgpackr"),C$=new Bce,{isEmpty:Bl}=YS,O$=$n(),gUe=48*36e11;N$&&Uce(rt.ITC_EVENT_TYPES.RESTART,()=>{yn=void 0,xl=void 0});var{connect:Fce,StorageType:kce,RetentionPolicy:Hce,AckPolicy:dC,DeliverPolicy:fC,DiscardPolicy:Gce,NatsConnection:SUe,JetStreamManager:TUe,JetStreamClient:yUe,StringCodec:RUe,JSONCodec:qce,createInbox:mC,headers:$ce,ErrorCode:A$}=require("nats"),{recordAction:Vce}=(ns(),M(J_)),{encodeBlobsAsBuffers:Kce}=(rs(),M(v_)),P$=qce(),Yce="clustering",Wce=Lce.engines[nn.NATS_SERVER_NAME],zce=eh.join(Dce,"dependencies"),lC=eh.join(zce,`${process.platform}-${process.arch}`,nn.NATS_BINARY_NAME),aC,cC,Zp,vl,Ul;H$.exports={runCommand:L$,checkNATSServerInstalled:jce,createConnection:pC,getConnection:th,getJetStreamManager:rh,getJetStream:M$,getNATSReferences:io,getServerList:Jce,createLocalStream:hC,listStreams:v$,deleteLocalStream:Xce,getServerConfig:xd,listRemoteStreams:Zce,viewStream:ele,viewStreamIterator:tle,publishToStream:rle,request:ile,reloadNATS:EC,reloadNATSHub:ole,reloadNATSLeaf:ale,extractServerName:sle,requestErrorHandler:cle,createLocalTableStream:F$,createTableStreams:dle,purgeTableStream:k$,purgeSchemaTableStreams:fle,getStreamInfo:mle,updateLocalStreams:hle,closeConnection:Qce,getJsmServerName:zS,addNatsMsgHeader:U$,clearClientCache:D$,updateRemoteConsumer:lle,createConsumer:x$,updateConsumerIterator:ule};async function L$(e,t=void 0){let{stdout:r,stderr:n}=await Oce(e,{cwd:t});if(n)throw new Error(n.replace(`
16
16
  `,""));return r.replace(`
17
17
  `,"")}o(L$,"runCommand");async function jce(){try{await Ice.access(lC)}catch{return!1}let e=await L$(`${lC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return wce.eq(t,Wce)}o(jce,"checkNATSServerInstalled");async function pC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await O$.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 Fce({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&&D$()}),i}o(pC,"createConnection");function D$(){yn=void 0,vl=void 0,Ul=void 0,xl=void 0}o(D$,"clearClientCache");async function Qce(){yn&&(await yn.drain(),yn=void 0,vl=void 0,Ul=void 0,xl=void 0)}o(Qce,"closeConnection");var yn,xl;async function th(){return xl||(xl=pC(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}=xd(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 M$(){if(Ul)return Ul;Bl(yn)&&await th();let{domain:e}=xd(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(M$,"getJetStream");async function io(){let e=yn||await th(),t=vl||await rh(),r=Ul||await M$();return{connection:e,jsm:t,js:r}}o(io,"getNATSReferences");async function Jce(e){let t=Vr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await O$.getClusterUser(),s=await pC(t,r,n),i=mC(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=P$.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 hC(e,t){let{jsm:r}=await io(),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:kce.File,retention:Hce.Limits,subjects:t,discard:Gce.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(hC,"createLocalStream");async function v$(){let{jsm:e}=await io(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(v$,"listStreams");async function Xce(e){let{jsm:t}=await io();await t.streams.delete(e)}o(Xce,"deleteLocalStream");async function Zce(e){let{connection:t}=await io(),r=[],n=mC(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(P$.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(Zce,"listRemoteStreams");async function ele(e,t=void 0,r=void 0){let{jsm:n,js:s}=await io(),i=I$(),a={durable_name:i,ack_policy:dC.Explicit};t&&(a.deliver_policy=fC.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=uC(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(ele,"viewStream");async function*tle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await io(),i=I$(),a={durable_name:i,ack_policy:dC.Explicit};t&&(a.deliver_policy=fC.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=uC(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(tle,"viewStreamIterator");async function rle(e,t,r,n){gi.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=U$(n,r);let{js:s}=await io(),i=await zS(),a=`${e}.${i}`,c=await Kce(()=>n instanceof Uint8Array?n:C$.encode(n));try{gi.trace(`publishToStream publishing to subject: ${a}`),Vce(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 B$(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 hC(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(rle,"publishToStream");function U$(e,t){t===void 0&&(t=$ce());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(U$,"addNatsMsgHeader");function xd(e){e=e.toLowerCase();let t=eh.join(Vr.get(rt.CONFIG_PARAMS.ROOTPATH),Yce);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Bl(cC)&&(cC={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}),cC;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Bl(aC)&&(aC={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}),aC;gi.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(xd,"getServerConfig");async function x$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:dC.Explicit,durable_name:r,deliver_policy:fC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(x$,"createConsumer");async function nle(e,t,r){await e.consumers.delete(t,r)}o(nle,"removeConsumer");function sle(e){return e.split(".")[1]}o(sle,"extractServerName");async function ile(e,t,r=6e4,n=mC()){if(!YS.isObject(t))throw new Error("data param must be an object");let s=C$.encode(t),{connection:i}=await io(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return uC(c.data)}o(ile,"request");function EC(e){return new Promise(async(t,r)=>{let n=Pce(lC,["--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(EC,"reloadNATS");async function ole(){let{pid_file_path:e}=xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await EC(e)}o(ole,"reloadNATSHub");async function ale(){let{pid_file_path:e}=xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await EC(e)}o(ale,"reloadNATSLeaf");function cle(e,t,r){let n;switch(e.code){case A$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case A$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(cle,"requestErrorHandler");async function lle(e,t){let r=t+nn.SERVER_SUFFIX.LEAF,{connection:n}=await io(),{jsm:s}=await _le(r),{schema:i,table:a}=e,c=WS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await B$(async()=>{if(e.subscribe===!0)await x$(s,c,n.info.server_name,l);else try{await nle(s,c,n.info.server_name)}catch(u){gi.trace(u)}})}o(lle,"updateRemoteConsumer");async function ule(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(!N$&&xce()<Vr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=oC();await c(a)}await vce(a),n==="stop"&&await YS.asyncSetTimeout(1e3)}o(ule,"updateConsumerIterator");function B$(e){return Mce.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(B$,"exclusiveLock");async function F$(e,t){let r=WS.createNatsTableStreamName(e,t),n=await zS(),s=ple(e,t,n);await hC(r,[s])}o(F$,"createLocalTableStream");async function dle(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await F$(n,s)}}o(dle,"createTableStreams");async function k$(e,t,r=void 0){if(Vr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=WS.createNatsTableStreamName(e,t),{domain:s}=xd(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(k$,"purgeTableStream");async function fle(e,t){if(Vr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await k$(e,t[r])}o(fle,"purgeSchemaTableStreams");async function mle(e){return(await rh()).streams.info(e)}o(mle,"getStreamInfo");function ple(e,t,r){return`${nn.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(ple,"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 hle(){let e=await rh(),t=await zS(),r=await v$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=Ele(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(hle,"updateLocalStreams");function Ele(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(Ele,"updateStreamLimits");async function _le(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(_le,"connectToRemoteJS")});function _C(e){let t=e.get(jS),r=t?(0,Bd.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,Bd.pack)(r))}return r}function nh(e){return _C(e).remoteNameToId}function q$(e,t){let r=_C(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,Bd.pack)(r)),s}function QS(e,t){let r=_C(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,Bd.pack)(r))}return G$.trace?.("The remote node name map",e,n,s),s}var G$,Bd,jS,gC=se(()=>{G$=b(ts());ps();Bd=require("msgpackr"),jS=Symbol.for("remote-ids");o(_C,"getIdMappingRecord");o(nh,"exportIdMapping");o(q$,"remoteToLocalNodeId");o(QS,"getIdOfRemoteNode")});var z$={};Re(z$,{commitsAwaitingReplication:()=>kd,getHDBNodeTable:()=>jt,getReplicationSharedStatus:()=>Hd,iterateRoutes:()=>oh,shouldReplicateToNode:()=>ih,subscribeToNodeUpdates:()=>Gd});function jt(){return $$||($$=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 Hd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function Gd(e){jt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;W$.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 gle(){Gd(e=>{rc({},(t,r)=>{let n=e.name,s=V$.get(n);if(s||V$.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=Hd(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of kd.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=Fd.default.get(F.REPLICATION_SECUREPORT)??(!Fd.default.get(F.REPLICATION_PORT)&&Fd.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||Fd.default.get(F.REPLICATION_PORT)||Fd.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){K$.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 K$,Y$,Fd,W$,$$,V$,kd,qd=se(()=>{we();ps();Rm();K$=require("worker_threads"),Y$=b(_e()),Fd=b(me());q();W$=b(ts());server.nodes=[];o(jt,"getHDBNodeTable");o(Hd,"getReplicationSharedStatus");o(Gd,"subscribeToNodeUpdates");o(ih,"shouldReplicateToNode");V$=new Map;EU((e,t,r)=>{if(r>server.nodes.length)throw new Y$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);kd||(kd=new Map,gle());let n=kd.get(e);return n||(n=[],kd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(gle,"startSubscriptionToReplications");o(oh,"iterateRoutes")});var Z$={};Re(Z$,{connectedToNode:()=>Fl,disconnectedFromNode:()=>Vd,ensureNode:()=>zo,requestClusterStatus:()=>X$,startOnMainThread:()=>SC});async function SC(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}}}ao.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??nc();if(l===void 0||l.url!==u||l.shard!==e.shard)return zo(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)}Gd(s)});let n;function s(i,a=i?.name){let c=it()&&a===it()||nc()&&i?.url===nc();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 oo){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){oo.get(f).iterator.remove(),oo.delete(f);return}}return}if(c)return;if(!i.url){ut.info(`Node ${i.name} is missing url`);return}let l=oo.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 $d)if(i.url===m.url){$d.delete(f);break}$d.set(i.name,i)}let u=at();if(l||(l=new Map,oo.set(i.url,l)),l.iterator=rc(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=ao.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)},Sle);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"),Vd=o(function(i){try{ut.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from($d.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=oo.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=$d.get(h);u=oo.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=oo.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 oo.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,ao.onMessageByType)("disconnected-from-node",Vd),(0,ao.onMessageByType)("connected-to-node",Fl),(0,ao.onMessageByType)("request-cluster-status",X$)}function X$(e,t){let r=[];for(let[n,s]of $d)try{let i=oo.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=Q$(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 zo(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=Q$(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 ao,XS,ut,j$,ah,J$,Q$,Sle,oo,Vd,Fl,$d,JS,lh=se(()=>{we();ao=b(nt());ps();XS=require("worker_threads");qd();ut=b(Q()),j$=b(require("lodash")),ah=b(me());q();J$=require("crypto"),{cloneDeep:Q$}=j$.default,Sle=200,oo=new Map,$d=new Map,JS=new Map;o(SC,"startOnMainThread");o(X$,"requestClusterStatus");XS.parentPort&&(Vd=o(e=>{XS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Fl=o(e=>{XS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,ao.onMessageByType)("subscribe-to-node",e=>{ch(e)}),(0,ao.onMessageByType)("unsubscribe-from-node",e=>{ZS(e)}));o(zo,"ensureNode")});var Es=v(Gt=>{"use strict";var Er=require("path"),{watch:Tle}=require("chokidar"),Vn=require("fs-extra"),Kd=require("node-forge"),iV=require("net"),{generateKeyPair:TC,X509Certificate:jo,createPrivateKey:oV,randomBytes:yle}=require("node:crypto"),Rle=require("util");TC=Rle.promisify(TC);var Lt=Kd.pki,Ti=require("joi"),{v4:aV}=require("uuid"),{validateBySchema:AC}=ft(),{forComponent:ble}=Q(),hs=me(),qs=(q(),M(z)),{CONFIG_PARAMS:Hl}=qs,yi=Cb(),{ClientError:sc}=_e(),tT=require("node:tls"),{relative:cV,join:Ale}=require("node:path"),{CERTIFICATE_VALUES:eV}=yi,Ile=Vc(),yC=gt(),{table:wle,getDatabases:Nle,databases:eT}=(we(),M(mt)),{getJWTRSAKeys:tV}=(Ld(),M(zp)),Qe=ble("tls").conditional;Gt.generateKeys=NC;Gt.updateConfigCert=EV;Gt.createCsr=vle;Gt.signCertificate=Ule;Gt.setCertTable=Yd;Gt.loadCertificates=mV;Gt.reviewSelfSignedCert=OC;Gt.createTLSSelector=gV;Gt.listCertificates=TV;Gt.addCertificate=Gle;Gt.removeCertificate=$le;Gt.createNatsCerts=Fle;Gt.generateCertsKeys=Ble;Gt.getReplicationCert=dh;Gt.getReplicationCertAuth=Mle;Gt.renewSelfSigned=kle;Gt.hostnamesFromCert=LC;Gt.getKey=Vle;Gt.getHostnamesFromCertificate=Kle;Gt.getPrimaryHostName=PC;Gt.generateSerialNumber=sT;var{urlToNodeName:lV,getThisNodeUrl:Cle,getThisNodeName:nT,clearThisNodeName:Ole}=(ps(),M(Qo)),{readFileSync:Ple,statSync:uV}=require("node:fs"),HUe=me(),{getTicketKeys:Lle,onMessageFromWorkers:Dle}=nt(),{isMainThread:dV}=require("worker_threads"),{TLSSocket:fV,createSecureContext:GUe}=require("node:tls"),IC=3650,uh=["127.0.0.1","localhost","::1"],wC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function sT(){let e=yle(8);return e[0]=e[0]&127|1,e.toString("hex")}o(sT,"generateSerialNumber");Dle(async e=>{e.type===qs.ITC_EVENT_TYPES.RESTART&&(hs.initSync(!0),await OC())});var sn;function oc(){return sn||(sn=Nle().system.hdb_certificate,sn||(sn=wle({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(oc,"getCertTable");async function dh(){let e=gV("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 Mle(){oc();let e=(await dh()).options.cert,r=new jo(e).issuer.match(/CN=(.*)/)?.[1];return sn.get(r)}o(Mle,"getReplicationCertAuth");var rV,ic=new Map;function mV(){if(rV)return;rV=!0;let e=[{configKey:Hl.TLS},{configKey:Hl.OPERATIONSAPI_TLS}];oc();let t=Er.dirname(yC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=yC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&cV(Ale(t,"keys"),a);c&&nV(a,l=>{ic.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&dV){let d;nV(u,f=>{if(eV.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=_V(u),h=new jo(p),E;try{E=PC(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(eV.cert)))return;let g=sn.primaryStore.get(E),R=uV(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(mV,"loadCertificates");function nV(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&dV&&Qe.warn?.(`Reloading ${r}:`,i),n=c,t(_V(i)))}catch(c){Qe.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Vn.existsSync(e)?s(e,uV(e)):Qe.error?.(`${r} file not found:`,e),Tle(e,{persistent:!1}).on("change",s)}o(nV,"loadAndWatch");function RC(){let e=Cle();if(e==null){let t=uh[0];return Qe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return lV(e)}o(RC,"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 vle(){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()},...wC];Qe.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:pV()}];return Qe.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Kd.pki.certificationRequestToPem(n)}o(vle,"createCsr");function pV(){let e=uh.includes(rT())?uh:[...uh,rT()];return e.includes(RC())||e.push(RC()),[{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=>iV.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(pV,"certExtensions");async function Ule(e){let t={},r=Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;oc();for await(let d of sn.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(ic.has(d.private_key_name)){n=ic.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Vn.exists(Er.join(r,d.private_key_name))){n=Vn.readFile(Er.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await bC();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=Kd.pki.createCertificate();c.serialNumber=sT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+IC),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,Kd.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(Ule,"signCertificate");async function xle(e,t){await Yd({name:nT(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Yd({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(xle,"createCertificateTable");async function Yd(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},oc(),await sn.patch(e)}o(Yd,"setCertTable");async function NC(){let e=await TC("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(NC,"generateKeys");async function CC(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()+IC);let i=[{name:"commonName",value:rT()},...wC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(pV()),n.sign(e,Kd.md.sha256.create()),Lt.certificateToPem(n)}o(CC,"generateCertificates");async function bC(){let e=await TV(),t;for(let r of e){if(!r.is_authority)continue;let n=await SV(r.private_key_name);if(r.private_key_name&&n&&new jo(r.certificate).checkPrivateKey(oV(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(bC,"getCertAuthority");async function hV(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()+IC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${hs.get(Hl.REPLICATION_HOSTNAME)??lV(hs.get(Hl.REPLICATION_URL))??aV().split("-")[0]}`},...wC];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,Kd.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 Vn.writeFile(c,Lt.privateKeyToPem(e)),n}o(hV,"generateCertAuthority");async function Ble(){let{privateKey:e,publicKey:t}=await NC(),r=await hV(e,t),n=await CC(e,t,r);await xle(n,r),EV()}o(Ble,"generateCertsKeys");async function Fle(){let e=await CC(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 Vn.exists(r)||await Vn.writeFile(r,e);let n=Er.join(t,yi.NATS_CA_PEM_NAME);await Vn.exists(n)||await Vn.writeFile(n,yi.CERTIFICATE_VALUES.cert)}o(Fle,"createNatsCerts");async function kle(){oc();for await(let e of sn.search([{attribute:"is_self_signed",value:!0}]))await sn.delete(e.name);await OC()}o(kle,"renewSelfSigned");async function OC(){Ole(),await mV(),oc();let e=await bC();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(Vn.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=cV(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 NC(),Vn.existsSync(Er.join(a,yi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${aV().split("-")[0]}.pem`),await Vn.writeFile(Er.join(a,c),Lt.privateKeyToPem(s)));let l=await hV(s,Lt.setRsaPublicKey(s.n,s.e),!1);await Yd({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 bC();let n=Lt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await CC(Lt.privateKeyFromPem(e.private_key),s,n);await Yd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(OC,"reviewSelfSignedCert");function EV(){let e=Ile(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),yC.updateConfigValue(void 0,void 0,a,!1,!0)}o(EV,"updateConfigCert");function _V(e){return e.startsWith("-----BEGIN")?e:Ple(e,"utf8")}o(_V,"readPEM");var sV=tT.createSecureContext;tT.createSecureContext=function(e){if(!e.cert||!e.key)return sV(e);let t={...e};delete t.key,delete t.cert;let r=sV(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Hle=fV.prototype._init;fV.prototype._init=function(e,t){Hle.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 gV(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 SV(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:Lle(),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??LC(g);Array.isArray(S)||(S=[S]);for(let I of S)I===RC()&&(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)),iV.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(gV,"createTLSSelector");async function SV(e){let t=ic.get(e);return!t&&e?await Vn.readFile(Er.join(hs.get(Hl.ROOTPATH),qs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(SV,"getPrivateKeyByName");async function TV(){oc();let e=[];for await(let t of sn.search([]))e.push(t);return e}o(TV,"listCertificates");async function Gle(e){let t=AC(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 sc(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 ic)!s&&!c&&a.checkPrivateKey(oV(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new sc("A suitable private key was not found for this certificate");let d;if(!r){try{d=PC(a)}catch(p){Qe.error?.(p)}if(d==null)throw new sc("Error extracting certificate host name, please provide a name parameter")}let f=qle(r??d);s&&!c&&!l&&(await Vn.writeFile(Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME,f+".pem"),s),ic.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 Yd(m),"Successfully added certificate: "+f}o(Gle,"addCertificate");function qle(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(qle,"sanitizeName");async function $le(e){let t=AC(e,Ti.object({name:Ti.string().required()}));if(t)throw new sc(t.message);let{name:r}=e;oc();let n=await sn.get(r);if(!n)throw new sc(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 Vn.remove(Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME,s)))}return await sn.delete(r),"Successfully removed "+r}o($le,"removeCertificate");function PC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||LC(e)[0]}o(PC,"getPrimaryHostName");function LC(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(LC,"hostnamesFromCert");async function Vle(e){if(e.bypass_auth!==!0)throw new sc("Unauthorized","401");let t=AC(e,Ti.object({name:Ti.string().required()}));if(t)throw new sc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await tV()).privateKey;if(r===".jwtPublic")return(await tV()).publicKey;if(ic.get(r))return ic.get(e.name);throw new sc("Key not found")}o(Vle,"getKey");function Kle(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(Kle,"getHostnamesFromCertificate")});var KV={};Re(KV,{BACK_PRESSURE_RATIO_POSITION:()=>qV,CONFIRMATION_STATUS_POSITION:()=>GV,LATENCY_POSITION:()=>dT,NodeReplicationConnection:()=>zd,OPERATION_REQUEST:()=>xC,RECEIVED_TIME_POSITION:()=>FC,RECEIVED_VERSION_POSITION:()=>BC,RECEIVING_STATUS_POSITION:()=>kC,RECEIVING_STATUS_RECEIVING:()=>VV,RECEIVING_STATUS_WAITING:()=>$V,SENDING_TIME_POSITION:()=>fh,createWebSocket:()=>fT,databaseSubscriptions:()=>cc,replicateOverWS:()=>mh,tableUpdateListeners:()=>GC});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(!vC){let l=(0,xV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),vC=u.secureContexts}if(i=vC.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,FV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(uT?.caCount!==Jo.size&&(uT=BV.createSecureContext({...i.options,ca:[...Jo,...i.options.availableCAs.values()]}),uT.caCount=Jo.size),c.secureContext=uT),new MV.WebSocket(e,"harperdb-replication-v1",c)}function mh(e,t,r){let n=t.port||t.securePort,s=Gl.pid%1e3+"-"+vV.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||cc,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=DV.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,PV).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())},PV*2).unref()}o(tr,"resetPingTimer");let Wr=0,vr=0,gu=!1,kc=3e4;function xt(){if(dn?.length>0){let A=performance.now(),U=A-vr;Wr=(Wr*kc+(gu?U:0))/(kc+U),m[qV]=Wr,vr=A}}o(xt,"updateBackPressureRatio"),setInterval(xt,kc).unref();function ri(){if(!(!g||!u))return m||(m=Hd(f,u,g)),m}o(ri,"getSharedStatus"),u&&Hc(u);let Na,$E,Qf=[],VE=[],Jf,Pe=[],KE=[],mb=[],Su=150,xi=25,Os=0,Xf=0,Zf=!1,Io,On,dn,Ur;e.on("message",Tu);async function Tu(A){if(r=await r,!r){le.error?.(s,"No authorization provided"),xr(1008,"Unauthorized");return}em(A),e.off("message",Tu),e.on("message",em)}o(Tu,"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 RV:{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)([Wd])),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,zo(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"&&(Na=rc(t,(de,ae)=>{Pa(ae)&&K(ae)}),e.on("close",()=>{Na?.remove()}))}catch(de){le.warn?.(s,"Error setting database",de),e.send((0,ot.encode)([Wd])),xr(1008,de.message);return}tm()}break}case CV:{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(Pa(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 Wd:xr();break;case xC: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:DC(ae)}]))})}catch(de){e.send((0,ot.encode)([oT,{requestId:B.requestId,error:DC(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 MC: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 bV:Ur=f?q$(B,f):new Map,Jf=Y[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Jf}`);break;case AV:let xe=Ee;mb[xe]=B;break;case NV:ri()[GV]=B,le.trace?.(s,"received and broadcasting committed update",B),ri().buffer.notify();break;case wV: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 UC.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 IV:{let de=B,ae;try{let ke=Y[3],Be=VE[Ee]||(VE[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)([MC,{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,kV.getLastVersion)(),ct&&ct[ku]&Jr&&(wt=Buffer.from(wt),Dm(()=>Be.primaryStore.decoder.decode(pt),WE=>Ca(WE,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=Oa(pt,Be);return Me||(Me=[]),Me.push(wt),wt})}else de();R.delete(Y[1]);break}case yV:{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,cc.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)([Wd])),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)([Wd])),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,WE,zE=o((Ce,Kt)=>{if(Ce.type==="end_txn"){Me.txnTime&&(a[i]!==66&&le.error?.("Invalid encoding of message"),N(9),N(V_),O(WE=Kt),WM()),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 bu=pt[Bt];if(!(bu&&bu.startTime<Kt&&(!bu.endTime||bu.endTime>Kt)))return lT&&le.trace?.(s,"skipping replication update",Ce.recordId,"to:",g,"from:",Bt,"subscribed:",pt),zM();lT&&le.trace?.(s,"sending replication update",Ce.recordId,"to:",g,"from:",Bt,"subscribed:",pt);let pb=Ce.version;Me.txnTime!==pb&&(Me.txnTime&&(lT&&le.trace?.(s,"new txn time, sending queued txn",Me.txnTime),a[i]!==66&&le.error?.("Invalid encoding of message"),WM()),Me.txnTime=pb,i=c,O(pb));let Gc=Ce.residencyId,hb=YE(Gc,Ps),jE;if(hb&&!hb.includes(g)){let Bi=YE(Ce.previousResidencyId,Ps);if(Bi&&!Bi.includes(g)&&(Ce.type==="put"||Ce.type==="patch")||Ps.getResidencyById)return zM();let qc=Ce.recordId;le.trace?.(s,"sending invalidation",qc,g,"from",Bt);let rm=0;Gc&&(rm|=tl),Ce.previousResidencyId&&(rm|=rl);let gb,QE=null;for(let jM in Ps.indices){if(!QE){if(gb=Ce.getValue(Ft,!0),!gb)break;QE={}}QE[jM]=gb[jM]}jE=nl(Ce.version,Br,qc,null,Bt,Ce.user,Ce.type==="put"||Ce.type==="patch"?"invalidate":Ce.type,ni.encode(QE),rm,Gc,Ce.previousResidencyId,Ce.expiresAt)}function zM(){return le.trace?.(s,"skipping audit record",Ce.recordId),G||(G=setTimeout(()=>{G=null,(WE||0)+OV/2<Et&&(lT&&le.trace?.(s,"sending skipped sequence update",Et),e.send((0,ot.encode)([wV,Et])))},OV).unref()),new Promise(setImmediate)}o(zM,"skipAuditRecord");let Eb=ni.typedStructs,_b=ni.structures;if((Eb?.length!=Nt.typed_length||_b?.length!=Nt.structure_length)&&(Nt.typed_length=Eb?.length,Nt.structure_length=_b.length,le.debug?.(s,"send table struct",Nt.typed_length,Nt.structure_length),Nt.sentName||(Nt.sentName=!0),e.send((0,ot.encode)([MC,{typedStructs:Eb,structures:_b,attributes:Ps.attributes,schemaDefined:Ps.schemaDefined},Br,Nt.table.tableName]))),Gc&&!KE[Gc]&&(e.send((0,ot.encode)([AV,hb,Gc])),KE[Gc]=!0),jE)N(jE.length),P(jE);else{let Bi=Ce.encoded;Ce.extendedType&Jr&&Dm(()=>Ce.getValue(Ft),rm=>Ca(rm,Ce.recordId),Ft.rootStore);let qc=Bi[0]===66?8:0;N(Bi.length-qc),P(Bi,qc),le.trace?.("wrote record",Ce.recordId,"length:",Bi.length)}if(e._socket.writableNeedDrain){let Bi=performance.now();return gu=!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(),gu=!1,xt()})})}else return qe>xi?new Promise(Bi=>{Ar=Bi}):new Promise(setImmediate)},"sendAuditRecord"),WM=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 HC.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),Na||(Na=Ll(Kt=>{Kt.databaseName===u&&K(u)}),$E=Hp(Kt=>{Kt===u&&(e.send((0,ot.encode)([Wd])),xr())}),e.on("close",()=>{Na?.remove(),$E?.remove()})),e.send((0,ot.encode)([bV,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),bu=>Ca(bu,Ft.key)),Ft.metadataFlags&-256,Ft.residencyId,null,Ft.expiresAt);await zE({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&&zE({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 zE(Nt,Bt),On.startTime=Bt,Kt=!0}Kt&&zE({type:"end_txn"},Et),ri()[fh]=0,await p0(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[BC]=y,m[FC]=Date.now(),m[kC]=$V,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=mb[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=>Oa(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[BC]=B.version,m[FC]=Date.now(),m[kC]=VV,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>Su&&!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)([NV,C])),le.trace?.(s,"sent confirmation of a commit at",C),C=null},zle)),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"),Io&&Io.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 yu=new Set;async function Ca(A,U){let w=L_(A);if(yu.has(w)){le.debug?.("Blob already being sent",w);return}yu.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:DC(D)},Buffer.alloc(0)]))}finally{yu.delete(w),qe--,qe<xi&&Ar?.()}}o(Ca,"sendBlobs");function Oa(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 UC.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=Uo(()=>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(Oa,"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)([yV,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 YE(A,U){if(!A)return;let w=Pe[A];return w||(w=U.getResidencyRecord(A),Pe[A]=w),w}o(YE,"getResidence");function Pa(A){return!(ac&&ac!="*"&&!ac[A]&&!ac.includes?.(A)&&!ac.some?.(U=>U.name===A))}o(Pa,"checkDatabaseAccess");function Hc(A){if(h=h||d.get(A),!Pa(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 Ru(U,A),!0}o(Hc,"setDatabase");function Ru(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)([RV,A,U,D]))}o(Ru,"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)([CV,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(){Io&&Io.end(),On&&On.emit("close")},getRecord(A){let U=_++;return new Promise((w,D)=>{let $=[IV,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)([xC,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 DV,ot,MV,vV,UV,HC,xV,BV,Gl,FV,UC,kV,HV,Yle,DC,le,yV,RV,bV,Wd,AV,MC,IV,iT,xC,oT,wV,NV,CV,aT,GV,BC,FC,fh,dT,kC,qV,$V,VV,Wle,cT,GC,cc,lT,OV,zle,PV,vC,uT,LV,zd,qC=se(()=>{we();ki();gC();jA();ps();DV=b(me());q();sl();ot=require("msgpackr"),MV=require("ws"),vV=require("worker_threads"),UV=b(Q());lh();HC=require("events"),xV=b(Es()),BV=b(require("node:tls"));qd();Gl=b(require("node:process")),FV=require("node:net");ns();rs();UC=require("node:stream"),kV=require("lmdb"),HV=b(require("minimist")),{forComponent:Yle,errorToString:DC}=UV.default,le=Yle("replication").conditional,yV=129,RV=140,bV=141,Wd=142,AV=130,MC=132,IV=133,iT=134,xC=136,oT=137,wV=143,NV=144,CV=145,aT=146,GV=0,BC=1,FC=2,fh=3,dT=4,kC=5,qV=6,$V=0,VV=1,Wle=(0,HV.default)(Gl.argv),cT=Wle.HDB_LEADER_URL??Gl.env.HDB_LEADER_URL,GC=new Map,cc=new Map,lT=!0,OV=300,zle=2,PV=3e4;o(fT,"createWebSocket");LV=500,zd=class extends HC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=LV;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=LV,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&&Vd({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===WV||e===jle}function Qle(e){return e===zV||e===jV}function $C(e){return e===WV?zV:jV}function Jle(){if(YV)return;YV=!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:$C(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Qle(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=$C(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=$C(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,WV,jle,zV,jV,YV,QV=se(()=>{ql=b(require("pkijs")),hh=require("node:crypto"),WV="1.3.101.112",jle="1.3.101.113",zV="Ed25519",jV="Ed448",YV=!1;o(ph,"isEd25519OrEd448");o(Qle,"isEdDSAAlgorithmName");o($C,"getEdDSAAlgorithmName");o(Jle,"applyEd25519Patch");Jle()});function Xle(){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(VC)),pT}function Zle(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 jd(e,t){ht.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=Zle(t);if(r===!1)return ht.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=rue(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"}):eue(n[0].cert,n[0].issuer,r)}async function eue(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,XV.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;ht.trace?.("OCSP cache key:",i);let c=await Xle().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??Xo.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??Xo.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??Xo.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 tue(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 rue(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,XV,ZV,ht,VC,Xo,pT,ET=se(()=>{QV();hT=require("easy-ocsp"),XV=require("node:crypto"),ZV=b(ts());we();qa();ht=(0,ZV.loggerWithTag)("cert-verification"),VC=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??Xo.timeout,l=await Promise.race([tue(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??Xo.failureMode;if(ht.error?.("OCSP check failed:",l.reason),m==="fail-closed"){let p=a?.errorCacheTtl??Xo.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??Xo.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??Xo.failureMode)==="fail-closed"){let u=a?.errorCacheTtl??Xo.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}}},Xo={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-open"};o(Xle,"getCertificateCacheTable");o(Zle,"getCertificateVerificationConfig");o(jd,"verifyCertificate");o(eue,"verifyOCSP");o(tue,"performOCSPCheck");o(JV,"bufferToPem");o(rue,"extractCertificateChain")});var Qo={};Re(Qo,{clearThisNodeName:()=>due,disableReplication:()=>oue,enabledDatabases:()=>ac,forEachReplicatedDatabase:()=>rc,getThisNodeId:()=>mT,getThisNodeName:()=>it,getThisNodeUrl:()=>nc,hostnameToUrl:()=>TT,lastTimeInAuditStore:()=>sh,monitorNodeCAs:()=>c1,replicateOperation:()=>mue,replicationCertificateAuthorities:()=>Jo,sendOperationToNode:()=>Eh,servers:()=>sue,setReplicator:()=>u1,start:()=>iue,startOnMainThread:()=>SC,subscribeToNode:()=>ch,unsubscribeFromNode:()=>ZS,urlToNodeName:()=>Si});function iue(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);aue(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,o1.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 jd(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(Jo);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()}c1(()=>{for(let s of n)s()})}function c1(e){let t=0;Gd(r=>{r?.ca&&(Jo.add(r.ca),Jo.size!==t&&(t=Jo.size,e?.()))})}function oue(e=!0){a1=e}function aue(e){a1||(at(),ac=e.databases,rc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||cc;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];u1(r,s,e),GC.get(s)?.forEach(i=>i(s))}}))}function u1(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 l1 extends Hr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||cc,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 es,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=lue(h,l1.subscription,e);if(E?.isConnected){let g=Hd(t.auditStore,e,h)[dT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new s1.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:nue++,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 cue(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 zd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function lue(e,t,r){let n=e1.get($l);n||(n=new Map,e1.set($l,n));let s=n.get(r);if(s)return s;let i=jt().primaryStore.get(e);return i?.url&&(s=new zd(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{i1.isMainThread&&It.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=cc.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,cc.set(e.database,t)}let r=cue(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 uue(){if(KC!==void 0)return KC;let e=$s.default.get(F.OPERATIONSAPI_TLS_CERTIFICATE)||$s.default.get(F.TLS_CERTIFICATE);if(e)return KC=new r1.X509Certificate((0,n1.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return $l||($l=$s.default.get("replication_hostname")??Si($s.default.get("replication_url"))??uue()??t1("operationsapi_network_secureport")??t1("operationsapi_network_port")??"127.0.0.1")}function due(){$l=void 0}function t1(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 nc(){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 rc(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):fue(n)&&t(s,n,!1)}o(r,"forDatabase")}function fue(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 mue(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,r1,n1,ST,s1,i1,o1,a1,nue,sue,Jo,ac,gT,e1,KC,$l,ps=se(()=>{we();qa();Ou();qC();Fr();$s=b(me()),It=b(Q()),r1=require("crypto");ET();n1=require("fs");lh();qd();q();gC();ST=b(require("node:tls")),s1=b(_e()),i1=require("worker_threads"),o1=b(Es()),nue=1,sue=[],Jo=$s.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(ST.rootCertificates):new Set;o(iue,"start");o(c1,"monitorNodeCAs");o(oue,"disableReplication");o(aue,"assignReplicationSource");o(u1,"setReplicator");gT=new Map;o(cue,"getSubscriptionConnection");e1=new Map;o(lue,"getRetrievalConnectionByName");o(Eh,"sendOperationToNode");o(ch,"subscribeToNode");o(ZS,"unsubscribeFromNode");o(uue,"getCommonNameFromCert");o(it,"getThisNodeName");o(due,"clearThisNodeName");Object.defineProperty(ve,"hostname",{get(){return it()}});o(t1,"getHostFromListeningPort");o(_T,"getPortFromListeningPort");o(mT,"getThisNodeId");ve.replication={getThisNodeId:mT,exportIdMapping:nh};o(nc,"getThisNodeUrl");o(TT,"hostnameToUrl");o(Si,"urlToNodeName");o(rc,"forEachReplicatedDatabase");o(fue,"hasExplicitlyReplicatedTable");o(sh,"lastTimeInAuditStore");o(mue,"replicateOperation")});var IT=v((Txe,h1)=>{"use strict";var Qd=u$(),{validateBySchema:_h}=ft(),{commonValidators:Jd,schemaRegex:YC}=Yi(),_r=require("joi"),pue=Q(),hue=require("uuid").v4,bT=Go(),Xd=(q(),M(z)),Eue=require("util"),lc=us(),{handleHDBError:Zo,hdbErrors:_ue,ClientError:Vl}=_e(),{HDB_ERROR_MSGS:yT,HTTP_STATUS_CODES:ea}=_ue,{SchemaEventMsg:AT}=as(),d1=ir(),{getDatabases:gue}=(we(),M(mt)),{transformReq:Zd}=oe(),{replicateOperation:f1}=(ps(),M(Qo)),{cleanupOrphans:Sue}=(rs(),M(v_)),RT=_r.string().min(1).max(Jd.schema_length.maximum).pattern(YC).messages({"string.pattern.base":"{:#label} "+Jd.schema_format.message}),Tue=_r.string().min(1).max(Jd.schema_length.maximum).pattern(YC).messages({"string.pattern.base":"{:#label} "+Jd.schema_format.message}).required(),yue=_r.string().min(1).max(Jd.schema_length.maximum).pattern(YC).messages({"string.pattern.base":"{:#label} "+Jd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();h1.exports={createSchema:Rue,createSchemaStructure:m1,createTable:bue,createTableStructure:p1,createAttribute:Cue,dropSchema:Aue,dropTable:Iue,dropAttribute:wue,getBackup:Oue,cleanupOrphanBlobs:Pue};async function Rue(e){let t=await m1(e);return bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema)),t}o(Rue,"createSchema");async function m1(e){let t=_h(e,_r.object({database:RT,schema:RT}));if(t)throw new Vl(t.message);if(Zd(e),!await Qd.checkSchemaExists(e.schema))throw Zo(new Error,yT.SCHEMA_EXISTS_ERR(e.schema),ea.BAD_REQUEST,Xd.LOG_LEVELS.ERROR,yT.SCHEMA_EXISTS_ERR(e.schema),!0);return await lc.createSchema(e),`database '${e.schema}' successfully created`}o(m1,"createSchemaStructure");async function bue(e){return Zd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await p1(e)}o(bue,"createTable");async function p1(e){let t=_h(e,_r.object({database:RT,schema:RT,table:Tue,residence:_r.array().items(_r.string().min(1)).optional(),hash_attribute:yue}));if(t)throw new Vl(t.message);if(!await Qd.checkSchemaTableExists(e.schema,e.table))throw Zo(new Error,yT.TABLE_EXISTS_ERR(e.schema,e.table),ea.BAD_REQUEST,Xd.LOG_LEVELS.ERROR,yT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:hue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await lc.createTable(n,e);else throw Zo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ea.BAD_REQUEST);else await lc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(p1,"createTableStructure");async function Aue(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);Zd(e);let r=await Qd.checkSchemaExists(e.schema);if(r)throw Zo(new Error,r,ea.NOT_FOUND,Xd.LOG_LEVELS.ERROR,r,!0);let n=await Qd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await lc.dropSchema(e),bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema)),await d1.purgeSchemaTableStreams(e.schema,s);let i=await f1(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Aue,"dropSchema");async function Iue(e){let t=_h(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required()}));if(t)throw new Vl(t.message);Zd(e);let r=await Qd.checkSchemaTableExists(e.schema,e.table);if(r)throw Zo(new Error,r,ea.NOT_FOUND,Xd.LOG_LEVELS.ERROR,r,!0);await lc.dropTable(e),await d1.purgeTableStream(e.schema,e.table);let n=await f1(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Iue,"dropTable");async function wue(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);Zd(e);let r=await Qd.checkSchemaTableExists(e.schema,e.table);if(r)throw Zo(new Error,r,ea.NOT_FOUND,Xd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Zo(new Error,"You cannot drop a hash attribute",ea.BAD_REQUEST,void 0,void 0,!0);if(Xd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Zo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ea.BAD_REQUEST,void 0,void 0,!0);try{return await lc.dropAttribute(e),Nue(e),bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw pue.error(`Got an error deleting attribute ${Eue.inspect(e)}.`),n}}o(wue,"dropAttribute");function Nue(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(Nue,"dropAttributeFromGlobal");async function Cue(e){Zd(e);let t=gue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Zo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ea.BAD_REQUEST,void 0,void 0,!0);return await lc.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(Cue,"createAttribute");function Oue(e){return lc.getBackup(e)}o(Oue,"getBackup");function Pue(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 Sue(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(Pue,"cleanupOrphanBlobs")});var _1=v((Rxe,E1)=>{"use strict";var{OPERATIONS_ENUM:Lue}=(q(),M(z)),WC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Lue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};E1.exports=WC});var zC=v((Ixe,R1)=>{"use strict";var Due=us(),Axe=_1(),wT=oe(),NT=(q(),M(z)),Mue=me(),{handleHDBError:g1,hdbErrors:vue}=_e(),{HDB_ERROR_MSGS:S1,HTTP_STATUS_CODES:T1}=vue,Uue=Object.values(NT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),y1="To use this operation audit log must be enabled in harperdb-config.yaml";R1.exports=xue;async function xue(e){if(wT.isEmpty(e.schema))throw new Error(S1.SCHEMA_REQUIRED_ERR);if(wT.isEmpty(e.table))throw new Error(S1.TABLE_REQUIRED_ERR);if(!Mue.get(NT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw g1(new Error,y1,T1.BAD_REQUEST,NT.LOG_LEVELS.ERROR,y1,!0);let t=wT.checkSchemaTableExist(e.schema,e.table);if(t)throw g1(new Error,t,T1.NOT_FOUND,NT.LOG_LEVELS.ERROR,t,!0);if(!wT.isEmpty(e.search_type)&&Uue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Due.readAuditLog(e)}o(xue,"readAuditLog")});var A1=v((Nxe,b1)=>{"use strict";var{OPERATIONS_ENUM:Bue}=(q(),M(z)),jC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Bue.GET_BACKUP,this.schema=t,this.table=r}};b1.exports=jC});var N1=v((Lxe,w1)=>{"use strict";var Fue=us(),Oxe=A1(),QC=oe(),kue=(q(),M(z)),Pxe=me(),{handleHDBError:Hue,hdbErrors:Gue}=_e(),{HDB_ERROR_MSGS:I1,HTTP_STATUS_CODES:que}=Gue;w1.exports=$ue;async function $ue(e){if(QC.isEmpty(e.schema))throw new Error(I1.SCHEMA_REQUIRED_ERR);if(QC.isEmpty(e.table))throw new Error(I1.TABLE_REQUIRED_ERR);let t=QC.checkSchemaTableExist(e.schema,e.table);if(t)throw Hue(new Error,t,que.NOT_FOUND,kue.LOG_LEVELS.ERROR,t,!0);return await Fue.getBackup(readAuditLogObject)}o($ue,"getBackup")});var L1=v((Mxe,P1)=>{"use strict";var Vue=me(),uc=require("joi"),Kue=ft(),C1=require("moment"),Yue=require("fs-extra"),JC=require("path"),Wue=require("lodash"),gh=(q(),M(z)),{LOG_LEVELS:Kl}=(q(),M(z)),zue="YYYY-MM-DD hh:mm:ss",jue=JC.resolve(__dirname,"../logs");P1.exports=function(e){return Kue.validateBySchema(e,Que)};var Que=uc.object({from:uc.custom(O1),until:uc.custom(O1),level:uc.valid(Kl.NOTIFY,Kl.FATAL,Kl.ERROR,Kl.WARN,Kl.INFO,Kl.DEBUG,Kl.TRACE),order:uc.valid("asc","desc"),limit:uc.number().min(1),start:uc.number().min(0),log_name:uc.custom(Jue)});function O1(e,t){if(C1(e,C1.ISO_8601).format(zue)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(O1,"validateDatetime");function Jue(e,t){if(Wue.invert(gh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Vue.get(gh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?gh.LOG_NAMES.HDB:e,i=s===gh.LOG_NAMES.INSTALL?JC.join(jue,gh.LOG_NAMES.INSTALL):JC.join(n,s);return Yue.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Jue,"validateReadLogPath")});var ZC=v((Uxe,M1)=>{"use strict";var CT=(q(),M(z)),Xue=Q(),Zue=me(),ede=L1(),XC=require("path"),D1=require("fs-extra"),{once:tde}=require("events"),{handleHDBError:rde,hdbErrors:nde}=_e(),{PACKAGE_ROOT:sde}=Ct(),{replicateOperation:ide}=(ps(),M(Qo)),ode=XC.join(sde,"logs"),ade=1e3,cde=200;M1.exports=lde;async function lde(e){let t=ede(e);if(t)throw rde(t,t.message,nde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=ide(e),n=Zue.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?XC.join(ode,CT.LOG_NAMES.INSTALL):XC.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?ade: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(D1.statSync(i).size-(E+5)*cde,0));let R=D1.createReadStream(i,{start:g});R.on("error",G=>{Xue.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&&(co(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&&(co(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&&(co(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&&(co(G,p,y),S++,S===E&&R.destroy());break;case a:G.level===c&&S<h?S++:G.level===c&&(co(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&&(co(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&&(co(G,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(co(G,p,y),S++,S===E&&R.destroy())}}o(k,"onLogMessage"),await tde(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")co({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,co(X,p,y)}}return y}o(lde,"readLog");function co(e,t,r){t==="desc"?ude(e,r):t==="asc"?dde(e,r):r.push(e)}o(co,"pushLineToResult");function ude(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(ude,"insertDescending");function dde(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(dde,"insertAscending")});var OT=v((Gxe,B1)=>{"use strict";var eO=require("joi"),{string:ef,boolean:v1,date:fde}=eO.types(),mde=ft(),{validateSchemaExists:Bxe,validateTableExists:Fxe,validateSchemaName:kxe}=Yi(),pde=(q(),M(z)),hde=Pt(),U1=me();U1.initSync();var Hxe=ef.invalid(U1.get(pde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(hde.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),x1={operation:ef.valid("add_node","update_node","set_node_replication"),node_name:ef.optional(),subscriptions:eO.array().items({table:ef.optional(),schema:ef.optional(),database:ef.optional(),subscribe:v1.required(),publish:v1.required().custom(_de),start_time:fde.iso()})};function Ede(e){return mde.validateBySchema(e,eO.object(x1))}o(Ede,"addUpdateNodeValidator");function _de(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(_de,"checkForFalsy");B1.exports={addUpdateNodeValidator:Ede,validationSchema:x1}});var tf=v(($xe,F1)=>{"use strict";var tO=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},rO=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};F1.exports={Node:tO,NodeSubscription:rO}});var H1=v((Kxe,k1)=>{"use strict";var gde=(q(),M(z)).OPERATIONS_ENUM,nO=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=gde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};k1.exports=nO});var Sh=v((Wxe,G1)=>{"use strict";var sO=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},iO=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)}};G1.exports={RemotePayloadObject:sO,RemotePayloadSubscription:iO}});var $1=v((jxe,q1)=>{"use strict";var oO=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}};q1.exports=oO});var K1=v((t0e,V1)=>{"use strict";var Sde=$1(),Jxe=Yt(),Xxe=St(),Tde=Q(),{getSchemaPath:Zxe,getTransactionAuditStorePath:e0e}=Rt(),{getDatabases:yde}=(we(),M(mt));V1.exports=Rde;async function Rde(e){let t=new Sde;try{let r=yde()[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){Tde.warn(`unable to stat table dbi due to ${r}`)}return t}o(Rde,"lmdbGetTableSize")});var W1=v((n0e,Y1)=>{"use strict";var aO=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}};Y1.exports=aO});var yh=v((l0e,J1)=>{"use strict";var bde=require("fs-extra"),Ade=require("path"),Rn=require("systeminformation"),dc=Q(),z1=ir(),i0e=Pt(),rf=(q(),M(z)),Ide=K1(),wde=Ml(),{getThreadInfo:j1}=nt(),Th=me();Th.initSync();var Nde=W1(),{openEnvironment:o0e}=St(),{getSchemaPath:a0e}=Rt(),{database:c0e,databases:cO}=(we(),M(mt)),PT;J1.exports={getHDBProcessInfo:fO,getNetworkInfo:pO,getDiskInfo:mO,getMemoryInfo:dO,getCPUInfo:uO,getTimeInfo:lO,getSystemInformation:hO,systemInformation:Cde,getTableSize:EO,getMetrics:_O};function lO(){return Rn.time()}o(lO,"getTimeInfo");async function uO(){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 dc.error(`error in getCPUInfo: ${e}`),{}}}o(uO,"getCPUInfo");async function dO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Rn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return dc.error(`error in getMemoryInfo: ${e}`),{}}}o(dO,"getMemoryInfo");async function fO(){let e={core:[],clustering:[]};try{let t=await Rn.processes(),r;try{r=Number.parseInt(await bde.readFile(Ade.join(Th.get(rf.CONFIG_PARAMS.ROOTPATH),rf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===rf.NODE_ERROR_CODES.ENOENT)dc.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 dc.error(`error in getHDBProcessInfo: ${t}`),e}}o(fO,"getHDBProcessInfo");async function mO(){let e={};try{if(!Th.get(rf.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 dc.error(`error in getDiskInfo: ${t}`),e}}o(mO,"getDiskInfo");async function pO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Th.get(rf.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 dc.error(`error in getNetworkInfo: ${t}`),e}}o(pO,"getNetworkInfo");async function hO(){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 dc.error(`error in getSystemInformation: ${t}`),e}}o(hO,"getSystemInformation");async function EO(){let e=[],t=await wde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Ide(n));return e}o(EO,"getTableSize");async function _O(){let e={};for(let t in cO){let r=e[t]={},n=r.tables={};for(let s in cO[t])try{let i=cO[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){dc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(_O,"getMetrics");async function Q1(){if(Th.get(rf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await z1.getNATSReferences(),t=await z1.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(Q1,"getNatsStreamInfo");async function Cde(e){let t=new Nde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await hO(),t.time=lO(),t.cpu=await uO(),t.memory=await dO(),t.disk=await mO(),t.network=await pO(),t.harperdb_processes=await fO(),t.table_size=await EO(),t.metrics=await _O(),t.threads=await j1(),t.replication=await Q1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await hO();break;case"time":t.time=lO();break;case"cpu":t.cpu=await uO();break;case"memory":t.memory=await dO();break;case"disk":t.disk=await mO();break;case"network":t.network=await pO();break;case"harperdb_processes":t.harperdb_processes=await fO();break;case"table_size":t.table_size=await EO();break;case"database_metrics":case"metrics":t.metrics=await _O();break;case"threads":t.threads=await j1();break;case"replication":t.replication=await Q1();break;default:break}return t}o(Cde,"systemInformation")});var ta=v((p0e,tK)=>{"use strict";var Ode=Gn(),gO=oe(),Pde=require("util"),Yl=(q(),M(z)),X1=me();X1.initSync();var Lde=kN(),Z1=_n(),{Node:d0e,NodeSubscription:f0e}=tf(),Dde=rd(),Mde=H1(),{RemotePayloadObject:vde,RemotePayloadSubscription:Ude}=Sh(),{handleHDBError:xde,hdbErrors:Bde}=_e(),{HTTP_STATUS_CODES:Fde,HDB_ERROR_MSGS:kde}=Bde,Hde=di(),Gde=yh(),{packageJson:qde}=Ct(),{getDatabases:$de}=(we(),M(mt)),m0e=Pde.promisify(Lde.authorize),Vde=Z1.searchByHash,Kde=Z1.searchByValue;tK.exports={isEmpty:Yde,getNodeRecord:Wde,upsertNodeRecord:zde,buildNodePayloads:jde,checkClusteringEnabled:Qde,getAllNodeRecords:Jde,getSystemInfo:Xde,reverseSubscription:eK};function Yde(e){return e==null}o(Yde,"isEmpty");async function Wde(e){let t=new Dde(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Vde(t)}o(Wde,"getNodeRecord");async function zde(e){let t=new Mde(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Ode.upsert(t)}o(zde,"upsertNodeRecord");function eK(e){if(gO.isEmpty(e.subscribe)||gO.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(eK,"reverseSubscription");function jde(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=gO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=eK(c),p=$de()[l]?.[u],h=new Ude(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new vde(r,t,s,n)}o(jde,"buildNodePayloads");function Qde(){if(!X1.get(Yl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw xde(new Error,kde.CLUSTERING_NOT_ENABLED,Fde.BAD_REQUEST,void 0,void 0,!0)}o(Qde,"checkClusteringEnabled");async function Jde(){let e=new Hde(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Kde(e))}o(Jde,"getAllNodeRecords");async function Xde(){let e=await Gde.getSystemInformation();return{hdb_version:qde.version,node_version:e.node_version,platform:e.platform}}o(Xde,"getSystemInfo")});var SO=v((E0e,lK)=>{"use strict";var LT=ir(),rK=oe(),nK=Pt(),sK=(q(),M(z)),DT=Q(),iK=IT(),Zde=cp(),{RemotePayloadObject:efe}=Sh(),{handleHDBError:oK,hdbErrors:tfe}=_e(),{HTTP_STATUS_CODES:aK}=tfe,{NodeSubscription:cK}=tf();lK.exports=rfe;async function rfe(e,t){let r;try{r=await LT.request(`${t}.${nK.REQUEST_SUFFIX}`,new efe(sK.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 oK(new Error,c,aK.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===nK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw oK(new Error,a,aK.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===sK.SYSTEM_SCHEMA_NAME){await LT.createLocalTableStream(l,c);let h=new cK(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=rK.doesSchemaExist(l),d=n[l]!==void 0,f=c?rK.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 iK.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 Zde(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await iK.createTable(h)}await LT.createLocalTableStream(l,c);let p=new cK(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(rfe,"reviewSubscriptions")});var nf={};Re(nf,{addNodeBack:()=>TO,removeNodeBack:()=>yO,setNode:()=>ofe});async function ofe(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,dK.validateBySchema)(e,ife);if(n)throw(0,ra.handleHDBError)(n,n.message,sfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new ra.ClientError("url or hostname is required for remove_node operation");let p=r,h=jt(),E=await h.get(p);if(!E)throw new ra.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 ra.ClientError("url required for this operation");let s=nc();if(s==null)throw new ra.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,mc.get)(F.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,mc.get)(F.REPLICATION_SHARD)!==void 0&&(l.shard=(0,mc.get)(F.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(uK):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=uK(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:nfe.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,mc.get)(F.REPLICATION_SHARD)!==void 0&&(p.shard=(0,mc.get)(F.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await zo(it(),p)}await zo(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 TO(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:nc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,mc.get)(F.REPLICATION_SHARD)!==void 0&&(i.shard=(0,mc.get)(F.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await zo(it(),i)}return await zo(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 yO(e){_s.trace("removeNodeBack received request:",e),await jt().delete(e.name)}function uK(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Vs,dK,fc,mc,_s,ra,nfe,sfe,ife,sf=se(()=>{Vs=b(Es()),dK=b(ft()),fc=b(require("joi")),mc=b(me());q();lh();qd();ps();_s=b(Q()),ra=b(_e()),{pki:nfe}=require("node-forge"),{HTTP_STATUS_CODES:sfe}=ra.hdbErrors,ife=fc.default.object({hostname:fc.default.string(),verify_tls:fc.default.boolean(),replicates:fc.default.boolean(),subscriptions:fc.default.array(),revoked_certificates:fc.default.array(),shard:fc.default.number()});o(ofe,"setNode");o(TO,"addNodeBack");o(yO,"removeNodeBack");o(uK,"reverseSubscription")});var BT=v((I0e,mK)=>{"use strict";var{handleHDBError:MT,hdbErrors:afe}=_e(),{HTTP_STATUS_CODES:vT}=afe,{addUpdateNodeValidator:cfe}=OT(),UT=Q(),xT=(q(),M(z)),fK=Pt(),lfe=oe(),Rh=ir(),bh=ta(),RO=me(),ufe=SO(),{Node:dfe,NodeSubscription:ffe}=tf(),{broadcast:mfe}=nt(),{setNode:pfe}=(sf(),M(nf)),b0e=me(),A0e=(q(),M(z)),hfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Efe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",_fe=RO.get(xT.CONFIG_PARAMS.CLUSTERING_NODENAME);mK.exports=gfe;async function gfe(e,t=!1){if(UT.trace("addNode called with:",e),RO.get(xT.CONFIG_PARAMS.REPLICATION_URL)||RO.get(xT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return pfe(e);bh.checkClusteringEnabled();let r=cfe(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(!lfe.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 ufe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=hfe,a;let c=bh.buildNodePayloads(s,_fe,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 ffe(p.schema,p.table,p.publish,p.subscribe))}UT.trace("addNode sending remote payload:",c);let u;try{u=await Rh.request(`${n}.${fK.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===fK.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 dfe(n,l,u.system_info);return await bh.upsertNodeRecord(d),mfe({type:"nats_update"}),i.length>0?a.message=Efe:a.message=`Successfully added '${n}' to manifest`,a}o(gfe,"addNode")});var wO=v((C0e,hK)=>{"use strict";var{handleHDBError:bO,hdbErrors:Sfe}=_e(),{HTTP_STATUS_CODES:AO}=Sfe,{addUpdateNodeValidator:Tfe}=OT(),Ah=Q(),FT=(q(),M(z)),pK=Pt(),N0e=oe(),Ih=ir(),wh=ta(),IO=me(),{cloneDeep:yfe}=require("lodash"),Rfe=SO(),{Node:bfe,NodeSubscription:Afe}=tf(),{broadcast:Ife}=nt(),{setNode:wfe}=(sf(),M(nf)),Nfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Cfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ofe=IO.get(FT.CONFIG_PARAMS.CLUSTERING_NODENAME);hK.exports=Pfe;async function Pfe(e){if(Ah.trace("updateNode called with:",e),IO.get(FT.CONFIG_PARAMS.REPLICATION_URL)??IO.get(FT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return wfe(e);wh.checkClusteringEnabled();let t=Tfe(e);if(t)throw bO(t,t.message,AO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await wh.getNodeRecord(r);s.length>0&&(n=yfe(s));let{added:i,skipped:a}=await Rfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Nfe,c;let l=wh.buildNodePayloads(i,Ofe,FT.OPERATIONS_ENUM.UPDATE_NODE,await wh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Ah.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Ah.trace("updateNode sending remote payload:",l);let u;try{u=await Ih.request(`${r}.${pK.REQUEST_SUFFIX}`,l)}catch(d){Ah.error(`updateNode received error from request: ${d}`);let f=Ih.requestErrorHandler(d,"update_node",r);throw bO(new Error,f,AO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===pK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw bO(new Error,d,AO.INTERNAL_SERVER_ERROR,"error",d)}Ah.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Ih.updateRemoteConsumer(m,r),m.subscribe===!0?await Ih.updateConsumerIterator(m.schema,m.table,r,"start"):await Ih.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new bfe(r,[],u.system_info)]),await Lfe(n[0],i,u.system_info),a.length>0?c.message=Cfe:c.message=`Successfully updated '${r}'`,c}o(Pfe,"updateNode");async function Lfe(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 Afe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await wh.upsertNodeRecord(n),Ife({type:"nats_update"})}o(Lfe,"updateNodeTable")});var TK=v((P0e,SK)=>{"use strict";var gK=require("joi"),{string:EK}=gK.types(),Dfe=ft(),_K=(q(),M(z)),Mfe=me(),vfe=Pt();SK.exports=Ufe;function Ufe(e){let t=EK.invalid(Mfe.get(_K.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(vfe.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=gK.object({operation:EK.valid(_K.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Dfe.validateBySchema(e,r)}o(Ufe,"removeNodeValidator")});var kT=v((D0e,IK)=>{"use strict";var{handleHDBError:yK,hdbErrors:xfe}=_e(),{HTTP_STATUS_CODES:RK}=xfe,Bfe=TK(),Nh=Q(),bK=ta(),Ffe=oe(),of=(q(),M(z)),AK=Pt(),NO=ir(),CO=me(),{RemotePayloadObject:kfe}=Sh(),{NodeSubscription:Hfe}=tf(),Gfe=ap(),qfe=bl(),{broadcast:$fe}=nt(),{setNode:Vfe}=(sf(),M(nf)),Kfe=CO.get(of.CONFIG_PARAMS.CLUSTERING_NODENAME);IK.exports=Yfe;async function Yfe(e){if(Nh.trace("removeNode called with:",e),CO.get(of.CONFIG_PARAMS.REPLICATION_URL)??CO.get(of.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Vfe(e);bK.checkClusteringEnabled();let t=Bfe(e);if(t)throw yK(t,t.message,RK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await bK.getNodeRecord(r);if(Ffe.isEmptyOrZeroLength(n))throw yK(new Error,`Node '${r}' was not found.`,RK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new kfe(of.OPERATIONS_ENUM.REMOVE_NODE,Kfe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await NO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await NO.updateRemoteConsumer(new Hfe(d.schema,d.table,!1,!1),r)}catch(f){Nh.error(f)}}try{i=await NO.request(`${r}.${AK.REQUEST_SUFFIX}`,s),Nh.trace("Remove node reply from remote node:",r,i)}catch(l){Nh.error("removeNode received error from request:",l),a=!0}let c=new Gfe(of.SYSTEM_SCHEMA_NAME,of.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await qfe.deleteRecord(c),$fe({type:"nats_update"}),i?.status===AK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(Nh.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(Yfe,"removeNode")});var CK=v((v0e,NK)=>{"use strict";var wK=require("joi"),{string:Wfe,array:zfe}=wK.types(),jfe=ft(),Qfe=OT();NK.exports=Jfe;function Jfe(e){let t=wK.object({operation:Wfe.valid("configure_cluster").required(),connections:zfe.items(Qfe.validationSchema).required()});return jfe.validateBySchema(e,t)}o(Jfe,"configureClusterValidator")});var OO=v((x0e,MK)=>{"use strict";var OK=(q(),M(z)),HT=Q(),Xfe=oe(),Zfe=me(),eme=kT(),tme=BT(),rme=ta(),nme=CK(),{handleHDBError:PK,hdbErrors:sme}=_e(),{HTTP_STATUS_CODES:LK}=sme,ime="Configure cluster complete.",ome="Failed to configure the cluster. Check the logs for more details.",ame="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";MK.exports=cme;async function cme(e){HT.trace("configure cluster called with:",e);let t=nme(e);if(t)throw PK(t,t.message,LK.BAD_REQUEST,void 0,void 0,!0);let r=await rme.getAllNodeRecords(),n=[];if(Zfe.get(OK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await DK(eme,{operation:OK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}HT.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 DK(tme,f,f.node_name);s.push(m)}HT.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"&&(HT.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(Xfe.isEmptyOrZeroLength(a))return{message:ime,connections:c};if(l)return{message:ame,failed_nodes:a,connections:c};throw PK(new Error,ome,LK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(cme,"configureCluster");async function DK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(DK,"functionWrapper")});var BK=v((F0e,xK)=>{"use strict";var Ch=require("joi"),lme=ft(),{validateSchemaExists:vK,validateTableExists:ume,validateSchemaName:UK}=Yi(),dme=Ch.object({operation:Ch.string().valid("purge_stream"),schema:Ch.string().custom(vK).custom(UK).optional(),database:Ch.string().custom(vK).custom(UK).optional(),table:Ch.string().custom(ume).required()});function fme(e){return lme.validateBySchema(e,dme)}o(fme,"purgeStreamValidator");xK.exports=fme});var PO=v((H0e,FK)=>{"use strict";var{handleHDBError:mme,hdbErrors:pme}=_e(),{HTTP_STATUS_CODES:hme}=pme,Eme=BK(),_me=ir(),gme=ta();FK.exports=Sme;async function Sme(e){e.schema=e.schema??e.database;let t=Eme(e);if(t)throw mme(t,t.message,hme.BAD_REQUEST,void 0,void 0,!0);gme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await _me.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Sme,"purgeStream")});var MO=v((q0e,YK)=>{"use strict";var DO=ta(),Tme=ir(),qT=me(),af=(q(),M(z)),Wl=Pt(),yme=oe(),LO=Q(),{RemotePayloadObject:Rme}=Sh(),{ErrorCode:kK}=require("nats"),{parentPort:HK}=require("worker_threads"),{onMessageByType:bme}=nt(),{getThisNodeName:Ame}=(ps(),M(Qo)),{requestClusterStatus:Ime}=(lh(),M(Z$)),{getReplicationSharedStatus:wme,getHDBNodeTable:Nme}=(qd(),M(z$)),{CONFIRMATION_STATUS_POSITION:Cme,RECEIVED_VERSION_POSITION:GK,RECEIVED_TIME_POSITION:Ome,SENDING_TIME_POSITION:Pme,RECEIVING_STATUS_POSITION:Lme,RECEIVING_STATUS_RECEIVING:Dme,BACK_PRESSURE_RATIO_POSITION:Mme}=(qC(),M(KV)),qK=qT.get(af.CONFIG_PARAMS.CLUSTERING_ENABLED),$K=qT.get(af.CONFIG_PARAMS.CLUSTERING_NODENAME);YK.exports={clusterStatus:vme,buildNodeStatus:KK};var VK;bme("cluster-status",async e=>{VK(e)});async function vme(){if(qT.get(af.CONFIG_PARAMS.REPLICATION_URL)||qT.get(af.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(HK){HK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{VK=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=wme(u,l,a);c.lastCommitConfirmed=GT(d[Cme]),c.lastReceivedRemoteTime=GT(d[GK]),c.lastReceivedLocalTime=GT(d[Ome]),c.lastReceivedVersion=d[GK],c.sendingMessage=GT(d[Pme]),c.backPressurePercent=d[Mme]*100,c.lastReceivedStatus=d[Lme]===Dme?"Receiving":"Waiting"}}}else n=Ime();n.node_name=Ame();let s=Nme().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:$K,is_enabled:qK,connections:[]};if(!qK)return e;let t=await DO.getAllNodeRecords();if(yme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(KK(t[n],e.connections));return await Promise.allSettled(r),e}o(vme,"clusterStatus");function GT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(GT,"asDate");async function KK(e,t){let r=e.name,n=new Rme(af.OPERATIONS_ENUM.CLUSTER_STATUS,$K,void 0,await DO.getSystemInfo()),s,i,a=Wl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Tme.request(Wl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Wl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Wl.CLUSTER_STATUS_STATUSES.CLOSED,LO.error(`Error getting node status from ${r} `,s))}catch(l){LO.warn(`Error getting node status from ${r}`,l),l.code===kK.NoResponders?a=Wl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===kK.Timeout?a=Wl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Wl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Ume(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!==af.PRE_4_0_0_VERSION&&await DO.upsertNodeRecord(l)}catch(l){LO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(KK,"buildNodeStatus");function Ume(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(Ume,"NodeStatusObject")});var UO=v((V0e,WK)=>{"use strict";var{handleHDBError:xme,hdbErrors:Bme}=_e(),{HTTP_STATUS_CODES:Fme}=Bme,kme=ir(),Hme=ta(),vO=oe(),$T=require("joi"),Gme=ft(),qme=2e3,$me=$T.object({timeout:$T.number().min(1),connected_nodes:$T.boolean(),routes:$T.boolean()});WK.exports=Vme;async function Vme(e){Hme.checkClusteringEnabled();let t=Gme.validateBySchema(e,$me);if(t)throw xme(t,t.message,Fme.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||vO.autoCastBoolean(n),a=s===void 0||vO.autoCastBoolean(s),c={nodes:[]},l=await kme.getServerList(r??qme),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:vO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(Vme,"clusterNetwork")});var JK=v((Y0e,QK)=>{"use strict";var xO=require("joi"),zK=ft(),{routeConstraints:jK}=Pb();QK.exports={setRoutesValidator:Kme,deleteRoutesValidator:Yme};function Kme(e){let t=xO.object({server:xO.valid("hub","leaf"),routes:jK.required()});return zK.validateBySchema(e,t)}o(Kme,"setRoutesValidator");function Yme(e){let t=xO.object({routes:jK.required()});return zK.validateBySchema(e,t)}o(Yme,"deleteRoutesValidator")});var VT=v((z0e,sY)=>{"use strict";var na=gt(),BO=oe(),Ks=(q(),M(z)),cf=me(),XK=JK(),{handleHDBError:ZK,hdbErrors:Wme}=_e(),{HTTP_STATUS_CODES:eY}=Wme,tY="cluster routes successfully set",rY="cluster routes successfully deleted";sY.exports={setRoutes:jme,getRoutes:Qme,deleteRoutes:Jme};function zme(e){let t=na.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=BO.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"?na.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):na.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:tY,set:i,skipped:s}}o(zme,"setRoutesNats");function jme(e){let t=XK.setRoutesValidator(e);if(t)throw ZK(t,t.message,eY.BAD_REQUEST,void 0,void 0,!0);if(cf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return zme(e);let r=[],n=[],s=cf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{nY(s,i)?n.push(i):(s.push(i),r.push(i))}),na.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:tY,set:r,skipped:n}}o(jme,"setRoutes");function nY(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(nY,"existsInArray");function Qme(){if(cf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=na.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return cf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(Qme,"getRoutes");function Jme(e){let t=XK.deleteRoutesValidator(e);if(t)throw ZK(t,t.message,eY.BAD_REQUEST,void 0,void 0,!0);if(cf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return Xme(e);let r=[],n=[],s=cf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{nY(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),na.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:rY,deleted:r,skipped:n}}o(Jme,"deleteRoutes");function Xme(e){let t=na.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=BO.isEmptyOrZeroLength(r)?null:r,na.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=BO.isEmptyOrZeroLength(n)?null:n,na.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:rY,deleted:s,skipped:i}}o(Xme,"deleteRoutesNats")});var oY=v((Q0e,iY)=>{"use strict";var Zme=Pt(),FO=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+Zme.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"}};iY.exports=FO});var lY=v((X0e,cY)=>{"use strict";var aY=Pt(),kO=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+aY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+aY.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"}};cY.exports=kO});var dY=v((eBe,uY)=>{"use strict";var HO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};uY.exports=HO});var mY=v((rBe,fY)=>{"use strict";var epe=Pt(),GO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+epe.SERVER_SUFFIX.ADMIN,this.password=r}};fY.exports=GO});var zT=v((sBe,EY)=>{"use strict";var zl=require("path"),jl=require("fs-extra"),tpe=oY(),rpe=lY(),npe=dY(),spe=mY(),qO=$n(),uf=oe(),Kn=gt(),YT=(q(),M(z)),Oh=Pt(),{CONFIG_PARAMS:or}=YT,df=Q(),Ph=me(),pY=Xi(),$O=ir(),ipe=Es(),lf="clustering",ope=1e4,hY=50;EY.exports={generateNatsConfig:cpe,removeNatsConfig:lpe,getHubConfigPath:ape};function ape(){let e=Ph.get(or.ROOTPATH);return zl.join(e,lf,Oh.NATS_CONFIG_FILES.HUB_SERVER)}o(ape,"getHubConfigPath");async function cpe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Ph.get(or.ROOTPATH);jl.ensureDirSync(zl.join(r,"clustering","leaf")),Ph.initSync();let n=Kn.getConfigFromFile(or.CLUSTERING_TLS_CERT_AUTH),s=Kn.getConfigFromFile(or.CLUSTERING_TLS_PRIVATEKEY),i=Kn.getConfigFromFile(or.CLUSTERING_TLS_CERTIFICATE);!await jl.exists(i)&&!await jl.exists(!n)&&await ipe.createNatsCerts();let a=zl.join(r,lf,Oh.PID_FILES.HUB),c=zl.join(r,lf,Oh.PID_FILES.LEAF),l=Kn.getConfigFromFile(or.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=zl.join(r,lf,Oh.NATS_CONFIG_FILES.HUB_SERVER),d=zl.join(r,lf,Oh.NATS_CONFIG_FILES.LEAF_SERVER),f=Kn.getConfigFromFile(or.CLUSTERING_TLS_INSECURE),m=Kn.getConfigFromFile(or.CLUSTERING_TLS_VERIFY),p=Kn.getConfigFromFile(or.CLUSTERING_NODENAME),h=Kn.getConfigFromFile(or.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await $O.checkNATSServerInstalled()||WT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await qO.listUsers(),g=Kn.getConfigFromFile(or.CLUSTERING_USER),R=await qO.getClusterUser();(uf.isEmpty(R)||R.active!==!0)&&WT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await KT(or.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await KT(or.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await KT(or.CLUSTERING_HUBSERVER_NETWORK_PORT),await KT(or.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[X,W]of E.entries())W.role?.role===YT.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(S.push(new spe(W.username,pY.decrypt(W.hash))),y.push(new npe(W.username,pY.decrypt(W.hash))));let C=[],{hub_routes:I}=Kn.getClusteringRoutes();if(!uf.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 tpe(Kn.getConfigFromFile(or.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Kn.getConfigFromFile(or.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kn.getConfigFromFile(or.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),C,S,y);n==null&&(delete k.tls.ca_file,delete k.leafnodes.tls.ca_file),t=uf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===YT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await jl.writeJson(u,k),df.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 rpe(Kn.getConfigFromFile(or.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===YT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await jl.writeJson(d,H),df.trace(`Leaf server config written to ${d}`))}o(cpe,"generateNatsConfig");async function KT(e){let t=Ph.get(e);return uf.isEmpty(t)&&WT(`port undefined for '${e}'`),await uf.isPortTaken(t)&&WT(`'${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(KT,"isPortAvailable");function WT(e){let t=`Error generating clustering config: ${e}`;df.error(t),console.error(t),process.exit(1)}o(WT,"generateNatsConfigError");async function lpe(e){let{port:t,config_file:r}=$O.getServerConfig(e),{username:n,decrypt_hash:s}=await qO.getClusterUser(),i=0,a=2e3;for(;i<hY;){try{let d=await $O.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){df.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=hY)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&&df.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await uf.asyncSetTimeout(u)}let c="0".repeat(ope),l=zl.join(Ph.get(or.ROOTPATH),lf,r);await jl.writeFile(l,c),await jl.remove(l),df.notify(e,"started.")}o(lpe,"removeNatsConfig")});var RY=v((oBe,yY)=>{"use strict";var gs=me(),Xe=(q(),M(z)),Lh=Pt(),sa=require("path"),{PACKAGE_ROOT:QT}=Ct(),_Y=me(),jT=oe(),ff="/dev/null",upe=sa.join(QT,"launchServiceScripts"),gY=sa.join(QT,"utility/scripts"),dpe=sa.join(gY,Xe.HDB_RESTART_SCRIPT),SY=sa.resolve(QT,"dependencies",`${process.platform}-${process.arch}`,Lh.NATS_BINARY_NAME);function TY(){let e={[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return jT.noBootFile()&&(e[Xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=jT.getEnvCliRootPath()),{name:Xe.PROCESS_DESCRIPTORS.HDB,script:Xe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:QT}}o(TY,"generateMainServerConfig");var fpe=9930;function mpe(){gs.initSync(!0);let e=gs.get(Xe.CONFIG_PARAMS.ROOTPATH),t=sa.join(e,"clustering",Lh.NATS_CONFIG_FILES.HUB_SERVER),r=sa.join(gs.get(Xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Xe.LOG_NAMES.HDB),n=_Y.get(Xe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Lh.LOG_LEVEL_FLAGS[gs.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==fpe?"-"+n:""),binFile:SY,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=ff,i.error_file=ff),i}o(mpe,"generateNatsHubServerConfig");var ppe=9940;function hpe(){gs.initSync(!0);let e=gs.get(Xe.CONFIG_PARAMS.ROOTPATH),t=sa.join(e,"clustering",Lh.NATS_CONFIG_FILES.LEAF_SERVER),r=sa.join(gs.get(Xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Xe.LOG_NAMES.HDB),n=_Y.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Lh.LOG_LEVEL_FLAGS[gs.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==ppe?"-"+n:""),binFile:SY,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=ff,i.error_file=ff),i}o(hpe,"generateNatsLeafServerConfig");function Epe(){gs.initSync();let e=sa.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:upe,autorestart:!1};return gs.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ff,t.error_file=ff),t}o(Epe,"generateClusteringUpgradeV4ServiceConfig");function _pe(){let e={[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.RESTART_HDB};return jT.noBootFile()&&(e[Xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=jT.getEnvCliRootPath()),{...{name:Xe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:gY},script:dpe}}o(_pe,"generateRestart");function gpe(){return{apps:[TY()]}}o(gpe,"generateAllServiceConfigs");yY.exports={generateAllServiceConfigs:gpe,generateMainServerConfig:TY,generateRestart:_pe,generateNatsHubServerConfig:mpe,generateNatsLeafServerConfig:hpe,generateClusteringUpgradeV4ServiceConfig:Epe}});var mf=v((lBe,OY)=>{"use strict";var Cr=(q(),M(z)),cBe=oe(),oa=zT(),JT=ir(),ia=Pt(),pc=RY(),KO=me(),hc=Q(),Spe=ta(),{startWorker:bY,onMessageFromWorkers:Tpe}=nt(),AY=require("fs"),ype=require("node:path"),Rpe=(q(),M(z)),{setTimeout:bpe}=require("node:timers/promises"),{execFile:Ape,fork:Ipe}=require("node:child_process");OY.exports={start:Ec,restart:Npe,kill:Lpe,startAllServices:Dpe,startService:wY,restartHdb:Cpe,startClusteringProcesses:NY,startClusteringThreads:CY,isHdbRestartRunning:Ope,getHdbPid:Ppe,cleanupChildrenProcesses:Dh,reloadClustering:vpe,expectedRestartOfChildren:IY};Tpe(e=>{e.type==="restart"&&KO.initSync(!0)});var lo=[],wpe=10,VO;function Ec(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?Ipe(e.script,r,e):Ape(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=lo.indexOf(n);c>-1&&lo.splice(c,1),!VO&&a!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<wpe&&(AY.existsSync(oa.getHubConfigPath())?Ec(e):(await oa.generateNatsConfig(!0),Ec(e),await new Promise(l=>setTimeout(l,3e3)),await oa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await oa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(a){let c=KO.get(Cr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(a);){if(u.index&&ia.LOG_LEVEL_HIERARCHY[c]>=ia.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===ia.LOG_LEVELS.ERR||f===ia.LOG_LEVELS.WRN?hc.OUTPUTS.STDERR:hc.OUTPUTS.STDOUT;hc.logCustomLevel(f||"info",h,s,a.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=ia.LOG_LEVELS[p]}if(ia.LOG_LEVEL_HIERARCHY[c]>=ia.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===ia.LOG_LEVELS.ERR||f===ia.LOG_LEVELS.WRN?hc.OUTPUTS.STDERR:hc.OUTPUTS.STDOUT;hc.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(),lo.length===0&&(t||(process.on("exit",Dh),process.on("SIGINT",Dh),process.on("SIGQUIT",Dh),process.on("SIGTERM",Dh))),lo.push(n)}o(Ec,"start");function Dh(e=!0){if(!VO&&(VO=!0,lo.length!==0))if(hc.info("Killing child processes..."),lo.map(t=>t.kill()),e)process.exit(0);else return bpe(2e3)}o(Dh,"cleanupChildrenProcesses");function Npe(e){IY();for(let t of lo)t.name===e&&t.kill()}o(Npe,"restart");function IY(){for(let e of lo)e.config&&(e.config.restarts=0)}o(IY,"expectedRestartOfChildren");async function Cpe(){await Ec(pc.generateRestart())}o(Cpe,"restartHdb");async function Ope(){let e=await list();for(let t in e)if(e[t].name===Cr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Ope,"isHdbRestartRunning");function Ppe(){let e=KO.getHdbBasePath();if(!e)return;let t=ype.join(e,Rpe.HDB_PID_FILE),r=Upe(t);if(!(!r||r===process.pid)&&xpe(r))return r}o(Ppe,"getHdbPid");function Lpe(){for(let e of lo)e.kill();lo=[]}o(Lpe,"kill");async function Dpe(){await NY(),await CY(),await Ec(pc.generateAllServiceConfigs())}o(Dpe,"startAllServices");async function wY(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Cr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=pc.generateMainServerConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=pc.generateNatsIngestServiceConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=pc.generateNatsReplyServiceConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=pc.generateNatsHubServerConfig(),await Ec(r,t),await oa.removeNatsConfig(e);return;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=pc.generateNatsLeafServerConfig(),await Ec(r,t),await oa.removeNatsConfig(e);return;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=pc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Ec(r,t)}o(wY,"startService");var Mpe;async function NY(e=!1){for(let t in Cr.CLUSTERING_PROCESSES){let r=Cr.CLUSTERING_PROCESSES[t];await wY(r,e)}}o(NY,"startClusteringProcesses");async function CY(){Mpe=bY(Cr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Cr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await JT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await JT.updateLocalStreams();let e=await Spe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Cr.PRE_4_0_0_VERSION){hc.info("Starting clustering upgrade 4.0.0 process"),bY(Cr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(CY,"startClusteringThreads");async function vpe(){await oa.generateNatsConfig(!0),await JT.reloadNATSHub(),await JT.reloadNATSLeaf(),await oa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await oa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(vpe,"reloadClustering");function Upe(e){try{return Number.parseInt(AY.readFileSync(e,"utf8"),10)}catch{return null}}o(Upe,"readPidFile");function xpe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(xpe,"isProcessRunning")});var zO={};Re(zO,{compactOnStart:()=>Bpe,copyDb:()=>UY});async function Bpe(){_c.notify("Running compact on start"),console.log("Running compact on start");let e=(0,YO.get)(F.ROOTPATH),t=new Map,r=at();(0,WO.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,XT.join)(e,"backup",n+".mdb"),a=(0,XT.join)(e,$c,n+"-copy.mdb"),c=0;try{c=await PY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){_c.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 UY(n,a),console.log("Backing up",n,"to",i);try{await(0,Ql.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{yd()}catch(n){_c.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,Ql.move)(i,s,{overwrite:!0}),await(0,Ql.remove)((0,XT.join)(e,$c,`${n}-copy.mdb-lock`));try{yd()}catch(n){_c.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){_c.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,WO.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,Ql.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw yd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await PY(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 rue(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,XV,ZV,ht,VC,Xo,pT,ET=se(()=>{QV();hT=require("easy-ocsp"),XV=require("node:crypto"),ZV=b(ts());we();qa();ht=(0,ZV.loggerWithTag)("cert-verification"),VC=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??Xo.timeout,l=await Promise.race([tue(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??Xo.failureMode;if(ht.error?.("OCSP check failed:",l.reason),m==="fail-closed"){let p=a?.errorCacheTtl??Xo.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??Xo.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??Xo.failureMode)==="fail-closed"){let u=a?.errorCacheTtl??Xo.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}}},Xo={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-open"};o(Xle,"getCertificateCacheTable");o(Zle,"getCertificateVerificationConfig");o(jd,"verifyCertificate");o(eue,"verifyOCSP");o(tue,"performOCSPCheck");o(JV,"bufferToPem");o(rue,"extractCertificateChain")});var Qo={};Re(Qo,{clearThisNodeName:()=>due,disableReplication:()=>oue,enabledDatabases:()=>ac,forEachReplicatedDatabase:()=>rc,getThisNodeId:()=>mT,getThisNodeName:()=>it,getThisNodeUrl:()=>nc,hostnameToUrl:()=>TT,lastTimeInAuditStore:()=>sh,monitorNodeCAs:()=>c1,replicateOperation:()=>mue,replicationCertificateAuthorities:()=>Jo,sendOperationToNode:()=>Eh,servers:()=>sue,setReplicator:()=>u1,start:()=>iue,startOnMainThread:()=>SC,subscribeToNode:()=>ch,unsubscribeFromNode:()=>ZS,urlToNodeName:()=>Si});function iue(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);aue(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,o1.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 jd(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(Jo);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()}c1(()=>{for(let s of n)s()})}function c1(e){let t=0;Gd(r=>{r?.ca&&(Jo.add(r.ca),Jo.size!==t&&(t=Jo.size,e?.()))})}function oue(e=!0){a1=e}function aue(e){a1||(at(),ac=e.databases,rc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||cc;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];u1(r,s,e),GC.get(s)?.forEach(i=>i(s))}}))}function u1(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 l1 extends Hr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||cc,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 es,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=lue(h,l1.subscription,e);if(E?.isConnected){let g=Hd(t.auditStore,e,h)[dT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new s1.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:nue++,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 cue(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 zd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function lue(e,t,r){let n=e1.get($l);n||(n=new Map,e1.set($l,n));let s=n.get(r);if(s)return s;let i=jt().primaryStore.get(e);return i?.url&&(s=new zd(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{i1.isMainThread&&It.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=cc.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,cc.set(e.database,t)}let r=cue(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 uue(){if(KC!==void 0)return KC;let e=$s.default.get(F.OPERATIONSAPI_TLS_CERTIFICATE)||$s.default.get(F.TLS_CERTIFICATE);if(e)return KC=new r1.X509Certificate((0,n1.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return $l||($l=$s.default.get("replication_hostname")??Si($s.default.get("replication_url"))??uue()??t1("operationsapi_network_secureport")??t1("operationsapi_network_port")??"127.0.0.1")}function due(){$l=void 0}function t1(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 nc(){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 rc(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):fue(n)&&t(s,n,!1)}o(r,"forDatabase")}function fue(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 mue(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,r1,n1,ST,s1,i1,o1,a1,nue,sue,Jo,ac,gT,e1,KC,$l,ps=se(()=>{we();qa();Ou();qC();Fr();$s=b(me()),It=b(Q()),r1=require("crypto");ET();n1=require("fs");lh();qd();q();gC();ST=b(require("node:tls")),s1=b(_e()),i1=require("worker_threads"),o1=b(Es()),nue=1,sue=[],Jo=$s.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(ST.rootCertificates):new Set;o(iue,"start");o(c1,"monitorNodeCAs");o(oue,"disableReplication");o(aue,"assignReplicationSource");o(u1,"setReplicator");gT=new Map;o(cue,"getSubscriptionConnection");e1=new Map;o(lue,"getRetrievalConnectionByName");o(Eh,"sendOperationToNode");o(ch,"subscribeToNode");o(ZS,"unsubscribeFromNode");o(uue,"getCommonNameFromCert");o(it,"getThisNodeName");o(due,"clearThisNodeName");Object.defineProperty(ve,"hostname",{get(){return it()}});o(t1,"getHostFromListeningPort");o(_T,"getPortFromListeningPort");o(mT,"getThisNodeId");ve.replication={getThisNodeId:mT,exportIdMapping:nh};o(nc,"getThisNodeUrl");o(TT,"hostnameToUrl");o(Si,"urlToNodeName");o(rc,"forEachReplicatedDatabase");o(fue,"hasExplicitlyReplicatedTable");o(sh,"lastTimeInAuditStore");o(mue,"replicateOperation")});var IT=v((Txe,h1)=>{"use strict";var Qd=u$(),{validateBySchema:_h}=ft(),{commonValidators:Jd,schemaRegex:YC}=Yi(),_r=require("joi"),pue=Q(),hue=require("uuid").v4,bT=Go(),Xd=(q(),M(z)),Eue=require("util"),lc=us(),{handleHDBError:Zo,hdbErrors:_ue,ClientError:Vl}=_e(),{HDB_ERROR_MSGS:yT,HTTP_STATUS_CODES:ea}=_ue,{SchemaEventMsg:AT}=as(),d1=ir(),{getDatabases:gue}=(we(),M(mt)),{transformReq:Zd}=oe(),{replicateOperation:f1}=(ps(),M(Qo)),{cleanupOrphans:Sue}=(rs(),M(v_)),RT=_r.string().min(1).max(Jd.schema_length.maximum).pattern(YC).messages({"string.pattern.base":"{:#label} "+Jd.schema_format.message}),Tue=_r.string().min(1).max(Jd.schema_length.maximum).pattern(YC).messages({"string.pattern.base":"{:#label} "+Jd.schema_format.message}).required(),yue=_r.string().min(1).max(Jd.schema_length.maximum).pattern(YC).messages({"string.pattern.base":"{:#label} "+Jd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();h1.exports={createSchema:Rue,createSchemaStructure:m1,createTable:bue,createTableStructure:p1,createAttribute:Cue,dropSchema:Aue,dropTable:Iue,dropAttribute:wue,getBackup:Oue,cleanupOrphanBlobs:Pue};async function Rue(e){let t=await m1(e);return bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema)),t}o(Rue,"createSchema");async function m1(e){let t=_h(e,_r.object({database:RT,schema:RT}));if(t)throw new Vl(t.message);if(Zd(e),!await Qd.checkSchemaExists(e.schema))throw Zo(new Error,yT.SCHEMA_EXISTS_ERR(e.schema),ea.BAD_REQUEST,Xd.LOG_LEVELS.ERROR,yT.SCHEMA_EXISTS_ERR(e.schema),!0);return await lc.createSchema(e),`database '${e.schema}' successfully created`}o(m1,"createSchemaStructure");async function bue(e){return Zd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await p1(e)}o(bue,"createTable");async function p1(e){let t=_h(e,_r.object({database:RT,schema:RT,table:Tue,residence:_r.array().items(_r.string().min(1)).optional(),hash_attribute:yue}));if(t)throw new Vl(t.message);if(!await Qd.checkSchemaTableExists(e.schema,e.table))throw Zo(new Error,yT.TABLE_EXISTS_ERR(e.schema,e.table),ea.BAD_REQUEST,Xd.LOG_LEVELS.ERROR,yT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:hue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await lc.createTable(n,e);else throw Zo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ea.BAD_REQUEST);else await lc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(p1,"createTableStructure");async function Aue(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);Zd(e);let r=await Qd.checkSchemaExists(e.schema);if(r)throw Zo(new Error,r,ea.NOT_FOUND,Xd.LOG_LEVELS.ERROR,r,!0);let n=await Qd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await lc.dropSchema(e),bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema)),await d1.purgeSchemaTableStreams(e.schema,s);let i=await f1(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Aue,"dropSchema");async function Iue(e){let t=_h(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required()}));if(t)throw new Vl(t.message);Zd(e);let r=await Qd.checkSchemaTableExists(e.schema,e.table);if(r)throw Zo(new Error,r,ea.NOT_FOUND,Xd.LOG_LEVELS.ERROR,r,!0);await lc.dropTable(e),await d1.purgeTableStream(e.schema,e.table);let n=await f1(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Iue,"dropTable");async function wue(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);Zd(e);let r=await Qd.checkSchemaTableExists(e.schema,e.table);if(r)throw Zo(new Error,r,ea.NOT_FOUND,Xd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Zo(new Error,"You cannot drop a hash attribute",ea.BAD_REQUEST,void 0,void 0,!0);if(Xd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Zo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ea.BAD_REQUEST,void 0,void 0,!0);try{return await lc.dropAttribute(e),Nue(e),bT.signalSchemaChange(new AT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw pue.error(`Got an error deleting attribute ${Eue.inspect(e)}.`),n}}o(wue,"dropAttribute");function Nue(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(Nue,"dropAttributeFromGlobal");async function Cue(e){Zd(e);let t=gue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Zo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ea.BAD_REQUEST,void 0,void 0,!0);return await lc.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(Cue,"createAttribute");function Oue(e){return lc.getBackup(e)}o(Oue,"getBackup");function Pue(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 Sue(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(Pue,"cleanupOrphanBlobs")});var _1=v((Rxe,E1)=>{"use strict";var{OPERATIONS_ENUM:Lue}=(q(),M(z)),WC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Lue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};E1.exports=WC});var zC=v((Ixe,R1)=>{"use strict";var Due=us(),Axe=_1(),wT=oe(),NT=(q(),M(z)),Mue=me(),{handleHDBError:g1,hdbErrors:vue}=_e(),{HDB_ERROR_MSGS:S1,HTTP_STATUS_CODES:T1}=vue,Uue=Object.values(NT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),y1="To use this operation audit log must be enabled in harperdb-config.yaml";R1.exports=xue;async function xue(e){if(wT.isEmpty(e.schema))throw new Error(S1.SCHEMA_REQUIRED_ERR);if(wT.isEmpty(e.table))throw new Error(S1.TABLE_REQUIRED_ERR);if(!Mue.get(NT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw g1(new Error,y1,T1.BAD_REQUEST,NT.LOG_LEVELS.ERROR,y1,!0);let t=wT.checkSchemaTableExist(e.schema,e.table);if(t)throw g1(new Error,t,T1.NOT_FOUND,NT.LOG_LEVELS.ERROR,t,!0);if(!wT.isEmpty(e.search_type)&&Uue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Due.readAuditLog(e)}o(xue,"readAuditLog")});var A1=v((Nxe,b1)=>{"use strict";var{OPERATIONS_ENUM:Bue}=(q(),M(z)),jC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Bue.GET_BACKUP,this.schema=t,this.table=r}};b1.exports=jC});var N1=v((Lxe,w1)=>{"use strict";var Fue=us(),Oxe=A1(),QC=oe(),kue=(q(),M(z)),Pxe=me(),{handleHDBError:Hue,hdbErrors:Gue}=_e(),{HDB_ERROR_MSGS:I1,HTTP_STATUS_CODES:que}=Gue;w1.exports=$ue;async function $ue(e){if(QC.isEmpty(e.schema))throw new Error(I1.SCHEMA_REQUIRED_ERR);if(QC.isEmpty(e.table))throw new Error(I1.TABLE_REQUIRED_ERR);let t=QC.checkSchemaTableExist(e.schema,e.table);if(t)throw Hue(new Error,t,que.NOT_FOUND,kue.LOG_LEVELS.ERROR,t,!0);return await Fue.getBackup(readAuditLogObject)}o($ue,"getBackup")});var L1=v((Mxe,P1)=>{"use strict";var Vue=me(),uc=require("joi"),Kue=ft(),C1=require("moment"),Yue=require("fs-extra"),JC=require("path"),Wue=require("lodash"),gh=(q(),M(z)),{LOG_LEVELS:Kl}=(q(),M(z)),zue="YYYY-MM-DD hh:mm:ss",jue=JC.resolve(__dirname,"../logs");P1.exports=function(e){return Kue.validateBySchema(e,Que)};var Que=uc.object({from:uc.custom(O1),until:uc.custom(O1),level:uc.valid(Kl.NOTIFY,Kl.FATAL,Kl.ERROR,Kl.WARN,Kl.INFO,Kl.DEBUG,Kl.TRACE),order:uc.valid("asc","desc"),limit:uc.number().min(1),start:uc.number().min(0),log_name:uc.custom(Jue)});function O1(e,t){if(C1(e,C1.ISO_8601).format(zue)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(O1,"validateDatetime");function Jue(e,t){if(Wue.invert(gh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Vue.get(gh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?gh.LOG_NAMES.HDB:e,i=s===gh.LOG_NAMES.INSTALL?JC.join(jue,gh.LOG_NAMES.INSTALL):JC.join(n,s);return Yue.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Jue,"validateReadLogPath")});var ZC=v((Uxe,M1)=>{"use strict";var CT=(q(),M(z)),Xue=Q(),Zue=me(),ede=L1(),XC=require("path"),D1=require("fs-extra"),{once:tde}=require("events"),{handleHDBError:rde,hdbErrors:nde}=_e(),{PACKAGE_ROOT:sde}=Ct(),{replicateOperation:ide}=(ps(),M(Qo)),ode=XC.join(sde,"logs"),ade=1e3,cde=200;M1.exports=lde;async function lde(e){let t=ede(e);if(t)throw rde(t,t.message,nde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=ide(e),n=Zue.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?XC.join(ode,CT.LOG_NAMES.INSTALL):XC.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?ade: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(D1.statSync(i).size-(E+5)*cde,0));let R=D1.createReadStream(i,{start:g});R.on("error",G=>{Xue.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&&(co(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&&(co(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&&(co(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&&(co(G,p,y),S++,S===E&&R.destroy());break;case a:G.level===c&&S<h?S++:G.level===c&&(co(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&&(co(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&&(co(G,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(co(G,p,y),S++,S===E&&R.destroy())}}o(k,"onLogMessage"),await tde(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")co({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,co(X,p,y)}}return y}o(lde,"readLog");function co(e,t,r){t==="desc"?ude(e,r):t==="asc"?dde(e,r):r.push(e)}o(co,"pushLineToResult");function ude(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(ude,"insertDescending");function dde(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(dde,"insertAscending")});var OT=v((Gxe,B1)=>{"use strict";var eO=require("joi"),{string:ef,boolean:v1,date:fde}=eO.types(),mde=ft(),{validateSchemaExists:Bxe,validateTableExists:Fxe,validateSchemaName:kxe}=Yi(),pde=(q(),M(z)),hde=Pt(),U1=me();U1.initSync();var Hxe=ef.invalid(U1.get(pde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(hde.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),x1={operation:ef.valid("add_node","update_node","set_node_replication"),node_name:ef.optional(),subscriptions:eO.array().items({table:ef.optional(),schema:ef.optional(),database:ef.optional(),subscribe:v1.required(),publish:v1.required().custom(_de),start_time:fde.iso()})};function Ede(e){return mde.validateBySchema(e,eO.object(x1))}o(Ede,"addUpdateNodeValidator");function _de(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(_de,"checkForFalsy");B1.exports={addUpdateNodeValidator:Ede,validationSchema:x1}});var tf=v(($xe,F1)=>{"use strict";var tO=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},rO=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};F1.exports={Node:tO,NodeSubscription:rO}});var H1=v((Kxe,k1)=>{"use strict";var gde=(q(),M(z)).OPERATIONS_ENUM,nO=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=gde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};k1.exports=nO});var Sh=v((Wxe,G1)=>{"use strict";var sO=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},iO=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)}};G1.exports={RemotePayloadObject:sO,RemotePayloadSubscription:iO}});var $1=v((jxe,q1)=>{"use strict";var oO=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}};q1.exports=oO});var K1=v((t0e,V1)=>{"use strict";var Sde=$1(),Jxe=Yt(),Xxe=St(),Tde=Q(),{getSchemaPath:Zxe,getTransactionAuditStorePath:e0e}=Rt(),{getDatabases:yde}=(we(),M(mt));V1.exports=Rde;async function Rde(e){let t=new Sde;try{let r=yde()[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){Tde.warn(`unable to stat table dbi due to ${r}`)}return t}o(Rde,"lmdbGetTableSize")});var W1=v((n0e,Y1)=>{"use strict";var aO=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}};Y1.exports=aO});var yh=v((l0e,J1)=>{"use strict";var bde=require("fs-extra"),Ade=require("path"),Rn=require("systeminformation"),dc=Q(),z1=ir(),i0e=Pt(),rf=(q(),M(z)),Ide=K1(),wde=Ml(),{getThreadInfo:j1}=nt(),Th=me();Th.initSync();var Nde=W1(),{openEnvironment:o0e}=St(),{getSchemaPath:a0e}=Rt(),{database:c0e,databases:cO}=(we(),M(mt)),PT;J1.exports={getHDBProcessInfo:fO,getNetworkInfo:pO,getDiskInfo:mO,getMemoryInfo:dO,getCPUInfo:uO,getTimeInfo:lO,getSystemInformation:hO,systemInformation:Cde,getTableSize:EO,getMetrics:_O};function lO(){return Rn.time()}o(lO,"getTimeInfo");async function uO(){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 dc.error(`error in getCPUInfo: ${e}`),{}}}o(uO,"getCPUInfo");async function dO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Rn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return dc.error(`error in getMemoryInfo: ${e}`),{}}}o(dO,"getMemoryInfo");async function fO(){let e={core:[],clustering:[]};try{let t=await Rn.processes(),r;try{r=Number.parseInt(await bde.readFile(Ade.join(Th.get(rf.CONFIG_PARAMS.ROOTPATH),rf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===rf.NODE_ERROR_CODES.ENOENT)dc.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 dc.error(`error in getHDBProcessInfo: ${t}`),e}}o(fO,"getHDBProcessInfo");async function mO(){let e={};try{if(!Th.get(rf.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 dc.error(`error in getDiskInfo: ${t}`),e}}o(mO,"getDiskInfo");async function pO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Th.get(rf.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 dc.error(`error in getNetworkInfo: ${t}`),e}}o(pO,"getNetworkInfo");async function hO(){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 dc.error(`error in getSystemInformation: ${t}`),e}}o(hO,"getSystemInformation");async function EO(){let e=[],t=await wde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Ide(n));return e}o(EO,"getTableSize");async function _O(){let e={};for(let t in cO){let r=e[t]={},n=r.tables={};for(let s in cO[t])try{let i=cO[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){dc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(_O,"getMetrics");async function Q1(){if(Th.get(rf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await z1.getNATSReferences(),t=await z1.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(Q1,"getNatsStreamInfo");async function Cde(e){let t=new Nde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await hO(),t.time=lO(),t.cpu=await uO(),t.memory=await dO(),t.disk=await mO(),t.network=await pO(),t.harperdb_processes=await fO(),t.table_size=await EO(),t.metrics=await _O(),t.threads=await j1(),t.replication=await Q1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await hO();break;case"time":t.time=lO();break;case"cpu":t.cpu=await uO();break;case"memory":t.memory=await dO();break;case"disk":t.disk=await mO();break;case"network":t.network=await pO();break;case"harperdb_processes":t.harperdb_processes=await fO();break;case"table_size":t.table_size=await EO();break;case"database_metrics":case"metrics":t.metrics=await _O();break;case"threads":t.threads=await j1();break;case"replication":t.replication=await Q1();break;default:break}return t}o(Cde,"systemInformation")});var ta=v((p0e,tK)=>{"use strict";var Ode=Gn(),gO=oe(),Pde=require("util"),Yl=(q(),M(z)),X1=me();X1.initSync();var Lde=kN(),Z1=_n(),{Node:d0e,NodeSubscription:f0e}=tf(),Dde=rd(),Mde=H1(),{RemotePayloadObject:vde,RemotePayloadSubscription:Ude}=Sh(),{handleHDBError:xde,hdbErrors:Bde}=_e(),{HTTP_STATUS_CODES:Fde,HDB_ERROR_MSGS:kde}=Bde,Hde=di(),Gde=yh(),{packageJson:qde}=Ct(),{getDatabases:$de}=(we(),M(mt)),m0e=Pde.promisify(Lde.authorize),Vde=Z1.searchByHash,Kde=Z1.searchByValue;tK.exports={isEmpty:Yde,getNodeRecord:Wde,upsertNodeRecord:zde,buildNodePayloads:jde,checkClusteringEnabled:Qde,getAllNodeRecords:Jde,getSystemInfo:Xde,reverseSubscription:eK};function Yde(e){return e==null}o(Yde,"isEmpty");async function Wde(e){let t=new Dde(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Vde(t)}o(Wde,"getNodeRecord");async function zde(e){let t=new Mde(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Ode.upsert(t)}o(zde,"upsertNodeRecord");function eK(e){if(gO.isEmpty(e.subscribe)||gO.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(eK,"reverseSubscription");function jde(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=gO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=eK(c),p=$de()[l]?.[u],h=new Ude(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new vde(r,t,s,n)}o(jde,"buildNodePayloads");function Qde(){if(!X1.get(Yl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw xde(new Error,kde.CLUSTERING_NOT_ENABLED,Fde.BAD_REQUEST,void 0,void 0,!0)}o(Qde,"checkClusteringEnabled");async function Jde(){let e=new Hde(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Kde(e))}o(Jde,"getAllNodeRecords");async function Xde(){let e=await Gde.getSystemInformation();return{hdb_version:qde.version,node_version:e.node_version,platform:e.platform}}o(Xde,"getSystemInfo")});var SO=v((E0e,lK)=>{"use strict";var LT=ir(),rK=oe(),nK=Pt(),sK=(q(),M(z)),DT=Q(),iK=IT(),Zde=cp(),{RemotePayloadObject:efe}=Sh(),{handleHDBError:oK,hdbErrors:tfe}=_e(),{HTTP_STATUS_CODES:aK}=tfe,{NodeSubscription:cK}=tf();lK.exports=rfe;async function rfe(e,t){let r;try{r=await LT.request(`${t}.${nK.REQUEST_SUFFIX}`,new efe(sK.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 oK(new Error,c,aK.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===nK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw oK(new Error,a,aK.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===sK.SYSTEM_SCHEMA_NAME){await LT.createLocalTableStream(l,c);let h=new cK(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=rK.doesSchemaExist(l),d=n[l]!==void 0,f=c?rK.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 iK.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 Zde(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await iK.createTable(h)}await LT.createLocalTableStream(l,c);let p=new cK(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(rfe,"reviewSubscriptions")});var nf={};Re(nf,{addNodeBack:()=>TO,removeNodeBack:()=>yO,setNode:()=>ofe});async function ofe(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,dK.validateBySchema)(e,ife);if(n)throw(0,ra.handleHDBError)(n,n.message,sfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new ra.ClientError("url or hostname is required for remove_node operation");let p=r,h=jt(),E=await h.get(p);if(!E)throw new ra.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 ra.ClientError("url required for this operation");let s=nc();if(s==null)throw new ra.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,mc.get)(F.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,mc.get)(F.REPLICATION_SHARD)!==void 0&&(l.shard=(0,mc.get)(F.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(uK):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=uK(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:nfe.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,mc.get)(F.REPLICATION_SHARD)!==void 0&&(p.shard=(0,mc.get)(F.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await zo(it(),p)}await zo(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 TO(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:nc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,mc.get)(F.REPLICATION_SHARD)!==void 0&&(i.shard=(0,mc.get)(F.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await zo(it(),i)}return await zo(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 yO(e){_s.trace("removeNodeBack received request:",e),await jt().delete(e.name)}function uK(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Vs,dK,fc,mc,_s,ra,nfe,sfe,ife,sf=se(()=>{Vs=b(Es()),dK=b(ft()),fc=b(require("joi")),mc=b(me());q();lh();qd();ps();_s=b(Q()),ra=b(_e()),{pki:nfe}=require("node-forge"),{HTTP_STATUS_CODES:sfe}=ra.hdbErrors,ife=fc.default.object({hostname:fc.default.string(),verify_tls:fc.default.boolean(),replicates:fc.default.boolean(),subscriptions:fc.default.array(),revoked_certificates:fc.default.array(),shard:fc.default.number()});o(ofe,"setNode");o(TO,"addNodeBack");o(yO,"removeNodeBack");o(uK,"reverseSubscription")});var BT=v((I0e,mK)=>{"use strict";var{handleHDBError:MT,hdbErrors:afe}=_e(),{HTTP_STATUS_CODES:vT}=afe,{addUpdateNodeValidator:cfe}=OT(),UT=Q(),xT=(q(),M(z)),fK=Pt(),lfe=oe(),Rh=ir(),bh=ta(),RO=me(),ufe=SO(),{Node:dfe,NodeSubscription:ffe}=tf(),{broadcast:mfe}=nt(),{setNode:pfe}=(sf(),M(nf)),b0e=me(),A0e=(q(),M(z)),hfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Efe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",_fe=RO.get(xT.CONFIG_PARAMS.CLUSTERING_NODENAME);mK.exports=gfe;async function gfe(e,t=!1){if(UT.trace("addNode called with:",e),RO.get(xT.CONFIG_PARAMS.REPLICATION_URL)||RO.get(xT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return pfe(e);bh.checkClusteringEnabled();let r=cfe(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(!lfe.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 ufe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=hfe,a;let c=bh.buildNodePayloads(s,_fe,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 ffe(p.schema,p.table,p.publish,p.subscribe))}UT.trace("addNode sending remote payload:",c);let u;try{u=await Rh.request(`${n}.${fK.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===fK.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 dfe(n,l,u.system_info);return await bh.upsertNodeRecord(d),mfe({type:"nats_update"}),i.length>0?a.message=Efe:a.message=`Successfully added '${n}' to manifest`,a}o(gfe,"addNode")});var wO=v((C0e,hK)=>{"use strict";var{handleHDBError:bO,hdbErrors:Sfe}=_e(),{HTTP_STATUS_CODES:AO}=Sfe,{addUpdateNodeValidator:Tfe}=OT(),Ah=Q(),FT=(q(),M(z)),pK=Pt(),N0e=oe(),Ih=ir(),wh=ta(),IO=me(),{cloneDeep:yfe}=require("lodash"),Rfe=SO(),{Node:bfe,NodeSubscription:Afe}=tf(),{broadcast:Ife}=nt(),{setNode:wfe}=(sf(),M(nf)),Nfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Cfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ofe=IO.get(FT.CONFIG_PARAMS.CLUSTERING_NODENAME);hK.exports=Pfe;async function Pfe(e){if(Ah.trace("updateNode called with:",e),IO.get(FT.CONFIG_PARAMS.REPLICATION_URL)??IO.get(FT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return wfe(e);wh.checkClusteringEnabled();let t=Tfe(e);if(t)throw bO(t,t.message,AO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await wh.getNodeRecord(r);s.length>0&&(n=yfe(s));let{added:i,skipped:a}=await Rfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Nfe,c;let l=wh.buildNodePayloads(i,Ofe,FT.OPERATIONS_ENUM.UPDATE_NODE,await wh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Ah.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Ah.trace("updateNode sending remote payload:",l);let u;try{u=await Ih.request(`${r}.${pK.REQUEST_SUFFIX}`,l)}catch(d){Ah.error(`updateNode received error from request: ${d}`);let f=Ih.requestErrorHandler(d,"update_node",r);throw bO(new Error,f,AO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===pK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw bO(new Error,d,AO.INTERNAL_SERVER_ERROR,"error",d)}Ah.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Ih.updateRemoteConsumer(m,r),m.subscribe===!0?await Ih.updateConsumerIterator(m.schema,m.table,r,"start"):await Ih.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new bfe(r,[],u.system_info)]),await Lfe(n[0],i,u.system_info),a.length>0?c.message=Cfe:c.message=`Successfully updated '${r}'`,c}o(Pfe,"updateNode");async function Lfe(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 Afe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await wh.upsertNodeRecord(n),Ife({type:"nats_update"})}o(Lfe,"updateNodeTable")});var TK=v((P0e,SK)=>{"use strict";var gK=require("joi"),{string:EK}=gK.types(),Dfe=ft(),_K=(q(),M(z)),Mfe=me(),vfe=Pt();SK.exports=Ufe;function Ufe(e){let t=EK.invalid(Mfe.get(_K.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(vfe.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=gK.object({operation:EK.valid(_K.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Dfe.validateBySchema(e,r)}o(Ufe,"removeNodeValidator")});var kT=v((D0e,IK)=>{"use strict";var{handleHDBError:yK,hdbErrors:xfe}=_e(),{HTTP_STATUS_CODES:RK}=xfe,Bfe=TK(),Nh=Q(),bK=ta(),Ffe=oe(),of=(q(),M(z)),AK=Pt(),NO=ir(),CO=me(),{RemotePayloadObject:kfe}=Sh(),{NodeSubscription:Hfe}=tf(),Gfe=ap(),qfe=bl(),{broadcast:$fe}=nt(),{setNode:Vfe}=(sf(),M(nf)),Kfe=CO.get(of.CONFIG_PARAMS.CLUSTERING_NODENAME);IK.exports=Yfe;async function Yfe(e){if(Nh.trace("removeNode called with:",e),CO.get(of.CONFIG_PARAMS.REPLICATION_URL)??CO.get(of.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Vfe(e);bK.checkClusteringEnabled();let t=Bfe(e);if(t)throw yK(t,t.message,RK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await bK.getNodeRecord(r);if(Ffe.isEmptyOrZeroLength(n))throw yK(new Error,`Node '${r}' was not found.`,RK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new kfe(of.OPERATIONS_ENUM.REMOVE_NODE,Kfe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await NO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await NO.updateRemoteConsumer(new Hfe(d.schema,d.table,!1,!1),r)}catch(f){Nh.error(f)}}try{i=await NO.request(`${r}.${AK.REQUEST_SUFFIX}`,s),Nh.trace("Remove node reply from remote node:",r,i)}catch(l){Nh.error("removeNode received error from request:",l),a=!0}let c=new Gfe(of.SYSTEM_SCHEMA_NAME,of.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await qfe.deleteRecord(c),$fe({type:"nats_update"}),i?.status===AK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(Nh.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(Yfe,"removeNode")});var CK=v((v0e,NK)=>{"use strict";var wK=require("joi"),{string:Wfe,array:zfe}=wK.types(),jfe=ft(),Qfe=OT();NK.exports=Jfe;function Jfe(e){let t=wK.object({operation:Wfe.valid("configure_cluster").required(),connections:zfe.items(Qfe.validationSchema).required()});return jfe.validateBySchema(e,t)}o(Jfe,"configureClusterValidator")});var OO=v((x0e,MK)=>{"use strict";var OK=(q(),M(z)),HT=Q(),Xfe=oe(),Zfe=me(),eme=kT(),tme=BT(),rme=ta(),nme=CK(),{handleHDBError:PK,hdbErrors:sme}=_e(),{HTTP_STATUS_CODES:LK}=sme,ime="Configure cluster complete.",ome="Failed to configure the cluster. Check the logs for more details.",ame="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";MK.exports=cme;async function cme(e){HT.trace("configure cluster called with:",e);let t=nme(e);if(t)throw PK(t,t.message,LK.BAD_REQUEST,void 0,void 0,!0);let r=await rme.getAllNodeRecords(),n=[];if(Zfe.get(OK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await DK(eme,{operation:OK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}HT.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 DK(tme,f,f.node_name);s.push(m)}HT.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"&&(HT.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(Xfe.isEmptyOrZeroLength(a))return{message:ime,connections:c};if(l)return{message:ame,failed_nodes:a,connections:c};throw PK(new Error,ome,LK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(cme,"configureCluster");async function DK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(DK,"functionWrapper")});var BK=v((F0e,xK)=>{"use strict";var Ch=require("joi"),lme=ft(),{validateSchemaExists:vK,validateTableExists:ume,validateSchemaName:UK}=Yi(),dme=Ch.object({operation:Ch.string().valid("purge_stream"),schema:Ch.string().custom(vK).custom(UK).optional(),database:Ch.string().custom(vK).custom(UK).optional(),table:Ch.string().custom(ume).required()});function fme(e){return lme.validateBySchema(e,dme)}o(fme,"purgeStreamValidator");xK.exports=fme});var PO=v((H0e,FK)=>{"use strict";var{handleHDBError:mme,hdbErrors:pme}=_e(),{HTTP_STATUS_CODES:hme}=pme,Eme=BK(),_me=ir(),gme=ta();FK.exports=Sme;async function Sme(e){e.schema=e.schema??e.database;let t=Eme(e);if(t)throw mme(t,t.message,hme.BAD_REQUEST,void 0,void 0,!0);gme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await _me.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Sme,"purgeStream")});var MO=v((q0e,YK)=>{"use strict";var DO=ta(),Tme=ir(),qT=me(),af=(q(),M(z)),Wl=Pt(),yme=oe(),LO=Q(),{RemotePayloadObject:Rme}=Sh(),{ErrorCode:kK}=require("nats"),{parentPort:HK}=require("worker_threads"),{onMessageByType:bme}=nt(),{getThisNodeName:Ame}=(ps(),M(Qo)),{requestClusterStatus:Ime}=(lh(),M(Z$)),{getReplicationSharedStatus:wme,getHDBNodeTable:Nme}=(qd(),M(z$)),{CONFIRMATION_STATUS_POSITION:Cme,RECEIVED_VERSION_POSITION:GK,RECEIVED_TIME_POSITION:Ome,SENDING_TIME_POSITION:Pme,RECEIVING_STATUS_POSITION:Lme,RECEIVING_STATUS_RECEIVING:Dme,BACK_PRESSURE_RATIO_POSITION:Mme}=(qC(),M(KV)),qK=qT.get(af.CONFIG_PARAMS.CLUSTERING_ENABLED),$K=qT.get(af.CONFIG_PARAMS.CLUSTERING_NODENAME);YK.exports={clusterStatus:vme,buildNodeStatus:KK};var VK;bme("cluster-status",async e=>{VK(e)});async function vme(){if(qT.get(af.CONFIG_PARAMS.REPLICATION_URL)||qT.get(af.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;HK?(HK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{VK=i})):n=Ime();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=wme(u,l,a);c.lastCommitConfirmed=GT(d[Cme]),c.lastReceivedRemoteTime=GT(d[GK]),c.lastReceivedLocalTime=GT(d[Ome]),c.lastReceivedVersion=d[GK],c.sendingMessage=GT(d[Pme]),c.backPressurePercent=d[Mme]*100,c.lastReceivedStatus=d[Lme]===Dme?"Receiving":"Waiting"}}n.node_name=Ame();let s=Nme().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:$K,is_enabled:qK,connections:[]};if(!qK)return e;let t=await DO.getAllNodeRecords();if(yme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(KK(t[n],e.connections));return await Promise.allSettled(r),e}o(vme,"clusterStatus");function GT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(GT,"asDate");async function KK(e,t){let r=e.name,n=new Rme(af.OPERATIONS_ENUM.CLUSTER_STATUS,$K,void 0,await DO.getSystemInfo()),s,i,a=Wl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Tme.request(Wl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Wl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Wl.CLUSTER_STATUS_STATUSES.CLOSED,LO.error(`Error getting node status from ${r} `,s))}catch(l){LO.warn(`Error getting node status from ${r}`,l),l.code===kK.NoResponders?a=Wl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===kK.Timeout?a=Wl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Wl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Ume(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!==af.PRE_4_0_0_VERSION&&await DO.upsertNodeRecord(l)}catch(l){LO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(KK,"buildNodeStatus");function Ume(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(Ume,"NodeStatusObject")});var UO=v((V0e,WK)=>{"use strict";var{handleHDBError:xme,hdbErrors:Bme}=_e(),{HTTP_STATUS_CODES:Fme}=Bme,kme=ir(),Hme=ta(),vO=oe(),$T=require("joi"),Gme=ft(),qme=2e3,$me=$T.object({timeout:$T.number().min(1),connected_nodes:$T.boolean(),routes:$T.boolean()});WK.exports=Vme;async function Vme(e){Hme.checkClusteringEnabled();let t=Gme.validateBySchema(e,$me);if(t)throw xme(t,t.message,Fme.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||vO.autoCastBoolean(n),a=s===void 0||vO.autoCastBoolean(s),c={nodes:[]},l=await kme.getServerList(r??qme),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:vO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(Vme,"clusterNetwork")});var JK=v((Y0e,QK)=>{"use strict";var xO=require("joi"),zK=ft(),{routeConstraints:jK}=Pb();QK.exports={setRoutesValidator:Kme,deleteRoutesValidator:Yme};function Kme(e){let t=xO.object({server:xO.valid("hub","leaf"),routes:jK.required()});return zK.validateBySchema(e,t)}o(Kme,"setRoutesValidator");function Yme(e){let t=xO.object({routes:jK.required()});return zK.validateBySchema(e,t)}o(Yme,"deleteRoutesValidator")});var VT=v((z0e,sY)=>{"use strict";var na=gt(),BO=oe(),Ks=(q(),M(z)),cf=me(),XK=JK(),{handleHDBError:ZK,hdbErrors:Wme}=_e(),{HTTP_STATUS_CODES:eY}=Wme,tY="cluster routes successfully set",rY="cluster routes successfully deleted";sY.exports={setRoutes:jme,getRoutes:Qme,deleteRoutes:Jme};function zme(e){let t=na.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=BO.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"?na.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):na.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:tY,set:i,skipped:s}}o(zme,"setRoutesNats");function jme(e){let t=XK.setRoutesValidator(e);if(t)throw ZK(t,t.message,eY.BAD_REQUEST,void 0,void 0,!0);if(cf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return zme(e);let r=[],n=[],s=cf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{nY(s,i)?n.push(i):(s.push(i),r.push(i))}),na.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:tY,set:r,skipped:n}}o(jme,"setRoutes");function nY(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(nY,"existsInArray");function Qme(){if(cf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=na.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return cf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(Qme,"getRoutes");function Jme(e){let t=XK.deleteRoutesValidator(e);if(t)throw ZK(t,t.message,eY.BAD_REQUEST,void 0,void 0,!0);if(cf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return Xme(e);let r=[],n=[],s=cf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{nY(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),na.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:rY,deleted:r,skipped:n}}o(Jme,"deleteRoutes");function Xme(e){let t=na.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=BO.isEmptyOrZeroLength(r)?null:r,na.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=BO.isEmptyOrZeroLength(n)?null:n,na.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:rY,deleted:s,skipped:i}}o(Xme,"deleteRoutesNats")});var oY=v((Q0e,iY)=>{"use strict";var Zme=Pt(),FO=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+Zme.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"}};iY.exports=FO});var lY=v((X0e,cY)=>{"use strict";var aY=Pt(),kO=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+aY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+aY.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"}};cY.exports=kO});var dY=v((eBe,uY)=>{"use strict";var HO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};uY.exports=HO});var mY=v((rBe,fY)=>{"use strict";var epe=Pt(),GO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+epe.SERVER_SUFFIX.ADMIN,this.password=r}};fY.exports=GO});var zT=v((sBe,EY)=>{"use strict";var zl=require("path"),jl=require("fs-extra"),tpe=oY(),rpe=lY(),npe=dY(),spe=mY(),qO=$n(),uf=oe(),Kn=gt(),YT=(q(),M(z)),Oh=Pt(),{CONFIG_PARAMS:or}=YT,df=Q(),Ph=me(),pY=Xi(),$O=ir(),ipe=Es(),lf="clustering",ope=1e4,hY=50;EY.exports={generateNatsConfig:cpe,removeNatsConfig:lpe,getHubConfigPath:ape};function ape(){let e=Ph.get(or.ROOTPATH);return zl.join(e,lf,Oh.NATS_CONFIG_FILES.HUB_SERVER)}o(ape,"getHubConfigPath");async function cpe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Ph.get(or.ROOTPATH);jl.ensureDirSync(zl.join(r,"clustering","leaf")),Ph.initSync();let n=Kn.getConfigFromFile(or.CLUSTERING_TLS_CERT_AUTH),s=Kn.getConfigFromFile(or.CLUSTERING_TLS_PRIVATEKEY),i=Kn.getConfigFromFile(or.CLUSTERING_TLS_CERTIFICATE);!await jl.exists(i)&&!await jl.exists(!n)&&await ipe.createNatsCerts();let a=zl.join(r,lf,Oh.PID_FILES.HUB),c=zl.join(r,lf,Oh.PID_FILES.LEAF),l=Kn.getConfigFromFile(or.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=zl.join(r,lf,Oh.NATS_CONFIG_FILES.HUB_SERVER),d=zl.join(r,lf,Oh.NATS_CONFIG_FILES.LEAF_SERVER),f=Kn.getConfigFromFile(or.CLUSTERING_TLS_INSECURE),m=Kn.getConfigFromFile(or.CLUSTERING_TLS_VERIFY),p=Kn.getConfigFromFile(or.CLUSTERING_NODENAME),h=Kn.getConfigFromFile(or.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await $O.checkNATSServerInstalled()||WT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await qO.listUsers(),g=Kn.getConfigFromFile(or.CLUSTERING_USER),R=await qO.getClusterUser();(uf.isEmpty(R)||R.active!==!0)&&WT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await KT(or.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await KT(or.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await KT(or.CLUSTERING_HUBSERVER_NETWORK_PORT),await KT(or.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[X,W]of E.entries())W.role?.role===YT.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(S.push(new spe(W.username,pY.decrypt(W.hash))),y.push(new npe(W.username,pY.decrypt(W.hash))));let C=[],{hub_routes:I}=Kn.getClusteringRoutes();if(!uf.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 tpe(Kn.getConfigFromFile(or.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Kn.getConfigFromFile(or.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kn.getConfigFromFile(or.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),C,S,y);n==null&&(delete k.tls.ca_file,delete k.leafnodes.tls.ca_file),t=uf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===YT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await jl.writeJson(u,k),df.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 rpe(Kn.getConfigFromFile(or.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===YT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await jl.writeJson(d,H),df.trace(`Leaf server config written to ${d}`))}o(cpe,"generateNatsConfig");async function KT(e){let t=Ph.get(e);return uf.isEmpty(t)&&WT(`port undefined for '${e}'`),await uf.isPortTaken(t)&&WT(`'${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(KT,"isPortAvailable");function WT(e){let t=`Error generating clustering config: ${e}`;df.error(t),console.error(t),process.exit(1)}o(WT,"generateNatsConfigError");async function lpe(e){let{port:t,config_file:r}=$O.getServerConfig(e),{username:n,decrypt_hash:s}=await qO.getClusterUser(),i=0,a=2e3;for(;i<hY;){try{let d=await $O.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){df.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=hY)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&&df.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await uf.asyncSetTimeout(u)}let c="0".repeat(ope),l=zl.join(Ph.get(or.ROOTPATH),lf,r);await jl.writeFile(l,c),await jl.remove(l),df.notify(e,"started.")}o(lpe,"removeNatsConfig")});var RY=v((oBe,yY)=>{"use strict";var gs=me(),Xe=(q(),M(z)),Lh=Pt(),sa=require("path"),{PACKAGE_ROOT:QT}=Ct(),_Y=me(),jT=oe(),ff="/dev/null",upe=sa.join(QT,"launchServiceScripts"),gY=sa.join(QT,"utility/scripts"),dpe=sa.join(gY,Xe.HDB_RESTART_SCRIPT),SY=sa.resolve(QT,"dependencies",`${process.platform}-${process.arch}`,Lh.NATS_BINARY_NAME);function TY(){let e={[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return jT.noBootFile()&&(e[Xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=jT.getEnvCliRootPath()),{name:Xe.PROCESS_DESCRIPTORS.HDB,script:Xe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:QT}}o(TY,"generateMainServerConfig");var fpe=9930;function mpe(){gs.initSync(!0);let e=gs.get(Xe.CONFIG_PARAMS.ROOTPATH),t=sa.join(e,"clustering",Lh.NATS_CONFIG_FILES.HUB_SERVER),r=sa.join(gs.get(Xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Xe.LOG_NAMES.HDB),n=_Y.get(Xe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Lh.LOG_LEVEL_FLAGS[gs.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==fpe?"-"+n:""),binFile:SY,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=ff,i.error_file=ff),i}o(mpe,"generateNatsHubServerConfig");var ppe=9940;function hpe(){gs.initSync(!0);let e=gs.get(Xe.CONFIG_PARAMS.ROOTPATH),t=sa.join(e,"clustering",Lh.NATS_CONFIG_FILES.LEAF_SERVER),r=sa.join(gs.get(Xe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Xe.LOG_NAMES.HDB),n=_Y.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Lh.LOG_LEVEL_FLAGS[gs.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==ppe?"-"+n:""),binFile:SY,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=ff,i.error_file=ff),i}o(hpe,"generateNatsLeafServerConfig");function Epe(){gs.initSync();let e=sa.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:upe,autorestart:!1};return gs.get(Xe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ff,t.error_file=ff),t}o(Epe,"generateClusteringUpgradeV4ServiceConfig");function _pe(){let e={[Xe.PROCESS_NAME_ENV_PROP]:Xe.PROCESS_DESCRIPTORS.RESTART_HDB};return jT.noBootFile()&&(e[Xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=jT.getEnvCliRootPath()),{...{name:Xe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:gY},script:dpe}}o(_pe,"generateRestart");function gpe(){return{apps:[TY()]}}o(gpe,"generateAllServiceConfigs");yY.exports={generateAllServiceConfigs:gpe,generateMainServerConfig:TY,generateRestart:_pe,generateNatsHubServerConfig:mpe,generateNatsLeafServerConfig:hpe,generateClusteringUpgradeV4ServiceConfig:Epe}});var mf=v((lBe,OY)=>{"use strict";var Cr=(q(),M(z)),cBe=oe(),oa=zT(),JT=ir(),ia=Pt(),pc=RY(),KO=me(),hc=Q(),Spe=ta(),{startWorker:bY,onMessageFromWorkers:Tpe}=nt(),AY=require("fs"),ype=require("node:path"),Rpe=(q(),M(z)),{setTimeout:bpe}=require("node:timers/promises"),{execFile:Ape,fork:Ipe}=require("node:child_process");OY.exports={start:Ec,restart:Npe,kill:Lpe,startAllServices:Dpe,startService:wY,restartHdb:Cpe,startClusteringProcesses:NY,startClusteringThreads:CY,isHdbRestartRunning:Ope,getHdbPid:Ppe,cleanupChildrenProcesses:Dh,reloadClustering:vpe,expectedRestartOfChildren:IY};Tpe(e=>{e.type==="restart"&&KO.initSync(!0)});var lo=[],wpe=10,VO;function Ec(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?Ipe(e.script,r,e):Ape(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=lo.indexOf(n);c>-1&&lo.splice(c,1),!VO&&a!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<wpe&&(AY.existsSync(oa.getHubConfigPath())?Ec(e):(await oa.generateNatsConfig(!0),Ec(e),await new Promise(l=>setTimeout(l,3e3)),await oa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await oa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(a){let c=KO.get(Cr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(a);){if(u.index&&ia.LOG_LEVEL_HIERARCHY[c]>=ia.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===ia.LOG_LEVELS.ERR||f===ia.LOG_LEVELS.WRN?hc.OUTPUTS.STDERR:hc.OUTPUTS.STDOUT;hc.logCustomLevel(f||"info",h,s,a.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=ia.LOG_LEVELS[p]}if(ia.LOG_LEVEL_HIERARCHY[c]>=ia.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===ia.LOG_LEVELS.ERR||f===ia.LOG_LEVELS.WRN?hc.OUTPUTS.STDERR:hc.OUTPUTS.STDOUT;hc.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(),lo.length===0&&(t||(process.on("exit",Dh),process.on("SIGINT",Dh),process.on("SIGQUIT",Dh),process.on("SIGTERM",Dh))),lo.push(n)}o(Ec,"start");function Dh(e=!0){if(!VO&&(VO=!0,lo.length!==0))if(hc.info("Killing child processes..."),lo.map(t=>t.kill()),e)process.exit(0);else return bpe(2e3)}o(Dh,"cleanupChildrenProcesses");function Npe(e){IY();for(let t of lo)t.name===e&&t.kill()}o(Npe,"restart");function IY(){for(let e of lo)e.config&&(e.config.restarts=0)}o(IY,"expectedRestartOfChildren");async function Cpe(){await Ec(pc.generateRestart())}o(Cpe,"restartHdb");async function Ope(){let e=await list();for(let t in e)if(e[t].name===Cr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Ope,"isHdbRestartRunning");function Ppe(){let e=KO.getHdbBasePath();if(!e)return;let t=ype.join(e,Rpe.HDB_PID_FILE),r=Upe(t);if(!(!r||r===process.pid)&&xpe(r))return r}o(Ppe,"getHdbPid");function Lpe(){for(let e of lo)e.kill();lo=[]}o(Lpe,"kill");async function Dpe(){await NY(),await CY(),await Ec(pc.generateAllServiceConfigs())}o(Dpe,"startAllServices");async function wY(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Cr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=pc.generateMainServerConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=pc.generateNatsIngestServiceConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=pc.generateNatsReplyServiceConfig();break;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=pc.generateNatsHubServerConfig(),await Ec(r,t),await oa.removeNatsConfig(e);return;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=pc.generateNatsLeafServerConfig(),await Ec(r,t),await oa.removeNatsConfig(e);return;case Cr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=pc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Ec(r,t)}o(wY,"startService");var Mpe;async function NY(e=!1){for(let t in Cr.CLUSTERING_PROCESSES){let r=Cr.CLUSTERING_PROCESSES[t];await wY(r,e)}}o(NY,"startClusteringProcesses");async function CY(){Mpe=bY(Cr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Cr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await JT.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await JT.updateLocalStreams();let e=await Spe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Cr.PRE_4_0_0_VERSION){hc.info("Starting clustering upgrade 4.0.0 process"),bY(Cr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(CY,"startClusteringThreads");async function vpe(){await oa.generateNatsConfig(!0),await JT.reloadNATSHub(),await JT.reloadNATSLeaf(),await oa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await oa.removeNatsConfig(Cr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(vpe,"reloadClustering");function Upe(e){try{return Number.parseInt(AY.readFileSync(e,"utf8"),10)}catch{return null}}o(Upe,"readPidFile");function xpe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(xpe,"isProcessRunning")});var zO={};Re(zO,{compactOnStart:()=>Bpe,copyDb:()=>UY});async function Bpe(){_c.notify("Running compact on start"),console.log("Running compact on start");let e=(0,YO.get)(F.ROOTPATH),t=new Map,r=at();(0,WO.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,XT.join)(e,"backup",n+".mdb"),a=(0,XT.join)(e,$c,n+"-copy.mdb"),c=0;try{c=await PY(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){_c.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 UY(n,a),console.log("Backing up",n,"to",i);try{await(0,Ql.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{yd()}catch(n){_c.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,Ql.move)(i,s,{overwrite:!0}),await(0,Ql.remove)((0,XT.join)(e,$c,`${n}-copy.mdb-lock`));try{yd()}catch(n){_c.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){_c.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,WO.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,Ql.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw yd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await PY(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}`;_c.error(l),console.error(l)}(0,YO.get)(F.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,Ql.remove)(s))}}async function PY(e){let t=await(0,vY.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function pf(){}async function UY(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,LY.open)(new DY.default(t)),c=a.openDB(ZT.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 MY.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(ZT.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 LY,XT,Ql,YO,DY,MY,ZT,vY,WO,_c,jO=se(()=>{we();LY=require("lmdb"),XT=require("path"),Ql=require("fs-extra"),YO=b(me()),DY=b(jm()),MY=b(zm()),ZT=b(Yt());q();ki();vY=b(Ml()),WO=b(gt()),_c=b(Q());o(Bpe,"compactOnStart");o(PY,"getTotalDBRecordCount");o(pf,"noop");o(UY,"copyDb")});var JO=v((hBe,xY)=>{"use strict";var Mh=me();Mh.initSync();var hf=require("fs-extra"),QO=require("path"),Ef=(q(),M(z)),Fpe=require("crypto"),kpe=require("uuid").v4;xY.exports=Hpe;function Hpe(){if(Mh.getHdbBasePath()!==void 0){let e=QO.join(Mh.getHdbBasePath(),Ef.LICENSE_KEY_DIR_NAME,Ef.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=QO.join(Mh.getHdbBasePath(),Ef.LICENSE_KEY_DIR_NAME,Ef.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=QO.join(Mh.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=kpe(),i=Fpe.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(Hpe,"checkJWTTokenExist")});var FY=v((_Be,BY)=>{"use strict";var XO=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};BY.exports={HdbInfoInsertObject:XO}});var GY=v((SBe,HY)=>{"use strict";var kY=(q(),M(z)),ZO=class{static{o(this,"UpgradeObject")}constructor(t,r){this[kY.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[kY.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};HY.exports={UpgradeObject:ZO}});var ey=v((yBe,$Y)=>{"use strict";var Ys=require("prompt"),_f=require("chalk"),qY=Q(),Ri=require("os"),eP=Vc(),tP=["yes","y"];async function Gpe(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=eP(["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 qY.error("There was an error when prompting user about an upgrade."),qY.error(s),!1}return tP.includes(n.CONFIRM_UPGRADE)}o(Gpe,"forceUpdatePrompt");async function qpe(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=eP(["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 tP.includes(n.CONFIRM_DOWNGRADE)}o(qpe,"forceDowngradePrompt");async function $pe(){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=eP(["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 tP.includes(r.GENERATE_CERTS)}o($pe,"upgradeCertsPrompt");$Y.exports={forceUpdatePrompt:Gpe,forceDowngradePrompt:qpe,upgradeCertsPrompt:$pe}});var ty=v((bBe,VY)=>{"use strict";var rP=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};VY.exports=rP});var YY=v((OBe,KY)=>{"use strict";var Vpe=oe(),Kpe=gt(),IBe=Q(),wBe=require("path"),NBe=require("fs"),CBe=(q(),M(z));KY.exports={getOldPropsValue:Ype};function Ype(e,t,r=!1){let n=t.getRaw(e);return Vpe.isNotEmptyAndHasValue(n)?n:r?Kpe.getDefaultConfig(e):""}o(Ype,"getOldPropsValue")});var QY=v((LBe,jY)=>{"use strict";var gc=require("path"),Sc=require("fs-extra"),Wpe=require("properties-reader"),zpe=ty(),gr=Q(),{getOldPropsValue:Tt}=YY(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:Jl}=(q(),M(z)),Xl=gt(),ry=me(),WY=oe(),uo=(q(),M(z)),nP=new zpe("3.1.0"),zY=[];function jpe(){let e=Wpe(ry.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(Ea,a);let f=await Ni(e);return f.message=`Added ssh key: ${r}${d}`,f}o($Se,"addSSHKey");async function VSe(e){let t=Wn.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(Pc,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(VSe,"updateSSHKey");async function KSe(e){let t=Wn.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(Pc,r+".key"),s=$e.join(Pc,"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(KSe,"deleteSSHKey");async function YSe(e){let t=[];return await Oe.pathExists(Pc)&&(await Oe.readdir(Pc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(YSe,"listSSHKeys");async function WSe(e){let t=Wn.setSSHKnownHostsValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{known_hosts:r}=e;await Oe.outputFile(Ea,r);let n=await Ni(e);return n.message="Known hosts successfully set",n}o(WSe,"setSSHKnownHosts");async function zSe(e){return await Oe.pathExists(Ea)?{known_hosts:await Oe.readFile(Ea,"utf8")}:{known_hosts:null}}o(zSe,"getSSHKnownHosts");cr.customFunctionsStatus=OSe;cr.getCustomFunctions=PSe;cr.getCustomFunction=LSe;cr.setCustomFunction=DSe;cr.dropCustomFunction=MSe;cr.addComponent=vSe;cr.dropCustomFunctionProject=USe;cr.packageComponent=xSe;cr.deployComponent=BSe;cr.getComponents=kSe;cr.getComponentFile=HSe;cr.setComponentFile=GSe;cr.dropComponent=qSe;cr.addSSHKey=$Se;cr.updateSSHKey=VSe;cr.deleteSSHKey=KSe;cr.listSSHKeys=YSe;cr.setSSHKnownHosts=WSe;cr.getSSHKnownHosts=zSe});var _L=v((cke,qj)=>{"use strict";var Qs=require("joi"),Gj=ft();qj.exports={readTransactionLogValidator:jSe,deleteTransactionLogsBeforeValidator:QSe};function jSe(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 Gj.validateBySchema(e,t)}o(jSe,"readTransactionLogValidator");function QSe(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),timestamp:Qs.date().timestamp().required()});return Gj.validateBySchema(e,t)}o(QSe,"deleteTransactionLogsBeforeValidator")});var jy=v((uke,zj)=>{"use strict";var gL=(q(),M(z)),iE=ir(),$j=oe(),Vj=me(),Kj=Xi(),Yj=Q(),{handleHDBError:Wy,hdbErrors:JSe}=_e(),{HTTP_STATUS_CODES:zy}=JSe,{readTransactionLogValidator:XSe,deleteTransactionLogsBeforeValidator:ZSe}=_L(),Wj=us(),eTe="Logs successfully deleted from transaction log.",tTe="All logs successfully deleted from transaction log.";zj.exports={readTransactionLog:rTe,deleteTransactionLogsBefore:sTe};async function rTe(e){let t=XSe(e);if(t)throw Wy(t,t.message,zy.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=$j.checkSchemaTableExist(e.database,e.table);if(r)throw Wy(new Error,r,zy.NOT_FOUND,void 0,void 0,!0);return Vj.get(gL.CONFIG_PARAMS.CLUSTERING_ENABLED)?await nTe(e):(Yj.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)),Wj.readAuditLog(e))}o(rTe,"readTransactionLog");async function*nTe(e){let t=Kj.createNatsTableStreamName(e.database,e.table),r=await iE.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===gL.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(nTe,"readTransactionLogNats");async function sTe(e){let t=ZSe(e);if(t)throw Wy(t,t.message,zy.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!Vj.get(gL.CONFIG_PARAMS.CLUSTERING_ENABLED))return Yj.info("Delete transaction logs called for Plexus"),Wj.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=$j.checkSchemaTableExist(r,n);if(i)throw Wy(new Error,i,zy.NOT_FOUND,void 0,void 0,!0);let a=Kj.createNatsTableStreamName(r,n),{jsm:c}=await iE.getNATSReferences(),l=await iE.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=eTe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=tTe):f=(await iE.viewStream(a,parseInt(s),1))[0].nats_sequence,await iE.purgeTableStream(r,n,{seq:f}),d}o(sTe,"deleteTransactionLogsBefore")});var SL=v((fke,Qj)=>{"use strict";var Qy=require("joi"),iTe=require("path"),{handleHDBError:oTe,hdbErrors:aTe}=_e(),{HTTP_STATUS_CODES:cTe}=aTe,lTe=ft(),jj=Q();Qj.exports={installModules:mTe};var{CONFIG_PARAMS:uTe}=(q(),M(z)),{getConfigValue:dTe}=gt(),{nonInteractiveSpawn:fTe}=($y(),M(qy));async function mTe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";jj.warn(t,e.projects);let r=hTe(e);if(r)throw oTe(r,r.message,cTe.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=dTe(uTe.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=iTe.join(i,l);try{let{stdout:d,stderr:f}=fTe(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=pTe(d.stderr):a[l].npm_error=d.message;continue}}return jj.info(`finished installModules with response ${a}`),a.warning=t,a}o(mTe,"installModules");function pTe(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(pTe,"parseNPMStdErr");function hTe(e){let t=Qy.object({projects:Qy.array().min(1).items(Qy.string()).required(),dry_run:Qy.boolean().default(!1)});return lTe.validateBySchema(e,t)}o(hTe,"modulesValidator")});var bL={};Re(bL,{describeMetric:()=>r4,describeMetricOp:()=>RL,get:()=>e4,getOp:()=>TL,listMetrics:()=>t4,listMetricsOp:()=>yL});async function _Te(e){return(await K_().get(e)).hostname}function Jj(e,t){return e.length===0||e.includes(t)}function TL(e){return oE.trace?.("get_analytics request:",e),e4(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function Zj(e){return"conditions"in e?{...e,conditions:e.conditions.map(Zj)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function e4(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(Zj));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),oE.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")&&(oE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await _Te(d)),oE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function yL(e){return t4(e.metric_types)}async function t4(e=["builtin"]){let t=[],r=Object.values(xo);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 RL(e){return r4(e.metric)}async function r4(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 oE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var Xj,ETe,oE,AL=se(()=>{Xj=b(Q());RA();bA();({forComponent:ETe}=Xj.default),oE=ETe("analytics").conditional;o(_Te,"lookupHostname");o(Jj,"isSelected");o(TL,"getOp");o(Zj,"conformCondition");o(e4,"get");o(yL,"listMetricsOp");o(t4,"listMetrics");o(RL,"describeMetricOp");o(r4,"describeMetric")});var Jy,Xy,aE,Zy=se(()=>{Jy={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},Xy=Object.keys(Jy),aE="primary"});function s4(e){return n4.validateBySchema(e,yTe)}var cE,n4,gTe,STe,TTe,yTe,i4=se(()=>{cE=b(require("joi")),n4=b(ft());Zy();gTe=Xy,STe=Object.entries(Jy).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),TTe=o(()=>{let e=cE.default.string().min(1).max(512);return Object.entries(Jy).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:cE.default.string().valid(...r.allowedValues).messages({"any.only":STe[t]})}))}),e.required()},"createStatusValidationSchema"),yTe=cE.default.object({id:cE.default.string().valid(...gTe).required(),status:TTe()});o(s4,"validateStatus")});function o4(){IL||(IL=_a.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),wL=new Uint8Array(IL))}function a4(){o4(),wL[0]=1}function c4(){return o4(),wL[0]===1}var IL,wL,NL=se(()=>{lE();o(o4,"ensureInitialized");o(a4,"requestRestart");o(c4,"restartNeeded")});var DL={};Re(DL,{DEFAULT_STATUS_ID:()=>aE,STATUS_IDS:()=>Xy,Status:()=>_a,clear:()=>OL,get:()=>PL,set:()=>LL});function dE(){return CL||(CL=Ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),CL}function OL({id:e}){return uE.debug?.("clearStatus",e),dE().delete(e)}async function bTe(){uE.debug?.("getAllStatus");let e=dE().get({}),t=await Ap.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=c4();return{systemStatus:e,componentStatus:r,restartRequired:n}}function PL({id:e}){return e?(uE.debug?.("getStatus",e),dE().get(e)):(uE.debug?.("getStatus","all"),bTe())}function LL({status:e,id:t=aE}){let r=s4({status:e,id:t});if(r)throw(0,eR.handleHDBError)(r,r.message,RTe.BAD_REQUEST);return uE.debug?.("setStatus",t,e),dE().put(t,{status:e})}var eR,l4,RTe,CL,_a,uE,lE=se(()=>{we();eR=b(_e()),l4=b(ts());i4();Zy();Ip();NL();Zy();({HTTP_STATUS_CODES:RTe}=eR.hdbErrors);o(dE,"getStatusTable");_a={get primaryStore(){return dE().primaryStore}},uE=(0,l4.loggerWithTag)("status");o(OL,"clearStatus");o(bTe,"getAllStatus");o(PL,"getStatus");o(LL,"setStatus")});var xL={};Re(xL,{getFingerprint:()=>vL,getRegistrationInfo:()=>ML,setLicense:()=>UL});function ML(){return{version:u4.packageJson.version,deprecated:!0}}function vL(){return{message:"this-is-deprecated",deprecated:!0}}function UL(){return{deprecated:!0}}var u4,BL=se(()=>{u4=b(Ct());o(ML,"getRegistrationInfo");o(vL,"getFingerprint");o(UL,"setLicense")});var f4=v((Dke,d4)=>{"use strict";var fE=require("alasql"),cu=require("recursive-iterator"),Ci=Q(),ATe=oe(),mE=(q(),M(z)),FL=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,wTe(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=>mE.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=>!mE.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][mE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=ITe(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=>!mE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new fE.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 ITe(e){return e.filter(t=>t[mE.PERMS_CRUD_ENUM.READ])}o(ITe,"filterReadRestrictedAttrs");function wTe(e,t,r,n,s){NTe(e,t,r,n,s)}o(wTe,"interpretAST");function pE(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(pE,"addSchemaTableToMap");function NTe(e,t,r,n,s){if(!e){Ci.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof fE.yy.Insert?LTe(e,t,r):e instanceof fE.yy.Select?CTe(e,t,r,n,s):e instanceof fE.yy.Update?OTe(e,t,r):e instanceof fE.yy.Delete?PTe(e,t,r):Ci.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(NTe,"getRecordAttributesAST");function CTe(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(ATe.isEmptyOrZeroLength(i)){Ci.error("No schema specified");return}e.from.forEach(c=>{pE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),pE(c.table,t,r,n,s)});let a=new cu(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 cu(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 cu(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 cu(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(CTe,"getSelectAttributes");function OTe(e,t,r){if(!e){Ci.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new cu(e.columns),s=e.table.databaseid;pE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&kL(e.table.tableid,s,i.columnid,t,r)}o(OTe,"getUpdateAttributes");function PTe(e,t,r){if(!e){Ci.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new cu(e.where),s=e.table.databaseid;pE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&kL(e.table.tableid,s,i.columnid,t,r)}o(PTe,"getDeleteAttributes");function LTe(e,t,r){if(!e){Ci.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new cu(e.columns),s=e.into.databaseid;pE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&kL(e.into.tableid,s,i.columnid,t,r)}o(LTe,"getInsertAttributes");function kL(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(kL,"pushAttribute");d4.exports=FL});var sR=v((vke,O4)=>{"use strict";var HL=Gn(),tR=_n(),As=IT(),_E=Ml(),GL=bl(),DTe=zC(),MTe=N1(),gE=$n(),rR=qp(),Pr=Q(),vTe=ZC(),UTe=BT(),xTe=wO(),BTe=kT(),FTe=OO(),kTe=PO(),HTe=MO(),GTe=UO(),qL=VT(),ga=oe(),h4=Df(),wn=(q(),M(z)),E4=lj(),qTe=yh(),_4=(Ld(),M(zp)),g4=(ky(),M(eE)),S4=gt(),yr=EL(),T4=jy(),$Te=SL(),vf=Es(),y4=(sf(),M(nf)),$L=(AL(),M(bL)),VL=(lE(),M(DL)),R4=($h(),M(Sy)),KL=(BL(),M(xL)),b4=ZN(),{handleHDBError:zn,hdbErrors:A4}=_e(),{HDB_ERROR_MSGS:ln,HTTP_STATUS_CODES:hE}=A4,ee=new Map,I4="delete",Lc="insert",Js="read",lu="update",EE="describe",m4=_E.describeSchema.name,p4=_E.describeTable.name,w4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},VTe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},KTe="catchup",YTe="handleGetJob",WTe="handleGetJobsByStartDate",nR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},zTe=[As.createTable.name,As.createAttribute.name,As.dropTable.name,As.dropAttribute.name],N4={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(HL.insert.name,new re(!1,[Lc]));ee.set(HL.update.name,new re(!1,[lu]));ee.set(HL.upsert.name,new re(!1,[Lc,lu]));ee.set(tR.searchByConditions.name,new re(!1,[Js]));ee.set(tR.searchByHash.name,new re(!1,[Js]));ee.set(tR.searchByValue.name,new re(!1,[Js]));ee.set(tR.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,[Lc]));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(_E.describeSchema.name,new re(!1,[Js]));ee.set(_E.describeTable.name,new re(!1,[Js]));ee.set(GL.deleteRecord.name,new re(!1,[I4]));ee.set(gE.addUser.name,new re(!0,[]));ee.set(gE.alterUser.name,new re(!0,[]));ee.set(gE.dropUser.name,new re(!0,[]));ee.set(gE.listUsersExternal.name,new re(!0,[]));ee.set(rR.listRoles.name,new re(!0,[]));ee.set(rR.addRole.name,new re(!0,[]));ee.set(rR.alterRole.name,new re(!0,[]));ee.set(rR.dropRole.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(FTe.name,new re(!0,[]));ee.set(kTe.name,new re(!0,[]));ee.set(qL.setRoutes.name,new re(!0,[]));ee.set(qL.getRoutes.name,new re(!0,[]));ee.set(qL.deleteRoutes.name,new re(!0,[]));ee.set(S4.setConfiguration.name,new re(!0,[]));ee.set(HTe.clusterStatus.name,new re(!0,[]));ee.set(GTe.name,new re(!0,[]));ee.set(GL.deleteFilesBefore.name,new re(!0,[]));ee.set(GL.deleteAuditLogsBefore.name,new re(!0,[]));ee.set(h4.restart.name,new re(!0,[]));ee.set(h4.restartService.name,new re(!0,[]));ee.set(DTe.name,new re(!0,[]));ee.set(MTe.name,new re(!0,[Js]));ee.set(As.cleanupOrphanBlobs.name,new re(!0,[]));ee.set(qTe.systemInformation.name,new re(!0,[]));ee.set(S4.getConfiguration.name,new re(!0,[]));ee.set(T4.readTransactionLog.name,new re(!0,[]));ee.set(T4.deleteTransactionLogsBefore.name,new re(!0,[]));ee.set($Te.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(y4.addNodeBack.name,new re(!0,[]));ee.set(y4.removeNodeBack.name,new re(!0,[]));ee.set($L.getOp.name,new re(!1,[Js]));ee.set($L.listMetricsOp.name,new re(!1,[Js]));ee.set($L.describeMetricOp.name,new re(!1,[Js]));ee.set(VL.clear.name,new re(!0,[]));ee.set(VL.get.name,new re(!0,[]));ee.set(VL.set.name,new re(!0,[]));ee.set(R4.installUsageLicenseOp.name,new re(!0,[]));ee.set(R4.getUsageLicensesOp.name,new re(!0,[]));ee.set(KL.getFingerprint.name,new re(!0,[]));ee.set(KL.setLicense.name,new re(!0,[]));ee.set(_4.createTokens.name,new re(!1,[]));ee.set(_4.refreshOperationToken.name,new re(!1,[]));ee.set(g4.login.name,new re(!1,[]));ee.set(g4.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(KL.getRegistrationInfo.name,new re(!1,[]));ee.set(gE.userInfo.name,new re(!1,[]));ee.set(_E.describeAll.name,new re(!1,[]));ee.set(YTe,new re(!1,[]));ee.set(WTe,new re(!0,[]));ee.set(KTe,new re(!0,[]));ee.set(nR.CSV_DATA_LOAD,new re(!1,[Lc,lu]));ee.set(nR.CSV_URL_LOAD,new re(!1,[Lc,lu]));ee.set(nR.CSV_FILE_LOAD,new re(!1,[Lc,lu]));ee.set(nR.IMPORT_FROM_S3,new re(!1,[Lc,lu]));ee.set(N4.EXPORT_TO_S3,new re(!0,[]));ee.set(N4.EXPORT_LOCAL,new re(!0,[]));ee.set(wn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[I4]));ee.set(wn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[Js]));ee.set(wn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[Lc]));ee.set(wn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[lu]));O4.exports={verifyPerms:QTe,verifyPermsAst:jTe,verifyBulkLoadAttributePerms:XTe};function jTe(e,t,r){if(ga.isEmptyOrZeroLength(e))throw Pr.info("verify_perms_ast has an empty user parameter"),zn(new Error);if(ga.isEmptyOrZeroLength(t))throw Pr.info("verify_perms_ast has an empty user parameter"),zn(new Error);if(ga.isEmptyOrZeroLength(r))throw Pr.info("verify_perms_ast has a null operation parameter"),zn(new Error);try{let n=f4(),s=require("alasql"),i=new b4,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."),zn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&w4[r])throw zn(new Error,ln.DROP_SYSTEM,hE.FORBIDDEN);if(u&&!d)return null;let f=E4.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=C4(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=WL(t.role.permission,h,p[E]);YL(g,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw zn(n)}}o(jTe,"verifyPermsAst");function QTe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Pr.info("null required parameter in verifyPerms"),zn(new Error,ln.DEFAULT_INVALID_REQUEST,hE.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 b4;if(ga.isEmptyOrZeroLength(e.hdb_user?.role)||ga.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&&VTe[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&&w4[r])throw zn(new Error,ln.DROP_SYSTEM,hE.FORBIDDEN);if(l&&!d||u===!0&&(r===As.createSchema.name||r===As.dropSchema.name))return null;if(zTe.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=E4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===m4||r===p4)&&!f.super_user){if(s===wn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(ln.SCHEMA_PERM_ERROR(s));if(r===m4&&(!f[s]||!f[s][EE]))return c.handleInvalidItem(ln.SCHEMA_NOT_FOUND(s));if(r===p4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][EE]))return c.handleInvalidItem(ln.TABLE_NOT_FOUND(s,i))}let m=C4(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=WL(e.hdb_user?.role?.permission,s,i);return YL(p,h,r,i,s,c,n),c.getPermsResponse()}o(QTe,"verifyPerms");function C4(e,t,r,n,s){if(ga.arrayHasEmptyValues([e,t,r]))throw Pr.info("hasPermissions has an invalid parameter"),zn(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.`),zn(new Error,ln.OP_NOT_FOUND(t),hE.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][EE]===!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[EE]===!1)n.addInvalidItem(ln.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!ga.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),zn(A4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(C4,"hasPermissions");function YL(e,t,r,n,s,i,a){if(!e||!t)throw Pr.info("no attributes specified in checkAttributePerms."),zn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Pr.info(`no permissions found for ${r} in checkAttributePerms().`),zn(new Error);if(ga.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[EE]===!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 zn(new Error,ln.SYSTEM_TIMESTAMP_PERMS_ERR,hE.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(YL,"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 WL(e,t,r){let n=new Map;if(ga.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(WL,"getAttributePermissions");function XTe(e,t,r,n,s,i,a){let c=new Set(i),l=WL(e,n,s);YL(c,l,t,s,n,a,r)}o(XTe,"verifyBulkLoadAttributePerms")});var jL=v((xke,P4)=>{"use strict";var zL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};P4.exports=zL});var tD=v((qke,W4)=>{"use strict";var iR=Gn(),aR=KN(),ZTe=require("needle"),Oi=(q(),M(z)),Fke=Pt(),Uf=oe(),{handleHDBError:Zt,hdbErrors:k4}=_e(),{HTTP_STATUS_CODES:un,HDB_ERROR_MSGS:Lr,CHECK_LOGS_WRAPPER:du}=k4,xf=Q(),QL=require("papaparse");Uf.promisifyPapaParse();var Pi=require("fs-extra"),eye=require("path"),{chain:L4}=require("stream-chain"),D4=require("stream-json/streamers/StreamArray"),M4=require("stream-json/utils/Batch"),v4=require("stream-chain/utils/comp"),{finished:U4}=require("stream"),tye=me(),H4=YN(),rye=WN(),{BulkLoadFileObject:XL,BulkLoadDataObject:nye}=jq(),ZL=ZN(),{verifyBulkLoadAttributePerms:G4}=sR(),kke=jL(),Hke=ir(),Gke=Xi(),{databases:sye}=(we(),M(mt)),{coerceType:iye}=(ag(),M(SG)),x4="No records parsed from csv file.",uu=`${tye.get("HDB_ROOT")}/tmp`,{schemaRegex:oye}=Yi(),B4=1024*1024*2,F4=5e3,aye={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};W4.exports={csvDataLoad:cye,csvURLLoad:lye,csvFileLoad:uye,importFromS3:dye};async function cye(e,t){let r=aR.dataObject(e);if(r)throw Zt(r,r.message,un.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=V4(e.schema,e.table),i=QL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:JL.bind(null,s),dynamicTyping:!1}),a=new ZL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&G4(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 nye(e.action,e.schema,e.table,i.data);return n=await H4.callOperationFunctionAsAwait(K4,l,null),n.message===x4?x4:Y4(n.records,n.number_written)}catch(s){throw fu(s)}}o(cye,"csvDataLoad");async function lye(e){let t=aR.urlObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${uu}/${r}`;try{await fye(e,r)}catch(s){throw xf.error(Lr.DOWNLOAD_FILE_ERR(r)+" - "+s),Zt(s,du(Lr.DOWNLOAD_FILE_ERR(r)))}try{let s=new XL(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 eD(s);return await oR(n),i}catch(s){throw await oR(n),fu(s)}}o(lye,"csvURLLoad");async function uye(e){let t=aR.fileObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r=new XL(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 eD(r)}catch(n){throw fu(n)}}o(uye,"csvFileLoad");async function dye(e){let t=aR.s3FileObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=eye.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${uu}/${s}`;let i=new XL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await mye(s,e);let a=await eD(i);return await oR(r),a}catch(n){throw await oR(r),fu(n)}}o(dye,"importFromS3");async function fye(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await ZTe("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)}hye(r,e.csv_url),await pye(t,r.raw)}o(fye,"downloadCSVFile");async function mye(e,t){try{let r=`${uu}/${e}`;await Pi.mkdirp(uu),await Pi.writeFile(`${uu}/${e}`,"",{flag:"a+"});let n=await Pi.createWriteStream(r),s=await rye.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,du(Lr.S3_DOWNLOAD_ERR))}}o(mye,"downloadFileFromS3");async function pye(e,t){try{await Pi.mkdirp(uu),await Pi.writeFile(`${uu}/${e}`,t)}catch(r){throw xf.error(Lr.WRITE_TEMP_FILE_ERR),Zt(r,du(Lr.DEFAULT_BULK_LOAD_ERR))}}o(pye,"writeFileToTempFolder");async function oR(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(oR,"deleteTempFile");function hye(e,t){if(e.statusCode!==k4.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(!aye[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(hye,"validateURLResponse");async function eD(e){try{let t;switch(e.file_type){case Oi.VALID_S3_FILE_TYPES.CSV:t=await Eye(e);break;case Oi.VALID_S3_FILE_TYPES.JSON:t=await _ye(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 Y4(t.records,t.number_written)}catch(t){throw fu(t)}}o(eD,"fileLoad");async function q4(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 iR.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&G4(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(q4,"validateChunk");async function $4(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 H4.callOperationFunctionAsAwait(K4,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Zt(c,du(Lr.INSERT_CSV_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.INSERT_CSV_ERR+" - "+c);r(l)}}o($4,"insertChunk");async function Eye(e){let t={records:0,number_written:0},r=V4(e.schema,e.table);try{let n=new ZL,s=Pi.createReadStream(e.file_path,{highWaterMark:B4});s.setEncoding("utf8"),await QL.parsePromise(s,q4.bind(null,e,n),JL.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:B4}),s.setEncoding("utf8"),await QL.parsePromise(s,$4.bind(null,e,t),JL.bind(null,r)),s.destroy(),t}catch(n){throw Zt(n,du(Lr.PAPA_PARSE_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.PAPA_PARSE_ERR+n)}}o(Eye,"callPapaParse");function V4(e,t){let r=sye[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>iye(i,s));return n}o(V4,"createTransformMap");function JL(e,t,r){let n=e.get(r);return n?n(t):Uf.autoCast(t)}o(JL,"typeFunction");async function _ye(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new ZL,s=L4([Pi.createReadStream(e.file_path,{encoding:"utf-8"}),D4.withParser(),c=>c.value,new M4({batchSize:F4}),v4(async c=>{await q4(e,n,r,c)})]);await new Promise((c,l)=>{U4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Zt(new Error,i,un.BAD_REQUEST);let a=L4([Pi.createReadStream(e.file_path,{encoding:"utf-8"}),D4.withParser(),c=>c.value,new M4({batchSize:F4}),v4(async c=>{await $4(e,t,r,c)})]);return await new Promise((c,l)=>{U4(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Zt(n,du(Lr.INSERT_JSON_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.INSERT_JSON_ERR+n)}}o(_ye,"insertJson");async function K4(e){let t={};try{e.data&&e.data.length>0&&gye(e.data[0])?t=await Sye(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",xf.info(t.message))}catch(r){throw fu(r)}return t}o(K4,"callBulkFileLoad");function gye(e){let t=Object.keys(e);for(let r of t)if(!oye.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(gye,"validateColumnNames");async function Sye(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=iR.insert;break;case"update":i=iR.update;break;case"upsert":i=iR.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 fu(a)}}o(Sye,"bulkFileLoad");function Y4(e,t){return`successfully loaded ${t} of ${e} records`}o(Y4,"buildResponseMsg");function fu(e){return Zt(e,du(Lr.DEFAULT_BULK_LOAD_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(fu,"buildTopLevelErrMsg")});var J4=v((Kke,Q4)=>{"use strict";var Tye=_n(),yye=mi(),z4=Q(),Rye=Gn(),Vke=kS(),bye=require("clone"),nD=require("alasql"),Aye=kg(),j4=require("util"),Iye=j4.promisify(yye.getTableSchema),wye=j4.promisify(Tye.search),Nye=(q(),M(z)),rD=oe();Aye(nD);Q4.exports={update:Oye};var Cye="There was a problem performing this update. Please check the logs and try again.";async function Oye({statement:e,hdb_user:t}){let r=await Iye(e.table.databaseid,e.table.tableid),n=Pye(e.columns);rD.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=bye(s),c=rD.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=nD.parse(l).statements[0],d=await wye(u),f=Lye(n,d);return Dye(a,f,t)}o(Oye,"update");function Pye(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=nD.compile(`SELECT ${r.expression.toString()} AS [${Nye.FUNC_VAL}] FROM ?`)}),t}catch(t){throw z4.error(t),new Error(Cye)}}o(Pye,"createUpdateRecord");function Lye(e,t){return rD.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Lye,"buildUpdateRecords");async function Dye(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Rye.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){z4.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Dye,"updateRecords")});var Z4=v((jke,X4)=>{var Mye=require("alasql"),vye=_n(),Uye=Q(),xye=us(),iD=require("util"),sD=oe(),Bye=(q(),M(z)),Fye=mi(),Wke=kS(),zke=Gn(),kye="record",Hye="successfully deleted",Gye=iD.callbackify(Kye),qye=iD.promisify(vye.search),$ye=iD.promisify(Fye.getTableSchema);X4.exports={convertDelete:Gye};function Vye(e){return`${e.deleted_hashes.length} ${kye}${e.deleted_hashes.length===1?"":"s"} ${Hye}`}o(Vye,"generateReturnMessage");async function Kye({statement:e,hdb_user:t}){let r=await $ye(e.table.databaseid,e.table.tableid);sD.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=sD.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Mye.parse(a).statements[0],l={operation:Bye.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await qye(c);let u=await xye.deleteRecords(l);return sD.isEmptyOrZeroLength(u.message)&&(u.message=Vye(u)),delete u.txn_time,u}catch(u){throw Uye.error(u),u.hdb_code?u.message:u}}o(Kye,"convertDelete")});var TE=v((Jke,sQ)=>{"use strict";sQ.exports={evaluateSQL:sRe,processAST:nQ,convertSQLToAST:rQ,checkASTPermissions:tQ};var Yye=Gn(),eQ=require("util"),Wye=eQ.callbackify(Yye.insert),zye=_n().search,jye=J4().update,Qye=eQ.callbackify(jye),Jye=Z4().convertDelete,Dc=require("alasql"),Xye=sR(),cR=Q(),Zye=kg(),eRe=oe(),SE=(q(),M(z)),{hdbErrors:tRe,handleHDBError:oD}=_e(),{HTTP_STATUS_CODES:aD}=tRe;Zye(Dc);var rRe=403,nRe="There was a problem performing this insert. Please check the logs and try again.",cD=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function sRe(e,t){let r=e.parsed_sql_object;if(!r){r=rQ(e.sql);let n,s=r.ast.statements[0];if(s instanceof Dc.yy.Insert?n=s.into.databaseid:s instanceof Dc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Dc.yy.Update||s instanceof Dc.yy.Delete?n=s.table.databaseid:cR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Dc.yy.Select)&&eRe.isEmptyOrZeroLength(n))return t("No schema specified",null)}nQ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(sRe,"evaluateSQL");function tQ(e,t){let r;try{r=Xye.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(tQ,"checkASTPermissions");function rQ(e){let t=new cD;if(!e)throw oD(new Error,"The 'sql' parameter is missing from the request body",aD.BAD_REQUEST);try{let r=e.trim(),n=Dc.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(pTe,"parseNPMStdErr");function hTe(e){let t=Qy.object({projects:Qy.array().min(1).items(Qy.string()).required(),dry_run:Qy.boolean().default(!1)});return lTe.validateBySchema(e,t)}o(hTe,"modulesValidator")});var bL={};Re(bL,{describeMetric:()=>r4,describeMetricOp:()=>RL,get:()=>e4,getOp:()=>TL,listMetrics:()=>t4,listMetricsOp:()=>yL});async function _Te(e){return(await K_().get(e)).hostname}function Jj(e,t){return e.length===0||e.includes(t)}function TL(e){return oE.trace?.("get_analytics request:",e),e4(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function Zj(e){return"conditions"in e?{...e,conditions:e.conditions.map(Zj)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function e4(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(Zj));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),oE.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")&&(oE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await _Te(d)),oE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function yL(e){return t4(e.metric_types)}async function t4(e=["builtin"]){let t=[],r=Object.values(xo);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 RL(e){return r4(e.metric)}async function r4(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 oE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var Xj,ETe,oE,AL=se(()=>{Xj=b(Q());RA();bA();({forComponent:ETe}=Xj.default),oE=ETe("analytics").conditional;o(_Te,"lookupHostname");o(Jj,"isSelected");o(TL,"getOp");o(Zj,"conformCondition");o(e4,"get");o(yL,"listMetricsOp");o(t4,"listMetrics");o(RL,"describeMetricOp");o(r4,"describeMetric")});var Jy,Xy,aE,Zy=se(()=>{Jy={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},Xy=Object.keys(Jy),aE="primary"});function s4(e){return n4.validateBySchema(e,yTe)}var cE,n4,gTe,STe,TTe,yTe,i4=se(()=>{cE=b(require("joi")),n4=b(ft());Zy();gTe=Xy,STe=Object.entries(Jy).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),TTe=o(()=>{let e=cE.default.string().min(1).max(512);return Object.entries(Jy).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:cE.default.string().valid(...r.allowedValues).messages({"any.only":STe[t]})}))}),e.required()},"createStatusValidationSchema"),yTe=cE.default.object({id:cE.default.string().valid(...gTe).required(),status:TTe()});o(s4,"validateStatus")});function o4(){IL||(IL=_a.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),wL=new Uint8Array(IL))}function a4(){o4(),wL[0]=1}function c4(){return o4(),wL[0]===1}var IL,wL,NL=se(()=>{lE();o(o4,"ensureInitialized");o(a4,"requestRestart");o(c4,"restartNeeded")});var DL={};Re(DL,{DEFAULT_STATUS_ID:()=>aE,STATUS_IDS:()=>Xy,Status:()=>_a,clear:()=>OL,get:()=>PL,set:()=>LL});function dE(){return CL||(CL=Ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),CL}function OL({id:e}){return uE.debug?.("clearStatus",e),dE().delete(e)}async function bTe(){uE.debug?.("getAllStatus");let e=dE().get({}),t=await Ap.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=c4();return{systemStatus:e,componentStatus:r,restartRequired:n}}function PL({id:e}){return e?(uE.debug?.("getStatus",e),dE().get(e)):(uE.debug?.("getStatus","all"),bTe())}function LL({status:e,id:t=aE}){let r=s4({status:e,id:t});if(r)throw(0,eR.handleHDBError)(r,r.message,RTe.BAD_REQUEST);return uE.debug?.("setStatus",t,e),dE().put(t,{status:e})}var eR,l4,RTe,CL,_a,uE,lE=se(()=>{we();eR=b(_e()),l4=b(ts());i4();Zy();Ip();NL();Zy();({HTTP_STATUS_CODES:RTe}=eR.hdbErrors);o(dE,"getStatusTable");_a={get primaryStore(){return dE().primaryStore}},uE=(0,l4.loggerWithTag)("status");o(OL,"clearStatus");o(bTe,"getAllStatus");o(PL,"getStatus");o(LL,"setStatus")});var xL={};Re(xL,{getFingerprint:()=>vL,getRegistrationInfo:()=>ML,setLicense:()=>UL});function ML(){return{version:u4.packageJson.version,deprecated:!0}}function vL(){return{message:"this-is-deprecated",deprecated:!0}}function UL(){return{deprecated:!0}}var u4,BL=se(()=>{u4=b(Ct());o(ML,"getRegistrationInfo");o(vL,"getFingerprint");o(UL,"setLicense")});var f4=v((Dke,d4)=>{"use strict";var fE=require("alasql"),cu=require("recursive-iterator"),Ci=Q(),ATe=oe(),mE=(q(),M(z)),FL=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,wTe(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=>mE.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=>!mE.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][mE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=ITe(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=>!mE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new fE.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 ITe(e){return e.filter(t=>t[mE.PERMS_CRUD_ENUM.READ])}o(ITe,"filterReadRestrictedAttrs");function wTe(e,t,r,n,s){NTe(e,t,r,n,s)}o(wTe,"interpretAST");function pE(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(pE,"addSchemaTableToMap");function NTe(e,t,r,n,s){if(!e){Ci.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof fE.yy.Insert?LTe(e,t,r):e instanceof fE.yy.Select?CTe(e,t,r,n,s):e instanceof fE.yy.Update?OTe(e,t,r):e instanceof fE.yy.Delete?PTe(e,t,r):Ci.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(NTe,"getRecordAttributesAST");function CTe(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(ATe.isEmptyOrZeroLength(i)){Ci.error("No schema specified");return}e.from.forEach(c=>{pE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),pE(c.table,t,r,n,s)});let a=new cu(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 cu(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 cu(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 cu(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(CTe,"getSelectAttributes");function OTe(e,t,r){if(!e){Ci.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new cu(e.columns),s=e.table.databaseid;pE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&kL(e.table.tableid,s,i.columnid,t,r)}o(OTe,"getUpdateAttributes");function PTe(e,t,r){if(!e){Ci.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new cu(e.where),s=e.table.databaseid;pE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&kL(e.table.tableid,s,i.columnid,t,r)}o(PTe,"getDeleteAttributes");function LTe(e,t,r){if(!e){Ci.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new cu(e.columns),s=e.into.databaseid;pE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&kL(e.into.tableid,s,i.columnid,t,r)}o(LTe,"getInsertAttributes");function kL(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(kL,"pushAttribute");d4.exports=FL});var sR=v((vke,O4)=>{"use strict";var HL=Gn(),tR=_n(),As=IT(),_E=Ml(),GL=bl(),DTe=zC(),MTe=N1(),gE=$n(),rR=qp(),Pr=Q(),vTe=ZC(),UTe=BT(),xTe=wO(),BTe=kT(),FTe=OO(),kTe=PO(),HTe=MO(),GTe=UO(),qL=VT(),ga=oe(),h4=Df(),wn=(q(),M(z)),E4=lj(),qTe=yh(),_4=(Ld(),M(zp)),g4=(ky(),M(eE)),S4=gt(),yr=EL(),T4=jy(),$Te=SL(),vf=Es(),y4=(sf(),M(nf)),$L=(AL(),M(bL)),VL=(lE(),M(DL)),R4=($h(),M(Sy)),KL=(BL(),M(xL)),b4=ZN(),{handleHDBError:zn,hdbErrors:A4}=_e(),{HDB_ERROR_MSGS:ln,HTTP_STATUS_CODES:hE}=A4,ee=new Map,I4="delete",Lc="insert",Js="read",lu="update",EE="describe",m4=_E.describeSchema.name,p4=_E.describeTable.name,w4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},VTe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},KTe="catchup",YTe="handleGetJob",WTe="handleGetJobsByStartDate",nR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},zTe=[As.createTable.name,As.createAttribute.name,As.dropTable.name,As.dropAttribute.name],N4={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(HL.insert.name,new re(!1,[Lc]));ee.set(HL.update.name,new re(!1,[lu]));ee.set(HL.upsert.name,new re(!1,[Lc,lu]));ee.set(tR.searchByConditions.name,new re(!1,[Js]));ee.set(tR.searchByHash.name,new re(!1,[Js]));ee.set(tR.searchByValue.name,new re(!1,[Js]));ee.set(tR.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,[Lc]));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(_E.describeSchema.name,new re(!1,[Js]));ee.set(_E.describeTable.name,new re(!1,[Js]));ee.set(GL.deleteRecord.name,new re(!1,[I4]));ee.set(gE.addUser.name,new re(!0,[]));ee.set(gE.alterUser.name,new re(!0,[]));ee.set(gE.dropUser.name,new re(!0,[]));ee.set(gE.listUsersExternal.name,new re(!0,[]));ee.set(rR.listRoles.name,new re(!0,[]));ee.set(rR.addRole.name,new re(!0,[]));ee.set(rR.alterRole.name,new re(!0,[]));ee.set(rR.dropRole.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(FTe.name,new re(!0,[]));ee.set(kTe.name,new re(!0,[]));ee.set(qL.setRoutes.name,new re(!0,[]));ee.set(qL.getRoutes.name,new re(!0,[]));ee.set(qL.deleteRoutes.name,new re(!0,[]));ee.set(S4.setConfiguration.name,new re(!0,[]));ee.set(HTe.clusterStatus.name,new re(!0,[]));ee.set(GTe.name,new re(!0,[]));ee.set(GL.deleteFilesBefore.name,new re(!0,[]));ee.set(GL.deleteAuditLogsBefore.name,new re(!0,[]));ee.set(h4.restart.name,new re(!0,[]));ee.set(h4.restartService.name,new re(!0,[]));ee.set(DTe.name,new re(!0,[]));ee.set(MTe.name,new re(!0,[Js]));ee.set(As.cleanupOrphanBlobs.name,new re(!0,[]));ee.set(qTe.systemInformation.name,new re(!0,[]));ee.set(S4.getConfiguration.name,new re(!0,[]));ee.set(T4.readTransactionLog.name,new re(!0,[]));ee.set(T4.deleteTransactionLogsBefore.name,new re(!0,[]));ee.set($Te.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(y4.addNodeBack.name,new re(!0,[]));ee.set(y4.removeNodeBack.name,new re(!0,[]));ee.set($L.getOp.name,new re(!1,[Js]));ee.set($L.listMetricsOp.name,new re(!1,[Js]));ee.set($L.describeMetricOp.name,new re(!1,[Js]));ee.set(VL.clear.name,new re(!0,[]));ee.set(VL.get.name,new re(!0,[]));ee.set(VL.set.name,new re(!0,[]));ee.set(R4.installUsageLicenseOp.name,new re(!0,[]));ee.set(R4.getUsageLicensesOp.name,new re(!0,[]));ee.set(KL.getFingerprint.name,new re(!0,[]));ee.set(KL.setLicense.name,new re(!0,[]));ee.set(_4.createTokens.name,new re(!1,[]));ee.set(_4.refreshOperationToken.name,new re(!1,[]));ee.set(g4.login.name,new re(!1,[]));ee.set(g4.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(KL.getRegistrationInfo.name,new re(!1,[]));ee.set(gE.userInfo.name,new re(!1,[]));ee.set(_E.describeAll.name,new re(!1,[]));ee.set(YTe,new re(!1,[]));ee.set(WTe,new re(!0,[]));ee.set(KTe,new re(!0,[]));ee.set(nR.CSV_DATA_LOAD,new re(!1,[Lc,lu]));ee.set(nR.CSV_URL_LOAD,new re(!1,[Lc,lu]));ee.set(nR.CSV_FILE_LOAD,new re(!1,[Lc,lu]));ee.set(nR.IMPORT_FROM_S3,new re(!1,[Lc,lu]));ee.set(N4.EXPORT_TO_S3,new re(!0,[]));ee.set(N4.EXPORT_LOCAL,new re(!0,[]));ee.set(wn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[I4]));ee.set(wn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[Js]));ee.set(wn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[Lc]));ee.set(wn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[lu]));O4.exports={verifyPerms:QTe,verifyPermsAst:jTe,verifyBulkLoadAttributePerms:XTe};function jTe(e,t,r){if(ga.isEmptyOrZeroLength(e))throw Pr.info("verify_perms_ast has an empty user parameter"),zn(new Error);if(ga.isEmptyOrZeroLength(t))throw Pr.info("verify_perms_ast has an empty user parameter"),zn(new Error);if(ga.isEmptyOrZeroLength(r))throw Pr.info("verify_perms_ast has a null operation parameter"),zn(new Error);try{let n=f4(),s=require("alasql"),i=new b4,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."),zn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&w4[r])throw zn(new Error,ln.DROP_SYSTEM,hE.FORBIDDEN);if(u&&!d)return null;let f=E4.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=C4(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=WL(t.role.permission,h,p[E]);YL(g,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw zn(n)}}o(jTe,"verifyPermsAst");function QTe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Pr.info("null required parameter in verifyPerms"),zn(new Error,ln.DEFAULT_INVALID_REQUEST,hE.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 b4;if(ga.isEmptyOrZeroLength(e.hdb_user?.role)||ga.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&&VTe[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&&w4[r])throw zn(new Error,ln.DROP_SYSTEM,hE.FORBIDDEN);if(l&&!d||u===!0&&(r===As.createSchema.name||r===As.dropSchema.name))return null;if(zTe.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=E4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===m4||r===p4)&&!f.super_user){if(s===wn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(ln.SCHEMA_PERM_ERROR(s));if(r===m4&&(!f[s]||!f[s][EE]))return c.handleInvalidItem(ln.SCHEMA_NOT_FOUND(s));if(r===p4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][EE]))return c.handleInvalidItem(ln.TABLE_NOT_FOUND(s,i))}let m=C4(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=WL(e.hdb_user?.role?.permission,s,i);return YL(p,h,r,i,s,c,n),c.getPermsResponse()}o(QTe,"verifyPerms");function C4(e,t,r,n,s){if(ga.arrayHasEmptyValues([e,t,r]))throw Pr.info("hasPermissions has an invalid parameter"),zn(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.`),zn(new Error,ln.OP_NOT_FOUND(t),hE.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][EE]===!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[EE]===!1)n.addInvalidItem(ln.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!ga.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),zn(A4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(C4,"hasPermissions");function YL(e,t,r,n,s,i,a){if(!e||!t)throw Pr.info("no attributes specified in checkAttributePerms."),zn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Pr.info(`no permissions found for ${r} in checkAttributePerms().`),zn(new Error);if(ga.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[EE]===!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 zn(new Error,ln.SYSTEM_TIMESTAMP_PERMS_ERR,hE.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(YL,"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 WL(e,t,r){let n=new Map;if(ga.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(WL,"getAttributePermissions");function XTe(e,t,r,n,s,i,a){let c=new Set(i),l=WL(e,n,s);YL(c,l,t,s,n,a,r)}o(XTe,"verifyBulkLoadAttributePerms")});var jL=v((xke,P4)=>{"use strict";var zL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};P4.exports=zL});var tD=v((qke,W4)=>{"use strict";var iR=Gn(),aR=KN(),ZTe=require("needle"),Oi=(q(),M(z)),Fke=Pt(),Uf=oe(),{handleHDBError:Zt,hdbErrors:k4}=_e(),{HTTP_STATUS_CODES:un,HDB_ERROR_MSGS:Lr,CHECK_LOGS_WRAPPER:du}=k4,xf=Q(),QL=require("papaparse");Uf.promisifyPapaParse();var Pi=require("fs-extra"),eye=require("path"),{chain:L4}=require("stream-chain"),D4=require("stream-json/streamers/StreamArray"),M4=require("stream-json/utils/Batch"),v4=require("stream-chain/utils/comp"),{finished:U4}=require("stream"),tye=me(),H4=YN(),rye=WN(),{BulkLoadFileObject:XL,BulkLoadDataObject:nye}=jq(),ZL=ZN(),{verifyBulkLoadAttributePerms:G4}=sR(),kke=jL(),Hke=ir(),Gke=Xi(),{databases:sye}=(we(),M(mt)),{coerceType:iye}=(ag(),M(SG)),x4="No records parsed from csv file.",uu=`${tye.get("HDB_ROOT")}/tmp`,{schemaRegex:oye}=Yi(),B4=1024*1024*2,F4=5e3,aye={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};W4.exports={csvDataLoad:cye,csvURLLoad:lye,csvFileLoad:uye,importFromS3:dye};async function cye(e,t){let r=aR.dataObject(e);if(r)throw Zt(r,r.message,un.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=V4(e.schema,e.table),i=QL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:JL.bind(null,s),dynamicTyping:!1}),a=new ZL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&G4(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 nye(e.action,e.schema,e.table,i.data);return n=await H4.callOperationFunctionAsAwait(K4,l,null),n.message===x4?x4:Y4(n.records,n.number_written)}catch(s){throw fu(s)}}o(cye,"csvDataLoad");async function lye(e){let t=aR.urlObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${uu}/${r}`;try{await fye(e,r)}catch(s){throw xf.error(Lr.DOWNLOAD_FILE_ERR(r)+" - "+s),Zt(s,du(Lr.DOWNLOAD_FILE_ERR(r)))}try{let s=new XL(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 eD(s);return await oR(n),i}catch(s){throw await oR(n),fu(s)}}o(lye,"csvURLLoad");async function uye(e){let t=aR.fileObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r=new XL(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 eD(r)}catch(n){throw fu(n)}}o(uye,"csvFileLoad");async function dye(e){let t=aR.s3FileObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=eye.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${uu}/${s}`;let i=new XL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await mye(s,e);let a=await eD(i);return await oR(r),a}catch(n){throw await oR(r),fu(n)}}o(dye,"importFromS3");async function fye(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await ZTe("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)}hye(r,e.csv_url),await pye(t,r.raw)}o(fye,"downloadCSVFile");async function mye(e,t){try{let r=`${uu}/${e}`;await Pi.mkdirp(uu),await Pi.writeFile(`${uu}/${e}`,"",{flag:"a+"});let n=await Pi.createWriteStream(r),s=await rye.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,du(Lr.S3_DOWNLOAD_ERR))}}o(mye,"downloadFileFromS3");async function pye(e,t){try{await Pi.mkdirp(uu),await Pi.writeFile(`${uu}/${e}`,t)}catch(r){throw xf.error(Lr.WRITE_TEMP_FILE_ERR),Zt(r,du(Lr.DEFAULT_BULK_LOAD_ERR))}}o(pye,"writeFileToTempFolder");async function oR(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(oR,"deleteTempFile");function hye(e,t){if(e.statusCode!==k4.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(!aye[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(hye,"validateURLResponse");async function eD(e){try{let t;switch(e.file_type){case Oi.VALID_S3_FILE_TYPES.CSV:t=await Eye(e);break;case Oi.VALID_S3_FILE_TYPES.JSON:t=await _ye(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 Y4(t.records,t.number_written)}catch(t){throw fu(t)}}o(eD,"fileLoad");async function q4(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 iR.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&G4(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(q4,"validateChunk");async function $4(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 H4.callOperationFunctionAsAwait(K4,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Zt(c,du(Lr.INSERT_CSV_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.INSERT_CSV_ERR+" - "+c);r(l)}}o($4,"insertChunk");async function Eye(e){let t={records:0,number_written:0},r=V4(e.schema,e.table);try{let n=new ZL,s=Pi.createReadStream(e.file_path,{highWaterMark:B4});s.setEncoding("utf8"),await QL.parsePromise(s,q4.bind(null,e,n),JL.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:B4}),s.setEncoding("utf8"),await QL.parsePromise(s,$4.bind(null,e,t),JL.bind(null,r)),s.destroy(),t}catch(n){throw Zt(n,du(Lr.PAPA_PARSE_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.PAPA_PARSE_ERR+n)}}o(Eye,"callPapaParse");function V4(e,t){let r=sye[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>iye(i,s));return n}o(V4,"createTransformMap");function JL(e,t,r){let n=e.get(r);return n?n(t):Uf.autoCast(t)}o(JL,"typeFunction");async function _ye(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new ZL,s=L4([Pi.createReadStream(e.file_path,{encoding:"utf-8"}),D4.withParser(),c=>c.value,new M4({batchSize:F4}),v4(async c=>{await q4(e,n,r,c)})]);await new Promise((c,l)=>{U4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Zt(new Error,i,un.BAD_REQUEST);let a=L4([Pi.createReadStream(e.file_path,{encoding:"utf-8"}),D4.withParser(),c=>c.value,new M4({batchSize:F4}),v4(async c=>{await $4(e,t,r,c)})]);return await new Promise((c,l)=>{U4(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Zt(n,du(Lr.INSERT_JSON_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.INSERT_JSON_ERR+n)}}o(_ye,"insertJson");async function K4(e){let t={};try{e.data&&e.data.length>0&&gye(e.data[0])?t=await Sye(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",xf.info(t.message))}catch(r){throw fu(r)}return t}o(K4,"callBulkFileLoad");function gye(e){let t=Object.keys(e);for(let r of t)if(!oye.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(gye,"validateColumnNames");async function Sye(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=iR.insert;break;case"update":i=iR.update;break;case"upsert":i=iR.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 fu(a)}}o(Sye,"bulkFileLoad");function Y4(e,t){return`successfully loaded ${t} of ${e} records`}o(Y4,"buildResponseMsg");function fu(e){return Zt(e,du(Lr.DEFAULT_BULK_LOAD_ERR),un.INTERNAL_SERVER_ERROR,Oi.LOG_LEVELS.ERROR,Lr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(fu,"buildTopLevelErrMsg")});var J4=v((Kke,Q4)=>{"use strict";var Tye=_n(),yye=mi(),z4=Q(),Rye=Gn(),Vke=kS(),bye=require("clone"),nD=require("alasql"),Aye=kg(),j4=require("util"),Iye=j4.promisify(yye.getTableSchema),wye=j4.promisify(Tye.search),Nye=(q(),M(z)),rD=oe();Aye(nD);Q4.exports={update:Oye};var Cye="There was a problem performing this update. Please check the logs and try again.";async function Oye({statement:e,hdb_user:t}){let r=await Iye(e.table.databaseid,e.table.tableid),n=Pye(e.columns);rD.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=bye(s),c=rD.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=nD.parse(l).statements[0],d=await wye(u),f=Lye(n,d);return Dye(a,f,t)}o(Oye,"update");function Pye(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=nD.compile(`SELECT ${r.expression.toString()} AS [${Nye.FUNC_VAL}] FROM ?`)}),t}catch(t){throw z4.error(t),new Error(Cye)}}o(Pye,"createUpdateRecord");function Lye(e,t){return rD.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Lye,"buildUpdateRecords");async function Dye(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Rye.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){z4.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Dye,"updateRecords")});var Z4=v((jke,X4)=>{var Mye=require("alasql"),vye=_n(),Uye=Q(),xye=us(),iD=require("util"),sD=oe(),Bye=(q(),M(z)),Fye=mi(),Wke=kS(),zke=Gn(),kye="record",Hye="successfully deleted",Gye=iD.callbackify(Kye),qye=iD.promisify(vye.search),$ye=iD.promisify(Fye.getTableSchema);X4.exports={convertDelete:Gye};function Vye(e){return`${e.deleted_hashes.length} ${kye}${e.deleted_hashes.length===1?"":"s"} ${Hye}`}o(Vye,"generateReturnMessage");async function Kye({statement:e,hdb_user:t}){let r=await $ye(e.table.databaseid,e.table.tableid);sD.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=sD.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Mye.parse(a).statements[0],l={operation:Bye.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await qye(c);let u=await xye.deleteRecords(l);return sD.isEmptyOrZeroLength(u.message)&&(u.message=Vye(u)),delete u.txn_time,u}catch(u){throw Uye.error(u),u.hdb_code?u.message:u}}o(Kye,"convertDelete")});var TE=v((Jke,sQ)=>{"use strict";sQ.exports={evaluateSQL:sRe,processAST:nQ,convertSQLToAST:rQ,checkASTPermissions:tQ};var Yye=Gn(),eQ=require("util"),Wye=eQ.callbackify(Yye.insert),zye=_n().search,jye=J4().update,Qye=eQ.callbackify(jye),Jye=Z4().convertDelete,Dc=require("alasql"),Xye=sR(),cR=Q(),Zye=kg(),eRe=oe(),SE=(q(),M(z)),{hdbErrors:tRe,handleHDBError:oD}=_e(),{HTTP_STATUS_CODES:aD}=tRe;Zye(Dc);var rRe=403,nRe="There was a problem performing this insert. Please check the logs and try again.",cD=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function sRe(e,t){let r=e.parsed_sql_object;if(!r){r=rQ(e.sql);let n,s=r.ast.statements[0];if(s instanceof Dc.yy.Insert?n=s.into.databaseid:s instanceof Dc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Dc.yy.Update||s instanceof Dc.yy.Delete?n=s.table.databaseid:cR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Dc.yy.Select)&&eRe.isEmptyOrZeroLength(n))return t("No schema specified",null)}nQ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(sRe,"evaluateSQL");function tQ(e,t){let r;try{r=Xye.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(tQ,"checkASTPermissions");function rQ(e){let t=new cD;if(!e)throw oD(new Error,"The 'sql' parameter is missing from the request body",aD.BAD_REQUEST);try{let r=e.trim(),n=Dc.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]?oD(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,aD.BAD_REQUEST):oD(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",aD.BAD_REQUEST)}return t}o(rQ,"convertSQLToAST");function nQ(e,t,r){try{let n=iRe;if(!e.bypass_auth&&!t.permissions_checked){let i=tQ(e,t);if(i&&i.length>0)return r(rRe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case SE.VALID_SQL_OPS_ENUM.SELECT:n=zye,s=t.ast.statements[0];break;case SE.VALID_SQL_OPS_ENUM.INSERT:n=oRe;break;case SE.VALID_SQL_OPS_ENUM.UPDATE:n=Qye;break;case SE.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(nQ,"processAST");function iRe(e,t){cR.info(e),t("unknown sql statement")}o(iRe,"nullFunction");function oRe({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=aRe(i,e.values)}catch(a){return r(a)}Wye(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){cR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(oRe,"convertInsert");function aRe(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]]=Dc.compile(`SELECT ${s.toString()} AS [${SE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw cR.error(r),new Error(nRe)}}o(aRe,"createDataObjects")});var dD=v((Zke,fQ)=>{"use strict";var uD=_n(),cRe=WN(),{AsyncParser:lRe}=require("json2csv"),lR=require("stream"),Is=oe(),lD=require("fs-extra"),uRe=require("path"),Xs=Q(),{promisify:aQ}=require("util"),yE=oe(),{handleHDBError:Rr,hdbErrors:dRe}=_e(),{HDB_ERROR_MSGS:jn,HTTP_STATUS_CODES:br}=dRe,{streamAsJSON:fRe}=(Qb(),M(NU)),{Upload:mRe}=require("@aws-sdk/lib-storage"),{toCsvStream:pRe}=(Mo(),M(BU)),iQ=["search_by_value","search_by_hash","sql","search_by_conditions"],oQ=["json","csv"],cQ="json",lQ="csv",hRe="Successfully exported JSON locally.",ERe="Successfully exported CSV locally.",_Re=1e3,gRe=uD.searchByHash,SRe=uD.searchByValue,TRe=aQ(lR.finished);fQ.exports={export_to_s3:ARe,export_local:yRe};async function yRe(e){Xs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=uQ(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(jn.MISSING_VALUE("path")),Rr(new Error,jn.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(uRe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Is.buildFolderPath(e.path,r);await RRe(e.path);let s=await dQ(e);return await bRe(n,e.format,s)}o(yRe,"export_local");async function RRe(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 lD.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(RRe,"confirmPath");async function bRe(e,t,r){if(Xs.trace("in saveToLocal"),yE.isEmptyOrZeroLength(e))throw Rr(new Error,jn.INVALID_VALUE("file_path"),br.BAD_REQUEST,void 0,void 0,!0);if(yE.isEmptyOrZeroLength(t))throw Rr(new Error,jn.INVALID_VALUE("Source format"),br.BAD_REQUEST,void 0,void 0,!0);if(yE.isEmpty(r))throw Rr(new Error,jn.NOT_FOUND("Data"),br.BAD_REQUEST,void 0,void 0,!0);if(t===cQ){let n=lD.createWriteStream(e);return fRe(r).pipe(n),await TRe(n),{message:hRe,path:e}}else if(t===lQ){let n=lD.createWriteStream(e),s=lR.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new lRe(i,c).fromInput(s).toOutput(n).promise(!1),{message:ERe,path:e}}throw Rr(new Error,jn.INVALID_VALUE("format"),br.BAD_REQUEST)}o(bRe,"saveToLocal");async function ARe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Rr(new Error,jn.MISSING_VALUE("S3 object"),br.BAD_REQUEST);if(Is.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Rr(new Error,jn.MISSING_VALUE("aws_access_key_id"),br.BAD_REQUEST);if(Is.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Rr(new Error,jn.MISSING_VALUE("aws_secret_access_key"),br.BAD_REQUEST);if(Is.isEmptyOrZeroLength(e.s3.bucket))throw Rr(new Error,jn.MISSING_VALUE("bucket"),br.BAD_REQUEST);if(Is.isEmptyOrZeroLength(e.s3.key))throw Rr(new Error,jn.MISSING_VALUE("key"),br.BAD_REQUEST);if(Is.isEmptyOrZeroLength(e.s3.region))throw Rr(new Error,jn.MISSING_VALUE("region"),br.BAD_REQUEST);let t=uQ(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 dQ(e)}catch(l){throw Xs.error(l),l}let n,s=await cRe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new lR.PassThrough;if(e.format===lQ){i=e.s3.key+".csv";let l=pRe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===cQ){i=e.s3.key+".json";let l=new lR.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%_Re===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw Rr(new Error,jn.INVALID_VALUE("format"),br.BAD_REQUEST);return new mRe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(ARe,"export_to_s3");function uQ(e){if(Xs.trace("in exportCoreValidation"),Is.isEmpty(e.format))return"format missing";if(oQ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${oQ.join(", ")}`;let t=e.search_operation.operation;if(Is.isEmpty(t))return"search_operation.operation missing";if(iQ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${iQ.join(", ")}`}o(uQ,"exportCoreValidation");async function dQ(e){Xs.trace("in getRecords");let t,r;if(yE.isEmpty(e.search_operation)||yE.isEmptyOrZeroLength(e.search_operation.operation))throw Rr(new Error,jn.INVALID_VALUE("Search operation"),br.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=SRe;break;case"search_by_hash":t=gRe;break;case"search_by_conditions":t=uD.searchByConditions;break;case"sql":{let n=TE();t=aQ(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(dQ,"getRecords")});var pQ=v((tHe,mQ)=>{"use strict";var fD=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};mQ.exports=fD});var _Q=v((nHe,EQ)=>{"use strict";var IRe=(q(),M(z)),hQ=require("moment"),wRe=require("uuid").v4,mD=class{static{o(this,"JobObject")}constructor(){this.id=wRe(),this.type=void 0,this.start_datetime=hQ().valueOf(),this.created_datetime=hQ().valueOf(),this.end_datetime=void 0,this.status=IRe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};EQ.exports=mD});var dR=v((iHe,IQ)=>{"use strict";var NRe=require("uuid").v4,RQ=Gn(),bQ=_n(),CRe=di(),ORe=rd(),PRe=pQ(),Mt=(q(),M(z)),LRe=_Q(),DRe=yS(),Li=Q(),MRe=Sm(),Bf=oe(),{promisify:vRe}=require("util"),mu=require("moment"),uR=KN(),gQ=uw(),{deleteTransactionLogsBeforeValidator:URe}=_L(),{handleHDBError:SQ,hdbErrors:xRe,ClientError:BRe}=_e(),{HTTP_STATUS_CODES:TQ}=xRe,yQ=bQ.searchByValue,FRe=bQ.searchByHash,kRe=RQ.insert,HRe=RQ.update,pD;IQ.exports={addJob:$Re,updateJob:KRe,handleGetJob:GRe,handleGetJobsByStartDate:qRe,getJobById:AQ};async function GRe(e){if(e.id===void 0)throw new BRe("'id' is required");let t=await AQ(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(GRe,"handleGetJob");async function qRe(e){try{let t=await VRe(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=mu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=mu(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(qRe,"handleGetJobsByStartDate");async function $Re(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=uR.fileObject(e);break;case Mt.OPERATIONS_ENUM.CSV_URL_LOAD:n=uR.urlObject(e);break;case Mt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=uR.dataObject(e);break;case Mt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=uR.s3FileObject(e);break;case Mt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Mt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=gQ(e,"date");break;case Mt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=gQ(e,"timestamp");break;case Mt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=URe(e);break;case Mt.OPERATIONS_ENUM.RESTART_SERVICE:if(Mt.HDB_PROCESS_SERVICES[e.service]===void 0)throw SQ(new Error,"Invalid service",TQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw SQ(n,n.message,TQ.BAD_REQUEST,void 0,void 0,!0);let s=new LRe;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 CRe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await yQ(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=NRe();try{a=await yQ(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 MRe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await kRe(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($Re,"addJob");async function VRe(e){let t=mu(e.from_date,mu.ISO_8601),r=mu(e.to_date,mu.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 PRe(n,e.hdb_user);try{if(!pD){let i=TE();pD=vRe(i.evaluateSQL)}return await pD(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(VRe,"getJobsInDateRange");async function AQ(e){if(Bf.isEmptyOrZeroLength(e))return Bf.errorizeMessage("Invalid job ID specified.");let t=new ORe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await FRe(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(AQ,"getJobById");async function KRe(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=mu().valueOf());let t=new DRe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await HRe(t),r}o(KRe,"updateJob")});var MQ=v((aHe,DQ)=>{"use strict";var wQ=oe(),Dr=(q(),M(z)),YRe=require("moment"),fR=tD(),RE=Q(),NQ=dR(),CQ=dD(),OQ=bl(),PQ=nt(),WRe=jy(),zRe=Df(),{parentPort:jRe,isMainThread:LQ}=require("worker_threads"),{onMessageByType:QRe}=nt(),hD=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(wQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(wQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Dr.JOB_TYPE_ENUM.csv_file_load:await _o(e,fR.csvFileLoad);break;case Dr.JOB_TYPE_ENUM.csv_url_load:await _o(e,fR.csvURLLoad);break;case Dr.JOB_TYPE_ENUM.csv_data_load:await _o(e,fR.csvDataLoad);break;case Dr.JOB_TYPE_ENUM.import_from_s3:await _o(e,fR.importFromS3);break;case Dr.JOB_TYPE_ENUM.empty_trash:break;case Dr.JOB_TYPE_ENUM.export_local:await _o(e,CQ.export_local);break;case Dr.JOB_TYPE_ENUM.export_to_s3:await _o(e,CQ.export_to_s3);break;case Dr.JOB_TYPE_ENUM.delete_files_before:case Dr.JOB_TYPE_ENUM.delete_records_before:await _o(e,OQ.deleteFilesBefore);break;case Dr.JOB_TYPE_ENUM.delete_audit_logs_before:await _o(e,OQ.deleteAuditLogsBefore);break;case Dr.JOB_TYPE_ENUM.delete_transaction_logs_before:await _o(e,WRe.deleteTransactionLogsBefore);break;case Dr.JOB_TYPE_ENUM.restart_service:return await _o(e,zRe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(JRe,"parseMessage");async function _o(e,t){try{e.job.status=Dr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=YRe().valueOf(),await NQ.updateJob(e.job),await XRe(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):RE.error(`There was an error running ${t.name} job with id ${e.job.id}`),RE.error(n),e.job.message=n,e.job.status=Dr.JOB_STATUS_ENUM.ERROR;try{await NQ.updateJob(e.job)}catch(s){throw RE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(_o,"runJob");async function XRe(e){RE.trace("launching job thread:",e),LQ?PQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Dr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):jRe.postMessage({type:Dr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(XRe,"launchJobThread");LQ&&QRe(Dr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{PQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Dr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){RE.error(r)}});DQ.exports={parseMessage:JRe,RunnerMessage:hD}});var UQ=v((lHe,vQ)=>{"use strict";var ZRe=oe(),ED=me(),Mc=(q(),M(z)),ebe=Pt(),tbe=ir(),go=Q(),rbe=jL(),nbe=Xi();ED.initSync();vQ.exports={postOperationHandler:ibe,sendOperationTransaction:bE};async function bE(e,t,r,n){if(e.schema===Mc.SYSTEM_SCHEMA_NAME)return;let s=sbe(e,t,r);s&&(go.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await tbe.publishToStream(`${ebe.SUBJECT_PREFIXES.TXN}.${e.schema}`,nbe.createNatsTableStreamName(e.schema,e.table),n,s))}o(bE,"sendOperationTransaction");function sbe(e,t,r){if(ZRe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Mc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(sbe,"convertCRUDOperationToTransaction");async function ibe(e,t,r){if(!ED.get(Mc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;go.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=ED.get(Mc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new rbe(t.txn_time,n,s);switch(e.operation){case Mc.OPERATIONS_ENUM.INSERT:try{await bE(e,t.inserted_hashes,i,r)}catch(a){go.error("There was an error calling clustering postOperationHandler for insert."),go.error(a)}break;case Mc.OPERATIONS_ENUM.DELETE:try{await bE(e,t.deleted_hashes,i,r)}catch(a){go.error("There was an error calling clustering postOperationHandler for delete."),go.error(a)}break;case Mc.OPERATIONS_ENUM.UPDATE:try{await bE(e,t.update_hashes,i,r)}catch(a){go.error("There was an error calling clustering postOperationHandler for update."),go.error(a)}break;case Mc.OPERATIONS_ENUM.UPSERT:try{await bE(e,t.upserted_hashes,i,r)}catch(a){go.error("There was an error calling clustering postOperationHandler for upsert."),go.error(a)}break;default:break}return t}o(ibe,"postOperationHandler")});var Z,xQ=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 Ky={};Re(Ky,{chooseOperation:()=>r2,executeJob:()=>Zs,getOperationFunction:()=>n2,operation:()=>ID,processLocalTransaction:()=>t2});function cbe(e){if(!_D){let t=TE();_D=AD.promisify(t.evaluateSQL)}return _D(e)}async function t2(e,t){try{if(e.body.operation!=="read_log"&&(NE.default.log_level===sm.INFO||NE.default.log_level===sm.DEBUG||NE.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 ZQ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return lbe[e.body.operation]&&zQ.default.setSchemaDataToGlobal(n=>{n&&Nn.error(n)}),r}function r2(e){let t;try{t=n2(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=TE(),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(`${BQ.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=WQ.default.verifyPerms(i,s);if(a)throw Nn.error(`${BQ.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 n2(e){if(Nn.trace(`getOperationFunction with operation: ${e.operation}`),FQ.has(e.operation))return FQ.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 ID(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=r2(e);return t2({body:e},n)}async function ube(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[Ib]=!0;let a;switch(i.operation){case V.INSERT:a=await hu.default.insert(i);break;case V.UPDATE:a=await hu.default.update(i);break;case V.UPSERT:a=await hu.default.upsert(i);break;case V.DELETE:a=await Hf.default.deleteRecord(i);break;default:Nn.warn("invalid operation in catchup");break}await obe.postOperationHandler(i,a,e)}catch(a){Nn.info("Invalid operation in transaction"),Nn.error(a)}}async function Zs(e){(0,XQ.transformReq)(e);let t,r;try{if(r=await pR.default.addJob(e),r){t=r.createdJob,Nn.info("addJob result",r);let n=new yD.default.RunnerMessage(t,e);return{message:await yD.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 dbe(){let e=new Map;return e.set(V.INSERT,new Z(hu.default.insert)),e.set(V.UPDATE,new Z(hu.default.update)),e.set(V.UPSERT,new Z(hu.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(abe)),e.set(V.SQL,new Z(cbe)),e.set(V.CSV_DATA_LOAD,new Z(Zs,AE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(Zs,AE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(Zs,AE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(Zs,AE.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(IE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(IE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(IE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(IE.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(wE.default.listRoles)),e.set(V.ADD_ROLE,new Z(wE.default.addRole)),e.set(V.ALTER_ROLE,new Z(wE.default.alterRole)),e.set(V.DROP_ROLE,new Z(wE.default.dropRole)),e.set(V.USER_INFO,new Z(Ff.default.userInfo)),e.set(V.READ_LOG,new Z(HQ.default)),e.set(V.ADD_NODE,new Z(GQ.default)),e.set(V.UPDATE_NODE,new Z(gD.default)),e.set(V.SET_NODE_REPLICATION,new Z(gD.default)),e.set(V.REMOVE_NODE,new Z(qQ.default)),e.set(V.CONFIGURE_CLUSTER,new Z($Q.default)),e.set(V.PURGE_STREAM,new Z(VQ.default)),e.set(V.SET_CONFIGURATION,new Z(RD.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(KQ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(YQ.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(mR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(mR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(mR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(Zs,SD.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(pu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(pu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(pu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(pu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(pu.default.removeCertificate)),e.set(V.GET_KEY,new Z(pu.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(TO)),e.set(V.REMOVE_NODE_BACK,new Z(yO)),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,SD.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(pR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(pR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z(ML)),e.set(V.GET_FINGERPRINT,new Z(vL)),e.set(V.SET_LICENSE,new Z(UL)),e.set(V.RESTART,new Z(TD.default.restart)),e.set(V.RESTART_SERVICE,new Z(Zs,TD.default.restartService)),e.set(V.CATCHUP,new Z(ube)),e.set(V.SYSTEM_INFORMATION,new Z(jQ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(Zs,Hf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(kQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(xN)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(BN)),e.set(V.LOGIN,new Z(fL)),e.set(V.LOGOUT,new Z(mL)),e.set(V.GET_CONFIGURATION,new Z(RD.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(bD.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(Zs,bD.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(QQ.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(TL)),e.set(V.LIST_METRICS,new Z(yL)),e.set(V.DESCRIBE_METRIC,new Z(RL)),e.set(V.GET_STATUS,new Z(PL)),e.set(V.SET_STATUS,new Z(LL)),e.set(V.CLEAR_STATUS,new Z(OL)),e.set(V.INSTALL_USAGE_LICENSE,new Z(DP)),e.set(V.GET_USAGE_LICENSES,new Z(xP)),e}var kf,AE,Di,IE,Hf,kQ,Ff,wE,vt,NE,HQ,GQ,gD,qQ,$Q,VQ,KQ,YQ,mR,SD,WQ,pR,ei,TD,AD,hu,zQ,jQ,yD,RD,bD,QQ,JQ,XQ,pu,ZQ,e2,BQ,Nn,obe,abe,_D,lbe,FQ,Yy=se(()=>{kf=b(_n()),AE=b(tD()),Di=b(IT()),IE=b(Ml()),Hf=b(bl()),kQ=b(zC()),Ff=b($n()),wE=b(qp()),vt=b(EL()),NE=b(Q()),HQ=b(ZC()),GQ=b(BT()),gD=b(wO()),qQ=b(kT()),$Q=b(OO()),VQ=b(PO()),KQ=b(MO()),YQ=b(UO()),mR=b(VT()),SD=b(dD()),WQ=b(sR()),pR=b(dR());q();ei=b(_e()),TD=b(Df()),AD=b(require("util")),hu=b(Gn()),zQ=b(mi()),jQ=b(yh()),yD=b(MQ());Ld();ky();RD=b(gt()),bD=b(jy()),QQ=b(SL()),JQ=b(ii()),XQ=b(oe());Fr();pu=b(Es());sf();AL();ZQ=b(YN()),e2=b(UQ());lE();$h();BL();xQ();({HTTP_STATUS_CODES:BQ}=ei.hdbErrors),Nn=NE.default.loggerWithTag("operation"),{transactToClusteringUtils:obe}=e2.default,abe=AD.promisify(kf.default.search);o(cbe,"evaluateSQL");lbe={[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(t2,"processLocalTransaction");FQ=dbe();ve.operation=ID;o(r2,"chooseOperation");o(n2,"getOperationFunction");(0,JQ._assignPackageExport)("operation",ID);o(ID,"operation");o(ube,"catchup");o(Zs,"executeJob");o(dbe,"initializeOperationFunctionMap")});var _R=v((EHe,o2)=>{"use strict";var hR=(q(),M(z)),fbe=oe(),CE=Q(),{handleHDBError:wD,hdbErrors:ER}=_e(),{isMainThread:mbe}=require("worker_threads"),{Readable:pbe}=require("stream"),s2=require("os"),hbe=require("util"),Ebe=kN(),_be=hbe.promisify(Ebe.authorize),i2=(Yy(),M(Ky)),{createGzip:gbe,constants:Sbe}=require("zlib"),Tbe=[hR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,hR.OPERATIONS_ENUM.LOGIN,hR.OPERATIONS_ENUM.LOGOUT];function ybe(e){let t=`Found an uncaught exception with message: ${e.message}. ${s2.EOL}Stack: ${e.stack} ${s2.EOL}Terminating ${mbe?"HDB":"thread"}.`;console.error(t),CE.fatal(t),process.exit(1)}o(ybe,"handleServerUncaughtException");function Rbe(e,t,r){if(CE[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:ER.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(Rbe,"serverErrorHandler");function bbe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=wD(new Error,"Invalid JSON.",ER.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(fbe.isEmpty(e.body.operation)){let n=wD(new Error,"Request body must include an 'operation' property.",ER.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(bbe,"reqBodyValidationHandler");function Abe(e,t,r){let n;!Tbe.includes(e.body.operation)||e.body.operation===hR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?_be(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{CE.warn(i),CE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(wD(i,a,ER.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(Abe,"authHandler");async function Ibe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=i2.chooseOperation(e.body);let s=await i2.processLocalTransaction(e,n);if(s instanceof pbe&&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(gbe({level:Sbe.Z_BEST_SPEED})))}return s}catch(s){throw CE.error(s),s}}o(Ibe,"handlePostRequest");o2.exports={authHandler:Abe,handlePostRequest:Ibe,handleServerUncaughtException:ybe,serverErrorHandler:Rbe,reqBodyValidationHandler:bbe}});var u2=v((gHe,l2)=>{"use strict";var wbe=require("fastify-plugin"),{handlePostRequest:a2,authHandler:Nbe,reqBodyValidationHandler:Cbe}=_R();async function Obe(e){e.decorate("hdbCore",{preValidation:[Cbe,Nbe],request:o(t=>c2(a2(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>c2(a2(t,r,!0)),"requestWithoutAuthentication")})}o(Obe,"hdbCore");async function c2(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(c2,"convertAsyncIterators");l2.exports=wbe(Obe)});var f2=v((yHe,d2)=>{"use strict";var THe=require("fs"),gR=me();gR.initSync();var{CONFIG_PARAMS:ND}=(q(),M(z)),Pbe=1024*1024*1024;function Lbe(e){let t=gR.get(ND.HTTP_TIMEOUT),r=gR.get(ND.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Pbe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:gR.get(ND.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(Lbe,"getServerOptions");d2.exports=Lbe});var h2=v((bHe,p2)=>{"use strict";var CD=me();CD.initSync();var{CONFIG_PARAMS:m2}=(q(),M(z));function Dbe(){let e=CD.get(m2.HTTP_CORSACCESSLIST),t=CD.get(m2.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(Dbe,"getCORSOptions");p2.exports=Dbe});var g2=v((IHe,_2)=>{"use strict";var E2=me();E2.initSync();var Mbe=(q(),M(z));function vbe(){return E2.get(Mbe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(vbe,"getHeaderTimeoutConfig");_2.exports=vbe});var PD={};Re(PD,{customFunctionsServer:()=>Bbe,ready:()=>D2,start:()=>xbe});function xbe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Sa||(Sa=L2(t),ve.http((await Sa).server));let a=await Sa,c=(0,OD.dirname)(s),l=(0,OD.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!S2.has(c)){S2.add(c);try{a.register(kbe(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:D2}}async function Bbe(){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 Fbe();let e=I2.get(F.HTTP_SECUREPORT)>0,t;try{t=Sa=await L2(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 Fbe(){try{yt.info("Custom Functions starting configuration."),await w2.setUsersWithRolesCache(),yt.info("Custom Functions completed configuration.")}catch(e){yt.error(e)}}function kbe(e,t){return async function(r){try{yt.info("Custom Functions starting buildRoutes"),yt.trace("Loading fastify routes folder "+e),(0,T2.existsSync)(e)&&r.register(A2.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 L2(e){yt.info("Custom Functions starting buildServer.");let t=(0,N2.default)(e),r=(0,y2.default)(t);r.server.headersTimeout=(0,O2.default)(),r.setErrorHandler(P2.serverErrorHandler);let n=(0,C2.default)();return n&&r.register(R2.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(b2.default),await r.register(Ube),await r.after(),Nm(r),yt.info("Custom Functions completed buildServer."),r}function D2(){if(Sa)return Sa.then?Sa.then(e=>e.ready()):Sa.ready()}var OD,T2,y2,R2,b2,A2,I2,yt,Ube,w2,N2,C2,O2,P2,Sa,S2,M2=se(()=>{OD=require("path"),T2=require("fs"),y2=b(require("fastify")),R2=b(require("@fastify/cors")),b2=b(DN()),A2=b(require("@fastify/autoload")),I2=b(me());q();yt=b(Q()),Ube=b(u2()),w2=b($n()),N2=b(f2()),C2=b(h2()),O2=b(g2()),P2=b(_R());Mo();Fr();S2=new Set;o(xbe,"start");o(Bbe,"customFunctionsServer");o(Fbe,"setUp");o(kbe,"buildRouteFolder");o(L2,"buildServer");o(D2,"ready")});var DD={};Re(DD,{handleApplication:()=>Hbe,suppressHandleApplicationWarning:()=>Gbe});function Hbe(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,LD.default)(n,(0,Gf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(qbe(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,LD.default)(n,(0,Gf.realpathSync)(l))}},{runFirst:!0})}function qbe(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,LD,Gbe,v2=se(()=>{Gf=require("node:fs"),qf=require("node:path"),LD=b(require("send"));o(Hbe,"handleApplication");Gbe=!0;o(qbe,"validateNotFoundOption")});var MD={};Re(MD,{start:()=>$be});function $be({override:e}){return{handleFile:o((t,r,n)=>{SR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,U2.parse)(t))){if(process.env[s]!==void 0)if(SR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)SR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var U2,SR,x2=se(()=>{U2=require("dotenv"),SR=b(Q());o($be,"start")});var vD={};Re(vD,{DataLoaderError:()=>ws,DataLoaderResult:()=>$f,EmptyFileError:()=>RR,FileParseError:()=>yR,InvalidPropertyTypeError:()=>bR,MissingRequiredPropertyError:()=>OE,RecordProcessingError:()=>PE,SystemDatabaseError:()=>AR,UnsupportedFileExtensionError:()=>TR,handleApplication:()=>Kbe,loadDataFile:()=>G2,suppressHandleApplicationWarning:()=>Vbe});function Kbe(e){if((0,F2.getWorkerIndex)()!==0){So.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||G2(t,Sn,De).then(r=>{So.debug?.("Data loader processed file: %s: %s",(0,Ta.basename)(t.absolutePath),r.message)})})}async function G2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,Ta.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,B2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new TR(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof ws?f:new yR(t,f)}if(!a)throw new RR(t);let{database:c,table:l,records:u}=a;if(!l)throw new OE(t,"table");if(!u)throw new OE(t,"records");if(!Array.isArray(u))throw new bR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new AR(c,l);try{let f;if(c&&s[c]&&s[c][l])So.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])So.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{So.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)So.error?.(`Record processing error: ${I.message}`);else{let k=new PE(d,I);So.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)`),So.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 So.info?.(R),new $f(t,c,l,"skipped",m,R)}else{let R=`No records to process in ${d}`;return So.info?.(R),new $f(t,c,l,"success",0,R)}}catch(f){throw f instanceof ws?f:new PE(d,f)}}var Ta,B2,F2,ya,k2,H2,So,Vbe,ws,TR,yR,RR,OE,bR,AR,PE,$f,q2=se(()=>{Ta=require("node:path"),B2=require("yaml");we();F2=b(nt()),ya=b(zr()),k2=b(_e()),H2=b(Q()),So=H2.default.forComponent("dataLoader"),Vbe=!0;o(Kbe,"handleApplication");o(G2,"loadDataFile");ws=class extends k2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=ya.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},TR=class extends ws{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Ta.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,ya.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},yR=class extends ws{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Ta.basename)(t)}: ${r.message}`,ya.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},RR=class extends ws{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Ta.basename)(t)} is empty or invalid`,ya.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},OE=class extends ws{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Ta.basename)(t)} is missing required "${r}" property`,ya.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},bR=class extends ws{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Ta.basename)(t)} has invalid "${r}" property, expected ${n}`,ya.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},AR=class extends ws{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,ya.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},PE=class extends ws{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,ya.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 UD={};Re(UD,{hdbServer:()=>jbe,start:()=>jbe});async function jbe(e){try{To.default.debug("In Fastify server"+process.cwd()),To.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),To.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=$2.default.isMaster,await Qbe();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(),To.default.error(r),To.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),To.default.fatal(t),process.exit(1)}}async function Qbe(){return To.default.trace("Configuring HarperDB process."),J2.default.setSchemaDataToGlobal(),Z2.default.setUsersWithRolesCache()}function Jbe(e){To.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Xbe(e),r=(0,V2.default)(t);r.server.headersTimeout=eAe(),r.setErrorHandler(vc.serverErrorHandler);let n=Zbe();n&&r.register(K2.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(z2.default),r.register(Y2.default),r.register(W2.default,{root:j2.default.join(Q2.PACKAGE_ROOT,"studio/web")}),Nm(r);let s=Ra.default.get(om.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!X2.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[vc.reqBodyValidationHandler,vc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,vc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),To.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function Xbe(e){let t=Ra.default.get(Kf.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ra.default.get(Kf.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Wbe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:Ra.default.get(Kf.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function Zbe(){let e=Ra.default.get(Kf.OPERATIONSAPI_NETWORK_CORS),t=Ra.default.get(Kf.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===zbe)&&(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 eAe(){return Ra.default.get(Kf.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Ybe}var $2,Ra,To,V2,K2,Y2,W2,z2,j2,Q2,J2,X2,Z2,vc,Ybe,Wbe,zbe,Kf,Vf,eJ=se(()=>{$2=b(require("cluster")),Ra=b(me());q();To=b(Q()),V2=b(require("fastify")),K2=b(require("@fastify/cors")),Y2=b(require("@fastify/compress")),W2=b(require("@fastify/static")),z2=b(DN()),j2=b(require("path")),Q2=b(Ct()),J2=b(mi()),X2=b(oe()),Z2=b($n());Fr();vc=b(_R());Mo();Ra.default.initSync();Ybe=6e4,Wbe=1024*1024*1024,zbe="TRUE",{CONFIG_PARAMS:Kf}=z;o(jbe,"operationsServer");o(Qbe,"setUp");o(Jbe,"buildServer");o(Xbe,"getServerOptions");o(Zbe,"getCORSOpts");o(eAe,"getHeaderTimeoutConfig")});var CR={};Re(CR,{disableNATS:()=>rAe,publishToStream:()=>NR,setNATSReplicator:()=>xD,setPublishToStream:()=>nAe,setSubscription:()=>HD,start:()=>tAe});function tAe(){LE.default.get(F.CLUSTERING_ENABLED)&&iAe()}function rAe(e=!0){iJ=e}function nAe(e,t){NR=e,HD=t}function iAe(){if(iJ||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];xD(s,r,i)}}Ll((r,n)=>{xD(r.tableName,r.databaseName,r),n&&aJ(r)}),!tJ&&(tJ=!0)}function xD(e,t,r){if(t==="system"&&oAe.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){aJ(i)}static subscribe(){let i=new es;return HD(t,e,i),i}static subscribeOnThisThread(i){return i<(LE.default.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??sAe)}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 IR(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=oJ;return i}o(n,"getNATSTransaction")}function aJ(e){let t=LE.default.get(F.CLUSTERING_NODENAME);NR(`${FD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,kD.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 rJ,FD,kD,nJ,sJ,LE,wR,iJ,NR,HD,sAe,oJ,tJ,oAe,IR,BD,GD=se(()=>{we();qa();rJ=b(ir()),FD=b(Pt()),kD=b(Xi());Ou();nJ=b(oC()),sJ=b(Mn()),LE=b(me());q();wR=b(Q());o(tAe,"start");o(rAe,"disableNATS");NR=rJ.publishToStream,HD=nJ.setSubscription;o(nAe,"setPublishToStream");sAe=2;o(iAe,"assignReplicationSource");oAe=["hdb_job","hdb_raw_analytics","hdb_info"];o(xD,"setNATSReplicator");o(aJ,"publishSchema");IR=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=LE.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||(wR.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(NR(`${FD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,kD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw wR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},BD=class extends IR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,sJ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};oJ=new BD});async function fJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await qD.get(e,{returnNonexistent:!0});i=new KD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await qD.get(e);a&&a.delete()}i=new PR(e,t)}return n&&(n.id=e,n.user={username:t?.username},DE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function $D(){return OR++,OR>65500&&(OR=1),OR}function VD(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 lJ,Uc,uJ,dJ,cJ,qD,DE,OR,PR,KD,mJ=se(()=>{we();$a();lJ=b(Mn()),Uc=b(Q());Ua();uJ=b(nt()),dJ=b(WP());Fr();cg();cJ=100,qD=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"}]}}]}),DE=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,uJ.getWorkerIndex)()===0&&(async()=>{await dJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of DE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await ve.getUser(r.user.username));try{await VD(r,t,r)}catch{(0,Uc.warn)("Failed to publish will",t)}DE.delete(e.id)}})();o(fJ,"getSession");OR=1;o($D,"getNextMessageId");PR=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,Uc.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=$D());let J=I.id;if(Array.isArray(J)&&(J=ju(J)),J==null&&(J=""),await this.listener(E+"/"+J,I.value,k,t)===!1)break;this.awaitingAcks?.size>cJ?await new Promise(H=>setTimeout(H,this.awaitingAcks.size-cJ)):await new Promise(setImmediate)}catch(k){(0,Uc.warn)(k)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=$D();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 VD(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 DE.get(this.sessionId);n?.doesExist()&&await VD(n,n.data,r)}}finally{await DE.delete(this.sessionId)}}).catch(n=>{(0,Uc.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(VD,"publish");KD=class extends PR{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=$D(),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,Uc.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,lJ.getNextMonotonicTime)()),(0,Uc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),qD.put(this.sessionRecord)}}});var YD={};Re(YD,{bypassAuth:()=>aAe,start:()=>lAe});function aAe(){TJ=!0}function lAe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new SJ.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}=hJ(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 jd(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)&&DR.notify?.({username:d?.username,status:si.SUCCESS,type:La.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Yf.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&DR.error?.({username:h,status:si.FAILURE,type:La.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&&cAe(u.remoteAddress)&&(d=await(0,EJ.getSuperUser)(),er.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=hJ(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 hJ(e,t,r,n,s){pJ||(pJ=!0,$m(f=>{LR>0&&f.push({metric:"mqtt-connections",connections:LR,byThread:!0})}));let i;LR++;let a,c={protocolVersion:4},l=(0,MR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){LR--,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)&&DR.notify?.({username:n?.username,status:si.SUCCESS,type:La.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(X){return(0,Yf.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&DR.error?.({username:f.username,status:si.FAILURE,type:La.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=Do(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?X(f.will.payload):void 0,delete f.will.payload}a=fJ({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=Do(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,MR.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 Lo(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 MR,EJ,Yf,_J,gJ,SJ,DR,er,TJ,cAe,pJ,LR,yJ=se(()=>{MR=require("mqtt-packet");mJ();EJ=b($n());Mo();ns();Fr();Yf=b(me());q();_J=b(ts()),gJ=b(Q()),SJ=require("events");ET();DR=(0,_J.loggerWithTag)("auth-event"),er=(0,gJ.forComponent)("mqtt"),TJ=(0,Yf.get)(F.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(aAe,"bypassAuth");cAe=o(e=>TJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(lAe,"start");LR=0;o(hJ,"onSocket")});function vR(e,t){if(t?.includes(".."))throw new WD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var WD,zD=se(()=>{WD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(vR,"resolveBaseURLPath")});function RJ(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 bJ=se(()=>{o(RJ,"deriveCommonPatternBase")});function UR(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 jD=se(()=>{o(UR,"deriveGlobOptions")});var AJ,QD,ME,IJ=se(()=>{zD();bJ();jD();AJ=require("micromatch"),QD=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"}},ME=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=vR(this.name,this.config.urlPath),this.globOptions=UR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new QD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,AJ.scan)(s).base),this.commonPatternBase=RJ(this.patternBases)}}});function wJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Eu(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(wJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(wJ(n,t)){t=t.slice(n.length+1);break}}}return(0,NJ.join)(e.baseURLPath,t)}var NJ,JD=se(()=>{NJ=require("node:path");o(wJ,"pathStartsWithBase");o(Eu,"deriveURLPath")});function CJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var BR,OJ,PJ,XD,LJ,DJ,xR,MJ=se(()=>{BR=require("node:events");IJ();OJ=b(Q()),PJ=b(require("chokidar")),XD=require("node:path"),LJ=require("node:fs/promises");JD();DJ=require("micromatch"),xR=class extends BR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new ME(t,r,CJ(n)),this.#r=s||OJ.default.loggerWithTag(t),this.ready=(0,BR.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,DJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,XD.join)(this.directory,r);switch(t){case"add":case"change":{let i=Eu(this.#e,r,"file");(0,LJ.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=Eu(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=Eu(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,XD.join)(this.#e.directory,r));return this.#t=PJ.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 ME(this.name,this.directory,CJ(t)),this.#a()}};o(CJ,"castConfig")});var FR,ZD=se(()=>{FR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var HR,vJ,UJ,xJ,BJ,FJ,eM,tM,rM,nM,sM,kR,kJ=se(()=>{HR=require("events"),vJ=b(require("yaml")),UJ=b(require("chokidar")),xJ=require("node:fs/promises"),BJ=require("util"),FJ=b(Q());ZD();eM=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"}},tM=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},rM=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"}},nM=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},sM=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},kR=class extends HR.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||FJ.default.loggerWithTag(t),this.ready=(0,HR.once)(this,"ready"),this.#t=UJ.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,xJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=vJ.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 eM(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=FR,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,BJ.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 tM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new rM(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 nM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new sM(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 $R,HJ,GR,qR,GJ=se(()=>{$R=require("node:events");MJ();kJ();HJ=b(Q());NL();GR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},qR=class extends $R.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,HJ.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,$R.once)(this,"ready"),this.options=new kR(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 xR(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 GR);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 GR);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}`),a4()}}});function _u(e){return typeof e=="string"&&e.trim()!==""}function iM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>_u(t))}function KJ(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function uAe(e){e.config.root&&vE.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 fM(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(KJ(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,UE.join)(e.directory,i);VR.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 YJ(e){let t=!1;if(t=await uAe(e),t)return t;let r=await(0,qJ.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,UE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Eu(e,n.path,"directory");VR.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=Eu(e,n.path,"file"),a=await(0,$J.readFile)(s);VR.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 vE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var VR,qJ,vE,UE,$J,VJ,KR,Mi,oM,aM,cM,lM,uM,dM,fM,mM,pM,WJ=se(()=>{VR=require("node:worker_threads"),qJ=b(require("fast-glob")),vE=b(Q());zD();jD();UE=require("node:path"),$J=require("node:fs/promises");JD();VJ=require("micromatch"),KR=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,!_u(this.config.files)&&!iM(this.config.files)&&!KJ(this.config.files))throw new oM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!iM(this.config.files.source)&&!_u(this.config.files.source))throw new aM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new cM(this);if(this.config.files.ignore!==void 0&&!iM(this.config.files.ignore)&&!_u(this.config.files.ignore))throw new lM(this)}if(this.config.root!==void 0&&!_u(this.config.root))throw new dM(this);if(this.config.path!==void 0&&!_u(this.config.path))throw new mM(this);if(this.config.path&&(vE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!_u(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new pM(this);this.globOptions=UR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new uM(this,r);return r.startsWith("/")&&(vE.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,VJ.scan)(r).base),this.baseURLPath=vR(this.name,this.config.urlPath)}},Mi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,UE.basename)(r.directory)}) ${t}`)}},oM=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)}},aM=class extends Mi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},cM=class extends Mi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},lM=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)}},uM=class extends Mi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},dM=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)}},fM=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)}},mM=class extends Mi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},pM=class extends Mi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(_u,"isNonEmptyString");o(iM,"isArrayOfNonEmptyStrings");o(KJ,"isObject");o(uAe,"handleRoots");o(YJ,"processResourceExtensionComponent")});var Oy={};Re(Oy,{getComponentName:()=>wy,loadComponent:()=>jR,loadComponentDirectories:()=>JJ,setErrorReporter:()=>fAe});function JJ(e,t){t&&(EM=t),e&&(TM=e);let r=[];if((0,Vt.existsSync)(hM)){let s=(0,Vt.readdirSync)(hM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,Kr.join)(hM,a);r.push(jR(c,EM,Tb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(jR(n,EM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{QJ=!0})}function fAe(e){WR=e}function mAe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{_a.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(_a.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)(SM.PACKAGE_ROOT))return t();(0,Vt.rmSync)(i,{recursive:!0,force:!0})}(0,Vt.symlinkSync)(SM.PACKAGE_ROOT,i,"dir"),t()}finally{_a.primaryStore.unlock(e,0)}})}function XJ(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 _a.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(XJ(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(()=>{_a.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 jR(e,t,r,n,s,i){let a=(0,Vt.realpathSync)(e);if(YR.has(a))return YR.get(a);YR.set(a,!0),s&&(TM=s);try{let c,l=(0,Kr.join)(e,"harperdb-config.yaml");if((0,Vt.existsSync)(l)?c=n?(0,QR.getConfigObj)():(0,gM.parseDocument)((0,Vt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Vt.existsSync)(l=(0,Kr.join)(e,"config.yaml"))?c=(0,gM.parseDocument)((0,Vt.readFileSync)(l,"utf8")).toJSON():c=FR,!n)try{await mAe(e)}catch(m){ba.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&ba.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=zR,d={};for(let m in c){let p=n?m:`${(0,Kr.basename)(e)}.${m}`;zR=m;let h=c[m];if(!h)continue;to.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,jJ.getHdbBasePath)().length){I=null;break}I=(0,Kr.join)(k,"node_modules",m)}}if(I)E=await jR(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=dAe[m];if(!E){to.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 to.failed(p,I,`Component '${p}' failed to load`),I}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&ba.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new qR(m,e,l,t,ve);await XJ(I,E),to.loaded(p,`Component '${p}' loaded successfully`);continue}if(_M.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&&!zJ.includes(I)){let k=yM.get(F.HTTP_SESSIONAFFINITY);k&&ba.default.warn("Session affinity is not recommended and may cause memory leaks"),(k||!_S)&&(zJ.push(I),JP(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),TM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new KR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await YJ(I)}to.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}`,WR?.(R),((0,xE.getWorkerIndex)()===0?console:ba.default).error(R),t.set(h.path||"/",new ll(R),null,!0),to.failed(p,R,`Could not load component '${p}'`)}}if(zR=u,_M.isMainThread&&!QJ&&i&&(0,xE.watchDir)(e,async()=>JJ()),c.extensionModule||c.pluginModule){let m=await pS((0,Kr.join)(e,c.extensionModule||c.pluginModule));return YR.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?`;WR?.(new Error(m)),((0,xE.getWorkerIndex)()===0?console:ba.default).error(m),to.failed((0,Kr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||ba.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}`,WR?.(c),t.set("",new ll(c))}}var Vt,Kr,_M,gM,yM,SM,ba,xE,jJ,QR,hM,TM,QJ,EM,dAe,zJ,YR,WR,zR,wy,zh=se(()=>{Vt=require("node:fs"),Kr=require("node:path"),_M=require("node:worker_threads"),gM=require("yaml"),yM=b(me()),SM=b(Ct());q();vG();VG();sq();uq();dq();wq();M2();v2();x2();ba=b(Q());q2();xE=b(nt());yN();Fr();we();ZP();jJ=b(me());eJ();ky();GD();ps();yJ();QR=b(gt());Vp();VA();GJ();WJ();KP();lE();Ip();ZD();hM=(0,QR.resolvePath)(yM.get(F.COMPONENTSROOT)),TM=new Map;o(JJ,"loadComponentDirectories");dAe={REST:SS,rest:SS,graphql:mN,graphqlSchema:dN,roles:TN,jsResource:RN,fastifyRoutes:PD,login:AN,static:DD,operationsApi:UD,customFunctions:{},http:Iy,clustering:CR,replication:Qo,authentication:eE,mqtt:YD,loadEnv:MD,logging:ba.default,dataLoader:vD},zJ=[],YR=new Map;o(fAe,"setErrorReporter");wy=o(()=>zR,"getComponentName");o(mAe,"symlinkHarperModule");o(XJ,"sequentiallyHandleApplication");o(jR,"loadComponent")});var Py=v((iqe,ZJ)=>{var{isMainThread:RM}=require("worker_threads"),{getTables:pAe}=(we(),M(mt)),{loadComponentDirectories:hAe,loadComponent:EAe}=(zh(),M(Oy)),{resetResources:_Ae}=($a(),M(KA)),gAe=gt(),{dirname:SAe}=require("path"),{getConnection:TAe}=ir(),yAe=me(),{CONFIG_PARAMS:RAe}=(q(),M(z)),{loadCertificates:bAe}=Es(),{installApplications:AAe}=($y(),M(qy)),{loadAndWatchLicensesDir:IAe}=($h(),M(Sy)),bM=new Map;async function wAe(e=!1){!RM&&yAe.get(RAe.CLUSTERING_ENABLED)&&TAe();try{RM&&await AAe()}catch(n){console.error(n)}let t=_Ae();pAe(),t.isWorker=e,RM&&IAe(),await bAe(),await EAe(SAe(gAe.getConfigFilePath()),t,"hdb",!0,bM),await hAe(bM,t);let r=[];for(let[n]of bM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(wAe,"loadRootComponents");ZJ.exports.loadRootComponents=wAe});var nt=v((aqe,Ui)=>{"use strict";JE();var{Worker:NAe,MessageChannel:CAe,parentPort:yo,isMainThread:CM,threadId:OAe,workerData:Ro}=require("worker_threads"),{PACKAGE_ROOT:PAe}=Ct(),{join:n3,isAbsolute:LAe,extname:DAe}=require("path"),{server:s3}=(Fr(),M(lm)),{watch:MAe,readdir:vAe}=require("fs/promises"),{totalmem:e3}=require("os"),Wf=(q(),M(z)),i3=me(),vi=Q(),{randomBytes:UAe}=require("crypto"),{_assignPackageExport:xAe}=ii(),t3=1024*1024,Aa=[],ti=[],BAe=50,OM=1e4,FAe="restart",o3="request_thread_info",a3="resource_report",c3="thread_info",l3="added-port",kAe="ack",AM;xAe("threads",ti);Ui.exports={startWorker:IM,restartWorkers:LM,shutdownWorkers:h3,shutdownWorkersNow:VAe,workers:Aa,setMonitorListener:XAe,onMessageFromWorkers:KAe,onMessageByType:_3,broadcast:WAe,broadcastWithAcknowledgement:jAe,setChildListenerByType:$Ae,getWorkerIndex:u3,getWorkerCount:d3,getTicketKeys:m3,setMainIsWorker:GAe,setTerminateTimeout:HAe,restartNumber:Ro?.restartNumber||1};ti.onMessageByType=_3;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 PM;function HAe(e){OM=e}o(HAe,"setTerminateTimeout");function u3(){return Ro?Ro.workerIndex:PM?0:void 0}o(u3,"getWorkerIndex");function d3(){return Ro?Ro.workerCount:PM?1:void 0}o(d3,"getWorkerCount");function GAe(e){PM=e,Ui.exports.threadsHaveStarted()}o(GAe,"setMainIsWorker");var f3=1,JR;function m3(){return JR||(JR=CM?UAe(48):Ro.ticketKeys,JR)}o(m3,"getTicketKeys");Object.defineProperty(s3,"workerIndex",{get(){return u3()}});Object.defineProperty(s3,"workerCount",{get(){return d3()}});var p3={[o3](e,t){QAe(t)},[a3](e,t){JAe(t,e)}};function IM(e,t={}){let r=process.constrainedMemory?.()||e3();r=Math.min(r,e3(),2e4*t3);let n=i3.get(Wf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/t3/(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 CAe;u.existingPort=l,i.push(u),a.push(u.port2)}DAe(e)||(e+=".js");let c=new NAe(LAe(e)?e:n3(PAe,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:f3=t.threadCount,name:t.name,restartNumber:Ui.exports.restartNumber,ticketKeys:m3()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:l3,port:l,threadId:c.threadId},[l]);return ZR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>IM(e,t),c.on("error",l=>{vi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Aa.splice(Aa.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<BAe?(t.unexpectedRestarts=c.unexpectedRestarts+1,IM(e,t)):vi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{p3[l.type]?.(l,c)}),Aa.push(c),eIe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(IM,"startWorker");var qAe=[Wf.THREAD_TYPES.HTTP];async function LM(e=null,t=Math.max(f3>3,1),r=!0){if(CM){try{process.chdir(process.cwd())}catch(a){vi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=Py();await a()}Ui.exports.restartNumber++,t<1&&(t=t*Aa.length);let n=[],s=[];for(let a of Aa.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=qAe.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()},OM*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)&&i3.get(Wf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else yo.postMessage({type:FAe,workerType:e})}o(LM,"restartWorkers");function $Ae(e,t){p3[e]=t}o($Ae,"setChildListenerByType");function h3(e){return LM(e,1/0,!1)}o(h3,"shutdownWorkers");function VAe(e){return h3(e),Promise.all(Aa.map(t=>t.terminate()))}o(VAe,"shutdownWorkersNow");var E3=[];function KAe(e){E3.push(e)}o(KAe,"onMessageFromWorkers");var wM=new Map;function _3(e,t){let r=wM.get(e);r||wM.set(e,r=[]),r.push(t)}o(_3,"onMessageByType");var YAe=10;async function WAe(e,t){let r=0;for(let n of ti)try{n.postMessage(e),r++>YAe&&(r=0,await new Promise(setImmediate))}catch(s){vi.error("Unable to send message to worker",s)}t&&S3(e,null)}o(WAe,"broadcast");var XR=new Map,zAe=1;function jAe(e){return new Promise(t=>{let r=0;for(let n of ti)try{let s=zAe++,i=o(()=>{XR.delete(s),--r===0&&t(),n!==yo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,XR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of XR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){vi.error("Unable to send message to worker",s)}r===0&&t()})}o(jAe,"broadcastWithAcknowledgement");function QAe(e){e.postMessage({type:c3,workers:g3()})}o(QAe,"sendThreadInfo");function g3(){let e=Date.now();return Aa.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(g3,"getChildWorkerInfo");function JAe(e,t){e.resources=t,e.resources.updated=Date.now()}o(JAe,"recordResourceReport");var NM;function XAe(e){NM=e}o(XAe,"setMonitorListener");var ZAe=1e3,r3=!1;function eIe(){r3||(r3=!0,setInterval(()=>{for(let e of Aa){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}NM&&NM()},ZAe).unref())}o(eIe,"startMonitoring");var tIe=1e3;if(yo&&Ro?.addPorts){ZR(yo);for(let e=0,t=Ro.addPorts.length;e<t;e++){let r=Ro.addPorts[e];r.threadId=Ro.addThreadIds[e],ZR(r)}setInterval(()=>{let e=process.memoryUsage();yo.postMessage({type:a3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},tIe).unref(),AM=o(()=>new Promise((e,t)=>{yo.on("message",r),yo.postMessage({type:o3});function r(n){n.type===c3&&(yo.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else AM=g3;Ui.exports.getThreadInfo=AM;function ZR(e,t){ti.push(e),e.on("message",r=>{if(r.type===l3)r.port.threadId=r.threadId,ZR(r.port);else if(r.type===kAe){let n=XR.get(r.id);n&&n()}else S3(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 S3(e,t){for(let n of E3)n(e,t);let r=wM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){vi.error(s)}}o(S3,"notifyMessageListeners");if(CM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await vAe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(n3(s,a.name));try{for await(let{filename:a}of MAe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await LM(),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 yo.on("message",async e=>{let{type:t}=e;t===Wf.ITC_EVENT_TYPES.SHUTDOWN&&(Ui.exports.restartNumber=e.restartNumber,yo.unref(),setTimeout(()=>{vi.warn("Thread did not voluntarily terminate",OAe),process.exit(0)},OM).unref())})});var I3=v((dqe,A3)=>{"use strict";var{promises:zf,createReadStream:rIe,createWriteStream:nIe}=require("fs"),{createGzip:sIe}=require("zlib"),{promisify:iIe}=require("util"),{pipeline:oIe}=require("stream"),aIe=iIe(oIe),MM=require("path"),b3=me();b3.initSync();var eb=Q(),{CONFIG_PARAMS:cIe,ITC_EVENT_TYPES:lqe}=(q(),M(z)),{onMessageFromWorkers:uqe}=nt(),{convertToMS:T3}=oe(),{onStorageReclamation:lIe}=(F_(),M(ZU)),uIe=6e4,dIe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",fIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",DM,y3;A3.exports=mIe;function mIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(lIe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(dIe);if(!i)throw new Error(fIe);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=T3(r));let d;return DM=Date.now(),eb.trace("Log rotate enabled, maxSize:",t,"interval:",r),y3=setInterval(async()=>{if(l){let f;f=await zf.stat(e.path),f.size>=l&&(d=await R3(e.path,i))}if(u&&Date.now()-DM>=u&&(d=await R3(e.path,i),DM=Date.now()),n||c){let f=T3(n??"1M")/(1+c);c=0;let m=await zf.readdir(i);for(let p of m)try{let h=await zf.stat(MM.join(i,p));Date.now()-h.mtimeMs>f&&await zf.unlink(MM.join(i,p))}catch(h){eb.error("Error trying to remove log",p,h)}}},a??uIe).unref(),{end(){clearInterval(y3)},getLastRotatedLogPath(){return d}}}o(mIe,"logRotator");async function R3(e,t){let r=b3.get(cIe.LOGGING_ROTATION_COMPRESS),n=MM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await zf.rename(e,n),r&&(e=n,n+=".gz",await aIe(rIe(e),sIe(),nIe(n)),await zf.unlink(e)),eb.closeLogFile(),eb.notify(`hdb.log rotated, old log moved to ${n}`),n}o(R3,"moveLogFile")});var P3={};Re(P3,{RootConfigWatcher:()=>vM});var w3,N3,C3,tb,O3,vM,L3=se(()=>{w3=b(require("chokidar")),N3=require("node:fs/promises"),C3=b(gt()),tb=require("node:stream"),O3=require("yaml"),vM=class extends tb.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,C3.getConfigFilePath)(),this.ready=(0,tb.once)(this,"ready"),this.#t=w3.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,N3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,O3.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((Eqe,lb)=>{"use strict";var Ia=require("fs-extra"),{workerData:pIe,threadId:hIe,isMainThread:B3}=require("worker_threads"),kE=require("path"),F3=require("yaml"),k3=require("properties-reader"),Yr=(q(),M(z)),D3=Vc(),EIe=require("os"),{PACKAGE_ROOT:qM}=Ct(),{_assignPackageExport:_Ie}=ii(),{Console:gIe}=require("console"),xM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),M3=new Map,{join:wa}=kE,v3=1e4,lr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},SIe={STDOUT:"stdOut",STDERR:"stdErr"},hqe=wa(qM,"logs"),TIe=wa(qM,"config/yaml/",Yr.HDB_DEFAULT_CONFIG_FILE),yIe=1e4,HE,GE,rb,bo,BM,UM,sb,Ut,Ns,ib,ob,jf,FE,BE;function nb(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=kE.dirname(n)):t.root?n=wa(t.root,BM):(n=Ut.path,t.root||(t.root=kE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=lr[t.level]??Ut?.level??lr.info,H3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Ut.path===e.path&&r)}o(nb,"updateLogger");function H3(e){let t=e.conditional??(e.conditional={});t.notify=lr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=lr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=lr.error>=e.level?e.error.bind(e):void 0,t.warn=lr.warn>=e.level?e.warn.bind(e):void 0,t.info=lr.info>=e.level?e.info.bind(e):void 0,t.debug=lr.debug>=e.level?e.debug.bind(e):void 0,t.trace=lr.trace>=e.level?e.trace.bind(e):void 0}o(H3,"updateConditional");async function FM(){BE||(BE=new GIe,await BE.ready,BE.on("change",FM));let e=BE.config,t=e.logging??{};nb(Ut,t),sb=Ut.path,HE=t.console??!1,t.external&&nb(Ns,t.external);for(let r in e){let n=e[r];n.logging?nb(Ut.forComponent(r),n.logging,r):Ut.hasComponent(r)&&nb(Ut.forComponent(r),t,r)}}o(FM,"updateLogSettings");var kM=class extends gIe{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<=lr.trace&&super.info(...t),Cn="info"}debug(...t){Cn="debug",this.level<=lr.debug&&super.info(...t),Cn="info"}info(...t){Cn="info",this.level<=lr.info&&super.info(...t),Cn="info"}warn(...t){Cn="warn",this.level<=lr.warn&&super.warn(...t),Cn="info"}error(...t){Cn="error",this.level<=lr.error&&super.error(...t),Cn="info"}fatal(...t){jf=!0;try{Cn="fatal",this.level<=lr.fatal&&super.error(...t),Cn="info"}finally{jf=!1}}notify(...t){jf=!0;try{Cn="notify",this.level<=lr.notify&&super.info(...t),Cn="info"}finally{jf=!1}}withTag(t){return q3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};FE===void 0&&G3();lb.exports={notify:PIe,fatal:LIe,error:GM,warn:DIe,info:NIe,debug:OIe,trace:CIe,logLevel:bo,loggerWithTag:q3,suppressLogging:IIe,initLogSettings:G3,logCustomLevel:MIe,closeLogFile:$3,createLogger:cb,logsAtLevel:bIe,getLogFilePath:o(()=>sb,"getLogFilePath"),forComponent:o(e=>Ut.forComponent(e),"forComponent"),setMainLogger:kIe,setLogLevel:UIe,OUTPUTS:SIe,AuthAuditLog:HIe,start:FM,startOnMainThread:FM,errorToString:FIe,disableStdio:RIe};function RIe(){xM=o(function(){},"nativeStdWrite")}o(RIe,"disableStdio");lb.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)}};_Ie("logger",lb.exports.externalLogger);function bIe(e){return lr[bo]<=lr[e]}o(bIe,"logsAtLevel");function G3(e=!1){try{if(FE===void 0||e){$3();let t=vIe(),r=D3(["ROOTPATH"]);try{FE=k3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ia.pathExistsSync(wa(r.ROOTPATH,Yr.HDB_CONFIG_FILE)))throw s}let n;if({level:bo,configLogPath:UM,toFile:GE,logConsole:HE,rotation:n,toStream:rb}=xIe(r.ROOTPATH?wa(r.ROOTPATH,Yr.HDB_CONFIG_FILE):FE.get("settings_path")),BM=Yr.LOG_NAMES.HDB,sb=wa(UM,BM),Ut=cb({path:sb,level:bo,stdStreams:rb,rotation:n}),Ns=Ut.forComponent("external"),Ns.tag=null,B3)try{require("segfault-handler").registerHandler(wa(UM,"crash.log"))}catch{}}}catch(t){if(FE=void 0,t.code===Yr.NODE_ERROR_CODES.ENOENT||t.code===Yr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=D3(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){bo=a;continue}i===Yr.CONFIG_PARAMS.LOGGING_CONSOLE&&(HE=i)}let{defaultLevel:n}=BIe();GE=!1,rb=!0,bo=bo===void 0?n:bo,Ut=cb({level:bo}),Ns=Ut.forComponent("external"),Ns.tag=null;return}throw GM("Error initializing log settings"),GM(t),t}process.env.DEV_MODE&&(rb=!0),AIe()}o(G3,"initLogSettings");var xc=!0;function AIe(){GE&&(process.stdout.write=function(e){return typeof e=="string"&&xc&&HE&&(e=e.toString(),e[e.length-1]===`
135
135
  `&&(e=e.slice(0,-1)),ob(e)),xM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&xc&&HE&&(e[e.length-1]===`
136
136
  `&&(e=e.slice(0,-1)),ob(e)),xM.apply(process.stderr,arguments)})}o(AIe,"stdioLogging");function q3(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<=lr[i]?function(...a){ab=e;try{return s.call(r,...a)}finally{ab=void 0}}:null}o(n,"logWithTag")}o(q3,"loggerWithTag");function IIe(e){try{xc=!1,e()}finally{xc=!0}}o(IIe,"suppressLogging");var wIe=pIe?.name?.replace(/ /g,"-")||"main",Cn="info",HM,ab;function cb({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=lr[t],l;function u(p){if(GE)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),xc=!1;try{process.stdout.write(p)}finally{xc=!0}}else f(p);else r&&process.stdout.write(p)}o(u,"logStdOut");function d(p){if(GE){if(f(p),r){xc=!1;try{process.stderr.write(p)}finally{xc=!0}}}else r&&process.stderr.write(p)}o(d,"logStdErr");let f=e&&x3(e,n,s);function m(p){return{write(h){let E=[Cn];E.unshift(HM||wIe+"/"+hIe),ab&&E.push(ab),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(o(m,"logPrepend"),s&&(ob=f),l=new kM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),H3(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=x3(e,l.rotation,s),s&&(ob=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=cb({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(cb,"createLogger");var U3=100;function x3(e,t,r){let n=M3.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,M3.set(e,n)),B3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=I3();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(`