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()}});MU={type:"application/json",serializeStream:bm,serialize:Am,deserialize:y8,q:.5};pn.set("*/*",MU);pn.set("",MU);o(y8,"tryJSONParse");o(wm,"registerContentHandlers");R8=(0,LU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=R_(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(R_,"findBestSerializer");wU=Kb.default.get(F.HTTP_COMPRESSIONTHRESHOLD);o(Nm,"serialize");o(Lo,"serializeMessage");o(jb,"asyncSerialization");o(Qb,"hasAsyncSerialization");o(b8,"streamToBuffer");A8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(I8,"isBufferEncoding");o(w8,"parseContentType");o(Do,"getDeserializer");o(N8,"deserializerUnknownType");o(C8,"transformIterable");o(y_,"toCsvStream")});var L_={};Re(L_,{Blob:()=>Ds,blobsWereEncoded:()=>Jc,cleanupOrphans:()=>q8,databasePaths:()=>Xb,decodeBlobsWithWrites:()=>P_,decodeFromDatabase:()=>Uo,decodeWithBlobCallback:()=>Lm,deleteBlob:()=>N_,deleteBlobsInObject:()=>xa,deleteRootBlobPathsForDB:()=>tA,encodeBlobsAsBuffers:()=>k8,encodeBlobsWithFilePath:()=>O_,findBlobsInObject:()=>Qc,getFileId:()=>C_,getFilePathForBlob:()=>VU,getRootBlobPathsForDB:()=>Mu,isSaving:()=>M8,saveBlob:()=>Pm,setDeletionDelay:()=>D8,startPreCommitBlobsForRecord:()=>rA});function qU(){}function N_(e){let t=VU(e);t&&setTimeout(()=>{(0,tt.unlink)(t,r=>{r&&dr.default.debug?.("Error trying to remove blob file",r)})},$U)}function D8(e){$U=e}function Pm(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 U8(t),t.source?Jb(e,t.source,t):t.contentBuffer?v8(e,t):Jb(e,Om.Readable.from(e.stream()),t),t}function Jb(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(P8),p=(0,I_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(O8),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?eA:GU)<<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 C_(e){return jr.get(e)?.fileId}function M8(e){return jr.get(e)?.saving}function VU(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=Xb.get(e);if(!t){if(!e.databaseName)return dr.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,w_.get)(F.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Gi.join)(n,e.databaseName)):t=[(0,Gi.join)((0,w_.getHdbBasePath)(),"blobs",e.databaseName)],Xb.set(e,t)}return t}async function tA(e){let t=Mu(e);t&&await Promise.all(t.map(r=>KU(r)))}async function KU(e){if((0,tt.existsSync)(e)){for(let t of await(0,Un.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await KU((0,Gi.join)(e,t.name));else try{await(0,Un.unlink)((0,Gi.join)(e,t.name))}catch(r){dr.default.warn?.("Error deleting file",r)}try{await(0,Un.rmdir)(e)}catch(t){dr.default.warn?.("Error deleting directory",t)}}}function Du({storageIndex:e,fileId:t,store:r}){let n=Mu(r);return(0,Gi.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 v8(e,t){let r=t.contentBuffer,n=r.length;if(!(n<HU))return e.size=n,Jb(e,Om.Readable.from([r]),t)}function U8(e){let t=Mu(e.store),r=x8(),n=t?.length>1?B8(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Du(e),a=(0,Gi.dirname)(i);(0,tt.existsSync)(a)||(0,Zb.ensureDirSync)(a),e.filePath=i}function x8(){let e=FU.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,Gi.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)),FU.set(vn,e)}return Number(Atomics.add(e,0,1n))}function B8(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(A_);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,F8(e)),e.frequencyTable[t%A_]}async function F8(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,Zb.ensureDirSync)(s),a=await(0,Un.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(A_),n=t.map(s=>1/s);for(let s=0;s<A_;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 O_(e,t,r){Pu=t,vn=r,Jc=!1;try{return e()}finally{Pu=void 0,vn=void 0}}function k8(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 P_(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 Lm(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){Qc(e,t=>{N_(t)})}function Qc(e,t){if(e instanceof Ds)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Qc(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Qc(e[r],t)}}function rA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Lu&&s.saveBeforeCommit){vn=t;let i=Pm(s).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function G8(){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 q8(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,Gi.join)(u,d.name);if(d.isDirectory())await a(f);else if(s.size%1e6===0&&dr.default.info?.("Finding all blobs for orphan check, paths accumulated",s.size),s.add(f),s.size%2===0){let m=(0,kU.getHeapStatistics)();m.used_heap_size>m.heap_size_limit*.8&&await c()}}}catch(d){dr.default.error?.("Error searching path for blobs",u,d)}}o(a,"searchPath");async function c(){for(let u in e){dr.default.warn?.("Checking for references to potential orphaned blobs in table",u);let d=e[u];for(let f of d.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{f.metadataFlags&Jr&&f.value&&l(f.value),await new Promise(setImmediate)}catch(m){dr.default.error?.("Error searching table",u," for references to potential orphaned blobs failed",m)}}dr.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:u}of r.getRange({start:1,snapshot:!1,lazy:!0}))try{let d=At(u),f=r.tableStores[d.tableId],m=f?.getEntry(d.recordId);(!m||m.version!==d.version||!m.value)&&l(d.getValue(f))}catch(d){dr.default.error?.("Error searching audit log for references to potential orphaned blobs failed",d)}dr.default.warn?.("Deleting",s.size,"orphaned blobs"),n+=s.size;for(let u of s)try{await(0,Un.unlink)(u)}catch(d){dr.default.warn?.("Error deleting file",d)}dr.default.warn?.("Finished deleting",s.size,"orphaned blobs"),s.clear()}o(c,"removePathsThatAreNotReferenced");function l(u){Qc(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 Hi,Un,tt,I_,Om,Zb,w_,Gi,dr,kU,HU,wr,GU,eA,UU,O8,P8,xU,jr,vo,Ds,Pu,Qr,vn,Jc,Cm,b_,L8,BU,Lu,$U,Xb,FU,A_,H8,ts=se(()=>{Hi=require("msgpackr"),Un=require("node:fs/promises"),tt=require("node:fs"),I_=require("node:zlib"),Om=require("node:stream"),Zb=require("fs-extra"),w_=b(me());q();Gi=require("path"),dr=b(es());Mo();Fi();kU=require("node:v8"),HU=8192,wr=8,GU=0,eA=1,UU=255,O8=new Uint8Array([0,GU,255,255,255,255,255,255]),P8=new Uint8Array([0,eA,255,255,255,255,255,255]),xU=0xffffffffffff,jr=new WeakMap,Ds=global.Blob||G8(),Jc=!1,Cm=new Uint8Array(8),b_=new DataView(Cm.buffer),L8=6e4;o(qU,"InstanceOfBlobWithNoConstructor");qU.prototype=Ds.prototype;BU=!1,Lu=class e extends qU{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):(Qb()&&jb(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=jr.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=Du(t),a,c=o(async()=>{let l,u=wr;try{if(l=await(0,Un.readFile)(i),l.length>=wr){l.copy(Cm,0,0,wr);let f=b_.getBigUint64(0);if(Number(f>>48n)===UU)throw new Error("Error in blob: "+buffer.subarray(wr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<xU&&(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]===eA?new Promise((f,m)=>{(0,I_.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&&(dr.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(R,S)},20).unref();S(y),p.#e?.forEach(I=>I(y))}else a=C,R(C)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,R=100;return new Promise(o(function S(y,C){function I(J){(0,tt.close)(a),clearTimeout(d),u&&u.close(),C(J),p.#e?.forEach(G=>G(J))}o(I,"onError");let k=Buffer.allocUnsafe(262144);(0,tt.read)(a,k,0,k.length,c,(J,G,H)=>{if(l+=G,J)return I(J);if(c===0){if(G<wr){R-- >0&&f!==!1?(h(),dr.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,C),20).unref()):(dr.default.debug?.("File was empty, throwing error",i,R),C(new Error(`Blob ${t.fileId} was empty`)));return}H.copy(Cm,0,0,wr);let X=b_.getBigUint64(0);if(Number(X>>48n)===UU)return I(new Error("Error in blob: "+H.subarray(wr)));if(g=Number(X&0xffffffffffffn),g<xU&&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(Cm.set(X),g=Number(b_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{I(new Error(`File read timed out reading from ${i}`))},L8).unref():(u=(0,tt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(y,C))}),S(y,C)):m?I(new Error("Blob is incomplete")):(m=!0,S(y,C));return}(0,tt.close)(a),E.close(),y()})}else H=H.subarray(0,G);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=G,S(y,C);s&&l>=s&&(l>s&&(H=H.subarray(0,s-c)),l=g=s),n&&n>c&&(H=H.subarray(n-c))}c+=G;try{E.enqueue(H)}catch(X){return dr.default.debug?.("Error enqueuing chunk",X),y()}l===g&&((0,tt.close)(a),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,tt.close)(a),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=jr.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};jr.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};jr.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return BU||(BU=!0,dr.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}},$U=500;o(N_,"deleteBlob");o(D8,"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 Om.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Om.Readable.from(e);else throw new Error("Invalid source type");return r};o(Pm,"saveBlob");o(Jb,"writeBlobWithStream");o(C_,"getFileId");o(M8,"isSaving");o(VU,"getFilePathForBlob");Xb=new Map;o(Mu,"getRootBlobPathsForDB");o(tA,"deleteRootBlobPathsForDB");o(KU,"rimrafSteadily");o(Du,"getFilePath");o(v8,"writeBlobWithBuffer");o(U8,"generateFilePath");FU=new Map;o(x8,"getNextFileId");A_=128;o(B8,"getNextStorageIndex");o(F8,"createFrequencyTableForStoragePaths");o(O_,"encodeBlobsWithFilePath");o(k8,"encodeBlobsAsBuffers");o(P_,"decodeBlobsWithWrites");o(Lm,"decodeWithBlobCallback");o(Uo,"decodeFromDatabase");o(xa,"deleteBlobsInObject");o(Qc,"findBlobsInObject");o(rA,"startPreCommitBlobsForRecord");H8=new Hi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Hi.addExtension)({Class:Ds,type:11,unpack:o(function(e){let t=H8.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&&(Jc=!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<HU)return r.size=t.contentBuffer.length,(0,Hi.pack)([r,t.contentBuffer])}if(Pu!==void 0){if(t=Pm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Pu,(0,Hi.pack)([r,t.storageIndex,t.fileId])}if(t){if(vo)return vo(e),(0,Hi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,tt.readFileSync)(Du(t));if(n.length>=wr&&(n.copy(Cm,0,0,wr),Number(b_.getBigUint64(0)&0xffffffffffffn)===n.length-wr))return Buffer.concat([(0,Hi.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,Hi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(G8,"polyfillBlob");o(q8,"cleanupOrphans")});var QU={};Re(QU,{onStorageReclamation:()=>Dm,runReclamationHandlers:()=>oA,setAvailableSpaceRatioGetter:()=>V8});function Dm(e,t,r){(r||(0,M_.getWorkerIndex)()===(0,M_.getWorkerCount)()-1)&&(D_.has(e)||D_.set(e,[]),D_.get(e).push({priority:0,handler:t}),iA||(iA=setTimeout(oA,WU).unref()))}async function oA(){for(let[e,t]of D_)try{let r=await jU(e),n=$8/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&&(sA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){sA.default.error?.("Error running storage reclamation handlers",r)}iA=setTimeout(oA,WU).unref()}function V8(e){jU=e??zU}var nA,M_,sA,v_,YU,D_,$8,WU,iA,zU,jU,U_=se(()=>{nA=require("node:fs/promises"),M_=b(nt()),sA=b(es());q();v_=b(me()),YU=b(ae());v_.default.initSync();D_=new Map,$8=v_.default.get(F.STORAGE_RECLAMATION_THRESHOLD)??.4,WU=(0,YU.convertToMS)(v_.default.get(F.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Dm,"onStorageReclamation");zU=o(async e=>{if(nA.statfs){let t=await(0,nA.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"),jU=zU;o(oA,"runReclamationHandlers");o(V8,"setAvailableSpaceRatioGetter")});var lx={};Re(lx,{ACTION_32_BIT:()=>H_,ACTION_64_BIT:()=>z8,AUDIT_STORE_OPTIONS:()=>Um,Decoder:()=>Zc,HAS_BLOBS:()=>Jr,HAS_CURRENT_RESIDENCY_ID:()=>el,HAS_EXPIRATION_EXTENDED_TYPE:()=>Fm,HAS_ORIGINATING_OPERATION:()=>Bm,HAS_PREVIOUS_RESIDENCY_ID:()=>tl,REMOTE_SEQUENCE_UPDATE:()=>G_,createAuditEntry:()=>rl,getLastRemoved:()=>Y8,openAuditStore:()=>F_,readAuditEntry:()=>At,removeAuditEntry:()=>k_,setAuditRetention:()=>W8,transactionKeyEncoder:()=>ix});function F_(e){let t=e.auditStore=e.openDB(aA.AUDIT_STORE_NAME,{create:!1,...Um});t||(t=e.auditStore=e.openDB(aA.AUDIT_STORE_NAME,Um),XU(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=lA;Dm(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()-cA/(1+i*i)})){try{m=k_(t,h,E)}catch(g){vu.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=K8){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,cA/10):(XU(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,vm.getWorkerIndex)()===(0,vm.getWorkerCount)()-1&&c(),(0,vm.getWorkerIndex)()===0&&!JU)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(JU=!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 k_(e,t,r){let n=j8(r),s;if(n&Jr){s=At(r);let i=e.tableStores[s.tableId];if(i){let a=i.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Uo(()=>xa(s.getValue(i)),i.rootStore)}}if((n&15)===uA){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 XU(e,t){dA[0]=t,e.put(Symbol.for("last-removed"),ox)}function Y8(e){let t=e.get(Symbol.for("last-removed"));if(t)return ox.set(t),dA[0]}function W8(e,t=lA){cA=e,lA=t}function rl(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=ax[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Ba.setFloat64(0,n):Ms.set(fA),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&el&&R(u),l&tl&&R(d),l&Fm&&(Ba.setFloat64(h,f),h+=8),l&Bm&&R(cx[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,Xc.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 j8(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Zc(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 Zc(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&el&&(m=n.readInt()),i&tl&&(p=n.readInt()),i&Fm&&(h=n.readFloat64()),i&Bm){let y=n.readInt();E=cx[y]}l=n.readInt();let g=n.position,R=n.position+=l,S;return{type:ax[i&7],tableId:c,nodeId:a,get recordId(){return(0,Xc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>g?(0,Xc.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&x_||i&Mm&&!C)return S||(S=Uo(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&Mm&&I)return kb(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(x_|Mm)?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 Xc,B_,aA,vm,sx,vu,Ms,Ba,ix,Um,cA,K8,dA,ox,lA,JU,x_,Mm,ZU,uA,ex,tx,rx,nx,H_,z8,G_,el,tl,Bm,Fm,Jr,ax,cx,Zc,Fi=se(()=>{Xc=require("ordered-binary"),B_=b(me()),aA=b(Yt());q();vm=b(nt()),sx=b(ae());nl();vu=b(Q());g_();ts();U_();(0,B_.initSync)();Ms=Buffer.alloc(2816),Ba=new DataView(Ms.buffer,Ms.byteOffset,2816),ix={writeKey(e,t,r){return e===xm?(t.set(xm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Xc.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,Xc.readKey)(e,t,r)}},Um={encoding:"binary",keyEncoder:ix},cA=(0,sx.convertToMS)((0,B_.get)(F.LOGGING_AUDITRETENTION))||86400*3,K8=1e3,dA=new Float64Array(1),ox=new Uint8Array(dA.buffer),lA=1e4,JU=!1;o(F_,"openAuditStore");o(k_,"removeAuditEntry");o(XU,"updateLastRemoved");o(Y8,"getLastRemoved");o(W8,"setAuditRetention");x_=16,Mm=32,ZU=1,uA=2,ex=3,tx=4,rx=5,nx=6,H_=14,z8=15,G_=11,el=512,tl=1024,Bm=2048,Fm=4096,Jr=8192,ax={put:ZU|x_,[ZU]:"put",delete:uA,[uA]:"delete",message:ex|x_,[ex]:"message",invalidate:tx|Mm,[tx]:"invalidate",patch:rx|Mm,[rx]:"patch",relocate:nx,[nx]:"relocate"},cx={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(rl,"createAuditEntry");o(j8,"readAction");o(At,"readAuditEntry");Zc=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 q_(){return mA||(mA=Ze({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),mA}function J8(e){return e=e.replace(Q8,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 X8(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 hA(e){let t=ux.default.createHash("shake128",{outputLength:4}),r;return(0,dx.isIPv6)(e)?r=J8(e):r=e.toLowerCase(),X8(Uint8Array.from(t.update(r).digest()))}var ux,dx,pA,mA,Q8,EA=se(()=>{we();ux=b(require("crypto")),dx=require("node:net"),pA=new Map;o(q_,"getAnalyticsHostnameTable");Q8=/(\d{1,3}\.){3}\d{1,3}$/;o(J8,"normalizeIPv6");o(X8,"nodeHashToNumber");o(hA,"stableNodeId")});var xo,_A=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 gx={};Re(gx,{profile:()=>_x,userCodeFolders:()=>K_});async function _x(){let e=(0,V_.pathToFileURL)(px.PACKAGE_ROOT).toString(),t=new Map,r=100,n=Ex/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){hx.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(K_.some(d=>u.callFrame?.url.startsWith(d)))return!0}o(l,"isUserCode")}var mx,$_,px,V_,hx,fx,K_,Ex,Uu,Sx=se(()=>{mx=require("node:inspector/promises");rs();$_=b(me());q();px=b(Ct()),V_=require("node:url"),hx=b(Q()),fx=(0,$_.getHdbBasePath)(),K_=fx?[(0,V_.pathToFileURL)(fx).toString()]:[];process.env.RUN_HDB_APP&&K_.push((0,V_.pathToFileURL)(process.env.RUN_HDB_APP).toString());Ex=1e3,Uu=new mx.Session;Uu.connect();(async()=>{if(K_.length===0)return;await Uu.post("Profiler.enable"),await Uu.post("Profiler.setSamplingInterval",{interval:Ex}),await Uu.post("Profiler.start");let e=(0,$_.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;setInterval(()=>{_x()},e).unref()})();o(_x,"profile")});var z_={};Re(z_,{addAnalyticsListener:()=>qm,analyticsDelay:()=>yA,calculateCPUUtilization:()=>Bx,diffResourceUsage:()=>Fx,onAnalyticsAggregate:()=>AA,recordAction:()=>Ve,recordActionBinary:()=>Zr,recordHostname:()=>RA,setAnalyticsEnabled:()=>tZ});function tZ(e){Dx=e,clearTimeout(Hm),Hm=null}function rZ(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 nZ(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},W_.set(e,a)}function Ve(e,t,r,n,s){if(!Dx)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=W_.get(i);a?rZ(e,a):nZ(i,e,t,r,n,s),Hm||sZ()}function Zr(e,t,r,n,s){Ve(!!e,t,r,n,s)}function qm(e){vx.push(e)}function sZ(){gA||=performance.now(),Hm=setTimeout(async()=>{Hm=null;let e=performance.now()-gA;gA=0;let t=[],r={time:Date.now(),period:e,threadId:sl.threadId,metrics:t};for(let[s,i]of W_){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 xx){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 kx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:sl.threadId,byThread:!0,...n});for(let s of vx)s(t);W_=new Map,sl.parentPort?sl.parentPort.postMessage({type:Mx,report:r}):qx({report:r})},yA).unref()}async function RA(){let e=ve.hostname;Xr.trace?.("recordHostname server.hostname:",e);let t=hA(e);Xr.trace?.("recordHostname nodeId:",t);let r=q_();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=pA.get(r);n?Xr.trace?.("storeMetric cached nodeId:",n):(n=hA(r),Xr.trace?.("storeMetric new nodeId:",n),pA.set(r,n));let s={id:[(0,TA.getNextMonotonicTime)(),n],...t};Xr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Bx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Xr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function Fx(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 iZ(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 Tx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=Lx.statSync(s.primaryStore.env.path).size,c=iZ(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 yx(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 oZ(e,t=6e4){let r=bA(),n=Hx(),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 kx()}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 xx){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 Ux)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-Rx,active:h-bx,taskQueueLatency:await s,time:m,...process.memoryUsage()};xu(n,y)}Rx=p,bx=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=Fx(Y_,E);Xr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=Y_.time?m-Y_.time:t,g.cpuUtilization=Bx(g,g.period);let R={metric:xo.RESOURCE_USAGE,...g};xu(n,R),Y_=E;let S=at();Tx(n,S),Tx(n,{system:S.system}),yx(n,S),yx(n,{system:S.system})}async function Ax(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function bA(){return Ix||(Ix=Ze({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Hx(){return wx||(wx=Ze({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function lZ(){Gx=!0;let e=(0,Gm.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await oZ(yA,e),await Ax(bA(),aZ),await Ax(Hx(),cZ)},Math.min(e/2,2147483647)).unref()}function qx(e,t){let r=e.report;r.threadId=t?.threadId||sl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Nx+=n.mean*n.count);r.totalBytesProcessed=Nx,t&&(r.metrics.push({metric:xo.UTILIZATION,...t.performance.eventLoopUtilization(Cx.get(t))}),Cx.set(t,t.performance.eventLoopUtilization())),r.id=(0,TA.getNextMonotonicTime)(),bA().primaryStore.put(r.id,r),Gx||lZ(),uZ&&($x=fZ(r))}async function fZ(e){if(await $x,!Fa){let r=(0,km.dirname)(Z8());try{Fa=await(0,SA.open)((0,km.join)(r,"analytics.log"),"r+")}catch{Fa=await(0,SA.open)((0,km.join)(r,"analytics.log"),"w+")}}let t=(await Fa.stat()).size;if(t>dZ){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 AA(e){e&&Ux.push(e)}var sl,Ox,Px,km,SA,TA,Gm,Lx,Z8,eZ,Xr,W_,Dx,Hm,gA,yA,Mx,vx,Ux,xx,Rx,bx,Y_,kx,aZ,cZ,Ix,wx,Gx,Nx,Cx,uZ,$x,Fa,dZ,rs=se(()=>{sl=require("worker_threads"),Ox=b(nt());we();Px=b(Q()),km=require("path"),SA=require("fs/promises"),TA=b(Mn()),Gm=b(me());q();Fr();Lx=b(require("node:fs"));EA();_A();({getLogFilePath:Z8,forComponent:eZ}=Px.default);setTimeout(()=>{Promise.resolve().then(()=>Sx())},1e3);Xr=eZ("analytics").conditional;(0,Gm.initSync)();W_=new Map,Dx=(0,Gm.get)(F.ANALYTICS_AGGREGATEPERIOD)>-1;o(tZ,"setAnalyticsEnabled");o(rZ,"recordExistingAction");o(nZ,"recordNewAction");o(Ve,"recordAction");ve.recordAnalytics=Ve;o(Zr,"recordActionBinary");gA=0,yA=1e3,Mx="analytics-report",vx=[],Ux=[];o(qm,"addAnalyticsListener");xx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(sZ,"sendAnalytics");o(RA,"recordHostname");o(xu,"storeMetric");o(Bx,"calculateCPUUtilization");o(Fx,"diffResourceUsage");o(iZ,"storeTableSizeMetrics");o(Tx,"storeDBSizeMetrics");o(yx,"storeVolumeMetrics");o(oZ,"aggregation");Rx=0,bx=0,Y_={userCPUTime:0,systemCPUTime:0},kx=o(()=>new Promise(setImmediate),"rest");o(Ax,"cleanup");aZ=36e5,cZ=31536e6;o(bA,"getRawAnalyticsTable");o(Hx,"getAnalyticsTable");(0,Ox.setChildListenerByType)(Mx,qx);o(lZ,"startScheduledTasks");Nx=0,Cx=new Map,uZ=!1;o(qx,"recordAnalytics");dZ=1e6;o(fZ,"logAnalytics");o(AA,"onAnalyticsAggregate")});var zx={};Re(zx,{ENTRY:()=>pZ,HAS_EXPIRATION:()=>J_,HAS_RESIDENCY_ID:()=>PA,HAS_STRUCTURE_UPDATE:()=>X_,LAST_TIMESTAMP_PLACEHOLDER:()=>xm,LOCAL_TIMESTAMP:()=>mZ,METADATA:()=>ku,NEW_TIMESTAMP_PLACEHOLDER:()=>Kx,NO_TIMESTAMP:()=>IA,PENDING_LOCAL_TIME:()=>LA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>fA,RecordEncoder:()=>OA,TIMESTAMP_ASSIGN_LAST:()=>EZ,TIMESTAMP_ASSIGN_NEW:()=>Yx,TIMESTAMP_ASSIGN_PREVIOUS:()=>Wx,TIMESTAMP_PLACEHOLDER:()=>j_,TIMESTAMP_RECORD_PREVIOUS:()=>wA,entryMap:()=>ka,handleLocalTimeForGets:()=>Z_,lastMetadata:()=>ct,recordUpdater:()=>DA,removeEntry:()=>ol});function SZ(){return Vm[0]=Vm[0]^64,hZ.getFloat64(0)}function Z_(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,il.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<il.length;u++){let d=il[u].deref();(!d||d.isDone||d.isCommitted)&&il.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function DA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Fu=i?.localTime?wA|Wx:IA:Fu=l?i?.localTime?wA|16384:Yx|16384:IA;let p=u?.expiresAt;if(p>=0&&(c|=J_),$m=c,NA=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&&(CA=S,$m|=PA,g|=el),R!==S&&(g|=tl,R||(R=0)),c&J_&&(g|=Fm),u?.originatingOperation&&(g|=Bm),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=O_(()=>e.put(n,s,h),n,e.rootStore),Jc&&(g|=Jr)),l){let C=u?.user?.username;if(m&&(O_(()=>e.encoder.encode(m),n,e.rootStore),Jc&&(g|=Jr)),e.encoder.hasStructureUpdate&&(g|=X_,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,rl(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?Kx:xm,rl(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&&_Z.has(d)&&Ve(Bu?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function ol(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 Vx,Q_,j_,xm,fA,Kx,mZ,ku,pZ,Vm,hZ,IA,Yx,EZ,Wx,wA,J_,PA,LA,X_,_Z,ka,gZ,Bu,Fu,$m,NA,CA,ct,OA,il,nl=se(()=>{Vx=require("msgpackr");Fi();Q_=b(Q());ts();ts();rs();j_=new Uint8Array([1,1,1,1,4,64,0,0]),xm=new Uint8Array([1,1,1,1,1,0,0,0]),fA=new Uint8Array([1,1,1,1,3,64,0,0]),Kx=new Uint8Array([1,1,1,1,0,64,0,0]),mZ=Symbol("local-timestamp"),ku=Symbol("metadata"),pZ=Symbol("entry"),Vm=new Uint8Array(8),hZ=new DataView(Vm.buffer,0,8),IA=0,Yx=0,EZ=1,Wx=3,wA=4,J_=16,PA=32,LA=1,X_=256,_Z=new Set(["put","patch","delete","message","publish"]),ka=new WeakMap,Fu=0,$m=-1,NA=-1,CA=0,ct=null,OA=class extends Vx.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||$m>=0){let c=0,l=Fu;l&&(c+=8,Fu=0);let u=$m,d=NA,f=CA;u>=0&&(c+=4,$m=-1,d>=0&&(c+=8,NA=-1),f&&(c+=4,CA=0));let m=gZ=n.call(this,i,a|2048|c);Bu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(j_[4]=l,j_[5]=l>>8,m.set(j_,p),p+=8),Jc&&(u|=Jr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|H_<<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(Vm,0,c),c+=8;else for(let m=0;m<8;m++)Vm[m]=t[c++];l=SZ(),i=t[c]}let u,d;i<32&&(i===H_?(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&J_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&PA&&(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 Q_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(SZ,"getTimestamp");o(Z_,"handleLocalTimeForGets");il=[];setInterval(()=>{for(let e=0;e<il.length;e++){let t=il[e].deref();!t||t.isDone||t.isCommitted?il.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Q_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Q_.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(DA,"recordUpdater");o(ol,"removeEntry")});function UA(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?UA(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=Ym(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=CZ(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=$i(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=!!$i(I.attributes,C.relationship.to)?.elements;J=AZ(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=IZ(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(xA[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]=qi.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=Ym(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??Ym(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??Ym(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 $i(e,t){if(Array.isArray(t))if(t.length>1){let r=$i(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?$i(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 AZ(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 IZ(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 Ym(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=$i(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=Ym({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()),xA[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,qi.compareKeys)(d,l[0])>=0&&(0,qi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,qi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,qi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,qi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,qi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,qi.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&&tg(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 tg(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=xA[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=$i(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=tg(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=RZ*Bo(e.primaryStore)+1;else if(n==="between")r.estimated_count=yZ*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=TZ*Bo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function rg(e,t){if(e)if(Fo=e,Hu.lastIndex=0,wZ.test(e))try{if(t&&(t.conditions=[]),ai=t??new qu,Km(ai,""),kr!==Fo.length&&Wt("Unable to parse query, unexpected end of query"),ai.parseErrorMessage&&(ai.parseError=new MA(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 Km(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=jx):(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=bZ[f],l=vA[i]?jx: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"&&Qx(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else eg(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=Km(d?[]:new qu,")");switch(d){case"":eg(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=Jx(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=Km([],"}"),m.name=d,e.push(m),Fo[kr]===","?r.lastIndex=++kr:a=!0;break;case"[":if(Hu.lastIndex=kr,d?(m=Km(new qu,"]"),m.name=d):m=Km(e.conditions?new qu:[],"]"),e.conditions)if(eg(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"&&Qx(h,d),eg(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?NZ:Hu,r.lastIndex=kr),kr===Fo.length)return e}t&&Wt(`expected '${t}', but encountered end of string`)}function eg(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 jx(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 Qx(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 Jx(e){let t=Xx(e[0]);return e.length>1&&(t.next=Jx(e.slice(1))),t}function Xx(e){if(Array.isArray(e)){let t=Xx(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 CZ(e,t,r){return t*r/Bo(e)}var en,vs,qi,Ha,TZ,yZ,RZ,bZ,vA,xA,MA,wZ,Hu,NZ,kr,ai,Fo,qu,ng=se(()=>{en=b(_e()),vs=b(Yt()),qi=require("ordered-binary"),Ha=require("lmdb");sg();nl();TZ=.3,yZ=.1,RZ=.05,bZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},vA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(UA,"executeConditions");o($u,"searchByIndex");o($i,"findAttribute");o(AZ,"joinTo");o(IZ,"joinFrom");xA={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(Ym,"filterByType");o(tg,"estimateCondition");MA=class extends en.Violation{static{o(this,"SyntaxViolation")}},wZ=/[()[\]|!<>.]|(=\w*=)/,Hu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,NZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(rg,"parseQuery");o(Wt,"recordError");o(Km,"parseBlock");o(eg,"assignOperator");o(Gu,"decodeProperty");o(jx,"typedDecoding");o(Qx,"wildcardDecoding");o(Jx,"toSortObject");o(Xx,"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(CZ,"intersectionEstimate")});var Zx,ci,ig=se(()=>{Zx=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,Zx._assignPackageExport)("Resource",Resource)});var s0={};Re(s0,{MultiPartId:()=>og,Resource:()=>Hr,contextStorage:()=>Yu,snakeCase:()=>PZ,transformForSelect:()=>Wu});function PZ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function e0(e,t){if(al=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(al=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new og;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){al=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return al=!0,null;e[e.length-1]==="/"&&(al=!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 ns(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 BA(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):BA(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(BA(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(BA(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 t0,r0,Ku,n0,Yu,OZ,Hr,al,og,qa=se(()=>{t0=require("crypto");ym();Ou();r0=b(ii()),Ku=b(_e());Ua();ng();n0=require("async_hooks");ig();Yu=new n0.AsyncLocalStorage,OZ={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):ns(t,"put")},{hasContent:!0,type:"update"});static patch=Bn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):ns(t,"patch")},{hasContent:!0,type:"update"});static delete=Bn(function(t,r,n,s){return t.delete?t.delete(r):ns(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,t0.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):ns(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Bn(function(t,r,n,s){return t.invalidate?t.invalidate(r):ns(t,"delete")},{hasContent:!1,type:"update"});static post=Bn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Bn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Bn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):ns(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Bn(function(t,r,n,s){return t.subscribe?t.subscribe(r):ns(t,"subscribe")},{type:"read"});static publish=Bn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):ns(t,"publish")},{hasContent:!0,type:"create"});static search=Bn(function(t,r,n){let s=t.search?t.search(r):ns(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=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):ns(t,"search")},{hasContent:!0,type:"read"});static copy=Bn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):ns(t,"copy")},{hasContent:!0,type:"create"});static move=Bn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):ns(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;ns(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return rg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&OZ[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:e0(t,this),isCollection:al}}let i=e0(t,this);return al?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Zn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Zn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,r0._assignPackageExport)("Resource",Hr);o(PZ,"snakeCase");o(e0,"pathToId");og=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Bn,"transactional");o(ns,"missingMethod");o(BA,"selectFromObject");o(Wu,"transformForSelect")});var cl,FA=se(()=>{cl=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:()=>LZ,resources:()=>Us});function LZ(){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 i0,o0,zu,Us,$a=se(()=>{Ua();FA();i0=b(Q()),o0=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 o0.ServerError(`Conflicting paths for ${t}`);i0.default.error(c),i.Resource=new cl(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(LZ,"resetResources");o(ju,"keyArrayToString")});function qA(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=c0,DZ(e.primaryStore,e.auditStore)):(c=a0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{l0(a0[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 GA(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 l0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),u0(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,HA.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,HA.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 DZ(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=c0[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{l0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function u0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function d0(e){return e.nextTransaction||(qA({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),u0(e)),e.nextTransaction}var HA,a0,c0,GA,$A=se(()=>{HA=b(Q());Ou();$a();Fi();a0=Object.create(null),c0=Object.create(null);o(qA,"addSubscription");GA=class extends Zn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(l0,"notifyFromTransactionData");o(DZ,"listenToCommits");o(u0,"nextTransaction");o(d0,"whenNextTransaction")});var m0=v((vCe,f0)=>{"use strict";var VA=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};f0.exports=VA});var h0=v((xCe,p0)=>{"use strict";var KA=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};p0.exports=KA});var Wm=v(_0=>{"use strict";var E0=me(),MZ=(q(),M(z)),{RecordEncoder:vZ}=(nl(),M(zx));E0.initSync();var UZ=E0.get(MZ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,YA=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=UZ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:vZ})}};_0.OpenDBIObject=YA});var zm=v((HCe,g0)=>{"use strict";var ss=me(),xs=(q(),M(z));ss.initSync();var ag=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=ss.get(xs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ss.get(xs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ss.get(xs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",ss.get(xs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=ss.get(xs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),ss.get(xs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=ss.get(xs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),ss.get(xs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=ss.get(xs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),ss.get(xs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=ss.get(xs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=ss.get(xs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};g0.exports=ag;ag.MAX_DBS=1e4});var St=v((qCe,C0)=>{"use strict";var zA=require("lmdb"),li=require("fs-extra"),is=require("path"),cg=Mn(),y0=Q(),Fn=zr().LMDB_ERRORS_ENUM,lg=h0(),{OpenDBIObject:jA}=Wm(),R0=zm(),Va=Yt(),S0=(q(),M(z)),{table:xZ,resetDatabases:BZ}=(we(),M(mt)),T0=me(),ui=Va.INTERNAL_DBIS_NAME,b0=Va.DBI_DEFINITION_NAME,FZ="data.mdb",kZ="lock.mdb",jm=".mdb",HZ="-lock",WA=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 zA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function ug(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(ug,"pathEnvNameValidation");async function QA(e,t,r=!0){try{await li.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Fn.INVALID_BASE_PATH):n}try{let n=is.join(e,t+jm);return await li.access(n,li.constants.R_OK|li.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await li.access(is.join(e,t,FZ),li.constants.R_OK|li.constants.F_OK),is.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Fn.INVALID_ENVIRONMENT)}else throw new Error(Fn.INVALID_ENVIRONMENT);throw n}}o(QA,"validateEnvironmentPath");function dg(e,t){if(cg.validateEnv(e),t===void 0)throw new Error(Fn.DBI_NAME_REQUIRED)}o(dg,"validateEnvDBIName");async function GZ(e,t,r=!1,n=!1){ug(e,t);let s=is.basename(e);t=t.toString();let i=T0.get(S0.CONFIG_PARAMS.DATABASES);i||T0.setProperty(S0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await QA(e,t,n),A0(e,t,r)}catch(a){if(a.message===Fn.INVALID_ENVIRONMENT){let c=is.join(e,t);await li.mkdirp(n?c:e);let l=new R0(n?c:c+jm,!1),u=zA.open(l);u.dbis=Object.create(null);let d=new jA(!1);u.openDB(ui,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=JA(e,t,r);return u[Va.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(GZ,"createEnvironment");async function qZ(e,t,r,n=!0){ug(e,t),t=t.toString();let s=is.join(e,t);return xZ({table:t,database:is.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(qZ,"copyEnvironment");async function A0(e,t,r=!1){ug(e,t),t=t.toString();let n=JA(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 QA(e,t),i=is.join(e,t+jm),a=s!=i,c=new R0(s,a),l=zA.open(c);l.dbis=Object.create(null);let u=w0(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(A0,"openEnvironment");async function $Z(e,t,r=!1){ug(e,t),t=t.toString();let n=is.join(e,t+jm),s=await QA(e,t);if(global.lmdb_map!==void 0){let i=JA(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await I0(a),delete global.lmdb_map[i]}}await li.remove(s),await li.remove(s===n?s+HZ:is.join(is.dirname(s),kZ))}o($Z,"deleteEnvironment");async function I0(e){cg.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(I0,"closeEnvironment");function JA(e,t,r=!1){let s=`${is.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(JA,"getCachedEnvironmentName");function VZ(e){cg.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 lg,s)}catch{y0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(VZ,"listDBIDefinitions");function w0(e){cg.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(w0,"listDBIs");function KZ(e,t){let n=Bs(e,ui).getEntry(t),s=new lg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{y0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(KZ,"getDBIDefinition");function N0(e,t,r,n=!r){if(dg(e,t),t=t.toString(),t===ui)throw new Error(Fn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Bs(e,t)}catch(s){if(s.message===Fn.DBI_DOES_NOT_EXIST){let i=new jA(r,n===!0),a=e.openDB(t,i),c=new lg(r===!0,n);return a[b0]=c,Bs(e,ui).putSync(t,c),e.dbis[t]=a,a}throw s}}o(N0,"createDBI");function Bs(e,t){if(dg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ui?r=KZ(e,t):r=new lg,r===void 0)throw new Error(Fn.DBI_DOES_NOT_EXIST);let n;try{let s=new jA(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Fn.DBI_DOES_NOT_EXIST):s}return n[b0]=r,e.dbis[t]=n,n}o(Bs,"openDBI");function YZ(e,t){dg(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(YZ,"statDBI");async function WZ(e,t){try{let r=is.join(e,t+jm);return(await li.stat(r)).size}catch{throw new Error(Fn.INVALID_ENVIRONMENT)}}o(WZ,"environmentDataSize");function zZ(e,t){if(dg(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(zZ,"dropDBI");function jZ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Bs(e,i)}catch(a){if(a.message===Fn.DBI_DOES_NOT_EXIST)N0(e,i,i!==t,i===t),n=!0;else throw a}}n&&BZ()}o(jZ,"initializeDBIs");C0.exports={openDBI:Bs,openEnvironment:A0,createEnvironment:GZ,listDBIs:w0,listDBIDefinitions:VZ,createDBI:N0,dropDBI:zZ,statDBI:YZ,deleteEnvironment:$Z,initializeDBIs:jZ,TransactionCursor:WA,environmentDataSize:WZ,copyEnvironment:qZ,closeEnvironment:I0}});var L0=v((VCe,P0)=>{"use strict";var XA=St(),QZ=Q(),O0=zr().LMDB_ERRORS_ENUM;P0.exports=JZ;async function JZ(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 XA.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==O0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await XA.closeEnvironment(global.lmdb_map[n]),await XA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==O0.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){QZ.error(t)}}o(JZ,"cleanLMDBMap")});var Ki=v((YCe,M0)=>{"use strict";var D0=ae(),XZ=(q(),M(z)),Qu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Vi=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"}},ZZ=Vi.alternatives(Vi.string().min(1).max(Ka.schema_length.maximum).pattern(Qu).messages({"string.pattern.base":"{:#label} "+Ka.schema_format.message}),Vi.number(),Vi.array()).required(),e9=Vi.alternatives(Vi.string().min(1).max(Ka.schema_length.maximum).pattern(Qu).messages({"string.pattern.base":"{:#label} "+Ka.schema_format.message}),Vi.number()),t9=Vi.alternatives(Vi.string().min(1).max(Ka.schema_length.maximum).pattern(Qu).messages({"string.pattern.base":"{:#label} "+Ka.schema_format.message}),Vi.number()).required();function r9(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(r9,"checkValidTable");function n9(e,t){return D0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(n9,"validateSchemaExists");function s9(e,t){let r=t.state.ancestors[0].schema;return D0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(s9,"validateTableExists");function i9(e,t){return e.toLowerCase()===XZ.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(i9,"validateSchemaName");M0.exports={commonValidators:Ka,schemaRegex:Qu,hdbSchemaTable:ZZ,validateSchemaExists:n9,validateTableExists:s9,validateSchemaName:i9,checkValidTable:r9,hdbDatabase:e9,hdbTable:t9}});var eI=v((zCe,U0)=>{var{hdbTable:o9,hdbDatabase:v0}=Ki(),a9=ft(),ZA=require("joi"),c9={undefined:"undefined",null:"null"},l9=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||c9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),u9=ZA.object({database:v0,schema:v0,table:o9,records:ZA.array().items(ZA.object().custom(l9)).required()});U0.exports=function(e){return a9.validateBySchema(e,u9)}});var B0=v((QCe,x0)=>{"use strict";var tI=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")}};x0.exports=tI});var k0=v((XCe,F0)=>{"use strict";var rI=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};F0.exports=rI});var G0=v((eOe,H0)=>{"use strict";var nI=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}};H0.exports=nI});var $0=v((rOe,q0)=>{"use strict";var sI=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};q0.exports=sI});var ul=v((aOe,Y0)=>{"use strict";var d9=St(),f9=k0(),m9=G0(),p9=$0(),Yi=Mn(),Qm=zr().LMDB_ERRORS_ENUM,h9=Yt(),ko=(q(),M(z)),E9=ae(),_9=require("uuid"),sOe=require("lmdb"),{handleHDBError:g9,hdbErrors:S9}=_e(),{OVERFLOW_MARKER:iOe,MAX_SEARCH_KEY_LENGTH:oOe}=h9,V0=me();V0.initSync();var fg=V0.get(ko.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),iI=ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ll=ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function T9(e,t,r,n,s=Yi.getNextMonotonicTime()){lI(e,t,r,n),oI(e,t,r);let i=new f9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];K0(u,!0,s);let d=y9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return aI(a,c,n,i,s)}o(T9,"insertRecords");function y9(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=Yi.getIndexedValues(c),u=e.dbis[a];if(l){fg&&u.prefetch(l.map(d=>({key:d,value:s})),mg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}fg&&e.dbis[t].prefetch([s],mg),e.dbis[t].put(s,n,n[ll])})}o(y9,"insertRecord");function R9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(R9,"removeSkippedRecords");function K0(e,t,r){let n=r>0;(n||!Number.isInteger(e[ll]))&&(e[ll]=r||(r=Yi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[iI]))&&(e[iI]=r||Yi.getNextMonotonicTime()):delete e[iI]}o(K0,"setTimestamps");function oI(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),d9.initializeDBIs(e,t,r)}o(oI,"initializeTransaction");async function b9(e,t,r,n,s=Yi.getNextMonotonicTime()){lI(e,t,r,n),oI(e,t,r);let i=new m9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=cI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return aI(c,l,n,i,s,a)}o(b9,"updateRecords");async function A9(e,t,r,n,s=Yi.getNextMonotonicTime()){try{lI(e,t,r,n)}catch(l){throw g9(l,l.message,S9.HTTP_STATUS_CODES.BAD_REQUEST)}oI(e,t,r);let i=new p9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;E9.isEmpty(u[t])?(d=_9.v4(),u[t]=d):d=u[t];let f=cI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return aI(a,c,n,i,s)}o(A9,"upsertRecords");async function aI(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||Yi.getNextMonotonicTime(),R9(r,i),n}o(aI,"finalizeWrite");function cI(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(K0(r,!d,a),Number.isInteger(r[ll])&&u[ll]>r[ll])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=Yi.getIndexedValues(R);if(S){fg&&g.prefetch(S.map(y=>({key:y,value:n})),mg);for(let y=0,C=S.length;y<C;y++)g.remove(S[y],n)}if(S=Yi.getIndexedValues(E),S){fg&&g.prefetch(S.map(y=>({key:y,value:n})),mg);for(let y=0,C=S.length;y<C;y++)g.put(S[y],n)}}let p={...u,...r};c.put(n,p,p[ll])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:cI(e,t,r,n,s,i,a))}o(cI,"updateUpsertRecord");function I9(e,t,r){if(Yi.validateEnv(e),t===void 0)throw new Error(Qm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Qm.WRITE_ATTRIBUTES_REQUIRED):new Error(Qm.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(I9,"validateBasic");function lI(e,t,r,n){if(I9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Qm.RECORDS_REQUIRED):new Error(Qm.RECORDS_MUST_BE_ARRAY)}o(lI,"validateWrite");function mg(){}o(mg,"noop");Y0.exports={insertRecords:T9,updateRecords:b9,upsertRecords:A9}});var Wi=v((lOe,w9)=>{w9.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 z0=v((uOe,W0)=>{"use strict";var N9=require("uuid"),uI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||N9.v4(),this.schema_table=`${this.schema}.${this.table}`}};W0.exports=uI});var pg=v((fOe,j0)=>{"use strict";var C9=z0(),dI=class extends C9{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}};j0.exports=dI});var J0=v((pOe,Q0)=>{"use strict";Q0.exports=P9;var O9="inserted";function P9(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===O9?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(P9,"returnObject")});var hg=v((_Oe,Z0)=>{"use strict";var L9=(q(),M(z)),fI=St(),D9=ul(),{getSystemSchemaPath:M9,getSchemaPath:v9}=Rt(),EOe=Wi(),{validateBySchema:U9}=ft(),Jm=require("joi"),x9=pg(),B9=J0(),{handleHDBError:F9,hdbErrors:k9,ClientError:H9}=_e(),X0=ae(),{HTTP_STATUS_CODES:G9}=k9,q9="inserted";Z0.exports=$9;async function $9(e){let t=U9(e,Jm.object({database:Jm.string(),schema:Jm.string(),table:Jm.string().required(),attribute:Jm.string().required()}));if(t)throw new H9(t.message);let r=!e.skip_table_check&&X0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw F9(new Error,r,G9.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=X0.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 x9(e.schema,e.table,e.attribute,e.id);try{let i=await fI.openEnvironment(v9(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}`);fI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await fI.openEnvironment(M9(),L9.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await D9.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return B9(q9,c,{records:[s]},l)}catch(i){throw i}}o($9,"lmdbCreateAttribute")});var Xm=v((TOe,tB)=>{"use strict";var Ho=ae(),eB=Q(),SOe=eI(),{getDatabases:V9}=(we(),M(mt)),{ClientError:dl}=_e();tB.exports=K9;function K9(e){if(Ho.isEmpty(e))throw new dl("invalid update parameters defined.");if(Ho.isEmptyOrZeroLength(e.schema))throw new dl("invalid schema specified.");if(Ho.isEmptyOrZeroLength(e.table))throw new dl("invalid table specified.");if(!Array.isArray(e.records))throw new dl("records must be an array");let t=V9()[e.schema]?.[e.table];if(Ho.isEmpty(t))throw new dl(`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 eB.error("a valid hash attribute must be provided with update record:",a),new dl("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 eB.error(`a valid hash value must be provided with ${e.operation} record:`,a),new dl(`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(K9,"insertUpdateValidate")});var Eg=v((ROe,nB)=>{"use strict";var rB=ae(),Y9=(q(),M(z)),W9=Q(),z9=hg(),j9=pg(),Q9=Go(),{SchemaEventMsg:J9}=os(),X9="already exists in";nB.exports=Z9;async function Z9(e,t,r){if(rB.isEmptyOrZeroLength(r))return r;let n=[];rB.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 e7(e,t.schema,t.name,i)})),s}o(Z9,"lmdbCheckForNewAttributes");async function e7(e,t,r,n){let s=new j9(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await t7(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(X9))W9.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(e7,"createNewAttribute");async function t7(e){let t;return t=await z9(e),Q9.signalSchemaChange(new J9(process.pid,Y9.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(t7,"createAttribute")});var Ju=v((AOe,sB)=>{"use strict";var mI=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}};sB.exports=mI});var oB=v((wOe,iB)=>{"use strict";var r7=Ju(),n7=(q(),M(z)).OPERATIONS_ENUM,pI=class extends r7{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(n7.INSERT,r,n,s,i),this.records=t}};iB.exports=pI});var cB=v((COe,aB)=>{"use strict";var s7=Ju(),i7=(q(),M(z)).OPERATIONS_ENUM,hI=class extends s7{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(i7.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};aB.exports=hI});var uB=v((POe,lB)=>{"use strict";var o7=Ju(),a7=(q(),M(z)).OPERATIONS_ENUM,EI=class extends o7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(a7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};lB.exports=EI});var fB=v((DOe,dB)=>{"use strict";var c7=Ju(),l7=(q(),M(z)).OPERATIONS_ENUM,_I=class extends c7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(l7.DELETE,n,s,t,i),this.original_records=r}};dB.exports=_I});var Zm=v((UOe,EB)=>{"use strict";var vOe=require("path"),mB=St(),u7=oB(),d7=cB(),f7=uB(),m7=fB(),Xu=Yt(),pB=ae(),{CONFIG_PARAMS:p7}=(q(),M(z)),hB=me();hB.initSync();var _g=(q(),M(z)).OPERATIONS_ENUM,{getTransactionAuditStorePath:h7}=Rt();EB.exports=E7;async function E7(e,t){if(hB.get(p7.LOGGING_AUDITLOG)===!1)return;let r=h7(e.schema,e.table),n=await mB.openEnvironment(r,e.table,!0),s=_7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){mB.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),pB.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(E7,"writeTransaction");function _7(e,t){let r=pB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===_g.INSERT)return new u7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_g.UPDATE)return new d7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_g.UPSERT)return new f7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_g.DELETE)return new m7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(_7,"createTransactionObject")});var gI=v((FOe,_B)=>{"use strict";var g7=Xm(),BOe=gm(),ep=(q(),M(z)),S7=Sm(),T7=ul().insertRecords,y7=St(),R7=Q(),b7=Eg(),{getSchemaPath:A7}=Rt(),I7=Zm();_B.exports=w7;async function w7(e){try{let{schemaTable:t,attributes:r}=g7(e);S7(e,r,t.hash_attribute),e.schema!==ep.SYSTEM_SCHEMA_NAME&&(r.includes(ep.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ep.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ep.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ep.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await b7(e.hdb_auth_header,t,r),s=A7(e.schema,e.table),i=await y7.openEnvironment(s,e.table),a=await T7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await I7(e,a)}catch(c){R7.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(w7,"lmdbCreateRecords")});var TB=v((HOe,SB)=>{"use strict";var gB=(q(),M(z)),N7=gI(),C7=gm(),O7=require("fs-extra"),{getSchemaPath:P7}=Rt();SB.exports=L7;async function L7(e){let t=[{name:e.schema,createddate:Date.now()}],r=new C7(gB.SYSTEM_SCHEMA_NAME,gB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await N7(r),await O7.mkdirp(P7(e.schema))}o(L7,"lmdbCreateSchema")});var RB=v((qOe,yB)=>{"use strict";var SI=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}};yB.exports=SI});var wB=v((WOe,IB)=>{"use strict";var bB=St(),TI=Mn(),yI=zr().LMDB_ERRORS_ENUM,D7=Yt(),AB=Q(),VOe=ae(),M7=require("lmdb"),v7=RB(),U7=(q(),M(z)),{OVERFLOW_MARKER:KOe,MAX_SEARCH_KEY_LENGTH:YOe}=D7,x7=U7.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function B7(e,t,r,n){if(TI.validateEnv(e),t===void 0)throw new Error(yI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(yI.IDS_REQUIRED):new Error(yI.IDS_MUST_BE_ITERABLE);try{let s=bB.listDBIs(e);bB.initializeDBIs(e,t,s);let i=new v7,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[x7]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,M7.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=TI.getIndexedValues(y);if(C)for(let I=0,k=C.length;I<k;I++)S.remove(C[I],a)}catch{AB.warn(`cannot delete from attribute: ${R}, ${y}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){AB.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=TI.getNextMonotonicTime(),i}catch(s){throw s}}o(B7,"deleteRecords");IB.exports={deleteRecords:B7}});var tp=v((jOe,CB)=>{"use strict";var Zu=ae(),F7=wB(),k7=St(),{getSchemaPath:H7}=Rt(),G7=Zm(),q7=Q();CB.exports=$7;async function $7(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 NB([],[]);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=H7(e.schema,e.table),i=await k7.openEnvironment(s,e.table),a=await F7.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await G7(e,a)}catch(c){q7.error(`unable to write transaction due to ${c.message}`)}return NB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o($7,"lmdbDeleteRecords");function NB(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(NB,"createDeleteResponse")});var bI=v((XOe,OB)=>{"use strict";var V7=(q(),M(z)),JOe=Mn();function RI(e,t){let r=Object.create(null);if(t.length===1&&V7.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(RI,"parseRow");function K7(e,t,r,n){let s=RI(r,e);n.push(s)}o(K7,"searchAll");function Y7(e,t,r,n){let s=RI(r,e);n[t]=s}o(Y7,"searchAllToMap");function W7(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(W7,"iterateDBI");function fl(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(fl,"pushResults");function z7(e,t,r,n,s,i){t.toString().endsWith(e)&&fl(t,r,n,s,i)}o(z7,"endsWith");function j7(e,t,r,n,s,i){t.toString().includes(e)&&fl(t,r,n,s,i)}o(j7,"contains");function Q7(e,t,r,n,s,i){t>e&&fl(t,r,n,s,i)}o(Q7,"greaterThanCompare");function J7(e,t,r,n,s,i){t>=e&&fl(t,r,n,s,i)}o(J7,"greaterThanEqualCompare");function X7(e,t,r,n,s,i){t<e&&fl(t,r,n,s,i)}o(X7,"lessThanCompare");function Z7(e,t,r,n,s,i){t<=e&&fl(t,r,n,s,i)}o(Z7,"lessThanEqualCompare");OB.exports={parseRow:RI,searchAll:K7,searchAllToMap:Y7,iterateDBI:W7,endsWith:z7,contains:j7,greaterThanCompare:Q7,greaterThanEqualCompare:J7,lessThanCompare:X7,lessThanEqualCompare:Z7,pushResults:fl}});var ed=v((nPe,xB)=>{"use strict";var Ya=St(),ePe=Q(),as=Mn(),gg=Yt(),nr=zr().LMDB_ERRORS_ENUM,tPe=ae(),eee=(q(),M(z)),Sg=bI(),{parseRow:tee}=Sg,rPe=require("lmdb"),{OVERFLOW_MARKER:PB,MAX_SEARCH_KEY_LENGTH:ree}=gg;function LB(e,t,r,n=!1,s=void 0,i=void 0){return ml(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(LB,"iterateFullIndex");function rp(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ml(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(rp,"iterateRangeBetween");function ml(e,t,r,n){let s=e.database||e,i=Ya.openDBI(s,r);i[gg.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(ml,"setupTransaction");function DB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(PB)){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[gg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(DB,"getOverflowCheck");function nee(e,t,r,n=!1,s=void 0,i=void 0){if(as.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return ml(e,t,t,(a,c,l)=>(Tg(r),r=np(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>tee(u.value,r))))}o(nee,"searchAll");function see(e,t,r,n=!1,s=void 0,i=void 0){if(as.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);Tg(r),r=np(e.database||e,r);let a=new Map;for(let{key:c,value:l}of LB(e,t,t,n,s,i))a.set(c,Sg.parseRow(l,r));return a}o(see,"searchAllToMap");function iee(e,t,r=!1,n=void 0,s=void 0){if(as.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=LB(e,void 0,t,r,n,s),c=a.transaction,l=DB(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(iee,"iterateDBI");function oee(e,t){if(as.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return Ya.statDBI(e,t).entryCount}o(oee,"countAll");function aee(e,t,r,n,s=!1,i=void 0,a=void 0){return Wa(e,r,n),ml(e,t,r,(c,l,u,d)=>(n=as.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(aee,"equals");function cee(e,t,r){return Wa(e,t,r),Ya.openDBI(e,t).getValuesCount(r)}o(cee,"count");function lee(e,t,r,n,s=!1,i=void 0,a=void 0){return Wa(e,r,n),ml(e,null,r,(c,l)=>{n=as.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(lee,"startsWith");function uee(e,t,r,n,s=!1,i=void 0,a=void 0){return MB(e,t,r,n,s,i,a,!0)}o(uee,"endsWith");function MB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return Wa(e,r,n),ml(e,null,r,(l,u,d,f)=>{let m=DB(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(PB)?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[gg.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(MB,"contains");function dee(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),rp(e,t,r,n,l,s,i,a,!0,!1)}o(dee,"greaterThan");function fee(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),rp(e,t,r,n,l,s,i,a,!1,!1)}o(fee,"greaterThanEqual");function mee(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),rp(e,t,r,l,n,s,i,a,!1,!0)}o(mee,"lessThan");function pee(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),rp(e,t,r,l,n,s,i,a,!1,!1)}o(pee,"lessThanEqual");function hee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(as.validateEnv(e),r===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(nr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(nr.END_VALUE_REQUIRED);if(n=as.convertKeyValueToWrite(n),s=as.convertKeyValueToWrite(s),n>s)throw new Error(nr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return rp(e,t,r,n,s,i,a,c)}o(hee,"between");function Eee(e,t,r,n){as.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(Tg(r),r=np(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=Sg.parseRow(c,r)),a}o(Eee,"searchByHash");function _ee(e,t,r){as.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(nr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(_ee,"checkHashExists");function gee(e,t,r,n,s=[]){return UB(e,t,r,n,s),vB(e,t,r,n,s).map(i=>i[1])}o(gee,"batchSearchByHash");function See(e,t,r,n,s=[]){UB(e,t,r,n,s);let i=new Map;for(let[a,c]of vB(e,t,r,n,s))i.set(a,c);return i}o(See,"batchSearchByHashToMap");function vB(e,t,r,n,s=[]){return ml(e,t,t,(i,a,c)=>{r=np(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,Sg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(vB,"batchHashSearch");function UB(e,t,r,n,s){if(as.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(Tg(r),n==null)throw new Error(nr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(nr.IDS_MUST_BE_ITERABLE)}o(UB,"initializeBatchSearchByHash");function Tg(e){if(!Array.isArray(e))throw e===void 0?new Error(nr.FETCH_ATTRIBUTES_REQUIRED):new Error(nr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(Tg,"validateFetchAttributes");function Wa(e,t,r){if(as.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(nr.SEARCH_VALUE_REQUIRED);if(r?.length>ree)throw new Error(nr.SEARCH_VALUE_TOO_LARGE)}o(Wa,"validateComparisonFunctions");function np(e,t){return t.length===1&&eee.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ya.listDBIs(e)),t}o(np,"setGetWholeRowAttributes");xB.exports={searchAll:nee,searchAllToMap:see,count:cee,countAll:oee,equals:aee,startsWith:lee,endsWith:uee,contains:MB,searchByHash:Eee,setGetWholeRowAttributes:np,batchSearchByHash:gee,batchSearchByHashToMap:See,checkHashExists:_ee,iterateDBI:iee,greaterThan:dee,greaterThanEqual:fee,lessThan:mee,lessThanEqual:pee,between:hee}});var td=v((iPe,GB)=>{var BB=require("lodash"),FB=ft(),ze=require("joi"),Tee=ae(),{hdbSchemaTable:sp,checkValidTable:kB,hdbTable:HB,hdbDatabase:yg}=Ki(),{handleHDBError:yee,hdbErrors:Ree}=_e(),{getDatabases:bee}=(we(),M(mt)),{HTTP_STATUS_CODES:Aee}=Ree,Iee=ze.object({database:yg,schema:yg,table:HB,attribute:sp,value:ze.any().required(),get_attributes:ze.array().min(1).items(ze.alternatives(sp,ze.object())).optional(),desc:ze.bool(),limit:ze.number().integer().min(1),offset:ze.number().integer().min(0)}),wee=ze.object({database:yg,schema:yg,table:HB,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(sp,ze.object())).optional(),sort:ze.object({attribute:ze.alternatives(sp,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(sp,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()});GB.exports=function(e,t){let r=null;switch(t){case"value":r=FB.validateBySchema(e,Iee);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(kB("database",e.schema)),i(kB("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=FB.validateBySchema(e,wee);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Tee.checkGlobalSchemaTable(e.schema,e.table);if(s)return yee(new Error,s,Aee.NOT_FOUND);let a=bee()[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=BB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!BB.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 AI=v((aPe,qB)=>{"use strict";var Nee=St(),Cee=td(),{getSchemaPath:Oee}=Rt();qB.exports=Pee;function Pee(e){let t=Cee(e,"hashes");if(t)throw t;let r=Oee(e.schema,e.table);return Nee.openEnvironment(r,e.table)}o(Pee,"initialize")});var II=v((lPe,$B)=>{"use strict";var Lee=ed(),Dee=AI();$B.exports=Mee;async function Mee(e){let t=await Dee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Lee.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(Mee,"lmdbGetDataByHash")});var rd=v((dPe,VB)=>{"use strict";var wI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};VB.exports=wI});var YB=v((pPe,KB)=>{"use strict";var mPe=rd(),vee=ed(),Uee=AI();KB.exports=xee;async function xee(e){let t=await Uee(e),r=global.hdb_schema[e.schema][e.table];return vee.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(xee,"lmdbSearchByHash")});var di=v((EPe,WB)=>{"use strict";var NI=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}};WB.exports=NI});var Rg=v((gPe,ZB)=>{"use strict";var hn=ed(),Bee=St(),Fee=ae(),je=Yt(),pl=(q(),M(z)),kee=Wi(),zB=zr().LMDB_ERRORS_ENUM,{getSchemaPath:Hee}=Rt(),qo=pl.SEARCH_WILDCARDS;async function Gee(e,t,r){let n;e.schema===pl.SYSTEM_SCHEMA_NAME?n=kee[e.table]:n=global.hdb_schema[e.schema][e.table];let s=XB(e,n.hash_attribute,r,t);return QB(e,s,n.hash_attribute,r)}o(Gee,"prepSearch");async function QB(e,t,r,n){let s=Hee(e.schema,e.table),i=await Bee.openEnvironment(s,e.table),a=JB(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(qee(e,r)===!1){let d=e.attribute;if(d===r)return n?jB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?jB(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(QB,"executeSearch");function JB(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(JB,"searchByType");function jB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(jB,"createMapFromIterable");function qee(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(qee,"checkToFetchMore");function XB(e,t,r,n){if(Fee.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(zB.UNKNOWN_SEARCH_TYPE)}else switch(n){case pl.VALUE_SEARCH_COMPARATORS.BETWEEN:return je.SEARCH_TYPES.BETWEEN;case pl.VALUE_SEARCH_COMPARATORS.GREATER:return je.SEARCH_TYPES.GREATER_THAN;case pl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return je.SEARCH_TYPES.GREATER_THAN_EQUAL;case pl.VALUE_SEARCH_COMPARATORS.LESS:return je.SEARCH_TYPES.LESS_THAN;case pl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return je.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(zB.UNKNOWN_SEARCH_TYPE)}}o(XB,"createSearchTypeFromSearchObject");ZB.exports={executeSearch:QB,createSearchTypeFromSearchObject:XB,prepSearch:Gee,searchByType:JB}});var tF=v((yPe,eF)=>{"use strict";var TPe=di(),$ee=td(),Vee=ae(),Kee=(q(),M(z)),Yee=Rg();eF.exports=Wee;function Wee(e,t){if(!Vee.isEmpty(t)&&Kee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=$ee(e,"value");if(n)throw n;return Yee.prepSearch(e,t,!0)}o(Wee,"lmdbGetDataByValue")});var ip=v((APe,rF)=>{"use strict";var bPe=di(),zee=td(),jee=ae(),Qee=(q(),M(z)),Jee=Rg();rF.exports=Xee;async function Xee(e,t){if(!jee.isEmpty(t)&&Qee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=zee(e,"value");if(n)throw n;return Jee.prepSearch(e,t,!1)}o(Xee,"lmdbSearchByValue")});var sF=v((NPe,nF)=>{"use strict";var wPe=Yt(),CI=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}},OI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},PI=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};nF.exports={SearchByConditionsObject:CI,SearchCondition:OI,SortAttribute:PI}});var lF=v((DPe,cF)=>{"use strict";var{SearchByConditionsObject:OPe,SearchCondition:PPe}=sF(),Zee=di(),ete=td(),LI=ed(),bg=Yt(),{Resource:LPe}=(qa(),M(s0)),aF=Rg(),tte=bI(),rte=require("lodash"),{getSchemaPath:nte}=Rt(),iF=St(),{handleHDBError:ste,hdbErrors:ite}=_e(),{HTTP_STATUS_CODES:ote}=ite,ate=1e8;cF.exports=cte;async function cte(e){let t=ete(e,"conditions");if(t)throw ste(t,t.message,ote.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=nte(e.schema,e.table),n=await iF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)iF.openDBI(n,u.attribute);let i=rte.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===bg.SEARCH_TYPES.EQUALS?u.estimated_count=LI.count(n,u.attribute,u.value):d===bg.SEARCH_TYPES.CONTAINS||d===bg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=ate}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await oF(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(aF.filterByType),f=d.length,m=LI.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=>tte.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await oF(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=LI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(cte,"lmdbSearchByConditions");async function oF(e,t,r,n){let s=new Zee(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===bg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,aF.searchByType(e,s,i,n).map(a=>a.value)}o(oF,"executeConditionSearch")});var op=v((vPe,uF)=>{"use strict";var lte=(q(),M(z)).OPERATIONS_ENUM,DI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=lte.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};uF.exports=DI});var MI=v((xPe,gF)=>{"use strict";var pF=di(),hF=op(),EF=ip(),_F=tp(),kn=(q(),M(z)),dF=ae(),fF=St(),{getTransactionAuditStorePath:ute,getSchemaPath:dte}=Rt(),mF=Q();gF.exports=fte;async function fte(e){try{if(dF.isEmpty(global.hdb_schema[e.schema])||dF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await mte(e),await pte(e);let t=dte(e.schema,e.table);try{await fF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")mF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=ute(e.schema,e.table);await fF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")mF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(fte,"lmdbDropTable");async function mte(e){let t=new pF(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 EF(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 hF(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await _F(s)}o(mte,"deleteAttributesFromSystem");async function pte(e){let t=new pF(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 EF(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 hF(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await _F(s)}catch(i){throw i}}o(pte,"dropTableFromSystem")});var TF=v((FPe,SF)=>{"use strict";var hte=require("fs-extra"),Ete=di(),_te=rd(),gte=op(),Ste=MI(),Tte=tp(),yte=II(),Rte=ip(),$o=(q(),M(z)),{getSchemaPath:bte}=Rt(),{handleHDBError:Ate,hdbErrors:Ite}=_e(),{HDB_ERROR_MSGS:wte,HTTP_STATUS_CODES:Nte}=Ite;SF.exports=Cte;async function Cte(e){let t;try{t=await Ote(e.schema);let r=new Ete($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 Rte(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await Ste(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new gte($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Tte(s);let i=bte(t);await hte.remove(i)}catch(r){throw r}}o(Cte,"lmdbDropSchema");async function Ote(e){let t=new _te($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 yte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw Ate(new Error,wte.SCHEMA_NOT_FOUND(e),Nte.NOT_FOUND,void 0,void 0,!0);return n}o(Ote,"validateDropSchema")});var ap=v((HPe,yF)=>{"use strict";var vI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};yF.exports=vI});var xI=v(($Pe,RF)=>{"use strict";var Pte=require("fs-extra"),Ag=St(),{getTransactionAuditStorePath:Lte}=Rt(),UI=Yt(),qPe=ap();RF.exports=Dte;async function Dte(e){let t;try{let r=Lte(e.schema,e.table);await Pte.mkdirp(r),t=await Ag.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{Ag.createDBI(t,UI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Ag.createDBI(t,UI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Ag.createDBI(t,UI.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(Dte,"createTransactionsAuditEnvironment")});var IF=v((YPe,AF)=>{"use strict";var BI=(q(),M(z)),bF=St(),Mte=ul(),{getSystemSchemaPath:vte,getSchemaPath:Ute}=Rt(),KPe=Wi(),xte=hg(),FI=pg(),Bte=Q(),Fte=xI();AF.exports=kte;async function kte(e,t){let r=Ute(t.schema,t.table),n=new FI(t.schema,t.table,BI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new FI(t.schema,t.table,BI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new FI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await bF.createEnvironment(r,t.table),e!==void 0){let a=await bF.openEnvironment(vte(),BI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Mte.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 Fte(t)}catch(a){throw a}}o(kte,"lmdbCreateTable");async function kI(e){try{await xte(e)}catch(t){Bte.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(kI,"createAttribute")});var NF=v((zPe,wF)=>{"use strict";var Hte=Xm(),Gte=Sm(),qte=Eg(),cp=(q(),M(z)),$te=ul().updateRecords,Vte=St(),{getSchemaPath:Kte}=Rt(),Yte=Zm(),Wte=Q();wF.exports=zte;async function zte(e){try{let{schemaTable:t,attributes:r}=Hte(e);Gte(e,r,t.hash_attribute),e.schema!==cp.SYSTEM_SCHEMA_NAME&&(r.includes(cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await qte(e.hdb_auth_header,t,r),s=Kte(e.schema,e.table),i=await Vte.openEnvironment(s,e.table),a=await $te(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Yte(e,a)}catch(c){Wte.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(zte,"lmdbUpdateRecords")});var OF=v((QPe,CF)=>{"use strict";var jte=(q(),M(z)).OPERATIONS_ENUM,HI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=jte.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};CF.exports=HI});var LF=v((ZPe,PF)=>{"use strict";var XPe=OF(),Qte=Xm(),Jte=Sm(),Xte=Eg(),lp=(q(),M(z)),Zte=ul().upsertRecords,ere=St(),{getSchemaPath:tre}=Rt(),rre=Zm(),nre=Q(),{handleHDBError:sre,hdbErrors:ire}=_e();PF.exports=ore;async function ore(e){let t;try{t=Qte(e)}catch(l){throw sre(l,l.message,ire.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Jte(e,n,r.hash_attribute),e.schema!==lp.SYSTEM_SCHEMA_NAME&&(n.includes(lp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(lp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(lp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(lp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Xte(e.hdb_auth_header,r,n),i=tre(e.schema,e.table),a=await ere.openEnvironment(i,e.table),c=await Zte(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await rre(e,c)}catch(l){nre.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(ore,"lmdbUpsertRecords")});var MF=v((tLe,DF)=>{"use strict";var GI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};DF.exports=GI});var UF=v((nLe,vF)=>{"use strict";var qI=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}};vF.exports=qI});var FF=v((oLe,BF)=>{"use strict";var $I=St(),{getTransactionAuditStorePath:are}=Rt(),iLe=MF(),up=Yt(),cre=ae(),xF=UF(),lre=require("util").promisify,ure=lre(setTimeout),dre=1e4,fre=100;BF.exports=mre;async function mre(e){let t=are(e.schema,e.table),r=await $I.openEnvironment(t,e.table,!0),n=$I.listDBIs(r);$I.initializeDBIs(r,up.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new xF;do s=await pre(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 ure(fre);while(s.transactions_deleted>0);return i}o(mre,"deleteAuditLogsBefore");async function pre(e,t){let r=new xF;try{let n=e.dbis[up.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[up.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];cre.isEmpty(c)||(s=e.dbis[up.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[up.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>dre)break}return await s,r}catch(n){throw n}}o(pre,"deleteTransactions")});var HF=v((cLe,kF)=>{"use strict";var VI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};kF.exports=VI});var qF=v((dLe,GF)=>{"use strict";var hre=di(),Ere=op(),uLe=HF(),zi=(q(),M(z)),_re=ae(),KI=St(),gre=Wi(),Sre=ip(),Tre=tp(),{getSchemaPath:yre}=Rt();GF.exports=Rre;async function Rre(e,t=!0){let r;e.schema===zi.SYSTEM_SCHEMA_NAME?r=gre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Are(e),s=yre(e.schema,e.table),i=await KI.openEnvironment(s,e.table);return t===!0&&await bre(e,i,r.hash_attribute),KI.dropDBI(i,e.attribute),n}o(Rre,"lmdbDropAttribute");async function bre(e,t,r){let n=KI.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(bre,"removeAttributeFromAllObjects");async function Are(e){let t=new hre(zi.SYSTEM_SCHEMA_NAME,zi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Sre(t)).filter(a=>a[zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(_re.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[zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Ere(zi.SYSTEM_SCHEMA_NAME,zi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Tre(i)}o(Are,"dropAttributeFromSystem")});var zF=v((pLe,WF)=>{"use strict";var YI=St(),nd=Yt(),mLe=Mn(),WI=(q(),M(z)),$F=ae(),{getTransactionAuditStorePath:Ire}=Rt(),wre=ed(),Ig=Ju(),Nre=Q();WF.exports=Cre;async function Cre(e){let t=Ire(e.schema,e.table),r=await YI.openEnvironment(t,e.table,!0),n=YI.listDBIs(r);YI.initializeDBIs(r,nd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case WI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return VF(r,e.search_values);case WI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Pre(r,e.search_values,s);case WI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Ore(r,e.search_values);default:return VF(r)}}o(Cre,"readAuditLog");function VF(e,t=[0,Date.now()]){$F.isEmpty(t[0])&&(t[0]=0),$F.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 Ig,s))}o(VF,"searchTransactionsByTimestamp");function Ore(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,YF(e,i))}return Object.fromEntries(r)}o(Ore,"searchTransactionsByUsername");function Pre(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=wre.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=YF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);KF(l,"records",r,d,a),KF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(Pre,"searchTransactionsByHashValues");function KF(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 Ig(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Ig(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(KF,"loopRecords");function YF(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 Ig,i);r.push(a)}}catch(i){Nre.warn(i)}return r}catch(n){throw n}}o(YF,"batchSearchTransactions")});var QF=v((gLe,jF)=>{"use strict";var{getSchemaPath:ELe}=Rt(),_Le=St(),{database:Lre}=(we(),M(mt));jF.exports={writeTransaction:Dre};async function Dre(e,t,r){return Lre({database:e,table:t}).transaction(r)}o(Dre,"writeTransaction")});var ek=v((TLe,ZF)=>{"use strict";var{getSchemaPath:JF}=Rt(),XF=St();ZF.exports={flush:Mre,resetReadTxn:vre};async function Mre(e,t){return(await XF.openEnvironment(JF(e,t),t.toString())).flushed}o(Mre,"flush");async function vre(e,t){try{(await XF.openEnvironment(JF(e,t),t.toString())).resetReadTxn()}catch{}}o(vre,"resetReadTxn")});var sk=v((RLe,nk)=>{"use strict";var{Readable:Ure}=require("stream"),{getDatabases:xre}=(we(),M(mt)),{readSync:Bre,openSync:Fre,createReadStream:tk}=require("fs"),{open:kre}=require("lmdb"),{OpenDBIObject:rk}=Wm(),Hre=zm(),{AUDIT_STORE_OPTIONS:Gre}=(Fi(),M(lx)),{INTERNAL_DBIS_NAME:qre,AUDIT_STORE_NAME:$re}=Yt();nk.exports=Kre;var zI=32768,Vre=100;async function Kre(e){let t=e.database||e.schema||"data",r=xre()[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=kre({noSync:!0,maxDbs:Hre.MAX_DBS}),m,p=f.openDB(qre,new rk(!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++%Vre===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 rk(!I,I);await g(S,k)}e.include_audit&&await g($re,{...Gre}),await m;let R=tk(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let a=r[Object.keys(r)[0]].primaryStore,c=Fre(a.path);return a.transaction(()=>{let u=Buffer.alloc(zI);Bre(c,u,0,zI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=tk(null,{fd:c,start:zI}),m=new Ure.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(Kre,"getBackup")});var ak=v((ALe,ok)=>{"use strict";var Yre=Q(),{handleHDBError:Wre}=_e(),zre=B0(),jre=hg(),Qre=gI(),Jre=TB(),Xre=tp(),Zre=II(),ene=YB(),tne=tF(),rne=ip(),nne=lF(),sne=TF(),ine=IF(),one=NF(),ane=LF(),cne=FF(),lne=MI(),une=qF(),dne=zF(),fne=QF(),ik=ek(),mne=sk(),jI=class extends zre{static{o(this,"LMDBBridge")}async searchByConditions(t){return nne(t)}async getDataByHash(t){return await Zre(t)}async searchByHash(t){return await ene(t)}async getDataByValue(t,r){return await tne(t,r)}async searchByValue(t){return await rne(t)}async createSchema(t){return await Jre(t)}async dropSchema(t){return await sne(t)}async createTable(t,r){return await ine(t,r)}async dropTable(t){return await lne(t)}async createAttribute(t){return await jre(t)}async createRecords(t){return await Qre(t)}async updateRecords(t){return await one(t)}async upsertRecords(t){try{return await ane(t)}catch(r){throw Wre(r,null,null,Yre.ERR,r)}}async deleteRecords(t){return await Xre(t)}async dropAttribute(t){return await une(t)}async deleteAuditLogsBefore(t){return await cne(t)}async readAuditLog(t){return await dne(t)}writeTransaction(t,r,n){return fne.writeTransaction(t,r,n)}flush(t,r){return ik.flush(t,r)}resetReadTxn(t,r){return ik.resetReadTxn(t,r)}getBackup(t){return mne(t)}};ok.exports=jI});function Hn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function fp(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be a string, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be a string, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be a number, attempt to assign ${p}`);Hn(this)[u]=m},"set");break;case"Int":d=o(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new cs.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Long":d=o(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new cs.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new cs.ClientError(`${u} must be a number, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new cs.ClientError(`${u} must be a Date, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof Ds||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Hn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Hn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new cs.ClientError(`${u} must be an object, attempt to assign ${m}`);Hn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=QI(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new cs.ClientError("Can not add a property to a sealed table schema");Hn(this)[l]=u}),a("deleteProperty",function(l){Hn(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?uk:lk);break}c=l}while(c&&c!==lk&&c!==uk)}function dk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(ck[t])return ck[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=QI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function pne(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 QI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends El{static{o(this,"TrackedObject")}},fp(r,t)),new r(e)):new El(e);case Array:let n=new Ng(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=QI(a,t?.elements)),n[s]=a}return n;default:return e}}function Cg(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=Cg(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 _l(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=_l(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=Hb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=_l(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)hne.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function wg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[hl]||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(wg(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(wg(s))return!0}else return!0}else return!0}}return!1}var cs,ck,lk,uk,El,hne,hl,Ng,dp,JI=se(()=>{cs=b(_e());g_();ts();o(Hn,"getChanges");o(fp,"assignTrackedAccessors");ck=Object.prototype,lk=new Proxy({},{get:dk}),uk=new Proxy({},{get:dk,set:pne});o(dk,"getProxiedProperty");o(pne,"setProxiedProperty");o(QI,"trackObject");El=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}};fp(El,{},!0);o(Cg,"collapseData");hne=Object.prototype.hasOwnProperty;o(_l,"updateAndFreeze");o(wg,"hasChanges");hl=Symbol.for("has-array-changes"),Ng=class extends Array{static{o(this,"TrackedArray")}#e;[hl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[hl]=!0,super.splice(...t)}push(...t){return this[hl]=!0,super.push(...t)}pop(){return this[hl]=!0,super.pop()}unshift(...t){return this[hl]=!0,super.unshift(...t)}shift(){return this[hl]=!0,super.shift()}};Ng.prototype.constructor=Array;dp=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var Sk={};Re(Sk,{ResourceBridge:()=>ew});function tw({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 fk(e,t){let r=ji(e),n=tw(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&&Cg(d)}catch(f){d={message:(0,gk.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function ji(e){let t=e.database||e.schema||_ne,r=at()[t];if(!r)throw(0,fi.handleHDBError)(new Error,Ene.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function mk(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*pk(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 hk,Og,fi,Ek,XI,ZI,_k,gk,Ene,_ne,gne,Sne,ew,Tk=se(()=>{hk=b(ak()),Og=b(td()),fi=b(_e());we();Ek=b(Xm());q();XI=b(Go()),ZI=b(os()),_k=b(ae());Ua();JI();gk=b(Q()),{HDB_ERROR_MSGS:Ene}=fi.hdbErrors,_ne="data",gne=1e4,Sne=10,ew=class extends hk.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=ji(t);if(!r)throw new fi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let a=i;return{attribute:a.attribute??a.search_attribute,comparator:a.comparator??a.search_type,value:a.value!==void 0?a.value:a.search_value}}}o(n,"mapCondition");let s=(0,Og.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:tw(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new fi.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Ze({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await ji(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ji(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return ji(t).dropTable()}createSchema(t){return sd({database:t.schema,table:null}),XI.signalSchemaChange(new ZI.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await rw(t.schema),XI.signalSchemaChange(new ZI.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,Ek.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=Cg(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 mk(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:XE.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,_k.asyncSetTimeout)(Sne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%gne===0&&await u();return l.length>0&&await u(),s?mk(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Og.default)(t,"hashes");if(r)throw r;return fk(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of fk(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Sb[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,Og.default)(t,"value");if(n)throw n;let s=ji(t);if(!s)throw new fi.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===XE.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:tw(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=ji(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){ji({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ji(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=ji(t),n={};switch(t.search_type){case ZE.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 ZE.USERNAME:{let s=t.search_values;for await(let i of pk(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return pk(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(tw,"getSelect");o(fk,"getRecords");o(ji,"getTable");o(mk,"createDeleteResponse");o(pk,"groupRecordsInHistory")});var ls=v((ULe,yk)=>{"use strict";var{ResourceBridge:Tne}=(Tk(),M(Sk)),yne=me();yne.initSync();var Pg;function Rne(){return Pg||(Pg=new Tne,Pg)}o(Rne,"getBridge");yk.exports=Rne()});var Qi=v((BLe,Ak)=>{var bne=Wi(),{promisify:Ane}=require("util"),{getDatabases:bk}=(we(),M(mt));Ak.exports={setSchemaDataToGlobal:Rk,getTableSchema:Ine,getSystemSchema:wne,setSchemaDataToGlobalAsync:Ane(Rk)};function Rk(e){global.hdb_schema=bk(),e&&e()}o(Rk,"setSchemaDataToGlobal");function Ine(e,t,r){let n=bk()[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(Ine,"getTableSchema");function wne(){return bne}o(wne,"getSystemSchema")});var Gn=v((kLe,Ck)=>{"use strict";var Dg=eI(),tn=ae(),Nne=require("util"),Mg=ls(),Cne=Qi(),Ik=Q(),{handleHDBError:gl,hdbErrors:One}=_e(),{HTTP_STATUS_CODES:Sl}=One,Pne=Nne.promisify(Cne.getTableSchema),Lne="updated",wk="inserted",Nk="upserted";Ck.exports={insert:Mne,update:vne,upsert:Une,validation:Dne,flush:xne};async function Dne(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 Pne(e.schema,e.table),r=Dg(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 Ik.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 Ik.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(Dne,"validation");async function Mne(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Dg(e);if(t)throw gl(new Error,t.message,Sl.BAD_REQUEST);tn.transformReq(e);let r=tn.checkSchemaTableExist(e.schema,e.table);if(r)throw gl(new Error,r,Sl.BAD_REQUEST);let n=await Mg.createRecords(e);return Lg(wk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Mne,"insertData");async function vne(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Dg(e);if(t)throw gl(new Error,t.message,Sl.BAD_REQUEST);tn.transformReq(e);let r=tn.checkSchemaTableExist(e.schema,e.table);if(r)throw gl(new Error,r,Sl.BAD_REQUEST);let n=await Mg.updateRecords(e);return tn.isEmpty(n.existing_rows)?Lg(Lne,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Lg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(vne,"updateData");async function Une(e){if(e.operation!=="upsert")throw gl(new Error,"invalid operation, must be upsert",Sl.INTERNAL_SERVER_ERROR);let t=Dg(e);if(t)throw gl(new Error,t.message,Sl.BAD_REQUEST);tn.transformReq(e);let r=tn.checkSchemaTableExist(e.schema,e.table);if(r)throw gl(new Error,r,Sl.BAD_REQUEST);let n=await Mg.upsertRecords(e);return Lg(Nk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(Une,"upsertData");function Lg(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===wk?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===Nk?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(Lg,"returnObject");function xne(e){return tn.transformReq(e),Mg.flush(e.schema,e.table)}o(xne,"flush")});var sw=v((GLe,Lk)=>{var Bne=ft(),nw=require("joi"),{hdbTable:Fne,hdbDatabase:Ok}=Ki(),Pk={schema:Ok,database:Ok,table:Fne},kne={date:nw.date().iso().required()},Hne={timestamp:nw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Lk.exports=function(e,t){let r=t==="timestamp"?{...Pk,...Hne}:{...Pk,...kne},n=nw.object(r);return Bne.validateBySchema(e,n)}});var vk=v((qLe,Mk)=>{var Gne=ft(),iw=require("joi"),{hdbTable:qne,hdbDatabase:Dk}=Ki(),$ne=iw.object({schema:Dk,database:Dk,table:qne,hash_values:iw.array().required(),ids:iw.array()});Mk.exports=function(e){return Gne.validateBySchema(e,$ne)}});var lw=v(($Le,Uk)=>{"use strict";var ow=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}},aw=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}},cw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Uk.exports={InsertObject:ow,NoSQLSeachObject:aw,DeleteResponseObject:cw}});var Rl=v((KLe,Hk)=>{"use strict";var Bk=sw(),Vne=vk(),Tl=ae(),xk=require("moment"),Fk=Q(),{promisify:Kne,callbackify:Yne}=require("util"),yl=(q(),M(z)),Wne=Qi(),uw=Kne(Wne.getTableSchema),dw=ls(),{DeleteResponseObject:zne}=lw(),{handleHDBError:za,hdbErrors:jne}=_e(),{HDB_ERROR_MSGS:vg,HTTP_STATUS_CODES:ja}=jne,Qne="records successfully deleted",Jne=Yne(kk);Hk.exports={delete:Jne,deleteRecord:kk,deleteFilesBefore:Xne,deleteAuditLogsBefore:Zne};async function Xne(e){let t=Bk(e,"date");if(t)throw za(t,t.message,ja.BAD_REQUEST,void 0,void 0,!0);if(Tl.transformReq(e),!xk(e.date,xk.ISO_8601).isValid())throw za(new Error,vg.INVALID_DATE,ja.BAD_REQUEST,yl.LOG_LEVELS.ERROR,vg.INVALID_DATE,!0);let n=Tl.checkSchemaTableExist(e.schema,e.table);if(n)throw za(new Error,n,ja.NOT_FOUND,yl.LOG_LEVELS.ERROR,n,!0);let s=await dw.deleteRecordsBefore(e);if(await uw(e.schema,e.table),Fk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(Xne,"deleteFilesBefore");async function Zne(e){let t=Bk(e,"timestamp");if(t)throw za(t,t.message,ja.BAD_REQUEST,void 0,void 0,!0);if(Tl.transformReq(e),isNaN(e.timestamp))throw za(new Error,vg.INVALID_VALUE("Timestamp"),ja.BAD_REQUEST,yl.LOG_LEVELS.ERROR,vg.INVALID_VALUE("Timestamp"),!0);let r=Tl.checkSchemaTableExist(e.schema,e.table);if(r)throw za(new Error,r,ja.NOT_FOUND,yl.LOG_LEVELS.ERROR,r,!0);let n=await dw.deleteAuditLogsBefore(e);return await uw(e.schema,e.table),Fk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(Zne,"deleteAuditLogsBefore");async function kk(e){e.ids&&(e.hash_values=e.ids);let t=Vne(e);if(t)throw za(t,t.message,ja.BAD_REQUEST,void 0,void 0,!0);Tl.transformReq(e);let r=Tl.checkSchemaTableExist(e.schema,e.table);if(r)throw za(new Error,r,ja.NOT_FOUND,yl.LOG_LEVELS.ERROR,r,!0);try{await uw(e.schema,e.table);let n=await dw.deleteRecords(e);return Tl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Qne}`),n}catch(n){if(n.message===yl.SEARCH_NOT_FOUND_MESSAGE){let s=new zne;return s.message=yl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(kk,"deleteRecord")});var Ew={};Re(Ew,{HASH_FUNCTION:()=>Gr,hash:()=>pw,validate:()=>hw});function fw(e=pp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(mp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function pw(e,t=Gr[qk?.toUpperCase()]??Gr.SHA256){return mw[t](e)}function hw(e,t,r=Gr[qk?.toUpperCase()]??Gr.SHA256){return e?ese[r](e,t):!1}var mp,id,Gk,qk,pp,$k,Gr,mw,ese,_w=se(()=>{mp=b(require("node:crypto")),id=b(require("argon2")),Gk=b(me());q();qk=(0,Gk.get)(F.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),pp=16,$k=9,Gr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(fw,"generateSalt");mw={[Gr.MD5]:(e,t=void 0)=>{t=t??fw($k);let r=mp.createHash(Gr.MD5).update(e+t).digest("hex");return t+r},[Gr.SHA256]:(e,t=void 0)=>{t=t??fw(pp);let r=mp.createHash(Gr.SHA256).update(e+t).digest("hex");return t+r},[Gr.ARGON2ID]:async e=>{let t=fw(pp),r=await id.hash(e,{type:id.argon2id,salt:Buffer.from(t)});return t+r}},ese={[Gr.MD5]:(e,t)=>{let r=e.slice(0,$k);return e===mw[Gr.MD5](t,r)},[Gr.SHA256]:(e,t)=>{let r=e.slice(0,pp);return e===mw[Gr.SHA256](t,r)},[Gr.ARGON2ID]:async(e,t)=>await id.verify(e.slice(pp),t)};o(pw,"hash");o(hw,"validate")});var Kk=v((jLe,Vk)=>{var gw=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 tse(e){return En.password.presence=!0,En.username.presence=!0,En.role.presence=!0,En.active.presence=!0,gw.validateObject(e,En)}o(tse,"addUserValidation");function rse(e){return En.password.presence=!1,En.username.presence=!0,En.role.presence=!1,En.active.presence=!1,gw.validateObject(e,En)}o(rse,"alterUserValidation");function nse(e){return En.password.presence=!1,En.username.presence=!0,En.role.presence=!1,En.active.presence=!1,gw.validateObject(e,En)}o(nse,"dropUserValidation");Vk.exports={addUserValidation:tse,alterUserValidation:rse,dropUserValidation:nse}});var sH=v((XLe,nH)=>{"use strict";var Sw=require("recursive-iterator"),sse=require("alasql"),Tw=require("clone"),Yk=ae(),{handleHDBError:Wk,hdbErrors:ise}=_e(),{HDB_ERROR_MSGS:zk,HTTP_STATUS_CODES:jk}=ise,{getDatabases:ose}=(we(),M(mt)),ase=["DISTINCT_ARRAY"],Qk=Symbol("validateTables"),yw=Symbol("validateTable"),JLe=Symbol("getAllColumns"),Jk=Symbol("validateAllColumns"),Ug=Symbol("findColumn"),Xk=Symbol("validateOrderBy"),hp=Symbol("validateSegment"),Rw=Symbol("validateColumn"),Zk=Symbol("setColumnsForTable"),eH=Symbol("checkColumnsForAsterisk"),tH=Symbol("validateGroupBy"),rH=Symbol("hasColumns"),bw=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Qk](),this[eH](),this[Jk]()}[Qk](){if(this[rH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[yw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[yw](t.table)})}}[rH](){let t=!1,r=new Sw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[yw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ose();if(!r[t.databaseid])throw Wk(new Error,zk.SCHEMA_NOT_FOUND(t.databaseid),jk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Wk(new Error,zk.TABLE_NOT_FOUND(t.databaseid,t.tableid),jk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Tw(s);i.table=Tw(t),this.attributes.push(i)})}[Ug](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)}[eH](){let t=new Sw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Zk](r.tableid)}[Zk](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new sse.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Jk](){this[hp](this.statement.columns,!1),this[hp](this.statement.joins,!1),this[hp](this.statement.where,!1),this[tH](this.statement.group,!1),this[hp](this.statement.order,!0)}[hp](t,r){if(!t)return;let n=new Sw(t),s=[];for(let{node:i,path:a}of n)!Yk.isEmpty(i)&&!Yk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Xk](i):s.push(this[Rw](i)));return s}[tH](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&ase.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Tw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Ug](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[Ug](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`}[Xk](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[Rw](t)}[Rw](t){let r=this[Ug](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]}};nH.exports=bw});var cH=v((eDe,aH)=>{"use strict";var iH=require("lodash"),Ep=require("mathjs"),cse=require("jsonata"),oH=ae();aH.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?iH.uniqWith(e,iH.isEqual):e,"distinct_array"),searchJSON:lse,mad:_p.bind(null,Ep.mad),mean:_p.bind(null,Ep.mean),mode:_p.bind(null,Ep.mode),prod:_p.bind(null,Ep.prod),median:_p.bind(null,Ep.median)};function _p(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(_p,"aggregateFunction");function lse(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(oH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),oH.isEmpty(this.__ala__.res[r])){let n=cse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(lse,"searchJSON")});var uH=v((rDe,lH)=>{"use strict";var fr=require("moment"),Aw="YYYY-MM-DDTHH:mm:ss.SSSZZ";fr.suppressDeprecationWarnings=!0;lH.exports={current_date:o(()=>fr().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>fr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return fr(e).utc().format("YYYY");case"month":return fr(e).utc().format("MM");case"day":return fr(e).utc().format("DD");case"hour":return fr(e).utc().format("HH");case"minute":return fr(e).utc().format("mm");case"second":return fr(e).utc().format("ss");case"millisecond":return fr(e).utc().format("SSS");default:break}},"extract"),date:o(e=>fr(e).utc().format(Aw),"date"),date_format:o((e,t)=>fr(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>fr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>fr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=fr(e).utc(),s=fr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>fr().utc().valueOf(),"now"),get_server_time:o(()=>fr().format(Aw),"get_server_time"),offset_utc:o((e,t)=>fr(e).utc().utcOffset(t).format(Aw),"offset_utc")}});var pH=v((sDe,mH)=>{"use strict";var use=require("@turf/area"),dse=require("@turf/length"),fse=require("@turf/circle"),mse=require("@turf/difference"),pse=require("@turf/distance"),hse=require("@turf/boolean-contains"),Ese=require("@turf/boolean-equal"),_se=require("@turf/boolean-disjoint"),gse=require("@turf/helpers"),dH=(q(),M(z)),Je=ae(),Vo=Q();mH.exports={geoArea:Sse,geoLength:Tse,geoCircle:yse,geoDifference:Rse,geoDistance:fH,geoNear:bse,geoContains:Ase,geoEqual:Ise,geoCrosses:wse,geoConvert:Nse};function Sse(e){if(Je.isEmpty(e))return NaN;typeof e=="string"&&(e=Je.autoCastJSON(e));try{return use.default(e)}catch(t){return Vo.trace(t,e),NaN}}o(Sse,"geoArea");function Tse(e,t){if(Je.isEmpty(e))return NaN;typeof e=="string"&&(e=Je.autoCastJSON(e));try{return dse.default(e,{units:t||"kilometers"})}catch(r){return Vo.trace(r,e),NaN}}o(Tse,"geoLength");function yse(e,t,r){if(Je.isEmpty(e))return NaN;if(Je.isEmpty(t))return NaN;typeof e=="string"&&(e=Je.autoCastJSON(e));try{return fse.default(e,t,{units:r||"kilometers"})}catch(n){return Vo.trace(n,e,t),NaN}}o(yse,"geoCircle");function Rse(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 mse(e,t)}catch(r){return Vo.trace(r,e,t),NaN}}o(Rse,"geoDifference");function fH(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 pse.default(e,t,{units:r||"kilometers"})}catch(n){return Vo.trace(n,e,t),NaN}}o(fH,"geoDistance");function bse(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 fH(e,t,n)<=r}catch(s){return Vo.trace(s,e,t),!1}}o(bse,"geoNear");function Ase(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 hse.default(e,t)}catch(r){return Vo.trace(r,e,t),!1}}o(Ase,"geoContains");function Ise(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 Ese.default(e,t)}catch(r){return Vo.trace(r,e,t),!1}}o(Ise,"geoEqual");function wse(e,t){if(Je.isEmpty(e)||Je.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Je.autoCastJSON(e)),typeof t=="string"&&(t=Je.autoCastJSON(t));try{return!_se.default(e,t)}catch(r){return Vo.trace(r,e,t),!1}}o(wse,"geoCrosses");function Nse(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(dH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(dH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Je.autoCastJSON(e)),gse[t](e,r)}o(Nse,"geoConvert")});var xg=v((oDe,hH)=>{var bl=cH(),us=uH(),Ji=pH();hH.exports=e=>{e.aggr.mad=e.aggr.MAD=bl.mad,e.aggr.mean=e.aggr.MEAN=bl.mean,e.aggr.mode=e.aggr.MODE=bl.mode,e.aggr.prod=e.aggr.PROD=bl.prod,e.aggr.median=e.aggr.MEDIAN=bl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=bl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=bl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=us.current_date,e.fn.current_time=e.fn.CURRENT_TIME=us.current_time,e.fn.extract=e.fn.EXTRACT=us.extract,e.fn.date=e.fn.DATE=us.date,e.fn.date_format=e.fn.DATE_FORMAT=us.date_format,e.fn.date_add=e.fn.DATE_ADD=us.date_add,e.fn.date_sub=e.fn.DATE_SUB=us.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=us.date_diff,e.fn.now=e.fn.NOW=us.now,e.fn.offset_utc=e.fn.OFFSET_UTC=us.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=us.get_server_time,e.fn.getdate=e.fn.GETDATE=us.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=us.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=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 SH=v((aDe,gH)=>{"use strict";var gp=require("lodash"),qn=require("alasql");qn.options.cache=!1;var Cse=xg(),EH=require("clone"),Bg=require("recursive-iterator"),Ke=Q(),st=ae(),od=ls(),Ose=(q(),M(z)),{hdbErrors:Pse}=_e(),{getDatabases:_H}=(we(),M(mt)),Lse="IS NULL",mi="There was a problem performing this search. Please check the logs and try again.";Cse(qn);var Iw=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(mi)}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(mi)}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(mi)}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(mi)}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(mi)}}_getColumns(){let t=new Bg(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(EH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=gp.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=_H()[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 Bg(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 Bg(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(Ose.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&&gp.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(EH(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(Lse)>-1&&this.tables.forEach(s=>{let i={columnid:_H()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=gp.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(mi)}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(mi)}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(mi)}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(mi)}}}_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=gp.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 Bg(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=gp.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(mi)}}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(Pse.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(mi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};gH.exports=Iw});var _n=v((lDe,TH)=>{"use strict";TH.exports={searchByConditions:Dse,searchByHash:Mse,searchByValue:vse,search:Use};var ww=ls(),{transformReq:Nw}=ae();async function Dse(e){return Nw(e),ww.searchByConditions(e)}o(Dse,"searchByConditions");async function Mse(e){Nw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of ww.searchByHash(e))r&&t.push(r);return t}o(Mse,"searchByHash");async function vse(e){Nw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of ww.searchByValue(e))t.push(r);return t}o(vse,"searchByValue");function Use(e,t){try{let r=sH(),n=SH(),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(Use,"search")});var Xi=v((dDe,AH)=>{"use strict";var Sp=require("crypto"),xse=me(),{CONFIG_PARAMS:Bse}=(q(),M(z)),RH="aes-256-cbc",Fse=32,kse=16,Cw=64,bH=32,Hse=Cw+bH,yH=new Map;AH.exports={encrypt:Gse,decrypt:qse,createNatsTableStreamName:$se};function Gse(e){let t=Sp.randomBytes(Fse),r=Sp.randomBytes(kse),n=Sp.createCipheriv(RH,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(Gse,"encrypt");function qse(e){let t=e.substr(0,Cw),r=e.substr(Cw,bH),n=e.substr(Hse,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=Sp.createDecipheriv(RH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(qse,"decrypt");function $se(e,t){let r=xse.get(Bse.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=yH.get(r);return n||(n=Sp.createHash("md5").update(r).digest("hex"),yH.set(r,n)),n}o($se,"createNatsTableStreamName")});var Pt=v((pDe,wH)=>{"use strict";var{platform:mDe}=require("os"),Vse="nats-server.zip",Ow="nats-server",Kse=process.platform==="win32"?`${Ow}.exe`:Ow,Yse=/^[^\s.,*>]+$/,IH="__request__",Wse=o(e=>`${e}.${IH}`,"REQUEST_SUBJECT"),zse={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},jse={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Qse={HUB:"hub.pid",LEAF:"leaf.pid"},Jse={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Xse={SUCCESS:"success",ERROR:"error"},Zse={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},eie={TXN:"txn",MSGID:"msgid"},ad={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},tie={[ad.ERR]:1,[ad.WRN]:2,[ad.INF]:3,[ad.DBG]:4,[ad.TRC]:5},rie={debug:"-D",trace:"-DVV"};wH.exports={NATS_SERVER_ZIP:Vse,NATS_SERVER_NAME:Ow,NATS_BINARY_NAME:Kse,PID_FILES:Qse,NATS_CONFIG_FILES:jse,SERVER_SUFFIX:Jse,NATS_TERM_CONSTRAINTS_RX:Yse,REQUEST_SUFFIX:IH,UPDATE_REMOTE_RESPONSE_STATUSES:Xse,CLUSTER_STATUS_STATUSES:Zse,REQUEST_SUBJECT:Wse,SUBJECT_PREFIXES:eie,MSG_HEADERS:zse,LOG_LEVELS:ad,LOG_LEVEL_FLAGS:rie,LOG_LEVEL_HIERARCHY:tie}});var ds=v((EDe,qr)=>{"use strict";var OH="username is required",PH="nothing to update, must supply active, role or password to update",LH="password cannot be an empty string",DH="If role is specified, it cannot be empty.",MH="active must be true or false";qr.exports.addUser=die;qr.exports.alterUser=fie;qr.exports.dropUser=pie;qr.exports.getSuperUser=Sie;qr.exports.userInfo=hie;qr.exports.listUsers=kg;qr.exports.listUsersExternal=Eie;qr.exports.setUsersWithRolesCache=Al;qr.exports.findAndValidateUser=Fw;qr.exports.getClusterUser=Tie;qr.exports.getUsersWithRolesCache=gie;qr.exports.USERNAME_REQUIRED=OH;qr.exports.ALTERUSER_NOTHING_TO_UPDATE=PH;qr.exports.EMPTY_PASSWORD=LH;qr.exports.EMPTY_ROLE=DH;qr.exports.ACTIVE_BOOLEAN=MH;var vH=Gn(),nie=Rl(),Tp=(_w(),M(Ew)),UH=Kk(),yp=_n(),vw=Go(),Zi=ae(),xH=require("validate.js"),Uw=Q(),{promisify:sie}=require("util"),xw=Xi(),Lw=(q(),M(z)),NH=Pt(),iie=gt(),oie=me(),aie=Wi(),{hdbErrors:cie,ClientError:pi}=_e(),{HTTP_STATUS_CODES:Ko,AUTHENTICATION_ERROR_MSGS:Pw,HDB_ERROR_MSGS:cd}=cie,{UserEventMsg:Bw}=os(),Dw=require("lodash"),{server:Fg}=(Fr(),M(cm)),lie=Q();Fg.getUser=(e,t)=>Fw(e,t,t!=null);Fg.authenticateUser=(e,t)=>Fw(e,t);var BH={username:!0,active:!0,role:!0,password:!0},CH=new Map,uie=sie(nie.delete),Mw=oie.get(Lw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Tp.HASH_FUNCTION.SHA256,eo;async function die(e){let t=xH.cleanAttributes(e,BH),r=UH.addUserValidation(t);if(r)throw new pi(r.message);let n=await yp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new pi(cd.ROLE_NAME_NOT_FOUND(t.role),Ko.NOT_FOUND);if(n.length>1)throw new pi(cd.DUP_ROLES_FOUND(t.role),Ko.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=xw.encrypt(t.password)),t.password=await Tp.hash(t.password,Mw),t.hash_function=Mw,t.role=n[0].id;let s=await vH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Uw.debug(s),await Al(),s.skipped_hashes.length===1)throw new pi(cd.USER_ALREADY_EXISTS(t.username),Ko.CONFLICT);return vw.signalUserChange(new Bw(process.pid)),`${t.username} successfully added`}o(die,"addUser");async function fie(e){let t=xH.cleanAttributes(e,BH);if(Zi.isEmptyOrZeroLength(t.username))throw new Error(OH);if(Zi.isEmptyOrZeroLength(t.password)&&Zi.isEmptyOrZeroLength(t.role)&&Zi.isEmptyOrZeroLength(t.active))throw new Error(PH);if(!Zi.isEmpty(t.password)&&Zi.isEmptyOrZeroLength(t.password.trim()))throw new Error(LH);if(!Zi.isEmpty(t.active)&&!Zi.isBoolean(t.active))throw new Error(MH);if(!Zi.isEmpty(t.password)&&!Zi.isEmptyOrZeroLength(t.password.trim())&&(mie(t.username)&&(t.hash=xw.encrypt(t.password)),t.password=await Tp.hash(t.password,Mw)),t.role==="")throw new Error(DH);if(t.role){let n=await yp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new pi(cd.ALTER_USER_ROLE_NOT_FOUND(t.role),Ko.NOT_FOUND);if(n.length>1)throw new pi(cd.DUP_ROLES_FOUND(t.role),Ko.CONFLICT);t.role=n[0].id}let r=await vH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Al(),vw.signalUserChange(new Bw(process.pid)),r}o(fie,"alterUser");function mie(e){let t=!1,r=eo.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(mie,"isClusterUser");async function pie(e){let t=UH.dropUserValidation(e);if(t)throw new pi(t.message);if(eo.get(e.username)===void 0)throw new pi(cd.USER_NOT_EXIST(e.username),Ko.NOT_FOUND);let r=await uie({table:"hdb_user",schema:"system",hash_values:[e.username]});return Uw.debug(r),await Al(),vw.signalUserChange(new Bw(process.pid)),`${e.username} successfully deleted`}o(pie,"dropUser");async function hie(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Dw.cloneDeep(e.hdb_user);let r=await yp.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(hie,"userInfo");async function Eie(){let e=await kg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Eie,"listUsersExternal");async function kg(){let e=await yp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Dw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await yp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Dw.cloneDeep(s),s.role=t[s.role],_ie(s.role),n.set(s.username,s);return n}o(kg,"listUsers");function _ie(e){if(!e){Uw.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(aie)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(_ie,"appendSystemTablesToRole");async function Al(e=void 0){e?eo=e:eo=await kg()}o(Al,"setUsersWithRolesCache");async function gie(){return eo||await Al(),eo}o(gie,"getUsersWithRolesCache");async function Fw(e,t,r=!0){eo||await Al();let n=eo.get(e);if(!n){if(!r)return{username:e};throw new pi(Pw.GENERIC_AUTH_FAIL,Ko.UNAUTHORIZED)}if(n&&!n.active)throw new pi(Pw.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(CH.get(t)===n.password)return s;{let i=Tp.validate(n.password,t,n.hash_function||Tp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)CH.set(t,n.password);else throw new pi(Pw.GENERIC_AUTH_FAIL,Ko.UNAUTHORIZED)}}return s}o(Fw,"findAndValidateUser");async function Sie(){eo||await Al();for(let[,e]of eo)if(e.role.role==="super_user")return e}o(Sie,"getSuperUser");async function Tie(){let e=await kg(),t=iie.getConfigFromFile(Lw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==Lw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=xw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+NH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+NH.SERVER_SUFFIX.ADMIN,r}o(Tie,"getClusterUser");var FH=[];Fg.invalidateUser=function(e){for(let t of FH)try{t(e)}catch(r){lie.error("Error invalidating user",r)}};Fg.onInvalidatedUser=function(e){FH.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 Il,Qa,Hw,dd,Gw,fd,qw,Hg=se(()=>{Il=b(zr()),Qa=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Il.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},Hw=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}.`,Il.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"}`,Il.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},Gw=class extends Qa{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Il.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}`,Il.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},qw=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,Il.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 kH,wl,HH,Ja,Rp,md,yie,Gg,$w=se(()=>{kH=b(os()),wl=b(nt());q();HH=b(es());ld();Hg();Ja=(0,HH.loggerWithTag)("componentStatus.crossThread"),Rp=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,wl.onMessageByType)(e_.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,wl.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,kH.sendItcEvent)({type:e_.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,wl.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,wl.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}},yie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Gg=new Rp(yie)});var Xa,qg=se(()=>{kw();ld();$w();Hg();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 Gg.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 mr,$g=se(()=>{qg();mr=new Xa});function qH(e){let t=GH.get(e);return t||(t=new Vw(e),GH.set(e,t)),t}function $H(){mr.reset()}var Vw,GH,to,VH,KH=se(()=>{$g();ld();Vw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return mr.setStatus(this.componentName,Ie.HEALTHY,t),this}warning(t){return mr.setStatus(this.componentName,Ie.WARNING,t),this}error(t,r){return mr.setStatus(this.componentName,Ie.ERROR,t,r),this}loading(t){return mr.setStatus(this.componentName,Ie.LOADING,t||"Loading..."),this}unknown(t){return mr.setStatus(this.componentName,Ie.UNKNOWN,t),this}get(){return mr.getStatus(this.componentName)}},GH=new Map;o(qH,"statusForComponent");to={loading(e,t){mr.initializeLoading(e,t)},loaded(e,t){mr.markLoaded(e,t)},failed(e,t,r){mr.markFailed(e,t,r)}};o($H,"reset");VH=Ie});var bp={};Re(bp,{AggregationError:()=>Gw,COMPONENT_STATUS_LEVELS:()=>Ie,ComponentStatus:()=>ud,ComponentStatusError:()=>Qa,ComponentStatusOperationError:()=>fd,ComponentStatusRegistry:()=>Xa,CrossThreadCollectionError:()=>qw,CrossThreadStatusCollector:()=>Rp,CrossThreadTimeoutError:()=>Hw,ITCError:()=>dd,StatusAggregator:()=>md,componentStatusRegistry:()=>mr,crossThreadCollector:()=>Gg,query:()=>Rie});var Rie,YH=se(()=>{$g();qg();kw();qg();$w();$g();Hg();ld();Rie={get(e){return mr.getStatus(e)},all(){return mr.getAllStatuses()},byStatus(e){return mr.getComponentsByStatus(e)},summary(){return mr.getStatusSummary()},async allThreads(){return Xa.getAggregatedFromAllThreads(mr)}}});var Kw={};Re(Kw,{STATUS:()=>VH,internal:()=>bp,lifecycle:()=>to,reset:()=>$H,statusForComponent:()=>qH});var Ap=se(()=>{KH();YH()});var wp=v((QDe,jH)=>{"use strict";var fs=Q(),gn=(q(),M(z)),bie=L0(),Aie=ds(),{validateEvent:Yw}=os(),Ip=ls(),Iie=require("process"),{resetDatabases:wie}=(we(),M(mt)),Nie={[gn.ITC_EVENT_TYPES.SCHEMA]:Cie,[gn.ITC_EVENT_TYPES.USER]:zH,[gn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Pie};async function Cie(e){let t=Yw(e);if(t){fs.error(t);return}fs.trace("ITC schemaHandler received schema event:",e),await bie(e.message),await Oie(e.message)}o(Cie,"schemaHandler");async function Oie(e){try{Ip.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ip.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ip.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=wie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fs.error(t)}}o(Oie,"syncSchemaMetadata");var WH=[];async function zH(e){try{try{Ip.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ip.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fs.warn(r)}let t=Yw(e);if(t){fs.error(t);return}fs.trace(`ITC userHandler ${gn.HDB_ITC_CLIENT_PREFIX}${Iie.pid} received user event:`,e),await Aie.setUsersWithRolesCache();for(let r of WH)r()}catch(t){fs.error(t)}}o(zH,"userHandler");zH.addListener=function(e){WH.push(e)};async function Pie(e){try{let t=Yw(e);if(t){fs.error(t);return}fs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Ap(),M(Kw)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=os(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:gn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?fs.trace(`Sent component status response directly to thread ${u}`):(u===void 0?fs.debug("No originator threadId, falling back to broadcast"):fs.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){fs.error("Error handling component status request:",t)}}o(Pie,"componentStatusRequestHandler");jH.exports=Nie});var os=v((rMe,JH)=>{"use strict";var XDe=Q(),Ww=ae(),Lie=(q(),M(z)),{ITC_ERRORS:Np}=zr(),{parentPort:ZDe,threadId:Die,isMainThread:Mie,workerData:eMe}=require("worker_threads"),{onMessageFromWorkers:vie,broadcast:tMe,broadcastWithAcknowledgement:Uie}=nt();JH.exports={sendItcEvent:xie,validateEvent:QH,SchemaEventMsg:Bie,UserEventMsg:Fie};var Vg;vie(async(e,t)=>{Vg=Vg||wp(),QH(e),Vg[e.type]&&await Vg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function xie(e){return!Mie&&e.message&&(e.message.originator=Die),Uie(e)}o(xie,"sendItcEvent");function QH(e){if(typeof e!="object")return Np.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ww.isEmpty(e.type))return Np.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ww.isEmpty(e.message))return Np.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ww.isEmpty(e.message.originator))return Np.MISSING_ORIGIN;if(Lie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Np.INVALID_EVENT(e.type)}o(QH,"validateEvent");function Bie(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(Bie,"SchemaEventMsg");function Fie(e){this.originator=e}o(Fie,"UserEventMsg")});var Go=v((iMe,tG)=>{"use strict";var XH=(q(),M(z)),sMe=ae(),Kg=Q(),ZH=m0(),pd,{sendItcEvent:eG}=os();function kie(e){try{Kg.debug("signalSchemaChange called with message:",e),pd=pd||wp();let t=new ZH(XH.ITC_EVENT_TYPES.SCHEMA,e);return pd.schema(t),eG(t)}catch(t){Kg.error(t)}}o(kie,"signalSchemaChange");function Hie(e){try{Kg.trace("signalUserChange called with message:",e),pd=pd||wp();let t=new ZH(XH.ITC_EVENT_TYPES.USER,e);return pd.user(t),eG(t)}catch(t){Kg.error(t)}}o(Hie,"signalUserChange");tG.exports={signalSchemaChange:kie,signalUserChange:Hie}});function Cp(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 rG(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,Op=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(Cp,"appendHeader");o(rG,"mergeHeaders")});function Yg(e,t,r=qie){let n;return function(...i){return n?n.length*zw>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();zw=(zw*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var iG,Gie,qie,nG,$ie,jw,sG,zw,Qw=se(()=>{iG=b(es()),Gie=3e3,qie=2e4,nG=0,$ie=3e4,jw=3e3,sG=performance.now()+jw,zw=0;o(Yg,"throttle");setInterval(()=>{let e=performance.now();e-sG-jw>Gie&&nG+$ie<e&&(iG.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"),nG=e),sG=e},jw).unref()});var EG={};Re(EG,{EVICTED:()=>Ga,INVALIDATED:()=>xn,coerceType:()=>zg,makeTable:()=>Qg});function Qg(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=DA(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,Fc,xt,ri,Na=Cl.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 GE=i.getRange({start:!1,end:!1}).constructor,jf=10,qE=6;g&&em(),Dm(i.env.path,K=>{if(I)return Oa(K)});class Qf extends El{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 dp(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===sm&&(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:kc(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,Nl.getWorkerIndex)(),D):(0,Nl.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 oe=ie.find(ke=>ke.id===de);ie=ie.filter(ke=>ke.id!==de||ke===oe),oe||(oe={id:de,seqId:0},ie.push(oe)),oe.seqId=Math.max(ne?.seqId??1,B.localTime),de===j?.nodeId&&(oe.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"}),Lp.signalSchemaChange(new Dp.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(()=>Lp.signalUserChange(new Dp.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){Ui(_);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&&(!toe(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,em(),Pe.audit=!0)}static coerceId(_){return _===""?null:zg(_,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(),Xw.default.unlinkSync(i.env.path);Lp.signalSchemaChange(new Dp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(Jf(_))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(_);Ui(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&&Jw(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=Jw(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=Jw(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 Qf(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===aG?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new dp(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();Ui(_),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();Ui(_),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=kc(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);ol(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);Ui(_);let L=this.#n??i.getEntry(_);this.#s=N?aG:Jie;let A=o(w=>N?w.put?()=>w.put(O,_,T):null:w.patch?()=>w.patch(O,_,T):w.put?()=>w.put(O,_,_l(this)):null,"writeToSources"),U={key:_,store:i,entry:L,nodeName:O?.nodeName,validate:o(w=>{T||(T=this.#t),N||T&&wg(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=_l(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,oe=D.version;Fe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(w),"applying later update from:",new Date(oe),"local recorded time",new Date(de));let ke=[];for(;de>w||oe>=w&&de>0;){let Be=l.get(de);if(!Be)break;let Le=At(Be);if(oe=Le.version,oe>=w){if(oe===w){if(Ee=xr(w,{version:oe,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=__(j??T,Le,N),!j)return}}else{if(N)return;j=__(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=_l(Y,j??T):(this.#e=Y,pe=_l(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 oe in r)pe||(pe={}),pe[oe]=fe[oe]}ne=kc(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(Jf(_)){_.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());Ui(_);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()):ol(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=Wie);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 oe of ie){if(oe.conditions){oe.conditions=A(oe.conditions,oe.operator);continue}let ke=oe[0]??oe.attribute,Be=ke==null?k:$i(S,ke);if(Be)(Be.type||vA[oe.comparator])&&(oe[1]===void 0?oe.value=w(oe.value,Be):oe[1]=w(oe[1],Be));else if(ke!=null)throw(0,lt.handleHDBError)(new Error,`${ke} is not a defined attribute`,404);if(oe.chainedConditions)if(oe.chainedConditions.length===1&&(!oe.operator||oe.operator=="and")){let Le=oe.chainedConditions[0],Me,pt;if(Le.comparator==="gt"||Le.comparator==="greater_than"||Le.comparator==="ge"||Le.comparator==="greater_than_equal"?(Me=oe,pt=Le):(Me=Le,pt=oe),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";oe.comparator=(wt?"ge":"gt")+(Et?"le":"lt"),oe.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"?Vie(ie,tg(Pe)):ie}o(U,"orderConditions");function w(ie,xe){return Array.isArray(ie)?ie.map(de=>zg(de,xe)):zg(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=$i(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=UA(P,D,Pe,B,_,T,(ie,xe)=>Zf(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 GE;if(N){_=Zf(_,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,oe)=>{let ke=Tu(de,ne.attribute,P),Be=Tu(oe,ne.attribute,P),Le=xe?(0,Ol.compareKeys)(Be,ke):(0,Ol.compareKeys)(ke,Be);return Le===0?ie?.(de,oe)||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 oe=pe.definition?.tableClass||Pe;A||(A={});let ke=A[fe]||(A[fe]=oe.transformEntryForSelect(fe===B?null:B.select||(Array.isArray(B)?B:null),T,N,ie,O));if(Array.isArray(de)){let Be=[],Le=oe.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=qA(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||dG(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>lG&&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||dG(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,Ol.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(D&&(x({id:w,localTime:Y,value:D,version:$,type:"put",size:j}),P.queue?.length>lG&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let w=this.#n?.localTime;if(w===LA&&(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&&Ui(_);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");Kie(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=Xw.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(fG)):$.filter(fG):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}}fp(this,this),fp(Qf,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=$i(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=k_(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=ol(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 $E=Yg(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 ob=Pe.prototype;return h&&Pe.setTTLExpiration(h/1e3),X&&VE(),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,Pp.getIndexedValues)(A,w),$=(0,Pp.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)&&oG){let j=$.concat(D).map(B=>({key:B,value:K}));O.prefetch(j,uG)}for(let j=0,B=$.length;j<B;j++)O.remove($[j],K)}else D?.length>0&&oG&&O.prefetch(D.map(Y=>({key:Y,value:K})),uG);if(D)for(let Y=0,j=D.length;Y<j;Y++)O.put(D[Y],K)}return N}o(Su,"updateIndices");function Ui(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>cG)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,Ol.writeKey)(K,Xie,0)>cG)throw new Error("Primary key size is too large: "+K.length);return!0}o(Ui,"checkValidId");function Os(K){return typeof K=="object"&&K?K.id:K}o(Os,"requestTargetToId");function Jf(K){return typeof K=="object"&&K&&K.isCollection}o(Jf,"isSearchTarget");function Xf(K){}o(Xf,"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")&&(hG.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>qE&&(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<jf&&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 Zie;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 h_}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 Zf(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(Zf,"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)},Qie)});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 $E(K,A,_),fe=N&xn;let ne=A.lastModified||fe&&P;Ee=fe||ne>P||!L,ne||(ne=(0,Pp.getNextMonotonicTime)());let ie=performance.now()-j;if(Ve(ie,"cache-resolution",s,null,"success"),U&&Cp(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&&Cp(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,oe=!1,ke,Be=Pa(Pe.getResidency(B,T));if(Be){if(!Be.includes(server.hostname))if(de=B,oe=!0,Pe.getResidencyById)B=void 0;else{B=null;for(let Le in r)B||(B={}),B[Le]=de[Le]}ke=kc(Be)}Fe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(ne).toISOString()}`),y(K,B,ie,ne,oe?xn:0,g&&(Ee||oe)||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):ol(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,Nl.getWorkerIndex)()===(0,Nl.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)*(Cl.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&&Qc(fe,ie=>{ie.size&&(ne+=ie.size)}),Fe.default.trace?.(`shouldEvict adjusted ${pe} ${ne}, ${pe*(j-B)/ne} < ${D}`),pe*(j-B)/ne<D}return!1}o(Y,"shouldEvict");try{let j=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ee,value:fe,version:pe,expiresAt:ne,metadataFlags:ie}=B,xe;fe===null&&!g&&pe+jie<Date.now()?xe=ol(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 em(){W=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(em,"addDeleteRemoval");function VE(){(0,Nl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Fc){Fc=!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{Fc=!1}}},zie).unref()}o(VE,"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 kc(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(kc,"getResidencyId");function Ru(K,_){let T=rA(K,i.rootStore);if(T){let N=_;return N?async()=>{await N(),await T}:()=>T}return _}o(Ru,"preCommitBlobsForRecordBefore")}function Jw(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 uG(){}function zg(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 Wg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Wg(+e);case"Float":return e==="null"?null:Wg(+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;eoe.test(e)||(e+="Z");let n=new Date(e);return Wg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,jg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Wg(e){if(isNaN(e))throw new SyntaxError;return e}function dG(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 fG(e){return e!=null}function Hs(e){try{return JSON.stringify(e)}catch{return e}}function toe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var ec,Pp,mG,pG,Cl,lt,Lp,Dp,Fe,Ol,Nl,jg,Xw,hG,Vie,Kie,Yie,Wie,zie,jie,oG,Qie,aG,Jie,xn,Ga,Xie,cG,lG,Zie,NMe,eoe,Za,sg=se(()=>{q();ec=require("lmdb"),Pp=b(Mn()),mG=b(require("lodash")),pG=b(Sm());qa();ym();Cl=b(me());$A();lt=b(_e()),Lp=b(Go()),Dp=b(os());we();ng();Fe=b(es());JI();Ua();Ol=require("ordered-binary"),Nl=b(nt());Fi();jg=b(ae());nl();rs();g_();Op();Xw=b(require("node:fs"));ts();U_();hG=b(Q());Qw();({sortBy:Vie}=mG.default),{validateAttribute:Kie}=pG.default,Yie=new Uint8Array(9);Yie[8]=192;Wie=1/0,zie=6e4,jie=864e5;Cl.initSync();oG=Cl.get(F.STORAGE_PREFETCHWRITES),Qie=1e4,aG=1,Jie=2,xn=1,Ga=8,Xie=Buffer.allocUnsafeSlow(8192),cG=1978,lG=100,Zie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},NMe=(0,jg.convertToMS)(Cl.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Qg,"makeTable");o(Jw,"attributesAsObject");o(uG,"noop");eoe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(zg,"coerceType");o(Wg,"rejectNaN");o(dG,"isDescendantId");Za=o(()=>new Promise(setImmediate),"rest");o(ks,"when");o(fG,"exists");o(Hs,"stringify");o(toe,"hasOtherProcesses")});function Jg(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 Xg(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 _G=se(()=>{o(Jg,"euclideanDistance");o(Xg,"cosineDistance")});var gG,SG,Ed,ro,hd,roe,noe,Zg,TG=se(()=>{_G();gG=require("msgpackr"),SG=b(es()),Ed=b(_e()),ro=(0,SG.loggerWithTag)("HNSW"),hd=Symbol.for("entryPoint"),roe=Symbol.for("key"),noe=10,Zg=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=gG.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Jg:Xg,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"?[roe,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),noe),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=Xg;else if(s==="euclidean")c=Jg;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"?Jg:Xg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var Zw,yG=se(()=>{TG();Zw={HNSW:Zg}});var mt={};Re(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>eS,database:()=>sd,databaseEnvs:()=>Yo,databases:()=>De,dropDatabase:()=>rw,dropTableMeta:()=>loe,getDatabases:()=>at,getDefaultCompression:()=>aS,getTables:()=>ioe,onRemovedDB:()=>kp,onUpdatedTable:()=>Pl,readMetaDb:()=>Mp,resetDatabases:()=>yd,table:()=>Ze,tables:()=>Sn});function Fp(e,t){let r=iS.OpenDBIObject??iS.default.OpenDBIObject;return new r(e,t)}function ioe(){return sS||at(),Sn||{}}function at(){if(sS)return De;sS=!0,Sd=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Ht.join)((0,zt.getHdbBasePath)(),qc),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)(),JE)),!!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&&Mp((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);Mp((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"&&Mp((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)&&Mp(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[oS]}}if((0,zt.get)(F.ANALYTICS_REPLICATE)===!1?eS.includes("hdb_analytics")||eS.push("hdb_analytics"):(De.system?.hdb_analytics?.enableAuditing(),De.system?.hdb_analytics_hostname?.enableAuditing()),De.system)for(let r of eS)De.system[r]&&(De.system[r].replicate=!1);return Sd=null,De}}function yd(){sS=!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],Up.forEach(i=>i(t.databaseName));break}}return De}function Mp(e,t,r=rN,n,s){let i=new eN.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 Fp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(tS.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=F_(a));let d=wG(r),f=d[oS],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 Fp(!g.is_hash_attribute,g.is_hash_attribute);if(te.compression=g.compression,te.compression){let ye=(0,zt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||IG;te.compression.threshold=ye}I=Z_(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=CG(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=NG(d,p,Qg({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 vp)te(R)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function wG(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[oS]=r,Sd.set(e,r)}return t}function NG(e,t,r){return e[t]=r,r}function sd({database:e,table:t}){e||(e=rN),at();let r=wG(e),n=(0,Ht.join)((0,zt.getHdbBasePath)(),qc),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)(),JE));let a=(0,Ht.join)(n,(i?t:e)+".mdb"),c=Yo.get(a);if(!c||c.status==="closed"){let l=new eN.default(a,!1);c=(0,Td.open)(l),Yo.set(a,c)}return c.auditStore||(c.auditStore=F_(c)),c}async function rw(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 xp.remove(r.path));if(r||(r=sd({database:e,table:null}),r.status==="open"&&(await r.close(),await xp.remove(r.path))),e==="data"){for(let n in Sn)delete Sn[n];delete Sn[oS]}delete De[e],Up.forEach(n=>n(e)),await tA(r)}function CG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&Zw[r.indexed.type]?.useObjectStore,s=new Fp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=Zw[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=rN);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 Fp(!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=aS(),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 Fp(!1,!0);ue.compression=S.compression;let ce=t+"/";if(y=h.dbisDb=h.openDB(tS.INTERNAL_DBIS_NAME,C),X(),y.get(ce))return k&&k(),yd(),Ze(e);let te=Z_(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=NG(E,t,Qg({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(tS.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=CG(ue,h,W);(te||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<Bp.workerData?.restartNumber)&&(I=!0,X(),ce=y.get(ue),(te||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<Bp.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=coe(g,H,G):I&&rS.signalSchemaChange(new nS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,I)for(let W of vp)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 coe(e,t,r){try{Nr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await rS.signalSchemaChange(new nS.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,RG.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)}),Bp.workerData&&Bp.workerData.restartNumber!==AG.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>ooe?await s:d>aoe&&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 rS.signalSchemaChange(new nS.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 loe({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 Pl(e){return vp.push(e),{remove(){let t=vp.indexOf(e);t>-1&&vp.splice(t,1)}}}function kp(e){return Up.push(e),{remove(){let t=Up.indexOf(e);t>-1&&Up.splice(t,1)}}}function aS(){let e=(0,zt.get)(F.STORAGE_COMPRESSION),t=(0,zt.get)(F.STORAGE_COMPRESSION_DICTIONARY),r=(0,zt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||IG,n={startingOffset:32};return t&&(n.dictionary=xp.readFileSync(t)),r&&(n.threshold=r),e&&n}var zt,tS,Td,Ht,ms,gd,eN,xp,tN,RG,rS,nS,Bp,bG,AG,iS,soe,Nr,rN,oS,IG,eS,Sn,De,_d,vp,Up,sS,Yo,Sd,ooe,aoe,we=se(()=>{zt=b(me()),tS=b(Yt()),Td=require("lmdb"),Ht=require("path"),ms=require("fs"),gd=b(Rt());sg();eN=b(zm());q();xp=b(require("fs-extra")),tN=b(ii()),RG=b(Mn()),rS=b(Go()),nS=b(os()),Bp=require("worker_threads"),bG=b(Q()),AG=b(nt());Fi();nl();ts();yG();iS=b(Wm()),{forComponent:soe}=bG.default;o(Fp,"OpenDBIObject");Nr=soe("storage"),rN="data",oS=Symbol("defined-tables"),IG=((0,zt.get)(F.STORAGE_PAGESIZE)||4096)-60;(0,zt.initSync)();eS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],Sn=Object.create(null),De=Object.create(null);(0,tN._assignPackageExport)("databases",De);(0,tN._assignPackageExport)("tables",Sn);_d=Symbol.for("next-table-id"),vp=[],Up=[],Yo=new Map;o(ioe,"getTables");o(at,"getDatabases");o(yd,"resetDatabases");o(Mp,"readMetaDb");o(wG,"ensureDB");o(NG,"setTable");o(sd,"database");o(rw,"dropDatabase");o(CG,"openIndex");o(Ze,"table");ooe=1e3,aoe=10;o(coe,"runIndexing");o(loe,"dropTableMeta");o(Pl,"onUpdatedTable");o(kp,"onRemovedDB");o(aS,"getDefaultCompression")});var iN={};Re(iN,{loadGQLSchema:()=>foe,start:()=>sN,startOnMainThread:()=>doe});function sN({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):uoe.includes(R.type)||(0,PG.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,nN.dirname)(n),R.tableClass):i.set((0,nN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,S,y){return new OG.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 nN,OG,PG,uoe,doe,foe,LG=se(()=>{nN=require("path"),OG=require("node:vm");we();PG=b(nt());$a();uoe=["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(sN,"start");doe=sN,foe=o(e=>sN({ensureTable:Ze}).handleFile(e,null,null,new zu),"loadGQLSchema")});var aN={};Re(aN,{start:()=>yoe});function moe(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 DG(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 oN(e){return parseInt(e.value,10)}function vG(e){return parseFloat(e.value)}function UG(e,t,r){let n=r.get(e.name.value);return xG(n)?BG(n,t):{attribute:t,value:n}}function xG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function BG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],xG(n)?BG(n,t):{attribute:t,value:n}))}function poe(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:oN(e.value)};case Ge.Kind.FLOAT:return{attribute:t,value:vG(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:t,value:e.value.value};case Ge.Kind.VARIABLE:return UG(e.value,t,r);case Ge.Kind.OBJECT:return FG(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 FG(e,t,r){return e.fields.flatMap(n=>poe(n,t,r))}function hoe(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:oN(e.value)};case Ge.Kind.FLOAT:return{attribute:e.name.value,value:vG(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Ge.Kind.VARIABLE:return UG(e.value,e.name.value,t);case Ge.Kind.OBJECT:return FG(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 Eoe(e,t){return e.flatMap(r=>hoe(r,t))}function cS(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 cS(s.selectionSet,t)}case Ge.Kind.INLINE_FRAGMENT:return cS(r.selectionSet,t)}})}function kG(e,t){return cS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:kG(r.selectionSet,t)}:r.name.value)}async function _oe(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:kG(e.selectionSet,r),conditions:Eoe(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 HG(e){switch(e.kind){case Ge.Kind.NULL:return null;case Ge.Kind.INT:return oN(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]:HG(r.value),...t}),{});case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new $r(`Value type, ${e.kind}, is not supported.`)}}function goe(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=HG(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 Soe(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=goe(e.variableDefinitions,t),i=await Promise.all(cS(e.selectionSet,r).map(c=>_oe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function MG({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(moe(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 Soe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Toe(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 DG(r),MG(r,e)}case"POST":{let r=await Do(e.headers.get("content-type"),!0)(e._nodeRequest);return DG(r),MG(r,e)}default:throw new no("Method Not Allowed",405,{Allow:"GET, POST"})}}function yoe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Toe(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,GG=se(()=>{Ge=b(require("graphql"));Mo();$a();o(moe,"assertExecutableDefinitionNode");o(DG,"assertRequestParams");o(oN,"processIntValueNode");o(vG,"processFloatValueNode");o(UG,"processVariableNode");o(xG,"isObject");o(BG,"transformObjectIntoQueryCondition");o(poe,"processObjectFieldNode");o(FG,"processObjectValueNode");o(hoe,"processArgumentNode");o(Eoe,"buildConditionsQuery");o(cS,"fillInFragments");o(kG,"buildSelectQuery");o(_oe,"processFieldNode");o(HG,"processConstValueNode");o(goe,"resolveVariables");o(Soe,"executeOperation");o(MG,"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(Toe,"graphqlQueryingHandler");o(yoe,"start")});var WG=v((jMe,YG)=>{var Rd=require("validate.js"),$G=ft(),bd=(q(),M(z)),{handleHDBError:Roe,hdbErrors:boe}=_e(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:Aoe}=boe,cN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Ioe={STRUCTURE_USER:"structure_user"},qG=Object.values(bd.ROLE_TYPES_ENUM),woe="attribute_permissions",Noe="attribute_name",{PERMS_CRUD_ENUM:Ad}=bd,Coe=[woe,...Object.values(Ad)],VG=[Ad.READ,Ad.INSERT,Ad.UPDATE],Ooe=[Noe,...VG];function Poe(e){let t=cN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,KG(e,t)}o(Poe,"addRoleValidation");function Loe(e){let t=cN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,KG(e,t)}o(Loe,"alterRoleValidation");function Doe(e){let t=cN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,$G.validateObject(e,t)}o(Doe,"dropRoleValidation");var Moe=["operation","role","id","permission","hdb_user","access"];function KG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Moe.includes(n[a])||s.push(n[a]);s.length>0&&pr(sr.INVALID_ROLE_JSON_KEYS(s),r);let i=$G.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{pr(a,r)}),e.permission){let a=voe(e);a&&pr(a,r),qG.forEach(c=>{e.permission[c]&&!Rd.isBoolean(e.permission[c])&&pr(sr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(qG.indexOf(a)<0){if(a===Ioe.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||pr(sr.SCHEMA_NOT_FOUND(f),r)}continue}pr(sr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){pr(sr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){pr(sr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Coe.includes(d)||pr(sr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(Ad).forEach(d=>{Rd.isDefined(u[d])?Rd.isBoolean(u[d])||pr(sr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):pr(sr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){pr(sr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){pr(sr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!Ooe.includes(E)&&E!==Ad.DELETE&&pr(sr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!Rd.isDefined(p.attribute_name)){pr(sr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){pr(sr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}VG.forEach(E=>{Rd.isDefined(p[E])?Rd.isBoolean(p[E])||pr(sr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):pr(sr.ATTR_PERM_MISSING(E,h),r,a,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;pr(sr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Uoe(r)}o(KG,"customValidate");YG.exports={addRoleValidation:Poe,alterRoleValidation:Loe,dropRoleValidation:Doe};function voe(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(voe,"validateNoSUPerms");function Uoe(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 Roe(new Error,n,Aoe.BAD_REQUEST)}else return null}o(Uoe,"generateRolePermResponse");function pr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(pr,"addPermError")});var Gp=v((XMe,JG)=>{"use strict";var zG=Gn(),jG=_n(),xoe=Rl(),uN=WG(),dN=Go(),JMe=require("uuid").v4,Boe=require("util"),lS=(q(),M(z)),Foe=ae(),fN=jG.searchByValue,koe=jG.searchByHash,Hoe=Boe.promisify(xoe.delete),Goe=di(),qoe=rd(),{hdbErrors:$oe,handleHDBError:Ll}=_e(),{HDB_ERROR_MSGS:QG,HTTP_STATUS_CODES:Hp}=$oe,{UserEventMsg:mN}=os();JG.exports={addRole:Voe,alterRole:Koe,dropRole:Yoe,listRoles:Woe};function lN(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(lN,"scrubRoleDetails");async function Voe(e){let t=uN.addRoleValidation(e);if(t)throw t;e=lN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await fN(r)||[])}catch(i){throw Ll(i)}if(n&&n.length>0)throw Ll(new Error,QG.ROLE_ALREADY_EXISTS(e.role),Hp.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 zG.insert(s),dN.signalUserChange(new mN(process.pid)),e=lN(e),e}o(Voe,"addRole");async function Koe(e){let t=uN.alterRoleValidation(e);if(t)throw t;e=lN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await zG.update(r)}catch(s){throw Ll(s)}if(n&&n?.message==="updated 0 of 1 records")throw Ll(new Error,"Invalid role id",Hp.BAD_REQUEST,void 0,void 0,!0);return await dN.signalUserChange(new mN(process.pid)),e}o(Koe,"alterRole");async function Yoe(e){let t=uN.dropRoleValidation(e);if(t)throw Ll(new Error,t,Hp.BAD_REQUEST,void 0,void 0,!0);let r=new qoe(lS.SYSTEM_SCHEMA_NAME,lS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await koe(r));if(n.length===0)throw Ll(new Error,QG.ROLE_NOT_FOUND,Hp.NOT_FOUND,void 0,void 0,!0);let s=new Goe(lS.SYSTEM_SCHEMA_NAME,lS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await fN(s)),a=!1;if(Foe.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Ll(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Hp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Hoe(c),dN.signalUserChange(new mN(process.pid)),`${n[0].role} successfully deleted`}o(Yoe,"dropRole");async function Woe(){return fN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(Woe,"listRoles")});var pN={};Re(pN,{start:()=>eq,startOnMainThread:()=>Qoe});function eq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,XG.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(zoe.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await joe(i)}}}async function joe(e){let t=at().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,ZG.isEqual)(i,e)?void 0:(e.id=r.id,(0,uS.alterRole)(e))}return(0,uS.addRole)(e)}var uS,XG,ZG,zoe,Qoe,tq=se(()=>{we();uS=b(Gp()),XG=require("yaml"),ZG=require("lodash"),zoe=["super_user","cluster_user","structure_user"];o(eq,"start");o(joe,"ensureRole");Qoe=eq});async function dS(e){let t=(0,sq.pathToFileURL)(e).toString();if(Joe)return qp||(qp=Xoe(eae)),(await(await qp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Xoe(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),qp=new Compartment({console,Math,Date,fetch:Zoe,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,nq.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,rq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),qp}function Zoe(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 eae(){return{Resource:Hr,tables:Sn}}var rq,nq,sq,Joe,qp,hN=se(()=>{qa();we();rq=require("fs/promises"),nq=require("path"),sq=require("url"),Joe=!1;o(dS,"secureImport");o(Xoe,"getCompartment");o(Zoe,"secureOnlyFetch");o(eae,"getGlobalVars")});var EN={};Re(EN,{handleApplication:()=>tae,suppressHandleApplicationWarning:()=>rae});function iq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function tae(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}dS(t.absolutePath).then(r=>{let n=(0,fS.dirname)(t.urlPath);iq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),oq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function oq(e,t,r){for(let n in t){let s=t[n],i=(0,fS.join)(r,n);iq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&oq(e,s,i)}}var fS,rae,aq=se(()=>{hN();fS=require("path");o(iq,"isResource");o(tae,"handleApplication");o(oq,"recurseForResources");rae=!0});var gN={};Re(gN,{start:()=>nae});function nae({resources:e}){e.set("login",_N),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var _N,cq=se(()=>{qa();o(nae,"start");_N=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 pq(e){let t={openapi:sae,info:{title:"HarperDB HTTP REST interface",version:fq.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)mS[c.type]?i[c.name]=new TN(mS[c.type],c.type):c.properties?(i[c.name]=new hq(c.type),n(c)):c.elements?.properties&&(i[c.name]=new uae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new dq(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 TN(mS[H.type],H.type)}:J==="Any"?f[G]={format:J}:f[G]=new TN(mS[J],J),m.push(new yN(G,"query",f[G]))}let h=Object.keys(f),E=new yN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new yN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new dq(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 iae(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 SN(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 oae(m,r,{200:new aae},"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 uq(m,r,"delete all the records that match the provided query",{204:new lq})),k="/"+i+"/{"+d+"}",y&&(t.paths[k]={},t.paths[k].get=new SN([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 cae([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 lae([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 uq([E],r,"delete a record with the given primary key",{204:new lq})),y&&g.schema.enum.length>0&&(k="/"+i+"/{"+d+"}.{property}",t.paths[k]={},t.paths[k].get=new SN([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 iae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Gs+e}}}},this.security=t,this.responses=r}function SN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function oae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function aae(){this.description=mq,this.headers={},this.content={}}function Id(e,t){this.description=mq,this.content={"application/json":{schema:e}},this.headers=t}function lq(){this.description="successfully processed request, no content returned to client"}function cae(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 lae(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 uq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function dq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function TN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function hq(e){this.$ref=`#/components/schemas/${e}`}function uae(e){this.type="array",this.items=new hq(e)}function yN(e,t,r){this.name=e,this.in=t,this.schema=r}var fq,sae,mS,Gs,mq,Eq=se(()=>{fq=b(Ct()),sae="3.0.3",mS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Gs="#/components/schemas/",mq="successful operation";o(pq,"generateJsonApi");o(iae,"Post");o(SN,"Get");o(oae,"Options");o(aae,"ResponseOptions200");o(Id,"Response200");o(lq,"Response204");o(cae,"Put");o(lae,"Patch");o(uq,"Delete");o(dq,"ResourceSchema");o(TN,"Type");o(hq,"Ref");o(uae,"ArrayRef");o(yN,"Parameter")});var gq={};Re(gq,{Request:()=>tc,createReuseportFd:()=>pS});var _q,tc,RN,bN,pS,$p=se(()=>{_q=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 bN(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 RN(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)}},RN=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)}},bN=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,_q.platform)()!="win32"&&(pS=require("node-unix-socket").createReuseportFd)});var ES={};Re(ES,{parseHeaderValue:()=>IN,start:()=>mae});async function fae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&rg(e);let i=new Fs;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==Sq){let g=hS.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=IN(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=IN(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===Sq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return pq(hS);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,AN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=rG(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=Nm(f.data,e,f)),f}else if(isFinite(p)){dae[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),AN.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=Nm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?hi.warn(a):hi.info(a):hi.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=Nm(a.contentType?a:Rq(a),e,c),c}}function mae(e){AN=e,e.includeExpensiveRecordCountEstimates&&(tc.prototype.includeExpensiveRecordCountEstimates=!0),!Tq&&(Tq=!0,hS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return fae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Vp++;let s=new Zn;yq||(yq=!0,qm(l=>{Vp>0&&l.push({metric:"ws-connections",connections:Vp,byThread:!0})}));let i;t.on("error",l=>{i=!0,hi.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",()=>{Vp--,Zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=hS.getMatch(l,"ws");if(Zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ve(h=>({count:h.count,total:Vp}),"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?hi.warn(l):hi.info(l):hi.error(l),t.close(pae[l.statusCode]||1011,Rq(l))}t.close()},e))}function IN(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 hi,wd,Rq,rn,dae,AN,Sq,Tq,hS,yq,Vp,pae,bq=se(()=>{Mo();rs();hi=b(Q()),wd=b(_e());ng();Ou();Ua();Op();Eq();$p();ig();({errorToString:Rq}=hi),rn=new Uint8Array(8),dae=new Float64Array(rn.buffer,0,1),AN={},Sq="openapi";o(fae,"http");Vp=0;o(mae,"start");pae={401:3e3,403:3003};o(IN,"parseHeaderValue")});var wN=v((Ave,Iq)=>{var{recordAction:_S,recordActionBinary:Aq}=(rs(),M(z_)),hae=require("fastify-plugin"),Eae=200;Iq.exports=hae(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),_S(a,"duration",u,f,d),Aq(s.raw.statusCode<400,"success",u,f,d),Aq(1,"response_"+s.raw.statusCode,u,f,d);let m=Eae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{_S(performance.now()-c,"transfer",u,f,d),_S(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,_S(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 Nq=v((Ive,wq)=>{var _ae=ft(),gae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};wq.exports=function(e){return _ae.validateObject(e,gae)}});var gS=v((wve,Cq)=>{"use strict";var Sae=(q(),M(z)).OPERATIONS_ENUM,NN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Sae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Cq.exports=NN});var Wp={};Re(Wp,{createTokens:()=>PN,getJWTRSAKeys:()=>bS,refreshOperationToken:()=>LN,validateOperationToken:()=>DN,validateRefreshToken:()=>AS});async function bS(){if(SS)return SS;try{let e=Kp.default.join(Yp.default.getHdbBasePath(),Eb),t=await TS.default.readFile(Kp.default.join(e,om.JWT_PASSPHRASE_NAME),"utf8"),r=await TS.default.readFile(Kp.default.join(e,om.JWT_PRIVATE_KEY_NAME),"utf8");return SS={publicKey:await TS.default.readFile(Kp.default.join(e,om.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},SS}catch(e){throw RS.default.error(e),new Ei.ClientError(Cd.NO_ENCRYPTION_KEYS,Nd.INTERNAL_SERVER_ERROR)}}async function PN(e){let t=(0,CN.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 Ei.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,ON.findAndValidateUser)(e.username,e.password,f)}catch(f){throw RS.default.error(f),new Ei.ClientError(Cd.INVALID_CREDENTIALS,Nd.UNAUTHORIZED)}if(!r)throw new Ei.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 bS(),c=await Od.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??Mq,algorithm:yS,subject:Pd.OPERATION}),l=await Od.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Tae,algorithm:yS,subject:Pd.REFRESH}),u=pw(l,Gr.SHA256);if((await(0,Oq.update)(new Pq.default(sm,Au.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Ei.ClientError(Cd.REFRESH_TOKEN_SAVE_FAILED,Nd.INTERNAL_SERVER_ERROR);return Lq.default.signalUserChange(new Dq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function LN(e){let t=(0,CN.validateBySchema)(e,so.default.object({refresh_token:so.default.string().required()}).required());if(t)throw new Ei.ClientError(t.message);let{refresh_token:r}=e;await AS(r);let n=await bS(),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:Mq,algorithm:yS,subject:Pd.OPERATION})}}async function DN(e){return vq(e,Pd.OPERATION)}async function AS(e){return vq(e,Pd.REFRESH)}async function vq(e,t){try{let r=await bS(),n=await Od.default.verify(e,r.publicKey,{algorithms:yS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,ON.findAndValidateUser)(n.username,void 0,!1);if(t===Pd.REFRESH&&!hw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw RS.default.warn(r),r?.name==="TokenExpiredError"?new Ei.ClientError(Cd.TOKEN_EXPIRED,Nd.FORBIDDEN):new Ei.ClientError(Cd.INVALID_TOKEN,Nd.UNAUTHORIZED)}}var Od,TS,Kp,so,CN,Ei,RS,ON,Oq,Pq,Lq,Dq,Yp,Nd,Cd,Mq,Tae,yS,Pd,SS,Ld=se(()=>{Od=b(require("jsonwebtoken")),TS=b(require("fs-extra")),Kp=b(require("node:path")),so=b(require("joi")),CN=b(ft());q();Ei=b(_e()),RS=b(Q());_w();ON=b(ds()),Oq=b(Gn()),Pq=b(gS()),Lq=b(Go()),Dq=b(os()),Yp=b(me()),{HTTP_STATUS_CODES:Nd,AUTHENTICATION_ERROR_MSGS:Cd}=Ei.hdbErrors;Yp.default.initSync();Mq=Yp.default.get(F.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Tae=Yp.default.get(F.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",yS="RS256",Pd={OPERATION:"operation",REFRESH:"refresh"};o(bS,"getJWTRSAKeys");o(PN,"createTokens");o(LN,"refreshOperationToken");o(DN,"validateOperationToken");o(AS,"validateRefreshToken");o(vq,"validateToken")});var MN=v((Lve,Bq)=>{"use strict";var yae=Nq(),Dd=require("passport"),Rae=require("passport-local").Strategy,bae=require("passport-http").BasicStrategy,Aae=require("util"),Iae=ds(),xq=Aae.callbackify(Iae.findAndValidateUser),Pve=zr(),wae=(q(),M(z)),Uq=(Ld(),M(Wp));Dd.use(new Rae(function(e,t,r){xq(e,t,r)}));Dd.use(new bae(function(e,t,r){xq(e,t,r)}));Dd.serializeUser(function(e,t){t(null,e)});Dd.deserializeUser(function(e,t){t(null,e)});function Nae(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===wae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Uq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):Uq.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(Nae,"authorize");function Cae(e,t){let r=yae(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(Cae,"checkPermissions");Bq.exports={authorize:Nae,checkPermissions:Cae}});var kN=v((Uve,Gq)=>{var CS=require("clone"),OS=ft(),Oae=ae(),wS=(q(),M(z)),Mve=Q(),vN=require("fs"),xN=require("joi"),{string:NS}=xN.types(),{hdbErrors:Pae,handleHDBError:IS}=_e(),{HDB_ERROR_MSGS:vve,HTTP_STATUS_CODES:UN}=Pae,{commonValidators:Md}=Ki(),Fq=" is required",Lae=["insert","update","upsert"],BN={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:Lae,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Dae={schema:NS.required(),table:NS.required(),action:NS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Mae,AWS_SECRET:vae,AWS_BUCKET:Uae,AWS_FILE_KEY:xae,REGION:Bae}=wS.S3_BUCKET_AUTH_KEYS,Fae={s3:{presence:!0},[`s3.${Mae}`]:{presence:!0,type:"String"},[`s3.${vae}`]:{presence:!0,type:"String"},[`s3.${Uae}`]:{presence:!0,type:"String"},[`s3.${xae}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Bae}`]:{presence:!0,type:"String"}},kq=CS(BN);kq.data.presence={message:Fq};var Hq=CS(BN);Hq.file_path.presence={message:Fq};var kae=Object.assign(CS(BN),Fae),FN=CS(Dae);FN.csv_url=NS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();FN.passthrough_headers=xN.object();function Hae(e){let t=OS.validateObject(e,kq);return PS(e,t)}o(Hae,"dataObject");function Gae(e){let t=OS.validateBySchema(e,xN.object(FN));return PS(e,t)}o(Gae,"urlObject");function qae(e){let t=OS.validateObject(e,Hq);return PS(e,t)}o(qae,"fileObject");function $ae(e){let t=OS.validateObject(e,kae);return PS(e,t)}o($ae,"s3FileObject");function PS(e,t){if(!t){let r=Oae.checkGlobalSchemaTable(e.schema,e.table);if(r)return IS(new Error,r,UN.BAD_REQUEST);if(e.operation===wS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{vN.accessSync(e.file_path,vN.constants.R_OK|vN.constants.F_OK)}catch(n){return n.code===wS.NODE_ERROR_CODES.ENOENT?IS(n,`No such file or directory ${n.path}`,UN.BAD_REQUEST):n.code===wS.NODE_ERROR_CODES.EACCES?IS(n,`Permission denied ${n.path}`,UN.BAD_REQUEST):IS(n)}}return t}o(PS,"postValidateChecks");Gq.exports={dataObject:Hae,urlObject:Gae,fileObject:qae,s3FileObject:$ae}});var HN=v((Bve,qq)=>{"use strict";var zp=Q(),LS=(q(),M(z));async function Vae(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===LS.OPERATIONS_ENUM.INSERT||t.operation===LS.OPERATIONS_ENUM.UPDATE||t.operation===LS.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===LS.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(zp.info(i.message),i):i.http_resp_msg?(zp.error(`Error calling operation: ${e.name}`),zp.error(i.http_resp_msg),i):(zp.error(`Error calling operation: ${e.name}`),zp.error(i),i)}}o(Vae,"callOperationFunctionAsAwait");qq.exports={callOperationFunctionAsAwait:Vae}});var GN=v((kve,Vq)=>{"use strict";var{S3:Kae,GetObjectCommand:Yae}=require("@aws-sdk/client-s3");Vq.exports={getFileStreamFromS3:Wae,getS3AuthObj:$q};async function Wae(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await $q(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Yae(r))).Body}o(Wae,"getFileStreamFromS3");function $q(e,t,r){return new Kae({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o($q,"getS3AuthObj")});var Yq=v((Gve,Kq)=>{"use strict";var qN=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}},$N=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Kq.exports={BulkLoadFileObject:qN,BulkLoadDataObject:$N}});var zq=v(($ve,Wq)=>{"use strict";var VN=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}};Wq.exports=VN});var Qq=v((Kve,jq)=>{"use strict";var KN=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};jq.exports=KN});var WN=v((Wve,Xq)=>{"use strict";var Jq=zq(),zae=Qq(),{HDB_ERROR_MSGS:jae}=zr(),YN=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=jae.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new Jq(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new zae(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 Jq(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}};Xq.exports=YN});var Dl=v((Qve,r$)=>{"use strict";var jve=_n(),jp=Q(),{validateBySchema:Zq}=ft(),Wo=require("joi"),Qae=Xi(),DS=ae(),{handleHDBError:MS,hdbErrors:Jae,ClientError:e$}=_e(),{HDB_ERROR_MSGS:vS,HTTP_STATUS_CODES:zN}=Jae,t$=me();t$.initSync();var{getDatabases:jN}=(we(),M(mt)),Xae=require("fs-extra"),Zae=(q(),M(z));r$.exports={describeAll:ece,describeTable:US,describeSchema:tce};async function ece(e={}){try{let t=DS.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=jN(),a={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){a[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await US({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 US({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){jp.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 jp.error("Got an error in describeAll"),jp.error(t),MS(new Error,vS.DESCRIBE_ALL_ERR)}}o(ece,"describeAll");async function US(e,t){DS.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=Zq(e,Wo.object({database:Wo.string(),table:Wo.string().required(),exact_count:Wo.boolean().strict(),include_computed:Wo.boolean().strict()}));if(i)throw new e$(i.message);let c=jN()[r];if(!c)throw MS(new Error,vS.SCHEMA_NOT_FOUND(e.schema),zN.NOT_FOUND);let l=c[n];if(!l)throw MS(new Error,vS.TABLE_NOT_FOUND(e.schema,e.table),zN.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 Xae.stat(l.primaryStore.env.path)).size}catch(p){jp.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")),t$.get(Zae.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Qae.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){jp.warn(`unable to stat table dbi due to ${p}`)}return m}o(US,"descTable");async function tce(e){DS.transformReq(e);let t=Zq(e,Wo.object({database:Wo.string(),exact_count:Wo.boolean().strict(),include_computed:Wo.boolean().strict()}));if(t)throw new e$(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=jN()[n];if(!i)throw MS(new Error,vS.SCHEMA_NOT_FOUND(e.schema),zN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),DS.isEmpty(l)||l.describe){let u=await US({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(tce,"describeSchema")});var a$=v((Xve,o$)=>{"use strict";var rce=Dl(),{hdbErrors:n$}=_e(),{getDatabases:s$}=(we(),M(mt));o$.exports={checkSchemaExists:i$,checkSchemaTableExists:nce,schemaDescribe:rce};async function i$(e){if(!s$()[e])return n$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(i$,"checkSchemaExists");async function nce(e,t){let r=await i$(e);if(r)return r;if(!s$()[e][t])return n$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(nce,"checkSchemaTableExists")});var xS=v((eUe,c$)=>{"use strict";var sce=ls();c$.exports={writeTransaction:ice};function ice(e,t,r){return sce.writeTransaction(e,t,r)}o(ice,"writeTransaction")});var eC=v((iUe,T$)=>{"use strict";var{decode:oce}=require("msgpackr"),{isMainThread:rUe,parentPort:nUe,threadId:sUe}=require("worker_threads"),kS=hr(),vd=Pt(),XN=(q(),M(z)),Tn=Q(),JN=me(),ace=(q(),M(z)),{onMessageByType:cce}=nt(),f$=Xi(),{recordAction:l$,recordActionBinary:lce}=(rs(),M(z_)),{publishToStream:uce}=kS,{ConsumerEvents:u$}=require("nats"),dce=_n(),{promisify:fce}=require("util"),{decodeBlobsWithWrites:mce}=(ts(),M(L_)),m$=fce(setTimeout),HS=1e4,GS,FS,pce,hce,p$,Qp=new Map,Ud=new Map;T$.exports={initialize:h$,ingestConsumer:ZN,setSubscription:Ece,setIgnoreOrigin:Sce,getDatabaseSubscriptions:gce,updateConsumer:E$};async function h$(){cce(XN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await E$(n)}),p$=!0,Tn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await kS.getNATSReferences();GS=e,FS=e.info.server_name,pce=t,hce=r}o(h$,"initialize");async function E$(e){if(e.status==="start"){let{js:t,jsm:r}=await _$(e.node_domain_name);ZN(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Qp.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?.(),Qp.set(e.stream_name+e.node_domain_name,"close")),Ud.get(e.node_domain_name)==="failed"&&Ud.set(e.node_domain_name,"close")}}o(E$,"updateConsumer");var qS=new Map;function Ece(e,t,r){let n=qS.get(e);n||qS.set(e,n=new Map),n.set(t,r),p$||h$().then(_ce)}o(Ece,"setSubscription");async function _ce(){let e=await dce.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 _$(r),!n))break;let{schema:a,table:c}=i,l=f$.createNatsTableStreamName(a,c);ZN(l,n,s,r)}}}o(_ce,"accessConsumers");async function _$(e){let t,r,n=1;for(;!r;)try{t=await GS.jetstream({domain:e}),r=await GS.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<HS?n++*100:HS;await m$(i)}return{js:t,jsm:r}}o(_$,"connectToRemoteJS");function gce(){return qS}o(gce,"getDatabaseSubscriptions");var g$;function Sce(e){g$=e}o(Sce,"setIgnoreOrigin");var S$=100,d$=new Array(S$),BS=0;async function ZN(e,t,r,n){let{connection:s}=await kS.getNATSReferences();GS=s,FS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,FS),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 kS.createConsumer(r,e,FS,new Date(Date.now()).toISOString()));let d=a++*100<HS?a++*100:HS;await m$(d)}let c=!1,l;for(;!c;){if(Qp.get(e+n)==="close"||Ud.get(n)==="close"){Qp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:JN.get(XN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Qp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===u$.ConsumerDeleted&&(await l.close(),c=!0),d.type===u$.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 d$[BS],d$[BS]=Tce(d).catch(f=>{Tn.error(f)}),++BS>=S$&&(BS=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(ZN,"ingestConsumer");async function Tce(e){let t;await mce(()=>{t=oce(e.data)}),l$(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=JN.get(XN.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&&!g$),lce(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=qS.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:QN(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:QN(a),value:k,expiresAt:p,id:f?.[J],table:u}));for(;l;)I.push({type:QN(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})}JN.get(ace.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&uce(e.subject.split(".").slice(0,-1).join("."),f$.createNatsTableStreamName(c,u),e.headers,e.data),await E;let C=Date.now()-g;g&&l$(C,"replication-latency",e.subject,a,"ingest")}catch(a){Tn.error(a)}e.ack()}o(Tce,"messageProcessor");function QN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(QN,"convertOperation")});var hr=v((fUe,B$)=>{"use strict";var Vr=me();Vr.initSync();var yce=require("fs-extra"),Rce=require("semver"),Zp=require("path"),{monotonicFactory:bce}=require("ulidx"),R$=bce(),Ace=require("util"),b$=require("child_process"),Ice=Ace.promisify(b$.exec),wce=b$.spawn,nn=Pt(),rt=(q(),M(z)),{packageJson:Nce,PACKAGE_ROOT:Cce}=Ct(),$S=ae(),_i=Q(),VS=Xi(),Oce=xS(),Jp=gt(),{broadcast:Pce,onMessageByType:Lce,getWorkerIndex:Dce}=nt(),{isMainThread:A$}=require("worker_threads"),{Encoder:Mce,decode:sC}=require("msgpackr"),I$=new Mce,{isEmpty:xl}=$S,w$=ds(),aUe=48*36e11;A$&&Lce(rt.ITC_EVENT_TYPES.RESTART,()=>{yn=void 0,Ul=void 0});var{connect:vce,StorageType:Uce,RetentionPolicy:xce,AckPolicy:iC,DeliverPolicy:oC,DiscardPolicy:Bce,NatsConnection:cUe,JetStreamManager:lUe,JetStreamClient:uUe,StringCodec:dUe,JSONCodec:Fce,createInbox:aC,headers:kce,ErrorCode:y$}=require("nats"),{recordAction:Hce}=(rs(),M(z_)),{encodeBlobsAsBuffers:Gce}=(ts(),M(L_)),N$=Fce(),qce="clustering",$ce=Nce.engines[nn.NATS_SERVER_NAME],Vce=Zp.join(Cce,"dependencies"),nC=Zp.join(Vce,`${process.platform}-${process.arch}`,nn.NATS_BINARY_NAME),tC,rC,Xp,Ml,vl;B$.exports={runCommand:C$,checkNATSServerInstalled:Kce,createConnection:cC,getConnection:eh,getJetStreamManager:th,getJetStream:P$,getNATSReferences:io,getServerList:Wce,createLocalStream:lC,listStreams:L$,deleteLocalStream:zce,getServerConfig:xd,listRemoteStreams:jce,viewStream:Qce,viewStreamIterator:Jce,publishToStream:Xce,request:tle,reloadNATS:uC,reloadNATSHub:rle,reloadNATSLeaf:nle,extractServerName:ele,requestErrorHandler:sle,createLocalTableStream:U$,createTableStreams:ale,purgeTableStream:x$,purgeSchemaTableStreams:cle,getStreamInfo:lle,updateLocalStreams:dle,closeConnection:Yce,getJsmServerName:KS,addNatsMsgHeader:D$,clearClientCache:O$,updateRemoteConsumer:ile,createConsumer:M$,updateConsumerIterator:ole};async function C$(e,t=void 0){let{stdout:r,stderr:n}=await Ice(e,{cwd:t});if(n)throw new Error(n.replace(`
15
+ `)}}});var kH,wl,HH,Ja,Rp,md,yie,Gg,$w=se(()=>{kH=b(os()),wl=b(nt());q();HH=b(es());ld();Hg();Ja=(0,HH.loggerWithTag)("componentStatus.crossThread"),Rp=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,wl.onMessageByType)(e_.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,wl.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,kH.sendItcEvent)({type:e_.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,wl.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,wl.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}},yie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),Gg=new Rp(yie)});var Xa,qg=se(()=>{kw();ld();$w();Hg();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 Gg.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 mr,$g=se(()=>{qg();mr=new Xa});function qH(e){let t=GH.get(e);return t||(t=new Vw(e),GH.set(e,t)),t}function $H(){mr.reset()}var Vw,GH,to,VH,KH=se(()=>{$g();ld();Vw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return mr.setStatus(this.componentName,Ie.HEALTHY,t),this}warning(t){return mr.setStatus(this.componentName,Ie.WARNING,t),this}error(t,r){return mr.setStatus(this.componentName,Ie.ERROR,t,r),this}loading(t){return mr.setStatus(this.componentName,Ie.LOADING,t||"Loading..."),this}unknown(t){return mr.setStatus(this.componentName,Ie.UNKNOWN,t),this}get(){return mr.getStatus(this.componentName)}},GH=new Map;o(qH,"statusForComponent");to={loading(e,t){mr.initializeLoading(e,t)},loaded(e,t){mr.markLoaded(e,t)},failed(e,t,r){mr.markFailed(e,t,r)}};o($H,"reset");VH=Ie});var bp={};Re(bp,{AggregationError:()=>Gw,COMPONENT_STATUS_LEVELS:()=>Ie,ComponentStatus:()=>ud,ComponentStatusError:()=>Qa,ComponentStatusOperationError:()=>fd,ComponentStatusRegistry:()=>Xa,CrossThreadCollectionError:()=>qw,CrossThreadStatusCollector:()=>Rp,CrossThreadTimeoutError:()=>Hw,ITCError:()=>dd,StatusAggregator:()=>md,componentStatusRegistry:()=>mr,crossThreadCollector:()=>Gg,query:()=>Rie});var Rie,YH=se(()=>{$g();qg();kw();qg();$w();$g();Hg();ld();Rie={get(e){return mr.getStatus(e)},all(){return mr.getAllStatuses()},byStatus(e){return mr.getComponentsByStatus(e)},summary(){return mr.getStatusSummary()},async allThreads(){return Xa.getAggregatedFromAllThreads(mr)}}});var Kw={};Re(Kw,{STATUS:()=>VH,internal:()=>bp,lifecycle:()=>to,reset:()=>$H,statusForComponent:()=>qH});var Ap=se(()=>{KH();YH()});var wp=v((QDe,jH)=>{"use strict";var fs=Q(),gn=(q(),M(z)),bie=L0(),Aie=ds(),{validateEvent:Yw}=os(),Ip=ls(),Iie=require("process"),{resetDatabases:wie}=(we(),M(mt)),Nie={[gn.ITC_EVENT_TYPES.SCHEMA]:Cie,[gn.ITC_EVENT_TYPES.USER]:zH,[gn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Pie};async function Cie(e){let t=Yw(e);if(t){fs.error(t);return}fs.trace("ITC schemaHandler received schema event:",e),await bie(e.message),await Oie(e.message)}o(Cie,"schemaHandler");async function Oie(e){try{Ip.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ip.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ip.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=wie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fs.error(t)}}o(Oie,"syncSchemaMetadata");var WH=[];async function zH(e){try{try{Ip.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ip.resetReadTxn(gn.SYSTEM_SCHEMA_NAME,gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fs.warn(r)}let t=Yw(e);if(t){fs.error(t);return}fs.trace(`ITC userHandler ${gn.HDB_ITC_CLIENT_PREFIX}${Iie.pid} received user event:`,e),await Aie.setUsersWithRolesCache();for(let r of WH)r()}catch(t){fs.error(t)}}o(zH,"userHandler");zH.addListener=function(e){WH.push(e)};async function Pie(e){try{let t=Yw(e);if(t){fs.error(t);return}fs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Ap(),M(Kw)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=os(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:gn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?fs.trace(`Sent component status response directly to thread ${u}`):(u===void 0?fs.debug("No originator threadId, falling back to broadcast"):fs.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){fs.error("Error handling component status request:",t)}}o(Pie,"componentStatusRequestHandler");jH.exports=Nie});var os=v((rMe,JH)=>{"use strict";var XDe=Q(),Ww=ae(),Lie=(q(),M(z)),{ITC_ERRORS:Np}=zr(),{parentPort:ZDe,threadId:Die,isMainThread:Mie,workerData:eMe}=require("worker_threads"),{onMessageFromWorkers:vie,broadcast:tMe,broadcastWithAcknowledgement:Uie}=nt();JH.exports={sendItcEvent:xie,validateEvent:QH,SchemaEventMsg:Bie,UserEventMsg:Fie};var Vg;vie(async(e,t)=>{Vg=Vg||wp(),QH(e),Vg[e.type]&&await Vg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function xie(e){return!Mie&&e.message&&(e.message.originator=Die),Uie(e)}o(xie,"sendItcEvent");function QH(e){if(typeof e!="object")return Np.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ww.isEmpty(e.type))return Np.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ww.isEmpty(e.message))return Np.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ww.isEmpty(e.message.originator))return Np.MISSING_ORIGIN;if(Lie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Np.INVALID_EVENT(e.type)}o(QH,"validateEvent");function Bie(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(Bie,"SchemaEventMsg");function Fie(e){this.originator=e}o(Fie,"UserEventMsg")});var Go=v((iMe,tG)=>{"use strict";var XH=(q(),M(z)),sMe=ae(),Kg=Q(),ZH=m0(),pd,{sendItcEvent:eG}=os();function kie(e){try{Kg.debug("signalSchemaChange called with message:",e),pd=pd||wp();let t=new ZH(XH.ITC_EVENT_TYPES.SCHEMA,e);return pd.schema(t),eG(t)}catch(t){Kg.error(t)}}o(kie,"signalSchemaChange");function Hie(e){try{Kg.trace("signalUserChange called with message:",e),pd=pd||wp();let t=new ZH(XH.ITC_EVENT_TYPES.USER,e);return pd.user(t),eG(t)}catch(t){Kg.error(t)}}o(Hie,"signalUserChange");tG.exports={signalSchemaChange:kie,signalUserChange:Hie}});function Cp(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 rG(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,Op=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(Cp,"appendHeader");o(rG,"mergeHeaders")});function Yg(e,t,r=qie){let n;return function(...i){return n?n.length*zw>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();zw=(zw*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var iG,Gie,qie,nG,$ie,jw,sG,zw,Qw=se(()=>{iG=b(es()),Gie=3e3,qie=2e4,nG=0,$ie=3e4,jw=3e3,sG=performance.now()+jw,zw=0;o(Yg,"throttle");setInterval(()=>{let e=performance.now();e-sG-jw>Gie&&nG+$ie<e&&(iG.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"),nG=e),sG=e},jw).unref()});var EG={};Re(EG,{EVICTED:()=>Ga,INVALIDATED:()=>xn,coerceType:()=>zg,makeTable:()=>Qg});function Qg(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=DA(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,Fc,xt,ri,Na=Cl.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 GE=i.getRange({start:!1,end:!1}).constructor,jf=10,qE=6;g&&em(),Dm(i.env.path,K=>{if(I)return Oa(K)});class Qf extends El{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 dp(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===sm&&(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:kc(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,Nl.getWorkerIndex)(),D):(0,Nl.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 oe=ie.find(ke=>ke.id===de);ie=ie.filter(ke=>ke.id!==de||ke===oe),oe||(oe={id:de,seqId:0},ie.push(oe)),oe.seqId=Math.max(ne?.seqId??1,B.localTime),de===j?.nodeId&&(oe.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"}),Lp.signalSchemaChange(new Dp.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(()=>Lp.signalUserChange(new Dp.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){Ui(_);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&&(!toe(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,em(),Pe.audit=!0)}static coerceId(_){return _===""?null:zg(_,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(),Xw.default.unlinkSync(i.env.path);Lp.signalSchemaChange(new Dp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(Jf(_))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(_);Ui(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&&Jw(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=Jw(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=Jw(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 Qf(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===aG?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new dp(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();Ui(_),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();Ui(_),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=kc(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);ol(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);Ui(_);let L=this.#n??i.getEntry(_);this.#s=N?aG:Jie;let A=o(w=>N?w.put?()=>w.put(O,_,T):null:w.patch?()=>w.patch(O,_,T):w.put?()=>w.put(O,_,_l(this)):null,"writeToSources"),U={key:_,store:i,entry:L,nodeName:O?.nodeName,validate:o(w=>{T||(T=this.#t),N||T&&wg(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=_l(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,oe=D.version;Fe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(w),"applying later update from:",new Date(oe),"local recorded time",new Date(de));let ke=[];for(;de>w||oe>=w&&de>0;){let Be=l.get(de);if(!Be)break;let Le=At(Be);if(oe=Le.version,oe>=w){if(oe===w){if(Ee=xr(w,{version:oe,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=__(j??T,Le,N),!j)return}}else{if(N)return;j=__(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=_l(Y,j??T):(this.#e=Y,pe=_l(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 oe in r)pe||(pe={}),pe[oe]=fe[oe]}ne=kc(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(Jf(_)){_.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());Ui(_);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()):ol(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=Wie);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 oe of ie){if(oe.conditions){oe.conditions=A(oe.conditions,oe.operator);continue}let ke=oe[0]??oe.attribute,Be=ke==null?k:$i(S,ke);if(Be)(Be.type||vA[oe.comparator])&&(oe[1]===void 0?oe.value=w(oe.value,Be):oe[1]=w(oe[1],Be));else if(ke!=null&&!_.allowConditionsOnDynamicAttributes)throw(0,lt.handleHDBError)(new Error,`${ke} is not a defined attribute`,404);if(oe.chainedConditions)if(oe.chainedConditions.length===1&&(!oe.operator||oe.operator=="and")){let Le=oe.chainedConditions[0],Me,pt;if(Le.comparator==="gt"||Le.comparator==="greater_than"||Le.comparator==="ge"||Le.comparator==="greater_than_equal"?(Me=oe,pt=Le):(Me=Le,pt=oe),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";oe.comparator=(wt?"ge":"gt")+(Et?"le":"lt"),oe.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"?Vie(ie,tg(Pe)):ie}o(U,"orderConditions");function w(ie,xe){return Array.isArray(ie)?ie.map(de=>zg(de,xe)):zg(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=$i(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=UA(P,D,Pe,B,_,T,(ie,xe)=>Zf(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 GE;if(N){_=Zf(_,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,oe)=>{let ke=Tu(de,ne.attribute,P),Be=Tu(oe,ne.attribute,P),Le=xe?(0,Ol.compareKeys)(Be,ke):(0,Ol.compareKeys)(ke,Be);return Le===0?ie?.(de,oe)||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 oe=pe.definition?.tableClass||Pe;A||(A={});let ke=A[fe]||(A[fe]=oe.transformEntryForSelect(fe===B?null:B.select||(Array.isArray(B)?B:null),T,N,ie,O));if(Array.isArray(de)){let Be=[],Le=oe.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=qA(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||dG(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>lG&&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||dG(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,Ol.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(D&&(x({id:w,localTime:Y,value:D,version:$,type:"put",size:j}),P.queue?.length>lG&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let w=this.#n?.localTime;if(w===LA&&(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&&Ui(_);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");Kie(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=Xw.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(fG)):$.filter(fG):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}}fp(this,this),fp(Qf,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=$i(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=k_(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=ol(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 $E=Yg(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 ob=Pe.prototype;return h&&Pe.setTTLExpiration(h/1e3),X&&VE(),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,Pp.getIndexedValues)(A,w),$=(0,Pp.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)&&oG){let j=$.concat(D).map(B=>({key:B,value:K}));O.prefetch(j,uG)}for(let j=0,B=$.length;j<B;j++)O.remove($[j],K)}else D?.length>0&&oG&&O.prefetch(D.map(Y=>({key:Y,value:K})),uG);if(D)for(let Y=0,j=D.length;Y<j;Y++)O.put(D[Y],K)}return N}o(Su,"updateIndices");function Ui(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>cG)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,Ol.writeKey)(K,Xie,0)>cG)throw new Error("Primary key size is too large: "+K.length);return!0}o(Ui,"checkValidId");function Os(K){return typeof K=="object"&&K?K.id:K}o(Os,"requestTargetToId");function Jf(K){return typeof K=="object"&&K&&K.isCollection}o(Jf,"isSearchTarget");function Xf(K){}o(Xf,"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")&&(hG.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>qE&&(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<jf&&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 Zie;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 h_}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 Zf(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(Zf,"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)},Qie)});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 $E(K,A,_),fe=N&xn;let ne=A.lastModified||fe&&P;Ee=fe||ne>P||!L,ne||(ne=(0,Pp.getNextMonotonicTime)());let ie=performance.now()-j;if(Ve(ie,"cache-resolution",s,null,"success"),U&&Cp(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&&Cp(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,oe=!1,ke,Be=Pa(Pe.getResidency(B,T));if(Be){if(!Be.includes(server.hostname))if(de=B,oe=!0,Pe.getResidencyById)B=void 0;else{B=null;for(let Le in r)B||(B={}),B[Le]=de[Le]}ke=kc(Be)}Fe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(ne).toISOString()}`),y(K,B,ie,ne,oe?xn:0,g&&(Ee||oe)||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):ol(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,Nl.getWorkerIndex)()===(0,Nl.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)*(Cl.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&&Qc(fe,ie=>{ie.size&&(ne+=ie.size)}),Fe.default.trace?.(`shouldEvict adjusted ${pe} ${ne}, ${pe*(j-B)/ne} < ${D}`),pe*(j-B)/ne<D}return!1}o(Y,"shouldEvict");try{let j=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ee,value:fe,version:pe,expiresAt:ne,metadataFlags:ie}=B,xe;fe===null&&!g&&pe+jie<Date.now()?xe=ol(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 em(){W=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(em,"addDeleteRemoval");function VE(){(0,Nl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Fc){Fc=!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{Fc=!1}}},zie).unref()}o(VE,"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 kc(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(kc,"getResidencyId");function Ru(K,_){let T=rA(K,i.rootStore);if(T){let N=_;return N?async()=>{await N(),await T}:()=>T}return _}o(Ru,"preCommitBlobsForRecordBefore")}function Jw(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 uG(){}function zg(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 Wg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Wg(+e);case"Float":return e==="null"?null:Wg(+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;eoe.test(e)||(e+="Z");let n=new Date(e);return Wg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,jg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Wg(e){if(isNaN(e))throw new SyntaxError;return e}function dG(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 fG(e){return e!=null}function Hs(e){try{return JSON.stringify(e)}catch{return e}}function toe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var ec,Pp,mG,pG,Cl,lt,Lp,Dp,Fe,Ol,Nl,jg,Xw,hG,Vie,Kie,Yie,Wie,zie,jie,oG,Qie,aG,Jie,xn,Ga,Xie,cG,lG,Zie,NMe,eoe,Za,sg=se(()=>{q();ec=require("lmdb"),Pp=b(Mn()),mG=b(require("lodash")),pG=b(Sm());qa();ym();Cl=b(me());$A();lt=b(_e()),Lp=b(Go()),Dp=b(os());we();ng();Fe=b(es());JI();Ua();Ol=require("ordered-binary"),Nl=b(nt());Fi();jg=b(ae());nl();rs();g_();Op();Xw=b(require("node:fs"));ts();U_();hG=b(Q());Qw();({sortBy:Vie}=mG.default),{validateAttribute:Kie}=pG.default,Yie=new Uint8Array(9);Yie[8]=192;Wie=1/0,zie=6e4,jie=864e5;Cl.initSync();oG=Cl.get(F.STORAGE_PREFETCHWRITES),Qie=1e4,aG=1,Jie=2,xn=1,Ga=8,Xie=Buffer.allocUnsafeSlow(8192),cG=1978,lG=100,Zie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},NMe=(0,jg.convertToMS)(Cl.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(Qg,"makeTable");o(Jw,"attributesAsObject");o(uG,"noop");eoe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(zg,"coerceType");o(Wg,"rejectNaN");o(dG,"isDescendantId");Za=o(()=>new Promise(setImmediate),"rest");o(ks,"when");o(fG,"exists");o(Hs,"stringify");o(toe,"hasOtherProcesses")});function Jg(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 Xg(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 _G=se(()=>{o(Jg,"euclideanDistance");o(Xg,"cosineDistance")});var gG,SG,Ed,ro,hd,roe,noe,Zg,TG=se(()=>{_G();gG=require("msgpackr"),SG=b(es()),Ed=b(_e()),ro=(0,SG.loggerWithTag)("HNSW"),hd=Symbol.for("entryPoint"),roe=Symbol.for("key"),noe=10,Zg=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=gG.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Jg:Xg,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"?[roe,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),noe),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=Xg;else if(s==="euclidean")c=Jg;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"?Jg:Xg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var Zw,yG=se(()=>{TG();Zw={HNSW:Zg}});var mt={};Re(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>eS,database:()=>sd,databaseEnvs:()=>Yo,databases:()=>De,dropDatabase:()=>rw,dropTableMeta:()=>loe,getDatabases:()=>at,getDefaultCompression:()=>aS,getTables:()=>ioe,onRemovedDB:()=>kp,onUpdatedTable:()=>Pl,readMetaDb:()=>Mp,resetDatabases:()=>yd,table:()=>Ze,tables:()=>Sn});function Fp(e,t){let r=iS.OpenDBIObject??iS.default.OpenDBIObject;return new r(e,t)}function ioe(){return sS||at(),Sn||{}}function at(){if(sS)return De;sS=!0,Sd=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Ht.join)((0,zt.getHdbBasePath)(),qc),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)(),JE)),!!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&&Mp((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);Mp((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"&&Mp((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)&&Mp(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[oS]}}if((0,zt.get)(F.ANALYTICS_REPLICATE)===!1?eS.includes("hdb_analytics")||eS.push("hdb_analytics"):(De.system?.hdb_analytics?.enableAuditing(),De.system?.hdb_analytics_hostname?.enableAuditing()),De.system)for(let r of eS)De.system[r]&&(De.system[r].replicate=!1);return Sd=null,De}}function yd(){sS=!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],Up.forEach(i=>i(t.databaseName));break}}return De}function Mp(e,t,r=rN,n,s){let i=new eN.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 Fp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(tS.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=F_(a));let d=wG(r),f=d[oS],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 Fp(!g.is_hash_attribute,g.is_hash_attribute);if(te.compression=g.compression,te.compression){let ye=(0,zt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||IG;te.compression.threshold=ye}I=Z_(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=CG(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=NG(d,p,Qg({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 vp)te(R)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function wG(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[oS]=r,Sd.set(e,r)}return t}function NG(e,t,r){return e[t]=r,r}function sd({database:e,table:t}){e||(e=rN),at();let r=wG(e),n=(0,Ht.join)((0,zt.getHdbBasePath)(),qc),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)(),JE));let a=(0,Ht.join)(n,(i?t:e)+".mdb"),c=Yo.get(a);if(!c||c.status==="closed"){let l=new eN.default(a,!1);c=(0,Td.open)(l),Yo.set(a,c)}return c.auditStore||(c.auditStore=F_(c)),c}async function rw(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 xp.remove(r.path));if(r||(r=sd({database:e,table:null}),r.status==="open"&&(await r.close(),await xp.remove(r.path))),e==="data"){for(let n in Sn)delete Sn[n];delete Sn[oS]}delete De[e],Up.forEach(n=>n(e)),await tA(r)}function CG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&Zw[r.indexed.type]?.useObjectStore,s=new Fp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=Zw[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=rN);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 Fp(!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=aS(),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 Fp(!1,!0);ue.compression=S.compression;let ce=t+"/";if(y=h.dbisDb=h.openDB(tS.INTERNAL_DBIS_NAME,C),X(),y.get(ce))return k&&k(),yd(),Ze(e);let te=Z_(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=NG(E,t,Qg({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(tS.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=CG(ue,h,W);(te||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<Bp.workerData?.restartNumber)&&(I=!0,X(),ce=y.get(ue),(te||ce.indexingPID&&ce.indexingPID!==process.pid||ce.restartNumber<Bp.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=coe(g,H,G):I&&rS.signalSchemaChange(new nS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,I)for(let W of vp)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 coe(e,t,r){try{Nr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await rS.signalSchemaChange(new nS.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,RG.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)}),Bp.workerData&&Bp.workerData.restartNumber!==AG.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>ooe?await s:d>aoe&&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 rS.signalSchemaChange(new nS.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 loe({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 Pl(e){return vp.push(e),{remove(){let t=vp.indexOf(e);t>-1&&vp.splice(t,1)}}}function kp(e){return Up.push(e),{remove(){let t=Up.indexOf(e);t>-1&&Up.splice(t,1)}}}function aS(){let e=(0,zt.get)(F.STORAGE_COMPRESSION),t=(0,zt.get)(F.STORAGE_COMPRESSION_DICTIONARY),r=(0,zt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||IG,n={startingOffset:32};return t&&(n.dictionary=xp.readFileSync(t)),r&&(n.threshold=r),e&&n}var zt,tS,Td,Ht,ms,gd,eN,xp,tN,RG,rS,nS,Bp,bG,AG,iS,soe,Nr,rN,oS,IG,eS,Sn,De,_d,vp,Up,sS,Yo,Sd,ooe,aoe,we=se(()=>{zt=b(me()),tS=b(Yt()),Td=require("lmdb"),Ht=require("path"),ms=require("fs"),gd=b(Rt());sg();eN=b(zm());q();xp=b(require("fs-extra")),tN=b(ii()),RG=b(Mn()),rS=b(Go()),nS=b(os()),Bp=require("worker_threads"),bG=b(Q()),AG=b(nt());Fi();nl();ts();yG();iS=b(Wm()),{forComponent:soe}=bG.default;o(Fp,"OpenDBIObject");Nr=soe("storage"),rN="data",oS=Symbol("defined-tables"),IG=((0,zt.get)(F.STORAGE_PAGESIZE)||4096)-60;(0,zt.initSync)();eS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],Sn=Object.create(null),De=Object.create(null);(0,tN._assignPackageExport)("databases",De);(0,tN._assignPackageExport)("tables",Sn);_d=Symbol.for("next-table-id"),vp=[],Up=[],Yo=new Map;o(ioe,"getTables");o(at,"getDatabases");o(yd,"resetDatabases");o(Mp,"readMetaDb");o(wG,"ensureDB");o(NG,"setTable");o(sd,"database");o(rw,"dropDatabase");o(CG,"openIndex");o(Ze,"table");ooe=1e3,aoe=10;o(coe,"runIndexing");o(loe,"dropTableMeta");o(Pl,"onUpdatedTable");o(kp,"onRemovedDB");o(aS,"getDefaultCompression")});var iN={};Re(iN,{loadGQLSchema:()=>foe,start:()=>sN,startOnMainThread:()=>doe});function sN({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):uoe.includes(R.type)||(0,PG.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,nN.dirname)(n),R.tableClass):i.set((0,nN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,S,y){return new OG.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 nN,OG,PG,uoe,doe,foe,LG=se(()=>{nN=require("path"),OG=require("node:vm");we();PG=b(nt());$a();uoe=["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(sN,"start");doe=sN,foe=o(e=>sN({ensureTable:Ze}).handleFile(e,null,null,new zu),"loadGQLSchema")});var aN={};Re(aN,{start:()=>yoe});function moe(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 DG(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 oN(e){return parseInt(e.value,10)}function vG(e){return parseFloat(e.value)}function UG(e,t,r){let n=r.get(e.name.value);return xG(n)?BG(n,t):{attribute:t,value:n}}function xG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function BG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],xG(n)?BG(n,t):{attribute:t,value:n}))}function poe(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:oN(e.value)};case Ge.Kind.FLOAT:return{attribute:t,value:vG(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:t,value:e.value.value};case Ge.Kind.VARIABLE:return UG(e.value,t,r);case Ge.Kind.OBJECT:return FG(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 FG(e,t,r){return e.fields.flatMap(n=>poe(n,t,r))}function hoe(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:oN(e.value)};case Ge.Kind.FLOAT:return{attribute:e.name.value,value:vG(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Ge.Kind.VARIABLE:return UG(e.value,e.name.value,t);case Ge.Kind.OBJECT:return FG(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 Eoe(e,t){return e.flatMap(r=>hoe(r,t))}function cS(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 cS(s.selectionSet,t)}case Ge.Kind.INLINE_FRAGMENT:return cS(r.selectionSet,t)}})}function kG(e,t){return cS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:kG(r.selectionSet,t)}:r.name.value)}async function _oe(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:kG(e.selectionSet,r),conditions:Eoe(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 HG(e){switch(e.kind){case Ge.Kind.NULL:return null;case Ge.Kind.INT:return oN(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]:HG(r.value),...t}),{});case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new $r(`Value type, ${e.kind}, is not supported.`)}}function goe(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=HG(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 Soe(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=goe(e.variableDefinitions,t),i=await Promise.all(cS(e.selectionSet,r).map(c=>_oe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function MG({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(moe(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 Soe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Toe(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 DG(r),MG(r,e)}case"POST":{let r=await Do(e.headers.get("content-type"),!0)(e._nodeRequest);return DG(r),MG(r,e)}default:throw new no("Method Not Allowed",405,{Allow:"GET, POST"})}}function yoe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Toe(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,GG=se(()=>{Ge=b(require("graphql"));Mo();$a();o(moe,"assertExecutableDefinitionNode");o(DG,"assertRequestParams");o(oN,"processIntValueNode");o(vG,"processFloatValueNode");o(UG,"processVariableNode");o(xG,"isObject");o(BG,"transformObjectIntoQueryCondition");o(poe,"processObjectFieldNode");o(FG,"processObjectValueNode");o(hoe,"processArgumentNode");o(Eoe,"buildConditionsQuery");o(cS,"fillInFragments");o(kG,"buildSelectQuery");o(_oe,"processFieldNode");o(HG,"processConstValueNode");o(goe,"resolveVariables");o(Soe,"executeOperation");o(MG,"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(Toe,"graphqlQueryingHandler");o(yoe,"start")});var WG=v((jMe,YG)=>{var Rd=require("validate.js"),$G=ft(),bd=(q(),M(z)),{handleHDBError:Roe,hdbErrors:boe}=_e(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:Aoe}=boe,cN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Ioe={STRUCTURE_USER:"structure_user"},qG=Object.values(bd.ROLE_TYPES_ENUM),woe="attribute_permissions",Noe="attribute_name",{PERMS_CRUD_ENUM:Ad}=bd,Coe=[woe,...Object.values(Ad)],VG=[Ad.READ,Ad.INSERT,Ad.UPDATE],Ooe=[Noe,...VG];function Poe(e){let t=cN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,KG(e,t)}o(Poe,"addRoleValidation");function Loe(e){let t=cN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,KG(e,t)}o(Loe,"alterRoleValidation");function Doe(e){let t=cN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,$G.validateObject(e,t)}o(Doe,"dropRoleValidation");var Moe=["operation","role","id","permission","hdb_user","access"];function KG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Moe.includes(n[a])||s.push(n[a]);s.length>0&&pr(sr.INVALID_ROLE_JSON_KEYS(s),r);let i=$G.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{pr(a,r)}),e.permission){let a=voe(e);a&&pr(a,r),qG.forEach(c=>{e.permission[c]&&!Rd.isBoolean(e.permission[c])&&pr(sr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(qG.indexOf(a)<0){if(a===Ioe.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||pr(sr.SCHEMA_NOT_FOUND(f),r)}continue}pr(sr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){pr(sr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){pr(sr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Coe.includes(d)||pr(sr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(Ad).forEach(d=>{Rd.isDefined(u[d])?Rd.isBoolean(u[d])||pr(sr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):pr(sr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){pr(sr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){pr(sr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!Ooe.includes(E)&&E!==Ad.DELETE&&pr(sr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!Rd.isDefined(p.attribute_name)){pr(sr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){pr(sr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}VG.forEach(E=>{Rd.isDefined(p[E])?Rd.isBoolean(p[E])||pr(sr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):pr(sr.ATTR_PERM_MISSING(E,h),r,a,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;pr(sr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Uoe(r)}o(KG,"customValidate");YG.exports={addRoleValidation:Poe,alterRoleValidation:Loe,dropRoleValidation:Doe};function voe(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(voe,"validateNoSUPerms");function Uoe(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 Roe(new Error,n,Aoe.BAD_REQUEST)}else return null}o(Uoe,"generateRolePermResponse");function pr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(pr,"addPermError")});var Gp=v((XMe,JG)=>{"use strict";var zG=Gn(),jG=_n(),xoe=Rl(),uN=WG(),dN=Go(),JMe=require("uuid").v4,Boe=require("util"),lS=(q(),M(z)),Foe=ae(),fN=jG.searchByValue,koe=jG.searchByHash,Hoe=Boe.promisify(xoe.delete),Goe=di(),qoe=rd(),{hdbErrors:$oe,handleHDBError:Ll}=_e(),{HDB_ERROR_MSGS:QG,HTTP_STATUS_CODES:Hp}=$oe,{UserEventMsg:mN}=os();JG.exports={addRole:Voe,alterRole:Koe,dropRole:Yoe,listRoles:Woe};function lN(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(lN,"scrubRoleDetails");async function Voe(e){let t=uN.addRoleValidation(e);if(t)throw t;e=lN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await fN(r)||[])}catch(i){throw Ll(i)}if(n&&n.length>0)throw Ll(new Error,QG.ROLE_ALREADY_EXISTS(e.role),Hp.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 zG.insert(s),dN.signalUserChange(new mN(process.pid)),e=lN(e),e}o(Voe,"addRole");async function Koe(e){let t=uN.alterRoleValidation(e);if(t)throw t;e=lN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await zG.update(r)}catch(s){throw Ll(s)}if(n&&n?.message==="updated 0 of 1 records")throw Ll(new Error,"Invalid role id",Hp.BAD_REQUEST,void 0,void 0,!0);return await dN.signalUserChange(new mN(process.pid)),e}o(Koe,"alterRole");async function Yoe(e){let t=uN.dropRoleValidation(e);if(t)throw Ll(new Error,t,Hp.BAD_REQUEST,void 0,void 0,!0);let r=new qoe(lS.SYSTEM_SCHEMA_NAME,lS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await koe(r));if(n.length===0)throw Ll(new Error,QG.ROLE_NOT_FOUND,Hp.NOT_FOUND,void 0,void 0,!0);let s=new Goe(lS.SYSTEM_SCHEMA_NAME,lS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await fN(s)),a=!1;if(Foe.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Ll(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Hp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Hoe(c),dN.signalUserChange(new mN(process.pid)),`${n[0].role} successfully deleted`}o(Yoe,"dropRole");async function Woe(){return fN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(Woe,"listRoles")});var pN={};Re(pN,{start:()=>eq,startOnMainThread:()=>Qoe});function eq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,XG.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(zoe.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await joe(i)}}}async function joe(e){let t=at().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,ZG.isEqual)(i,e)?void 0:(e.id=r.id,(0,uS.alterRole)(e))}return(0,uS.addRole)(e)}var uS,XG,ZG,zoe,Qoe,tq=se(()=>{we();uS=b(Gp()),XG=require("yaml"),ZG=require("lodash"),zoe=["super_user","cluster_user","structure_user"];o(eq,"start");o(joe,"ensureRole");Qoe=eq});async function dS(e){let t=(0,sq.pathToFileURL)(e).toString();if(Joe)return qp||(qp=Xoe(eae)),(await(await qp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Xoe(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),qp=new Compartment({console,Math,Date,fetch:Zoe,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,nq.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,rq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),qp}function Zoe(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 eae(){return{Resource:Hr,tables:Sn}}var rq,nq,sq,Joe,qp,hN=se(()=>{qa();we();rq=require("fs/promises"),nq=require("path"),sq=require("url"),Joe=!1;o(dS,"secureImport");o(Xoe,"getCompartment");o(Zoe,"secureOnlyFetch");o(eae,"getGlobalVars")});var EN={};Re(EN,{handleApplication:()=>tae,suppressHandleApplicationWarning:()=>rae});function iq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function tae(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}dS(t.absolutePath).then(r=>{let n=(0,fS.dirname)(t.urlPath);iq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),oq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function oq(e,t,r){for(let n in t){let s=t[n],i=(0,fS.join)(r,n);iq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&oq(e,s,i)}}var fS,rae,aq=se(()=>{hN();fS=require("path");o(iq,"isResource");o(tae,"handleApplication");o(oq,"recurseForResources");rae=!0});var gN={};Re(gN,{start:()=>nae});function nae({resources:e}){e.set("login",_N),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var _N,cq=se(()=>{qa();o(nae,"start");_N=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 pq(e){let t={openapi:sae,info:{title:"HarperDB HTTP REST interface",version:fq.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)mS[c.type]?i[c.name]=new TN(mS[c.type],c.type):c.properties?(i[c.name]=new hq(c.type),n(c)):c.elements?.properties&&(i[c.name]=new uae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new dq(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 TN(mS[H.type],H.type)}:J==="Any"?f[G]={format:J}:f[G]=new TN(mS[J],J),m.push(new yN(G,"query",f[G]))}let h=Object.keys(f),E=new yN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new yN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new dq(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 iae(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 SN(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 oae(m,r,{200:new aae},"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 uq(m,r,"delete all the records that match the provided query",{204:new lq})),k="/"+i+"/{"+d+"}",y&&(t.paths[k]={},t.paths[k].get=new SN([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 cae([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 lae([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 uq([E],r,"delete a record with the given primary key",{204:new lq})),y&&g.schema.enum.length>0&&(k="/"+i+"/{"+d+"}.{property}",t.paths[k]={},t.paths[k].get=new SN([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 iae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Gs+e}}}},this.security=t,this.responses=r}function SN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function oae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function aae(){this.description=mq,this.headers={},this.content={}}function Id(e,t){this.description=mq,this.content={"application/json":{schema:e}},this.headers=t}function lq(){this.description="successfully processed request, no content returned to client"}function cae(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 lae(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 uq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function dq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function TN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function hq(e){this.$ref=`#/components/schemas/${e}`}function uae(e){this.type="array",this.items=new hq(e)}function yN(e,t,r){this.name=e,this.in=t,this.schema=r}var fq,sae,mS,Gs,mq,Eq=se(()=>{fq=b(Ct()),sae="3.0.3",mS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Gs="#/components/schemas/",mq="successful operation";o(pq,"generateJsonApi");o(iae,"Post");o(SN,"Get");o(oae,"Options");o(aae,"ResponseOptions200");o(Id,"Response200");o(lq,"Response204");o(cae,"Put");o(lae,"Patch");o(uq,"Delete");o(dq,"ResourceSchema");o(TN,"Type");o(hq,"Ref");o(uae,"ArrayRef");o(yN,"Parameter")});var gq={};Re(gq,{Request:()=>tc,createReuseportFd:()=>pS});var _q,tc,RN,bN,pS,$p=se(()=>{_q=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 bN(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 RN(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)}},RN=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)}},bN=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,_q.platform)()!="win32"&&(pS=require("node-unix-socket").createReuseportFd)});var ES={};Re(ES,{parseHeaderValue:()=>IN,start:()=>mae});async function fae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&rg(e);let i=new Fs;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==Sq){let g=hS.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=IN(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=IN(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===Sq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return pq(hS);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,AN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=rG(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=Nm(f.data,e,f)),f}else if(isFinite(p)){dae[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),AN.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=Nm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?hi.warn(a):hi.info(a):hi.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=Nm(a.contentType?a:Rq(a),e,c),c}}function mae(e){AN=e,e.includeExpensiveRecordCountEstimates&&(tc.prototype.includeExpensiveRecordCountEstimates=!0),!Tq&&(Tq=!0,hS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return fae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{Vp++;let s=new Zn;yq||(yq=!0,qm(l=>{Vp>0&&l.push({metric:"ws-connections",connections:Vp,byThread:!0})}));let i;t.on("error",l=>{i=!0,hi.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",()=>{Vp--,Zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=hS.getMatch(l,"ws");if(Zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ve(h=>({count:h.count,total:Vp}),"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?hi.warn(l):hi.info(l):hi.error(l),t.close(pae[l.statusCode]||1011,Rq(l))}t.close()},e))}function IN(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 hi,wd,Rq,rn,dae,AN,Sq,Tq,hS,yq,Vp,pae,bq=se(()=>{Mo();rs();hi=b(Q()),wd=b(_e());ng();Ou();Ua();Op();Eq();$p();ig();({errorToString:Rq}=hi),rn=new Uint8Array(8),dae=new Float64Array(rn.buffer,0,1),AN={},Sq="openapi";o(fae,"http");Vp=0;o(mae,"start");pae={401:3e3,403:3003};o(IN,"parseHeaderValue")});var wN=v((Ave,Iq)=>{var{recordAction:_S,recordActionBinary:Aq}=(rs(),M(z_)),hae=require("fastify-plugin"),Eae=200;Iq.exports=hae(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),_S(a,"duration",u,f,d),Aq(s.raw.statusCode<400,"success",u,f,d),Aq(1,"response_"+s.raw.statusCode,u,f,d);let m=Eae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{_S(performance.now()-c,"transfer",u,f,d),_S(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,_S(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 Nq=v((Ive,wq)=>{var _ae=ft(),gae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};wq.exports=function(e){return _ae.validateObject(e,gae)}});var gS=v((wve,Cq)=>{"use strict";var Sae=(q(),M(z)).OPERATIONS_ENUM,NN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Sae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Cq.exports=NN});var Wp={};Re(Wp,{createTokens:()=>PN,getJWTRSAKeys:()=>bS,refreshOperationToken:()=>LN,validateOperationToken:()=>DN,validateRefreshToken:()=>AS});async function bS(){if(SS)return SS;try{let e=Kp.default.join(Yp.default.getHdbBasePath(),Eb),t=await TS.default.readFile(Kp.default.join(e,om.JWT_PASSPHRASE_NAME),"utf8"),r=await TS.default.readFile(Kp.default.join(e,om.JWT_PRIVATE_KEY_NAME),"utf8");return SS={publicKey:await TS.default.readFile(Kp.default.join(e,om.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},SS}catch(e){throw RS.default.error(e),new Ei.ClientError(Cd.NO_ENCRYPTION_KEYS,Nd.INTERNAL_SERVER_ERROR)}}async function PN(e){let t=(0,CN.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 Ei.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,ON.findAndValidateUser)(e.username,e.password,f)}catch(f){throw RS.default.error(f),new Ei.ClientError(Cd.INVALID_CREDENTIALS,Nd.UNAUTHORIZED)}if(!r)throw new Ei.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 bS(),c=await Od.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??Mq,algorithm:yS,subject:Pd.OPERATION}),l=await Od.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Tae,algorithm:yS,subject:Pd.REFRESH}),u=pw(l,Gr.SHA256);if((await(0,Oq.update)(new Pq.default(sm,Au.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Ei.ClientError(Cd.REFRESH_TOKEN_SAVE_FAILED,Nd.INTERNAL_SERVER_ERROR);return Lq.default.signalUserChange(new Dq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function LN(e){let t=(0,CN.validateBySchema)(e,so.default.object({refresh_token:so.default.string().required()}).required());if(t)throw new Ei.ClientError(t.message);let{refresh_token:r}=e;await AS(r);let n=await bS(),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:Mq,algorithm:yS,subject:Pd.OPERATION})}}async function DN(e){return vq(e,Pd.OPERATION)}async function AS(e){return vq(e,Pd.REFRESH)}async function vq(e,t){try{let r=await bS(),n=await Od.default.verify(e,r.publicKey,{algorithms:yS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,ON.findAndValidateUser)(n.username,void 0,!1);if(t===Pd.REFRESH&&!hw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw RS.default.warn(r),r?.name==="TokenExpiredError"?new Ei.ClientError(Cd.TOKEN_EXPIRED,Nd.FORBIDDEN):new Ei.ClientError(Cd.INVALID_TOKEN,Nd.UNAUTHORIZED)}}var Od,TS,Kp,so,CN,Ei,RS,ON,Oq,Pq,Lq,Dq,Yp,Nd,Cd,Mq,Tae,yS,Pd,SS,Ld=se(()=>{Od=b(require("jsonwebtoken")),TS=b(require("fs-extra")),Kp=b(require("node:path")),so=b(require("joi")),CN=b(ft());q();Ei=b(_e()),RS=b(Q());_w();ON=b(ds()),Oq=b(Gn()),Pq=b(gS()),Lq=b(Go()),Dq=b(os()),Yp=b(me()),{HTTP_STATUS_CODES:Nd,AUTHENTICATION_ERROR_MSGS:Cd}=Ei.hdbErrors;Yp.default.initSync();Mq=Yp.default.get(F.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Tae=Yp.default.get(F.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",yS="RS256",Pd={OPERATION:"operation",REFRESH:"refresh"};o(bS,"getJWTRSAKeys");o(PN,"createTokens");o(LN,"refreshOperationToken");o(DN,"validateOperationToken");o(AS,"validateRefreshToken");o(vq,"validateToken")});var MN=v((Lve,Bq)=>{"use strict";var yae=Nq(),Dd=require("passport"),Rae=require("passport-local").Strategy,bae=require("passport-http").BasicStrategy,Aae=require("util"),Iae=ds(),xq=Aae.callbackify(Iae.findAndValidateUser),Pve=zr(),wae=(q(),M(z)),Uq=(Ld(),M(Wp));Dd.use(new Rae(function(e,t,r){xq(e,t,r)}));Dd.use(new bae(function(e,t,r){xq(e,t,r)}));Dd.serializeUser(function(e,t){t(null,e)});Dd.deserializeUser(function(e,t){t(null,e)});function Nae(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===wae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Uq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):Uq.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(Nae,"authorize");function Cae(e,t){let r=yae(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(Cae,"checkPermissions");Bq.exports={authorize:Nae,checkPermissions:Cae}});var kN=v((Uve,Gq)=>{var CS=require("clone"),OS=ft(),Oae=ae(),wS=(q(),M(z)),Mve=Q(),vN=require("fs"),xN=require("joi"),{string:NS}=xN.types(),{hdbErrors:Pae,handleHDBError:IS}=_e(),{HDB_ERROR_MSGS:vve,HTTP_STATUS_CODES:UN}=Pae,{commonValidators:Md}=Ki(),Fq=" is required",Lae=["insert","update","upsert"],BN={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:Lae,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Dae={schema:NS.required(),table:NS.required(),action:NS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Mae,AWS_SECRET:vae,AWS_BUCKET:Uae,AWS_FILE_KEY:xae,REGION:Bae}=wS.S3_BUCKET_AUTH_KEYS,Fae={s3:{presence:!0},[`s3.${Mae}`]:{presence:!0,type:"String"},[`s3.${vae}`]:{presence:!0,type:"String"},[`s3.${Uae}`]:{presence:!0,type:"String"},[`s3.${xae}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Bae}`]:{presence:!0,type:"String"}},kq=CS(BN);kq.data.presence={message:Fq};var Hq=CS(BN);Hq.file_path.presence={message:Fq};var kae=Object.assign(CS(BN),Fae),FN=CS(Dae);FN.csv_url=NS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();FN.passthrough_headers=xN.object();function Hae(e){let t=OS.validateObject(e,kq);return PS(e,t)}o(Hae,"dataObject");function Gae(e){let t=OS.validateBySchema(e,xN.object(FN));return PS(e,t)}o(Gae,"urlObject");function qae(e){let t=OS.validateObject(e,Hq);return PS(e,t)}o(qae,"fileObject");function $ae(e){let t=OS.validateObject(e,kae);return PS(e,t)}o($ae,"s3FileObject");function PS(e,t){if(!t){let r=Oae.checkGlobalSchemaTable(e.schema,e.table);if(r)return IS(new Error,r,UN.BAD_REQUEST);if(e.operation===wS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{vN.accessSync(e.file_path,vN.constants.R_OK|vN.constants.F_OK)}catch(n){return n.code===wS.NODE_ERROR_CODES.ENOENT?IS(n,`No such file or directory ${n.path}`,UN.BAD_REQUEST):n.code===wS.NODE_ERROR_CODES.EACCES?IS(n,`Permission denied ${n.path}`,UN.BAD_REQUEST):IS(n)}}return t}o(PS,"postValidateChecks");Gq.exports={dataObject:Hae,urlObject:Gae,fileObject:qae,s3FileObject:$ae}});var HN=v((Bve,qq)=>{"use strict";var zp=Q(),LS=(q(),M(z));async function Vae(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===LS.OPERATIONS_ENUM.INSERT||t.operation===LS.OPERATIONS_ENUM.UPDATE||t.operation===LS.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===LS.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(zp.info(i.message),i):i.http_resp_msg?(zp.error(`Error calling operation: ${e.name}`),zp.error(i.http_resp_msg),i):(zp.error(`Error calling operation: ${e.name}`),zp.error(i),i)}}o(Vae,"callOperationFunctionAsAwait");qq.exports={callOperationFunctionAsAwait:Vae}});var GN=v((kve,Vq)=>{"use strict";var{S3:Kae,GetObjectCommand:Yae}=require("@aws-sdk/client-s3");Vq.exports={getFileStreamFromS3:Wae,getS3AuthObj:$q};async function Wae(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await $q(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Yae(r))).Body}o(Wae,"getFileStreamFromS3");function $q(e,t,r){return new Kae({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o($q,"getS3AuthObj")});var Yq=v((Gve,Kq)=>{"use strict";var qN=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}},$N=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Kq.exports={BulkLoadFileObject:qN,BulkLoadDataObject:$N}});var zq=v(($ve,Wq)=>{"use strict";var VN=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}};Wq.exports=VN});var Qq=v((Kve,jq)=>{"use strict";var KN=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};jq.exports=KN});var WN=v((Wve,Xq)=>{"use strict";var Jq=zq(),zae=Qq(),{HDB_ERROR_MSGS:jae}=zr(),YN=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=jae.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new Jq(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new zae(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 Jq(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}};Xq.exports=YN});var Dl=v((Qve,r$)=>{"use strict";var jve=_n(),jp=Q(),{validateBySchema:Zq}=ft(),Wo=require("joi"),Qae=Xi(),DS=ae(),{handleHDBError:MS,hdbErrors:Jae,ClientError:e$}=_e(),{HDB_ERROR_MSGS:vS,HTTP_STATUS_CODES:zN}=Jae,t$=me();t$.initSync();var{getDatabases:jN}=(we(),M(mt)),Xae=require("fs-extra"),Zae=(q(),M(z));r$.exports={describeAll:ece,describeTable:US,describeSchema:tce};async function ece(e={}){try{let t=DS.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=jN(),a={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){a[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await US({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 US({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){jp.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 jp.error("Got an error in describeAll"),jp.error(t),MS(new Error,vS.DESCRIBE_ALL_ERR)}}o(ece,"describeAll");async function US(e,t){DS.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=Zq(e,Wo.object({database:Wo.string(),table:Wo.string().required(),exact_count:Wo.boolean().strict(),include_computed:Wo.boolean().strict()}));if(i)throw new e$(i.message);let c=jN()[r];if(!c)throw MS(new Error,vS.SCHEMA_NOT_FOUND(e.schema),zN.NOT_FOUND);let l=c[n];if(!l)throw MS(new Error,vS.TABLE_NOT_FOUND(e.schema,e.table),zN.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 Xae.stat(l.primaryStore.env.path)).size}catch(p){jp.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")),t$.get(Zae.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Qae.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){jp.warn(`unable to stat table dbi due to ${p}`)}return m}o(US,"descTable");async function tce(e){DS.transformReq(e);let t=Zq(e,Wo.object({database:Wo.string(),exact_count:Wo.boolean().strict(),include_computed:Wo.boolean().strict()}));if(t)throw new e$(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=jN()[n];if(!i)throw MS(new Error,vS.SCHEMA_NOT_FOUND(e.schema),zN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),DS.isEmpty(l)||l.describe){let u=await US({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(tce,"describeSchema")});var a$=v((Xve,o$)=>{"use strict";var rce=Dl(),{hdbErrors:n$}=_e(),{getDatabases:s$}=(we(),M(mt));o$.exports={checkSchemaExists:i$,checkSchemaTableExists:nce,schemaDescribe:rce};async function i$(e){if(!s$()[e])return n$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(i$,"checkSchemaExists");async function nce(e,t){let r=await i$(e);if(r)return r;if(!s$()[e][t])return n$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(nce,"checkSchemaTableExists")});var xS=v((eUe,c$)=>{"use strict";var sce=ls();c$.exports={writeTransaction:ice};function ice(e,t,r){return sce.writeTransaction(e,t,r)}o(ice,"writeTransaction")});var eC=v((iUe,T$)=>{"use strict";var{decode:oce}=require("msgpackr"),{isMainThread:rUe,parentPort:nUe,threadId:sUe}=require("worker_threads"),kS=hr(),vd=Pt(),XN=(q(),M(z)),Tn=Q(),JN=me(),ace=(q(),M(z)),{onMessageByType:cce}=nt(),f$=Xi(),{recordAction:l$,recordActionBinary:lce}=(rs(),M(z_)),{publishToStream:uce}=kS,{ConsumerEvents:u$}=require("nats"),dce=_n(),{promisify:fce}=require("util"),{decodeBlobsWithWrites:mce}=(ts(),M(L_)),m$=fce(setTimeout),HS=1e4,GS,FS,pce,hce,p$,Qp=new Map,Ud=new Map;T$.exports={initialize:h$,ingestConsumer:ZN,setSubscription:Ece,setIgnoreOrigin:Sce,getDatabaseSubscriptions:gce,updateConsumer:E$};async function h$(){cce(XN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await E$(n)}),p$=!0,Tn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await kS.getNATSReferences();GS=e,FS=e.info.server_name,pce=t,hce=r}o(h$,"initialize");async function E$(e){if(e.status==="start"){let{js:t,jsm:r}=await _$(e.node_domain_name);ZN(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Qp.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?.(),Qp.set(e.stream_name+e.node_domain_name,"close")),Ud.get(e.node_domain_name)==="failed"&&Ud.set(e.node_domain_name,"close")}}o(E$,"updateConsumer");var qS=new Map;function Ece(e,t,r){let n=qS.get(e);n||qS.set(e,n=new Map),n.set(t,r),p$||h$().then(_ce)}o(Ece,"setSubscription");async function _ce(){let e=await dce.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 _$(r),!n))break;let{schema:a,table:c}=i,l=f$.createNatsTableStreamName(a,c);ZN(l,n,s,r)}}}o(_ce,"accessConsumers");async function _$(e){let t,r,n=1;for(;!r;)try{t=await GS.jetstream({domain:e}),r=await GS.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<HS?n++*100:HS;await m$(i)}return{js:t,jsm:r}}o(_$,"connectToRemoteJS");function gce(){return qS}o(gce,"getDatabaseSubscriptions");var g$;function Sce(e){g$=e}o(Sce,"setIgnoreOrigin");var S$=100,d$=new Array(S$),BS=0;async function ZN(e,t,r,n){let{connection:s}=await kS.getNATSReferences();GS=s,FS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,FS),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 kS.createConsumer(r,e,FS,new Date(Date.now()).toISOString()));let d=a++*100<HS?a++*100:HS;await m$(d)}let c=!1,l;for(;!c;){if(Qp.get(e+n)==="close"||Ud.get(n)==="close"){Qp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:JN.get(XN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Qp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===u$.ConsumerDeleted&&(await l.close(),c=!0),d.type===u$.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 d$[BS],d$[BS]=Tce(d).catch(f=>{Tn.error(f)}),++BS>=S$&&(BS=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(ZN,"ingestConsumer");async function Tce(e){let t;await mce(()=>{t=oce(e.data)}),l$(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=JN.get(XN.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&&!g$),lce(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=qS.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:QN(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:QN(a),value:k,expiresAt:p,id:f?.[J],table:u}));for(;l;)I.push({type:QN(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})}JN.get(ace.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&uce(e.subject.split(".").slice(0,-1).join("."),f$.createNatsTableStreamName(c,u),e.headers,e.data),await E;let C=Date.now()-g;g&&l$(C,"replication-latency",e.subject,a,"ingest")}catch(a){Tn.error(a)}e.ack()}o(Tce,"messageProcessor");function QN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(QN,"convertOperation")});var hr=v((fUe,B$)=>{"use strict";var Vr=me();Vr.initSync();var yce=require("fs-extra"),Rce=require("semver"),Zp=require("path"),{monotonicFactory:bce}=require("ulidx"),R$=bce(),Ace=require("util"),b$=require("child_process"),Ice=Ace.promisify(b$.exec),wce=b$.spawn,nn=Pt(),rt=(q(),M(z)),{packageJson:Nce,PACKAGE_ROOT:Cce}=Ct(),$S=ae(),_i=Q(),VS=Xi(),Oce=xS(),Jp=gt(),{broadcast:Pce,onMessageByType:Lce,getWorkerIndex:Dce}=nt(),{isMainThread:A$}=require("worker_threads"),{Encoder:Mce,decode:sC}=require("msgpackr"),I$=new Mce,{isEmpty:xl}=$S,w$=ds(),aUe=48*36e11;A$&&Lce(rt.ITC_EVENT_TYPES.RESTART,()=>{yn=void 0,Ul=void 0});var{connect:vce,StorageType:Uce,RetentionPolicy:xce,AckPolicy:iC,DeliverPolicy:oC,DiscardPolicy:Bce,NatsConnection:cUe,JetStreamManager:lUe,JetStreamClient:uUe,StringCodec:dUe,JSONCodec:Fce,createInbox:aC,headers:kce,ErrorCode:y$}=require("nats"),{recordAction:Hce}=(rs(),M(z_)),{encodeBlobsAsBuffers:Gce}=(ts(),M(L_)),N$=Fce(),qce="clustering",$ce=Nce.engines[nn.NATS_SERVER_NAME],Vce=Zp.join(Cce,"dependencies"),nC=Zp.join(Vce,`${process.platform}-${process.arch}`,nn.NATS_BINARY_NAME),tC,rC,Xp,Ml,vl;B$.exports={runCommand:C$,checkNATSServerInstalled:Kce,createConnection:cC,getConnection:eh,getJetStreamManager:th,getJetStream:P$,getNATSReferences:io,getServerList:Wce,createLocalStream:lC,listStreams:L$,deleteLocalStream:zce,getServerConfig:xd,listRemoteStreams:jce,viewStream:Qce,viewStreamIterator:Jce,publishToStream:Xce,request:tle,reloadNATS:uC,reloadNATSHub:rle,reloadNATSLeaf:nle,extractServerName:ele,requestErrorHandler:sle,createLocalTableStream:U$,createTableStreams:ale,purgeTableStream:x$,purgeSchemaTableStreams:cle,getStreamInfo:lle,updateLocalStreams:dle,closeConnection:Yce,getJsmServerName:KS,addNatsMsgHeader:D$,clearClientCache:O$,updateRemoteConsumer:ile,createConsumer:M$,updateConsumerIterator:ole};async function C$(e,t=void 0){let{stdout:r,stderr:n}=await Ice(e,{cwd:t});if(n)throw new Error(n.replace(`
16
16
  `,""));return r.replace(`
17
17
  `,"")}o(C$,"runCommand");async function Kce(){try{await yce.access(nC)}catch{return!1}let e=await C$(`${nC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Rce.eq(t,$ce)}o(Kce,"checkNATSServerInstalled");async function cC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await w$.getClusterUser();if(xl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}_i.trace("create nats connection called");let i=await vce({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(),_i.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&_i.error("Error with Nats client connection, connection closed",a),i===yn&&O$()}),i}o(cC,"createConnection");function O$(){yn=void 0,Ml=void 0,vl=void 0,Ul=void 0}o(O$,"clearClientCache");async function Yce(){yn&&(await yn.drain(),yn=void 0,Ml=void 0,vl=void 0,Ul=void 0)}o(Yce,"closeConnection");var yn,Ul;async function eh(){return Ul||(Ul=cC(Vr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),yn=await Ul),yn||Ul}o(eh,"getConnection");async function th(){if(Ml)return Ml;xl(yn)&&await eh();let{domain:e}=xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(xl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ml=await yn.jetstreamManager({domain:e,timeout:6e4}),Ml}o(th,"getJetStreamManager");async function P$(){if(vl)return vl;xl(yn)&&await eh();let{domain:e}=xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(xl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return vl=yn.jetstream({domain:e,timeout:6e4}),vl}o(P$,"getJetStream");async function io(){let e=yn||await eh(),t=Ml||await th(),r=vl||await P$();return{connection:e,jsm:t,js:r}}o(io,"getNATSReferences");async function Wce(e){let t=Vr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await w$.getClusterUser(),s=await cC(t,r,n),i=aC(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=N$.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 $S.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Wce,"getServerList");async function lC(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:Uce.File,retention:xce.Limits,subjects:t,discard:Bce.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(lC,"createLocalStream");async function L$(){let{jsm:e}=await io(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(L$,"listStreams");async function zce(e){let{jsm:t}=await io();await t.streams.delete(e)}o(zce,"deleteLocalStream");async function jce(e){let{connection:t}=await io(),r=[],n=aC(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(N$.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(jce,"listRemoteStreams");async function Qce(e,t=void 0,r=void 0){let{jsm:n,js:s}=await io(),i=R$(),a={durable_name:i,ack_policy:iC.Explicit};t&&(a.deliver_policy=oC.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=sC(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(Qce,"viewStream");async function*Jce(e,t=void 0,r=void 0){let{jsm:n,js:s}=await io(),i=R$(),a={durable_name:i,ack_policy:iC.Explicit};t&&(a.deliver_policy=oC.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=sC(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(Jce,"viewStreamIterator");async function Xce(e,t,r,n){_i.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=D$(n,r);let{js:s}=await io(),i=await KS(),a=`${e}.${i}`,c=await Gce(()=>n instanceof Uint8Array?n:I$.encode(n));try{_i.trace(`publishToStream publishing to subject: ${a}`),Hce(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 v$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){_i.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await lC(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Xce,"publishToStream");function D$(e,t){t===void 0&&(t=kce());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(D$,"addNatsMsgHeader");function xd(e){e=e.toLowerCase();let t=Zp.join(Vr.get(rt.CONFIG_PARAMS.ROOTPATH),qce);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return xl(rC)&&(rC={port:Jp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Jp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+nn.SERVER_SUFFIX.HUB,config_file:nn.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Zp.join(t,nn.PID_FILES.HUB),hdbNatsPath:t}),rC;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return xl(tC)&&(tC={port:Jp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Jp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+nn.SERVER_SUFFIX.LEAF,config_file:nn.NATS_CONFIG_FILES.LEAF_SERVER,domain:Jp.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+nn.SERVER_SUFFIX.LEAF,pid_file_path:Zp.join(t,nn.PID_FILES.LEAF),hdbNatsPath:t}),tC;_i.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(xd,"getServerConfig");async function M$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:iC.Explicit,durable_name:r,deliver_policy:oC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(M$,"createConsumer");async function Zce(e,t,r){await e.consumers.delete(t,r)}o(Zce,"removeConsumer");function ele(e){return e.split(".")[1]}o(ele,"extractServerName");async function tle(e,t,r=6e4,n=aC()){if(!$S.isObject(t))throw new Error("data param must be an object");let s=I$.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 sC(c.data)}o(tle,"request");function uC(e){return new Promise(async(t,r)=>{let n=wce(nC,["--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(uC,"reloadNATS");async function rle(){let{pid_file_path:e}=xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await uC(e)}o(rle,"reloadNATSHub");async function nle(){let{pid_file_path:e}=xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await uC(e)}o(nle,"reloadNATSLeaf");function sle(e,t,r){let n;switch(e.code){case y$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case y$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(sle,"requestErrorHandler");async function ile(e,t){let r=t+nn.SERVER_SUFFIX.LEAF,{connection:n}=await io(),{jsm:s}=await mle(r),{schema:i,table:a}=e,c=VS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await v$(async()=>{if(e.subscribe===!0)await M$(s,c,n.info.server_name,l);else try{await Zce(s,c,n.info.server_name)}catch(u){_i.trace(u)}})}o(ile,"updateRemoteConsumer");async function ole(e,t,r,n){let s=VS.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(!A$&&Dce()<Vr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=eC();await c(a)}await Pce(a),n==="stop"&&await $S.asyncSetTimeout(1e3)}o(ole,"updateConsumerIterator");function v$(e){return Oce.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(v$,"exclusiveLock");async function U$(e,t){let r=VS.createNatsTableStreamName(e,t),n=await KS(),s=ule(e,t,n);await lC(r,[s])}o(U$,"createLocalTableStream");async function ale(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await U$(n,s)}}o(ale,"createTableStreams");async function x$(e,t,r=void 0){if(Vr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=VS.createNatsTableStreamName(e,t),{domain:s}=xd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await eh()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")_i.warn(n);else throw n}}o(x$,"purgeTableStream");async function cle(e,t){if(Vr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await x$(e,t[r])}o(cle,"purgeSchemaTableStreams");async function lle(e){return(await th()).streams.info(e)}o(lle,"getStreamInfo");function ule(e,t,r){return`${nn.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(ule,"createSubjectName");async function KS(){if(Xp)return Xp;if(Xp=(await th())?.nc?.info?.server_name,Xp===void 0)throw new Error("Unable to get jetstream manager server name");return Xp}o(KS,"getJsmServerName");async function dle(){let e=await th(),t=await KS(),r=await L$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=fle(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(".");_i.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(dle,"updateLocalStreams");function fle(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(fle,"updateStreamLimits");async function mle(e){let t,r;try{t=await yn.jetstream({domain:e}),r=await yn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw _i.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(mle,"connectToRemoteJS")});function dC(e){let t=e.get(YS),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:nh(e)??1,nodes:[]})})}i[n]=0,e.putSync(YS,(0,Bd.pack)(r))}return r}function rh(e){return dC(e).remoteNameToId}function k$(e,t){let r=dC(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(YS,(0,Bd.pack)(r)),s}function WS(e,t){let r=dC(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(YS,(0,Bd.pack)(r))}return F$.trace?.("The remote node name map",e,n,s),s}var F$,Bd,YS,fC=se(()=>{F$=b(es());ps();Bd=require("msgpackr"),YS=Symbol.for("remote-ids");o(dC,"getIdMappingRecord");o(rh,"exportIdMapping");o(k$,"remoteToLocalNodeId");o(WS,"getIdOfRemoteNode")});var K$={};Re(K$,{commitsAwaitingReplication:()=>kd,getHDBNodeTable:()=>jt,getReplicationSharedStatus:()=>Hd,iterateRoutes:()=>ih,shouldReplicateToNode:()=>sh,subscribeToNodeUpdates:()=>Gd});function jt(){return H$||(H$=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;V$.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 sh(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 ple(){Gd(e=>{rc({},(t,r)=>{let n=e.name,s=G$.get(n);if(s||G$.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*ih(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){q$.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 q$,$$,Fd,V$,H$,G$,kd,qd=se(()=>{we();ps();ym();q$=require("worker_threads"),$$=b(_e()),Fd=b(me());q();V$=b(es());server.nodes=[];o(jt,"getHDBNodeTable");o(Hd,"getReplicationSharedStatus");o(Gd,"subscribeToNodeUpdates");o(sh,"shouldReplicateToNode");G$=new Map;mU((e,t,r)=>{if(r>server.nodes.length)throw new $$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);kd||(kd=new Map,ple());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(ple,"startSubscriptionToReplications");o(ih,"iterateRoutes")});var Q$={};Re(Q$,{connectedToNode:()=>Bl,disconnectedFromNode:()=>Vd,ensureNode:()=>zo,requestClusterStatus:()=>j$,startOnMainThread:()=>mC});async function mC(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){zS.set(i,nh(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 ih(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}];zS.has(f)&&oh.default.get(F.REPLICATION_FAILOVER)&&(E.push({replicateByDefault:m,name:it(),startTime:zS.get(f),endTime:Date.now(),replicates:!0}),zS.delete(f));let g=sh(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):ah(S)},hle);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):QS(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||gi(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||!oh.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}):ah({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"),Bl=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(!oh.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",Bl),(0,ao.onMessageByType)("request-cluster-status",j$)}function j$(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=W$(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??gi(t.url),t.name=e;try{if(t.ca){let s=new z$.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&&!oh.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=W$(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,jS,ut,Y$,oh,z$,W$,hle,oo,Vd,Bl,$d,zS,ch=se(()=>{we();ao=b(nt());ps();jS=require("worker_threads");qd();ut=b(Q()),Y$=b(require("lodash")),oh=b(me());q();z$=require("crypto"),{cloneDeep:W$}=Y$.default,hle=200,oo=new Map,$d=new Map,zS=new Map;o(mC,"startOnMainThread");o(j$,"requestClusterStatus");jS.parentPort&&(Vd=o(e=>{jS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Bl=o(e=>{jS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,ao.onMessageByType)("subscribe-to-node",e=>{ah(e)}),(0,ao.onMessageByType)("unsubscribe-from-node",e=>{QS(e)}));o(zo,"ensureNode")});var Es=v(Gt=>{"use strict";var Er=require("path"),{watch:Ele}=require("chokidar"),$n=require("fs-extra"),Kd=require("node-forge"),rV=require("net"),{generateKeyPair:pC,X509Certificate:jo,createPrivateKey:nV,randomBytes:_le}=require("node:crypto"),gle=require("util");pC=gle.promisify(pC);var Lt=Kd.pki,Si=require("joi"),{v4:sV}=require("uuid"),{validateBySchema:gC}=ft(),{forComponent:Sle}=Q(),hs=me(),qs=(q(),M(z)),{CONFIG_PARAMS:kl}=qs,Ti=yb(),{ClientError:sc}=_e(),XS=require("node:tls"),{relative:iV,join:Tle}=require("node:path"),{CERTIFICATE_VALUES:J$}=Ti,yle=$c(),hC=gt(),{table:Rle,getDatabases:ble,databases:JS}=(we(),M(mt)),{getJWTRSAKeys:X$}=(Ld(),M(Wp)),Qe=Sle("tls").conditional;Gt.generateKeys=yC;Gt.updateConfigCert=mV;Gt.createCsr=Ple;Gt.signCertificate=Lle;Gt.setCertTable=Yd;Gt.loadCertificates=uV;Gt.reviewSelfSignedCert=bC;Gt.createTLSSelector=hV;Gt.listCertificates=_V;Gt.addCertificate=Ble;Gt.removeCertificate=kle;Gt.createNatsCerts=vle;Gt.generateCertsKeys=Mle;Gt.getReplicationCert=uh;Gt.getReplicationCertAuth=Ole;Gt.renewSelfSigned=Ule;Gt.hostnamesFromCert=IC;Gt.getKey=Hle;Gt.getHostnamesFromCertificate=Gle;Gt.getPrimaryHostName=AC;Gt.generateSerialNumber=tT;var{urlToNodeName:oV,getThisNodeUrl:Ale,getThisNodeName:eT,clearThisNodeName:Ile}=(ps(),M(Qo)),{readFileSync:wle,statSync:aV}=require("node:fs"),OUe=me(),{getTicketKeys:Nle,onMessageFromWorkers:Cle}=nt(),{isMainThread:cV}=require("worker_threads"),{TLSSocket:lV,createSecureContext:PUe}=require("node:tls"),SC=3650,lh=["127.0.0.1","localhost","::1"],TC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function tT(){let e=_le(8);return e[0]=e[0]&127|1,e.toString("hex")}o(tT,"generateSerialNumber");Cle(async e=>{e.type===qs.ITC_EVENT_TYPES.RESTART&&(hs.initSync(!0),await bC())});var sn;function oc(){return sn||(sn=ble().system.hdb_certificate,sn||(sn=Rle({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 uh(){let e=hV("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(eT());if(!r)return;let n=new jo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(uh,"getReplicationCert");async function Ole(){oc();let e=(await uh()).options.cert,r=new jo(e).issuer.match(/CN=(.*)/)?.[1];return sn.get(r)}o(Ole,"getReplicationCertAuth");var Z$,ic=new Map;function uV(){if(Z$)return;Z$=!0;let e=[{configKey:kl.TLS},{configKey:kl.OPERATIONSAPI_TLS}];oc();let t=Er.dirname(hC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=hC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&iV(Tle(t,"keys"),a);c&&eV(a,l=>{ic.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&cV){let d;eV(u,f=>{if(J$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=pV(u),h=new jo(p),E;try{E=AC(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(J$.cert)))return;let g=sn.primaryStore.get(E),R=aV(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(uV,"loadCertificates");function eV(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&cV&&Qe.warn?.(`Reloading ${r}:`,i),n=c,t(pV(i)))}catch(c){Qe.error?.(`Error loading ${r}:`,i,c)}},"loadFile");$n.existsSync(e)?s(e,aV(e)):Qe.error?.(`${r} file not found:`,e),Ele(e,{persistent:!1}).on("change",s)}o(eV,"loadAndWatch");function EC(){let e=Ale();if(e==null){let t=lh[0];return Qe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return oV(e)}o(EC,"getHost");function ZS(){let e=eT();if(e==null){let t=lh[0];return Qe.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(ZS,"getCommonName");async function Ple(){let e=await uh(),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:ZS()},...TC];Qe.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:dV()}];return Qe.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Kd.pki.certificationRequestToPem(n)}o(Ple,"createCsr");function dV(){let e=lh.includes(ZS())?lh:[...lh,ZS()];return e.includes(EC())||e.push(EC()),[{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=>rV.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(dV,"certExtensions");async function Lle(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 $n.exists(Er.join(r,d.private_key_name))){n=$n.readFile(Er.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await _C();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=tT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+SC),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(Lle,"signCertificate");async function Dle(e,t){await Yd({name:eT(),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(Dle,"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 yC(){let e=await pC("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(yC,"generateKeys");async function RC(e,t,r){let n=Lt.createCertificate();if(!t){let a=await uh();t=Lt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber=tT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+SC);let i=[{name:"commonName",value:ZS()},...TC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(dV()),n.sign(e,Kd.md.sha256.create()),Lt.certificateToPem(n)}o(RC,"generateCertificates");async function _C(){let e=await _V(),t;for(let r of e){if(!r.is_authority)continue;let n=await EV(r.private_key_name);if(r.private_key_name&&n&&new jo(r.certificate).checkPrivateKey(nV(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(_C,"getCertAuthority");async function fV(e,t,r=!0){let n=Lt.createCertificate();n.publicKey=t,n.serialNumber=tT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+SC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${hs.get(kl.REPLICATION_HOSTNAME)??oV(hs.get(kl.REPLICATION_URL))??sV().split("-")[0]}`},...TC];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,Ti.PRIVATEKEY_PEM_NAME);return r&&await $n.writeFile(c,Lt.privateKeyToPem(e)),n}o(fV,"generateCertAuthority");async function Mle(){let{privateKey:e,publicKey:t}=await yC(),r=await fV(e,t),n=await RC(e,t,r);await Dle(n,r),mV()}o(Mle,"generateCertsKeys");async function vle(){let e=await RC(Lt.privateKeyFromPem(Ti.CERTIFICATE_VALUES.key),void 0,Lt.certificateFromPem(Ti.CERTIFICATE_VALUES.cert)),t=Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),r=Er.join(t,Ti.NATS_CERTIFICATE_PEM_NAME);await $n.exists(r)||await $n.writeFile(r,e);let n=Er.join(t,Ti.NATS_CA_PEM_NAME);await $n.exists(n)||await $n.writeFile(n,Ti.CERTIFICATE_VALUES.cert)}o(vle,"createNatsCerts");async function Ule(){oc();for await(let e of sn.search([{attribute:"is_self_signed",value:!0}]))await sn.delete(e.name);await bC()}o(Ule,"renewSelfSigned");async function bC(){Ile(),await uV(),oc();let e=await _C();if(!e){Qe.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Lt.privateKeyFromPem($n.readFileSync(u)),keyPath:u}}catch(d){return Qe.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=hs.get(kl.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(kl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),c=iV(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 yC(),$n.existsSync(Er.join(a,Ti.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${sV().split("-")[0]}.pem`),await $n.writeFile(Er.join(a,c),Lt.privateKeyToPem(s)));let l=await fV(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 uh()){let r=eT();Qe.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await _C();let n=Lt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await RC(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(bC,"reviewSelfSignedCert");function mV(){let e=yle(Object.keys(qs.CONFIG_PARAM_MAP),!0),t=Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME),r=Er.join(t,Ti.PRIVATEKEY_PEM_NAME),n=Er.join(t,Ti.NATS_CERTIFICATE_PEM_NAME),s=Er.join(t,Ti.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),hC.updateConfigValue(void 0,void 0,a,!1,!0)}o(mV,"updateConfigCert");function pV(e){return e.startsWith("-----BEGIN")?e:wle(e,"utf8")}o(pV,"readPEM");var tV=XS.createSecureContext;XS.createSecureContext=function(e){if(!e.cert||!e.key)return tV(e);let t={...e};delete t.key,delete t.cert;let r=tV(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var xle=lV.prototype._init;lV.prototype._init=function(e,t){xle.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 Fl=new Map;function hV(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(),Fl.clear();let d=0;if(JS===void 0){c();return}for await(let f of JS.system.hdb_certificate.search([])){let m=f.certificate,p=new jo(m);f.is_authority&&(p.asString=m,Fl.set(p.subject,m))}for await(let f of JS.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 EV(f.private_key_name),E=f.certificate,g=new jo(E);if(Fl.has(g.issuer)&&(E+=`
18
18
  `+Fl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:Nle(),availableCAs:Fl,ca:t&&Array.from(Fl.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??IC(g);Array.isArray(S)||(S=[S]);for(let I of S)I===EC()&&(p+=1);let y=XS.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Fl),y.certStart=E.toString().slice(0,100);let C;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),rV.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",XS.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"),JS?.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(hV,"createTLSSelector");async function EV(e){let t=ic.get(e);return!t&&e?await $n.readFile(Er.join(hs.get(kl.ROOTPATH),qs.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(EV,"getPrivateKeyByName");async function _V(){oc();let e=[];for await(let t of sn.search([]))e.push(t);return e}o(_V,"listCertificates");async function Ble(e){let t=gC(e,Si.object({name:Si.string().required(),certificate:Si.string().required(),is_authority:Si.boolean().required(),private_key:Si.string(),hosts:Si.array(),uses:Si.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(nV(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=AC(a)}catch(p){Qe.error?.(p)}if(d==null)throw new sc("Error extracting certificate host name, please provide a name parameter")}let f=Fle(r??d);s&&!c&&!l&&(await $n.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(Ble,"addCertificate");function Fle(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(Fle,"sanitizeName");async function kle(e){let t=gC(e,Si.object({name:Si.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 $n.remove(Er.join(hs.getHdbBasePath(),qs.LICENSE_KEY_DIR_NAME,s)))}return await sn.delete(r),"Successfully removed "+r}o(kle,"removeCertificate");function AC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||IC(e)[0]}o(AC,"getPrimaryHostName");function IC(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(IC,"hostnamesFromCert");async function Hle(e){if(e.bypass_auth!==!0)throw new sc("Unauthorized","401");let t=gC(e,Si.object({name:Si.string().required()}));if(t)throw new sc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await X$()).privateKey;if(r===".jwtPublic")return(await X$()).publicKey;if(ic.get(r))return ic.get(e.name);throw new sc("Key not found")}o(Hle,"getKey");function Gle(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(Gle,"getHostnamesFromCertificate")});var qV={};Re(qV,{BACK_PRESSURE_RATIO_POSITION:()=>kV,CONFIRMATION_STATUS_POSITION:()=>FV,LATENCY_POSITION:()=>cT,NodeReplicationConnection:()=>zd,OPERATION_REQUEST:()=>PC,RECEIVED_TIME_POSITION:()=>DC,RECEIVED_VERSION_POSITION:()=>LC,RECEIVING_STATUS_POSITION:()=>MC,RECEIVING_STATUS_RECEIVING:()=>GV,RECEIVING_STATUS_WAITING:()=>HV,SENDING_TIME_POSITION:()=>dh,createWebSocket:()=>lT,databaseSubscriptions:()=>cc,replicateOverWS:()=>fh,tableUpdateListeners:()=>UC});async function lT(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(!CC){let l=(0,MV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),CC=u.secureContexts}if(i=CC.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,UV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(aT?.caCount!==Jo.size&&(aT=vV.createSecureContext({...i.options,ca:[...Jo,...i.options.availableCAs.values()]}),aT.caCount=Jo.size),c.secureContext=aT),new PV.WebSocket(e,"harperdb-replication-v1",c)}function fh(e,t,r){let n=t.port||t.securePort,s=Hl.pid%1e3+"-"+LV.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=OV.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,NV).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())},NV*2).unref()}o(tr,"resetPingTimer");let Wr=0,vr=0,gu=!1,Fc=3e4;function xt(){if(dn?.length>0){let A=performance.now(),U=A-vr;Wr=(Wr*Fc+(gu?U:0))/(Fc+U),m[kV]=Wr,vr=A}}o(xt,"updateBackPressureRatio"),setInterval(xt,Fc).unref();function ri(){if(!(!g||!u))return m||(m=Hd(f,u,g)),m}o(ri,"getSharedStatus"),u&&kc(u);let Na,GE,jf=[],qE=[],Qf,Pe=[],$E=[],ob=[],Su=150,Ui=25,Os=0,Jf=0,Xf=!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}Zf(A),e.off("message",Tu),e.on("message",Zf)}o(Tu,"onWSMessageWhenAuthorized");function Zf(A){ue=performance.now();try{let U=A.dataView=new Zc(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let Y=(0,ot.decode)(A),[j,B,Ee]=Y;switch(j){case SV:{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{kc(u=Y[2]),u==="system"&&(Na=rc(t,(de,oe)=>{Pa(oe)&&K(oe)}),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}em()}break}case IV:{le.debug?.(s,"Received table definitions for",B.map(de=>de.table));for(let de of B){let oe=Y[2];de.database=oe;let ke;if(Pa(oe)){if(u==="system")De[oe]?.[de.table]||(ke=L(de,De[oe]?.[de.table]));else{if(oe!=="data"&&!De[oe]){le.warn?.("Database not found",oe);return}ke=L(de,De[oe]?.[de.table])}f||(f=ke?.auditStore),E||(E=at()?.[oe])}}break}case Wd:xr();break;case PC:try{let de=r?.replicates||r?.subscribers||r?.name;le.debug?.("Received operation request",B,"from",g),server.operation(B,{user:r},!de).then(oe=>{le.debug?.("Requested request from finished",g,oe),Array.isArray(oe)&&(oe={results:oe}),oe.requestId=B.requestId,e.send((0,ot.encode)([nT,oe]))},oe=>{le.debug?.("Failed requested operation from",g,oe),e.send((0,ot.encode)([nT,{requestId:B.requestId,error:wC(oe)}]))})}catch(de){e.send((0,ot.encode)([nT,{requestId:B.requestId,error:wC(de)}]))}break;case nT: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 NC: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),jf[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 TV:Ur=f?k$(B,f):new Map,Qf=Y[2],le.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Qf}`);break;case yV:let xe=Ee;ob[xe]=B;break;case AV:ri()[FV]=B,le.trace?.(s,"received and broadcasting committed update",B),ri().buffer.notify();break;case bV:y=B,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case sT:{let de=Y[1],{fileId:oe,size:ke,finished:Be,error:Le}=de,Me=Ae.get(oe);le.debug?.("Received blob",oe,"has stream",!!Me,"connectedToBlob",!!Me?.connectedToBlob,"length",Y[2].length,"finished",Be),Me||(Me=new OC.PassThrough,Me.expectedSize=ke,Ae.set(oe,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(oe)):Me.write(pt)}catch(wt){le.error?.(`Error receiving blob for ${Me.recordId} from ${g} and streaming to storage`,wt),Ae.delete(oe)}break}case RV:{let de=B,oe;try{let ke=Y[3],Be=qE[Ee]||(qE[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!==Jf){Jf=Me;let wt=(0,ot.decode)(Le);e.send((0,ot.encode)([NC,{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,xV.getLastVersion)(),ct&&ct[ku]&Jr&&(wt=Buffer.from(wt),Lm(()=>Be.primaryStore.decoder.decode(pt),KE=>Ca(KE,ke),Be.primaryStore.rootStore)),oe=(0,ot.encode)([rT,de,{value:wt,expiresAt:Et.expiresAt,version:Et.version,residencyId:Et.residencyId,nodeId:Et.nodeId,user:Et.user}])}else oe=(0,ot.encode)([rT,de])}catch(ke){oe=(0,ot.encode)([rT,de,{error:ke.message}])}e.send(oe);break}case rT:{let{resolve:de,reject:oe,tableId:ke,key:Be}=R.get(Y[1]),Le=Y[2];if(Le?.error)oe(new Error(Le.error));else if(Le){let Me;P_(()=>{let pt=jf[ke].decoder.decode(Le.value);Le.value=pt,Le.key=Be,de(Le)||Me&&setTimeout(()=>Me.forEach(N_),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 gV:{dn=B;let de,oe,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)oe=jt().subscribe(r.name),oe.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,KE,YE=o((Ce,Kt)=>{if(Ce.type==="end_txn"){Me.txnTime&&(a[i]!==66&&le.error?.("Invalid encoding of message"),N(9),N(G_),O(KE=Kt),VM()),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&X_||!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 oT&&le.trace?.(s,"skipping replication update",Ce.recordId,"to:",g,"from:",Bt,"subscribed:",pt),KM();oT&&le.trace?.(s,"sending replication update",Ce.recordId,"to:",g,"from:",Bt,"subscribed:",pt);let ab=Ce.version;Me.txnTime!==ab&&(Me.txnTime&&(oT&&le.trace?.(s,"new txn time, sending queued txn",Me.txnTime),a[i]!==66&&le.error?.("Invalid encoding of message"),VM()),Me.txnTime=ab,i=c,O(ab));let Hc=Ce.residencyId,cb=VE(Hc,Ps),WE;if(cb&&!cb.includes(g)){let xi=VE(Ce.previousResidencyId,Ps);if(xi&&!xi.includes(g)&&(Ce.type==="put"||Ce.type==="patch")||Ps.getResidencyById)return KM();let Gc=Ce.recordId;le.trace?.(s,"sending invalidation",Gc,g,"from",Bt);let tm=0;Hc&&(tm|=el),Ce.previousResidencyId&&(tm|=tl);let db,zE=null;for(let YM in Ps.indices){if(!zE){if(db=Ce.getValue(Ft,!0),!db)break;zE={}}zE[YM]=db[YM]}WE=rl(Ce.version,Br,Gc,null,Bt,Ce.user,Ce.type==="put"||Ce.type==="patch"?"invalidate":Ce.type,ni.encode(zE),tm,Hc,Ce.previousResidencyId,Ce.expiresAt)}function KM(){return le.trace?.(s,"skipping audit record",Ce.recordId),G||(G=setTimeout(()=>{G=null,(KE||0)+wV/2<Et&&(oT&&le.trace?.(s,"sending skipped sequence update",Et),e.send((0,ot.encode)([bV,Et])))},wV).unref()),new Promise(setImmediate)}o(KM,"skipAuditRecord");let lb=ni.typedStructs,ub=ni.structures;if((lb?.length!=Nt.typed_length||ub?.length!=Nt.structure_length)&&(Nt.typed_length=lb?.length,Nt.structure_length=ub.length,le.debug?.(s,"send table struct",Nt.typed_length,Nt.structure_length),Nt.sentName||(Nt.sentName=!0),e.send((0,ot.encode)([NC,{typedStructs:lb,structures:ub,attributes:Ps.attributes,schemaDefined:Ps.schemaDefined},Br,Nt.table.tableName]))),Hc&&!$E[Hc]&&(e.send((0,ot.encode)([yV,cb,Hc])),$E[Hc]=!0),WE)N(WE.length),P(WE);else{let xi=Ce.encoded;Ce.extendedType&Jr&&Lm(()=>Ce.getValue(Ft),tm=>Ca(tm,Ce.recordId),Ft.rootStore);let Gc=xi[0]===66?8:0;N(xi.length-Gc),P(xi,Gc),le.trace?.("wrote record",Ce.recordId,"length:",xi.length)}if(e._socket.writableNeedDrain){let xi=performance.now();return gu=!0,xt(),new Promise(Gc=>{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",()=>{Gc(),gu=!1,xt()})})}else return qe>Ui?new Promise(xi=>{Ar=xi}):new Promise(setImmediate)},"sendAuditRecord"),VM=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 vC.EventEmitter,On.once("close",()=>{ke=!0,de?.end()});for(let{startTime:Ce}of dn)Ce<Et&&(Et=Ce);(oe||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=WS(Kt,f);le.debug?.("subscription to",Kt,"using local id",Nt,"starting",Bt),pt[Nt]={startTime:Bt,endTime:Br}}K(u),Na||(Na=Pl(Kt=>{Kt.databaseName===u&&K(u)}),GE=kp(Kt=>{Kt===u&&(e.send((0,ot.encode)([Wd])),xr())}),e.on("close",()=>{Na?.remove(),GE?.remove()})),e.send((0,ot.encode)([TV,rh(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=uT(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()[dh]=1;let ni=rl(Ft.version,Ps.tableId,Ft.key,null,Br,null,"put",Lm(()=>Ps.primaryStore.encoder.encode(Ft.value),bu=>Ca(bu,Ft.key)),Ft.metadataFlags&-256,Ft.residencyId,null,Ft.expiresAt);await YE({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&&YE({type:"end_txn"},Et),ri()[dh]=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()[dh]=Bt,Et=Bt,await YE(Nt,Bt),On.startTime=Bt,Kt=!0}Kt&&YE({type:"end_txn"},Et),ri()[dh]=0,await d0(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)==G_){U.position++,y=$=U.readFloat64(),m[LC]=y,m[DC]=Date.now(),m[MC]=HV,le.trace?.("received remote sequence update",y,u);break}let j=U.position,B=At(A,j,j+Y),Ee=jf[B.tableId];Ee||le.error?.(`No table found with an id of ${B.tableId}`);let fe;B.residencyId&&(fe=ob[B.residencyId],le.trace?.(s,"received residency list",fe,B.type,B.recordId));try{let pe=B.recordId;P_(()=>{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[LC]=B.version,m[DC]=Date.now(),m[MC]=GV,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&&!Xf&&(Xf=!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--,Xf&&(Xf=!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)([AV,C])),le.trace?.(s,"sent confirmation of a commit at",C),C=null},Vle)),C=$,le.debug?.("last sequence committed",new Date($),u)}})}catch(U){le.error?.(s,"Error handling incoming replication message",U)}}o(Zf,"onWSMessage"),e.on("ping",tr),e.on("pong",()=>{if(t.connection){let A=performance.now()-J;t.connection.latency=A,ri()&&(m[cT]=A),t.isSubscriptionConnection&&Bl({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=C_(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)([sT,{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)([sT,{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)([sT,{fileId:w,finished:!0,error:wC(D)},Buffer.alloc(0)]))}finally{yu.delete(w),qe--,qe<Ui&&Ar?.()}}o(Ca,"sendBlobs");function Oa(A,U){let w=C_(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 OC.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(()=>Pm($).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 em(){if(p||(p=!0,t.connection?.on("subscriptions-updated",em)),!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&&WS(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&&WS(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&&iT)try{new URL(iT).hostname===D.name?(le.warn?.(`Requesting full copy of database ${u} from ${iT}`),fe=0):fe=Date.now()-6e4}catch(pe){le.error?.("Error parsing leader URL",iT,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)([gV,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(em,"sendSubscriptionRequestUpdate");function VE(A,U){if(!A)return;let w=Pe[A];return w||(w=U.getResidencyRecord(A),Pe[A]=w),w}o(VE,"getResidence");function Pa(A){return!(ac&&ac!="*"&&!ac[A]&&!ac.includes?.(A)&&!ac.some?.(U=>U.name===A))}o(Pa,"checkDatabaseAccess");function kc(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(kc,"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)([SV,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)([IV,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 $=[RV,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)([PC,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 OV,ot,PV,LV,DV,vC,MV,vV,Hl,UV,OC,xV,BV,qle,wC,le,gV,SV,TV,Wd,yV,NC,RV,rT,PC,nT,bV,AV,IV,sT,FV,LC,DC,dh,cT,MC,kV,HV,GV,$le,iT,UC,cc,oT,wV,Vle,NV,CC,aT,CV,zd,xC=se(()=>{we();Fi();fC();$A();ps();OV=b(me());q();nl();ot=require("msgpackr"),PV=require("ws"),LV=require("worker_threads"),DV=b(Q());ch();vC=require("events"),MV=b(Es()),vV=b(require("node:tls"));qd();Hl=b(require("node:process")),UV=require("node:net");rs();ts();OC=require("node:stream"),xV=require("lmdb"),BV=b(require("minimist")),{forComponent:qle,errorToString:wC}=DV.default,le=qle("replication").conditional,gV=129,SV=140,TV=141,Wd=142,yV=130,NC=132,RV=133,rT=134,PC=136,nT=137,bV=143,AV=144,IV=145,sT=146,FV=0,LC=1,DC=2,dh=3,cT=4,MC=5,kV=6,HV=0,GV=1,$le=(0,BV.default)(Hl.argv),iT=$le.HDB_LEADER_URL??Hl.env.HDB_LEADER_URL,UC=new Map,cc=new Map,oT=!0,wV=300,Vle=2,NV=3e4;o(lT,"createWebSocket");CV=500,zd=class extends vC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=CV;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??gi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await lT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;le.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Hl.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=CV,this.nodeSubscriptions&&Bl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=fh(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(fh,"replicateOverWS")});function mh(e){return e===VV||e===Kle}function Yle(e){return e===KV||e===YV}function BC(e){return e===VV?KV:YV}function Wle(){if($V)return;$V=!0;let e=Gl.CryptoEngine.prototype,t=Gl.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 mh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return mh(s)?{name:BC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Yle(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=Gl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(mh(i)){let a=BC(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(mh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new ph.X509Certificate(Buffer.from(i)),l=new ph.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(mh(c)){let l=BC(c);try{let u=this.crypto?.subtle||this.subtle||Gl.getCrypto(!0)?.subtle||ph.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 Gl,ph,VV,Kle,KV,YV,$V,WV=se(()=>{Gl=b(require("pkijs")),ph=require("node:crypto"),VV="1.3.101.112",Kle="1.3.101.113",KV="Ed25519",YV="Ed448",$V=!1;o(mh,"isEd25519OrEd448");o(Yle,"isEdDSAAlgorithmName");o(BC,"getEdDSAAlgorithmName");o(Wle,"applyEd25519Patch");Wle()});function zle(){return dT||(dT=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"}]}),dT.sourcedFrom(FC)),dT}function jle(e){if(ht.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return ht.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return ht.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function jd(e,t){ht.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=jle(t);if(r===!1)return ht.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=Xle(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"}):Qle(n[0].cert,n[0].issuer,r)}async function Qle(e,t,r){ht.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=zV(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=zV(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,jV.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;ht.trace?.("OCSP cache key:",i);let c=await zle().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 Jle(e,t,r){ht.trace?.("Performing OCSP check with timeout:",r);try{(0,fT.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,fT.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 zV(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 Xle(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 fT,jV,QV,ht,FC,Xo,dT,mT=se(()=>{WV();fT=require("easy-ocsp"),jV=require("node:crypto"),QV=b(es());we();qa();ht=(0,QV.loggerWithTag)("cert-verification"),FC=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([Jle(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(zle,"getCertificateCacheTable");o(jle,"getCertificateVerificationConfig");o(jd,"verifyCertificate");o(Qle,"verifyOCSP");o(Jle,"performOCSPCheck");o(zV,"bufferToPem");o(Xle,"extractCertificateChain")});var Qo={};Re(Qo,{clearThisNodeName:()=>aue,disableReplication:()=>rue,enabledDatabases:()=>ac,forEachReplicatedDatabase:()=>rc,getThisNodeId:()=>uT,getThisNodeName:()=>it,getThisNodeUrl:()=>nc,hostnameToUrl:()=>_T,lastTimeInAuditStore:()=>nh,monitorNodeCAs:()=>i1,replicateOperation:()=>lue,replicationCertificateAuthorities:()=>Jo,sendOperationToNode:()=>hh,servers:()=>eue,setReplicator:()=>a1,start:()=>tue,startOnMainThread:()=>mC,subscribeToNode:()=>ah,unsubscribeFromNode:()=>QS,urlToNodeName:()=>gi});function tue(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 ih(e))t.set(gi(s.url),s);nue(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(),fh(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,n1.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=ET.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()}i1(()=>{for(let s of n)s()})}function i1(e){let t=0;Gd(r=>{r?.ca&&(Jo.add(r.ca),Jo.size!==t&&(t=Jo.size,e?.()))})}function rue(e=!0){s1=e}function nue(e){s1||(at(),ac=e.databases,rc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||cc;for(let[s,i]of hT){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];a1(r,s,e),UC.get(s)?.forEach(i=>i(s))}}))}function a1(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 o1 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 Zn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===ve.hostname)continue;let E=iue(h,o1.subscription,e);if(E?.isConnected){let g=Hd(t.auditStore,e,h)[cT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new t1.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Zle++,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",ql,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function sue(e,t,r,n,s){let i=hT.get(e);i||hT.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 iue(e,t,r){let n=JV.get(ql);n||(n=new Map,JV.set(ql,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,ql,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function hh(e,t,r){r||(r={}),r.serverName=e.name;let n=await lT(e.url,r),s=fh(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 ah(e){try{r1.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=sue(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=>sh(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function QS({name:e,url:t,database:r}){It.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(jt().primaryStore.getRange({})));let n=hT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function oue(){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 ZV.X509Certificate((0,e1.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return ql||(ql=$s.default.get("replication_hostname")??gi($s.default.get("replication_url"))??oue()??XV("operationsapi_network_secureport")??XV("operationsapi_network_port")??"127.0.0.1")}function aue(){ql=void 0}function XV(e){let t=$s.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function pT(e){let t=$s.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function uT(e){return rh(e)?.[it()]}function nc(){let e=$s.default.get("replication_url");return e||_T(it())}function _T(e){let t=pT("replication_port");if(t)return`ws://${e}:${t}`;if(t=pT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=pT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=pT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function gi(e){if(e)return new URL(e).hostname}function rc(e,t){for(let n of Object.getOwnPropertyNames(De))r(n);return kp(n=>{r(n)}),Pl((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):cue(n)&&t(s,n,!1)}o(r,"forDatabase")}function cue(e){let t=De[e];for(let r in t)if(t[r].replicate)return!0}function nh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function lue(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=>hh(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,ZV,e1,ET,t1,r1,n1,s1,Zle,eue,Jo,ac,hT,JV,kC,ql,ps=se(()=>{we();qa();Ou();xC();Fr();$s=b(me()),It=b(Q()),ZV=require("crypto");mT();e1=require("fs");ch();qd();q();fC();ET=b(require("node:tls")),t1=b(_e()),r1=require("worker_threads"),n1=b(Es()),Zle=1,eue=[],Jo=$s.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(ET.rootCertificates):new Set;o(tue,"start");o(i1,"monitorNodeCAs");o(rue,"disableReplication");o(nue,"assignReplicationSource");o(a1,"setReplicator");hT=new Map;o(sue,"getSubscriptionConnection");JV=new Map;o(iue,"getRetrievalConnectionByName");o(hh,"sendOperationToNode");o(ah,"subscribeToNode");o(QS,"unsubscribeFromNode");o(oue,"getCommonNameFromCert");o(it,"getThisNodeName");o(aue,"clearThisNodeName");Object.defineProperty(ve,"hostname",{get(){return it()}});o(XV,"getHostFromListeningPort");o(pT,"getPortFromListeningPort");o(uT,"getThisNodeId");ve.replication={getThisNodeId:uT,exportIdMapping:rh};o(nc,"getThisNodeUrl");o(_T,"hostnameToUrl");o(gi,"urlToNodeName");o(rc,"forEachReplicatedDatabase");o(cue,"hasExplicitlyReplicatedTable");o(nh,"lastTimeInAuditStore");o(lue,"replicateOperation")});var RT=v((lxe,f1)=>{"use strict";var Qd=a$(),{validateBySchema:Eh}=ft(),{commonValidators:Jd,schemaRegex:HC}=Ki(),_r=require("joi"),uue=Q(),due=require("uuid").v4,TT=Go(),Xd=(q(),M(z)),fue=require("util"),lc=ls(),{handleHDBError:Zo,hdbErrors:mue,ClientError:$l}=_e(),{HDB_ERROR_MSGS:gT,HTTP_STATUS_CODES:ea}=mue,{SchemaEventMsg:yT}=os(),c1=hr(),{getDatabases:pue}=(we(),M(mt)),{transformReq:Zd}=ae(),{replicateOperation:l1}=(ps(),M(Qo)),{cleanupOrphans:hue}=(ts(),M(L_)),ST=_r.string().min(1).max(Jd.schema_length.maximum).pattern(HC).messages({"string.pattern.base":"{:#label} "+Jd.schema_format.message}),Eue=_r.string().min(1).max(Jd.schema_length.maximum).pattern(HC).messages({"string.pattern.base":"{:#label} "+Jd.schema_format.message}).required(),_ue=_r.string().min(1).max(Jd.schema_length.maximum).pattern(HC).messages({"string.pattern.base":"{:#label} "+Jd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();f1.exports={createSchema:gue,createSchemaStructure:u1,createTable:Sue,createTableStructure:d1,createAttribute:Aue,dropSchema:Tue,dropTable:yue,dropAttribute:Rue,getBackup:Iue,cleanupOrphanBlobs:wue};async function gue(e){let t=await u1(e);return TT.signalSchemaChange(new yT(process.pid,e.operation,e.schema)),t}o(gue,"createSchema");async function u1(e){let t=Eh(e,_r.object({database:ST,schema:ST}));if(t)throw new $l(t.message);if(Zd(e),!await Qd.checkSchemaExists(e.schema))throw Zo(new Error,gT.SCHEMA_EXISTS_ERR(e.schema),ea.BAD_REQUEST,Xd.LOG_LEVELS.ERROR,gT.SCHEMA_EXISTS_ERR(e.schema),!0);return await lc.createSchema(e),`database '${e.schema}' successfully created`}o(u1,"createSchemaStructure");async function Sue(e){return Zd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await d1(e)}o(Sue,"createTable");async function d1(e){let t=Eh(e,_r.object({database:ST,schema:ST,table:Eue,residence:_r.array().items(_r.string().min(1)).optional(),hash_attribute:_ue}));if(t)throw new $l(t.message);if(!await Qd.checkSchemaTableExists(e.schema,e.table))throw Zo(new Error,gT.TABLE_EXISTS_ERR(e.schema,e.table),ea.BAD_REQUEST,Xd.LOG_LEVELS.ERROR,gT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:due(),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(d1,"createTableStructure");async function Tue(e){let t=Eh(e,_r.object({database:_r.string(),schema:_r.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new $l(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),TT.signalSchemaChange(new yT(process.pid,e.operation,e.schema)),await c1.purgeSchemaTableStreams(e.schema,s);let i=await l1(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Tue,"dropSchema");async function yue(e){let t=Eh(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required()}));if(t)throw new $l(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 c1.purgeTableStream(e.schema,e.table);let n=await l1(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(yue,"dropTable");async function Rue(e){let t=Eh(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required(),attribute:_r.string().required()}));if(t)throw new $l(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),bue(e),TT.signalSchemaChange(new yT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw uue.error(`Got an error deleting attribute ${fue.inspect(e)}.`),n}}o(Rue,"dropAttribute");function bue(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(bue,"dropAttributeFromGlobal");async function Aue(e){Zd(e);let t=pue()[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),TT.signalSchemaChange(new yT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Aue,"createAttribute");function Iue(e){return lc.getBackup(e)}o(Iue,"getBackup");function wue(e){if(!e.database)throw new $l('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new $l(`Unknown database '${e.database}'`);return hue(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(wue,"cleanupOrphanBlobs")});var p1=v((dxe,m1)=>{"use strict";var{OPERATIONS_ENUM:Nue}=(q(),M(z)),GC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Nue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};m1.exports=GC});var qC=v((pxe,S1)=>{"use strict";var Cue=ls(),mxe=p1(),bT=ae(),AT=(q(),M(z)),Oue=me(),{handleHDBError:h1,hdbErrors:Pue}=_e(),{HDB_ERROR_MSGS:E1,HTTP_STATUS_CODES:_1}=Pue,Lue=Object.values(AT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),g1="To use this operation audit log must be enabled in harperdb-config.yaml";S1.exports=Due;async function Due(e){if(bT.isEmpty(e.schema))throw new Error(E1.SCHEMA_REQUIRED_ERR);if(bT.isEmpty(e.table))throw new Error(E1.TABLE_REQUIRED_ERR);if(!Oue.get(AT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw h1(new Error,g1,_1.BAD_REQUEST,AT.LOG_LEVELS.ERROR,g1,!0);let t=bT.checkSchemaTableExist(e.schema,e.table);if(t)throw h1(new Error,t,_1.NOT_FOUND,AT.LOG_LEVELS.ERROR,t,!0);if(!bT.isEmpty(e.search_type)&&Lue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Cue.readAuditLog(e)}o(Due,"readAuditLog")});var y1=v((Exe,T1)=>{"use strict";var{OPERATIONS_ENUM:Mue}=(q(),M(z)),$C=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Mue.GET_BACKUP,this.schema=t,this.table=r}};T1.exports=$C});var A1=v((Txe,b1)=>{"use strict";var vue=ls(),gxe=y1(),VC=ae(),Uue=(q(),M(z)),Sxe=me(),{handleHDBError:xue,hdbErrors:Bue}=_e(),{HDB_ERROR_MSGS:R1,HTTP_STATUS_CODES:Fue}=Bue;b1.exports=kue;async function kue(e){if(VC.isEmpty(e.schema))throw new Error(R1.SCHEMA_REQUIRED_ERR);if(VC.isEmpty(e.table))throw new Error(R1.TABLE_REQUIRED_ERR);let t=VC.checkSchemaTableExist(e.schema,e.table);if(t)throw xue(new Error,t,Fue.NOT_FOUND,Uue.LOG_LEVELS.ERROR,t,!0);return await vue.getBackup(readAuditLogObject)}o(kue,"getBackup")});var C1=v((Rxe,N1)=>{"use strict";var Hue=me(),uc=require("joi"),Gue=ft(),I1=require("moment"),que=require("fs-extra"),KC=require("path"),$ue=require("lodash"),_h=(q(),M(z)),{LOG_LEVELS:Vl}=(q(),M(z)),Vue="YYYY-MM-DD hh:mm:ss",Kue=KC.resolve(__dirname,"../logs");N1.exports=function(e){return Gue.validateBySchema(e,Yue)};var Yue=uc.object({from:uc.custom(w1),until:uc.custom(w1),level:uc.valid(Vl.NOTIFY,Vl.FATAL,Vl.ERROR,Vl.WARN,Vl.INFO,Vl.DEBUG,Vl.TRACE),order:uc.valid("asc","desc"),limit:uc.number().min(1),start:uc.number().min(0),log_name:uc.custom(Wue)});function w1(e,t){if(I1(e,I1.ISO_8601).format(Vue)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(w1,"validateDatetime");function Wue(e,t){if($ue.invert(_h.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Hue.get(_h.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?_h.LOG_NAMES.HDB:e,i=s===_h.LOG_NAMES.INSTALL?KC.join(Kue,_h.LOG_NAMES.INSTALL):KC.join(n,s);return que.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Wue,"validateReadLogPath")});var WC=v((Axe,P1)=>{"use strict";var IT=(q(),M(z)),zue=Q(),jue=me(),Que=C1(),YC=require("path"),O1=require("fs-extra"),{once:Jue}=require("events"),{handleHDBError:Xue,hdbErrors:Zue}=_e(),{PACKAGE_ROOT:ede}=Ct(),{replicateOperation:tde}=(ps(),M(Qo)),rde=YC.join(ede,"logs"),nde=1e3,sde=200;P1.exports=ide;async function ide(e){let t=Que(e);if(t)throw Xue(t,t.message,Zue.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=tde(e),n=jue.get(IT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?IT.LOG_NAMES.HDB:e.log_name,i=s===IT.LOG_NAMES.INSTALL?YC.join(rde,IT.LOG_NAMES.INSTALL):YC.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?nde: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(O1.statSync(i).size-(E+5)*sde,0));let R=O1.createReadStream(i,{start:g});R.on("error",G=>{zue.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 Jue(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(ide,"readLog");function co(e,t,r){t==="desc"?ode(e,r):t==="asc"?ade(e,r):r.push(e)}o(co,"pushLineToResult");function ode(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(ode,"insertDescending");function ade(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(ade,"insertAscending")});var wT=v((Pxe,v1)=>{"use strict";var zC=require("joi"),{string:ef,boolean:L1,date:cde}=zC.types(),lde=ft(),{validateSchemaExists:wxe,validateTableExists:Nxe,validateSchemaName:Cxe}=Ki(),ude=(q(),M(z)),dde=Pt(),D1=me();D1.initSync();var Oxe=ef.invalid(D1.get(ude.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(dde.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),M1={operation:ef.valid("add_node","update_node","set_node_replication"),node_name:ef.optional(),subscriptions:zC.array().items({table:ef.optional(),schema:ef.optional(),database:ef.optional(),subscribe:L1.required(),publish:L1.required().custom(mde),start_time:cde.iso()})};function fde(e){return lde.validateBySchema(e,zC.object(M1))}o(fde,"addUpdateNodeValidator");function mde(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(mde,"checkForFalsy");v1.exports={addUpdateNodeValidator:fde,validationSchema:M1}});var tf=v((Dxe,U1)=>{"use strict";var jC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},QC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};U1.exports={Node:jC,NodeSubscription:QC}});var B1=v((vxe,x1)=>{"use strict";var pde=(q(),M(z)).OPERATIONS_ENUM,JC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=pde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};x1.exports=JC});var gh=v((xxe,F1)=>{"use strict";var XC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},ZC=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)}};F1.exports={RemotePayloadObject:XC,RemotePayloadSubscription:ZC}});var H1=v((Fxe,k1)=>{"use strict";var eO=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}};k1.exports=eO});var q1=v((Vxe,G1)=>{"use strict";var hde=H1(),Hxe=Yt(),Gxe=St(),Ede=Q(),{getSchemaPath:qxe,getTransactionAuditStorePath:$xe}=Rt(),{getDatabases:_de}=(we(),M(mt));G1.exports=gde;async function gde(e){let t=new hde;try{let r=_de()[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){Ede.warn(`unable to stat table dbi due to ${r}`)}return t}o(gde,"lmdbGetTableSize")});var V1=v((Yxe,$1)=>{"use strict";var tO=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}};$1.exports=tO});var Th=v((Xxe,z1)=>{"use strict";var Sde=require("fs-extra"),Tde=require("path"),Rn=require("systeminformation"),dc=Q(),K1=hr(),zxe=Pt(),rf=(q(),M(z)),yde=q1(),Rde=Dl(),{getThreadInfo:Y1}=nt(),Sh=me();Sh.initSync();var bde=V1(),{openEnvironment:jxe}=St(),{getSchemaPath:Qxe}=Rt(),{database:Jxe,databases:rO}=(we(),M(mt)),NT;z1.exports={getHDBProcessInfo:oO,getNetworkInfo:cO,getDiskInfo:aO,getMemoryInfo:iO,getCPUInfo:sO,getTimeInfo:nO,getSystemInformation:lO,systemInformation:Ade,getTableSize:uO,getMetrics:dO};function nO(){return Rn.time()}o(nO,"getTimeInfo");async function sO(){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(sO,"getCPUInfo");async function iO(){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(iO,"getMemoryInfo");async function oO(){let e={core:[],clustering:[]};try{let t=await Rn.processes(),r;try{r=Number.parseInt(await Sde.readFile(Tde.join(Sh.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(oO,"getHDBProcessInfo");async function aO(){let e={};try{if(!Sh.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(aO,"getDiskInfo");async function cO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Sh.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(cO,"getNetworkInfo");async function lO(){if(NT!==void 0)return NT;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,NT=e,NT}catch(t){return dc.error(`error in getSystemInformation: ${t}`),e}}o(lO,"getSystemInformation");async function uO(){let e=[],t=await Rde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await yde(n));return e}o(uO,"getTableSize");async function dO(){let e={};for(let t in rO){let r=e[t]={},n=r.tables={};for(let s in rO[t])try{let i=rO[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(dO,"getMetrics");async function W1(){if(Sh.get(rf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await K1.getNATSReferences(),t=await K1.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(W1,"getNatsStreamInfo");async function Ade(e){let t=new bde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await lO(),t.time=nO(),t.cpu=await sO(),t.memory=await iO(),t.disk=await aO(),t.network=await cO(),t.harperdb_processes=await oO(),t.table_size=await uO(),t.metrics=await dO(),t.threads=await Y1(),t.replication=await W1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await lO();break;case"time":t.time=nO();break;case"cpu":t.cpu=await sO();break;case"memory":t.memory=await iO();break;case"disk":t.disk=await aO();break;case"network":t.network=await cO();break;case"harperdb_processes":t.harperdb_processes=await oO();break;case"table_size":t.table_size=await uO();break;case"database_metrics":case"metrics":t.metrics=await dO();break;case"threads":t.threads=await Y1();break;case"replication":t.replication=await W1();break;default:break}return t}o(Ade,"systemInformation")});var ta=v((n0e,X1)=>{"use strict";var Ide=Gn(),fO=ae(),wde=require("util"),Kl=(q(),M(z)),j1=me();j1.initSync();var Nde=MN(),Q1=_n(),{Node:e0e,NodeSubscription:t0e}=tf(),Cde=rd(),Ode=B1(),{RemotePayloadObject:Pde,RemotePayloadSubscription:Lde}=gh(),{handleHDBError:Dde,hdbErrors:Mde}=_e(),{HTTP_STATUS_CODES:vde,HDB_ERROR_MSGS:Ude}=Mde,xde=di(),Bde=Th(),{packageJson:Fde}=Ct(),{getDatabases:kde}=(we(),M(mt)),r0e=wde.promisify(Nde.authorize),Hde=Q1.searchByHash,Gde=Q1.searchByValue;X1.exports={isEmpty:qde,getNodeRecord:$de,upsertNodeRecord:Vde,buildNodePayloads:Kde,checkClusteringEnabled:Yde,getAllNodeRecords:Wde,getSystemInfo:zde,reverseSubscription:J1};function qde(e){return e==null}o(qde,"isEmpty");async function $de(e){let t=new Cde(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Hde(t)}o($de,"getNodeRecord");async function Vde(e){let t=new Ode(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Ide.upsert(t)}o(Vde,"upsertNodeRecord");function J1(e){if(fO.isEmpty(e.subscribe)||fO.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(J1,"reverseSubscription");function Kde(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=fO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=J1(c),p=kde()[l]?.[u],h=new Lde(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Pde(r,t,s,n)}o(Kde,"buildNodePayloads");function Yde(){if(!j1.get(Kl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Dde(new Error,Ude.CLUSTERING_NOT_ENABLED,vde.BAD_REQUEST,void 0,void 0,!0)}o(Yde,"checkClusteringEnabled");async function Wde(){let e=new xde(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Gde(e))}o(Wde,"getAllNodeRecords");async function zde(){let e=await Bde.getSystemInformation();return{hdb_version:Fde.version,node_version:e.node_version,platform:e.platform}}o(zde,"getSystemInfo")});var mO=v((i0e,oK)=>{"use strict";var CT=hr(),Z1=ae(),eK=Pt(),tK=(q(),M(z)),OT=Q(),rK=RT(),jde=ap(),{RemotePayloadObject:Qde}=gh(),{handleHDBError:nK,hdbErrors:Jde}=_e(),{HTTP_STATUS_CODES:sK}=Jde,{NodeSubscription:iK}=tf();oK.exports=Xde;async function Xde(e,t){let r;try{r=await CT.request(`${t}.${eK.REQUEST_SUFFIX}`,new Qde(tK.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),OT.trace("Response from remote describe all request:",r)}catch(a){OT.error(`addNode received error from describe all request to remote node: ${a}`);let c=CT.requestErrorHandler(a,"add_node",t);throw nK(new Error,c,sK.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===eK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw nK(new Error,a,sK.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===tK.SYSTEM_SCHEMA_NAME){await CT.createLocalTableStream(l,c);let h=new iK(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=Z1.doesSchemaExist(l),d=n[l]!==void 0,f=c?Z1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(OT.trace(`addNode creating schema: ${l}`),await rK.createSchema({operation:"create_schema",schema:l})),!f&&m){OT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new jde(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await rK.createTable(h)}await CT.createLocalTableStream(l,c);let p=new iK(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(Xde,"reviewSubscriptions")});var nf={};Re(nf,{addNodeBack:()=>pO,removeNodeBack:()=>hO,setNode:()=>rfe});async function rfe(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=gi(t)):t=_T(r);let n=(0,cK.validateBySchema)(e,tfe);if(n)throw(0,ra.handleHDBError)(n,n.message,efe.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 hh({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(aK):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=aK(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 hh({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:Zde.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??gi(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 pO(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 hO(e){_s.trace("removeNodeBack received request:",e),await jt().delete(e.name)}function aK(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Vs,cK,fc,mc,_s,ra,Zde,efe,tfe,sf=se(()=>{Vs=b(Es()),cK=b(ft()),fc=b(require("joi")),mc=b(me());q();ch();qd();ps();_s=b(Q()),ra=b(_e()),{pki:Zde}=require("node-forge"),{HTTP_STATUS_CODES:efe}=ra.hdbErrors,tfe=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(rfe,"setNode");o(pO,"addNodeBack");o(hO,"removeNodeBack");o(aK,"reverseSubscription")});var vT=v((p0e,uK)=>{"use strict";var{handleHDBError:PT,hdbErrors:nfe}=_e(),{HTTP_STATUS_CODES:LT}=nfe,{addUpdateNodeValidator:sfe}=wT(),DT=Q(),MT=(q(),M(z)),lK=Pt(),ife=ae(),yh=hr(),Rh=ta(),EO=me(),ofe=mO(),{Node:afe,NodeSubscription:cfe}=tf(),{broadcast:lfe}=nt(),{setNode:ufe}=(sf(),M(nf)),f0e=me(),m0e=(q(),M(z)),dfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",ffe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",mfe=EO.get(MT.CONFIG_PARAMS.CLUSTERING_NODENAME);uK.exports=pfe;async function pfe(e,t=!1){if(DT.trace("addNode called with:",e),EO.get(MT.CONFIG_PARAMS.REPLICATION_URL)||EO.get(MT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ufe(e);Rh.checkClusteringEnabled();let r=sfe(e);if(r)throw PT(r,r.message,LT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Rh.getNodeRecord(n);if(!ife.isEmptyOrZeroLength(f))throw PT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,LT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await ofe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=dfe,a;let c=Rh.buildNodePayloads(s,mfe,MT.OPERATIONS_ENUM.ADD_NODE,await Rh.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 cfe(p.schema,p.table,p.publish,p.subscribe))}DT.trace("addNode sending remote payload:",c);let u;try{u=await yh.request(`${n}.${lK.REQUEST_SUFFIX}`,c)}catch(f){DT.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 yh.updateRemoteConsumer(E,n)}let m=yh.requestErrorHandler(f,"add_node",n);throw PT(new Error,m,LT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===lK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw PT(new Error,f,LT.INTERNAL_SERVER_ERROR,"error",f)}DT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await yh.updateRemoteConsumer(p,n),p.subscribe===!0&&await yh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new afe(n,l,u.system_info);return await Rh.upsertNodeRecord(d),lfe({type:"nats_update"}),i.length>0?a.message=ffe:a.message=`Successfully added '${n}' to manifest`,a}o(pfe,"addNode")});var TO=v((_0e,fK)=>{"use strict";var{handleHDBError:_O,hdbErrors:hfe}=_e(),{HTTP_STATUS_CODES:gO}=hfe,{addUpdateNodeValidator:Efe}=wT(),bh=Q(),UT=(q(),M(z)),dK=Pt(),E0e=ae(),Ah=hr(),Ih=ta(),SO=me(),{cloneDeep:_fe}=require("lodash"),gfe=mO(),{Node:Sfe,NodeSubscription:Tfe}=tf(),{broadcast:yfe}=nt(),{setNode:Rfe}=(sf(),M(nf)),bfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Afe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ife=SO.get(UT.CONFIG_PARAMS.CLUSTERING_NODENAME);fK.exports=wfe;async function wfe(e){if(bh.trace("updateNode called with:",e),SO.get(UT.CONFIG_PARAMS.REPLICATION_URL)??SO.get(UT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Rfe(e);Ih.checkClusteringEnabled();let t=Efe(e);if(t)throw _O(t,t.message,gO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Ih.getNodeRecord(r);s.length>0&&(n=_fe(s));let{added:i,skipped:a}=await gfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=bfe,c;let l=Ih.buildNodePayloads(i,Ife,UT.OPERATIONS_ENUM.UPDATE_NODE,await Ih.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];bh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}bh.trace("updateNode sending remote payload:",l);let u;try{u=await Ah.request(`${r}.${dK.REQUEST_SUFFIX}`,l)}catch(d){bh.error(`updateNode received error from request: ${d}`);let f=Ah.requestErrorHandler(d,"update_node",r);throw _O(new Error,f,gO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===dK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw _O(new Error,d,gO.INTERNAL_SERVER_ERROR,"error",d)}bh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Ah.updateRemoteConsumer(m,r),m.subscribe===!0?await Ah.updateConsumerIterator(m.schema,m.table,r,"start"):await Ah.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Sfe(r,[],u.system_info)]),await Nfe(n[0],i,u.system_info),a.length>0?c.message=Afe:c.message=`Successfully updated '${r}'`,c}o(wfe,"updateNode");async function Nfe(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 Tfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Ih.upsertNodeRecord(n),yfe({type:"nats_update"})}o(Nfe,"updateNodeTable")});var _K=v((S0e,EK)=>{"use strict";var hK=require("joi"),{string:mK}=hK.types(),Cfe=ft(),pK=(q(),M(z)),Ofe=me(),Pfe=Pt();EK.exports=Lfe;function Lfe(e){let t=mK.invalid(Ofe.get(pK.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Pfe.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=hK.object({operation:mK.valid(pK.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Cfe.validateBySchema(e,r)}o(Lfe,"removeNodeValidator")});var xT=v((y0e,RK)=>{"use strict";var{handleHDBError:gK,hdbErrors:Dfe}=_e(),{HTTP_STATUS_CODES:SK}=Dfe,Mfe=_K(),wh=Q(),TK=ta(),vfe=ae(),of=(q(),M(z)),yK=Pt(),yO=hr(),RO=me(),{RemotePayloadObject:Ufe}=gh(),{NodeSubscription:xfe}=tf(),Bfe=op(),Ffe=Rl(),{broadcast:kfe}=nt(),{setNode:Hfe}=(sf(),M(nf)),Gfe=RO.get(of.CONFIG_PARAMS.CLUSTERING_NODENAME);RK.exports=qfe;async function qfe(e){if(wh.trace("removeNode called with:",e),RO.get(of.CONFIG_PARAMS.REPLICATION_URL)??RO.get(of.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Hfe(e);TK.checkClusteringEnabled();let t=Mfe(e);if(t)throw gK(t,t.message,SK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await TK.getNodeRecord(r);if(vfe.isEmptyOrZeroLength(n))throw gK(new Error,`Node '${r}' was not found.`,SK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Ufe(of.OPERATIONS_ENUM.REMOVE_NODE,Gfe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await yO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await yO.updateRemoteConsumer(new xfe(d.schema,d.table,!1,!1),r)}catch(f){wh.error(f)}}try{i=await yO.request(`${r}.${yK.REQUEST_SUFFIX}`,s),wh.trace("Remove node reply from remote node:",r,i)}catch(l){wh.error("removeNode received error from request:",l),a=!0}let c=new Bfe(of.SYSTEM_SCHEMA_NAME,of.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Ffe.deleteRecord(c),kfe({type:"nats_update"}),i?.status===yK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(wh.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(qfe,"removeNode")});var IK=v((b0e,AK)=>{"use strict";var bK=require("joi"),{string:$fe,array:Vfe}=bK.types(),Kfe=ft(),Yfe=wT();AK.exports=Wfe;function Wfe(e){let t=bK.object({operation:$fe.valid("configure_cluster").required(),connections:Vfe.items(Yfe.validationSchema).required()});return Kfe.validateBySchema(e,t)}o(Wfe,"configureClusterValidator")});var bO=v((I0e,PK)=>{"use strict";var wK=(q(),M(z)),BT=Q(),zfe=ae(),jfe=me(),Qfe=xT(),Jfe=vT(),Xfe=ta(),Zfe=IK(),{handleHDBError:NK,hdbErrors:eme}=_e(),{HTTP_STATUS_CODES:CK}=eme,tme="Configure cluster complete.",rme="Failed to configure the cluster. Check the logs for more details.",nme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";PK.exports=sme;async function sme(e){BT.trace("configure cluster called with:",e);let t=Zfe(e);if(t)throw NK(t,t.message,CK.BAD_REQUEST,void 0,void 0,!0);let r=await Xfe.getAllNodeRecords(),n=[];if(jfe.get(wK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await OK(Qfe,{operation:wK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}BT.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 OK(Jfe,f,f.node_name);s.push(m)}BT.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"&&(BT.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(zfe.isEmptyOrZeroLength(a))return{message:tme,connections:c};if(l)return{message:nme,failed_nodes:a,connections:c};throw NK(new Error,rme,CK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(sme,"configureCluster");async function OK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(OK,"functionWrapper")});var vK=v((N0e,MK)=>{"use strict";var Nh=require("joi"),ime=ft(),{validateSchemaExists:LK,validateTableExists:ome,validateSchemaName:DK}=Ki(),ame=Nh.object({operation:Nh.string().valid("purge_stream"),schema:Nh.string().custom(LK).custom(DK).optional(),database:Nh.string().custom(LK).custom(DK).optional(),table:Nh.string().custom(ome).required()});function cme(e){return ime.validateBySchema(e,ame)}o(cme,"purgeStreamValidator");MK.exports=cme});var AO=v((O0e,UK)=>{"use strict";var{handleHDBError:lme,hdbErrors:ume}=_e(),{HTTP_STATUS_CODES:dme}=ume,fme=vK(),mme=hr(),pme=ta();UK.exports=hme;async function hme(e){e.schema=e.schema??e.database;let t=fme(e);if(t)throw lme(t,t.message,dme.BAD_REQUEST,void 0,void 0,!0);pme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await mme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(hme,"purgeStream")});var NO=v((L0e,$K)=>{"use strict";var wO=ta(),Eme=hr(),kT=me(),af=(q(),M(z)),Yl=Pt(),_me=ae(),IO=Q(),{RemotePayloadObject:gme}=gh(),{ErrorCode:xK}=require("nats"),{parentPort:BK}=require("worker_threads"),{onMessageByType:Sme}=nt(),{getThisNodeName:Tme}=(ps(),M(Qo)),{requestClusterStatus:yme}=(ch(),M(Q$)),{getReplicationSharedStatus:Rme,getHDBNodeTable:bme}=(qd(),M(K$)),{CONFIRMATION_STATUS_POSITION:Ame,RECEIVED_VERSION_POSITION:FK,RECEIVED_TIME_POSITION:Ime,SENDING_TIME_POSITION:wme,RECEIVING_STATUS_POSITION:Nme,RECEIVING_STATUS_RECEIVING:Cme,BACK_PRESSURE_RATIO_POSITION:Ome}=(xC(),M(qV)),kK=kT.get(af.CONFIG_PARAMS.CLUSTERING_ENABLED),HK=kT.get(af.CONFIG_PARAMS.CLUSTERING_NODENAME);$K.exports={clusterStatus:Pme,buildNodeStatus:qK};var GK;Sme("cluster-status",async e=>{GK(e)});async function Pme(){if(kT.get(af.CONFIG_PARAMS.REPLICATION_URL)||kT.get(af.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(BK){BK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{GK=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=Rme(u,l,a);c.lastCommitConfirmed=FT(d[Ame]),c.lastReceivedRemoteTime=FT(d[FK]),c.lastReceivedLocalTime=FT(d[Ime]),c.lastReceivedVersion=d[FK],c.sendingMessage=FT(d[wme]),c.backPressurePercent=d[Ome]*100,c.lastReceivedStatus=d[Nme]===Cme?"Receiving":"Waiting"}}}else n=yme();n.node_name=Tme();let s=bme().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:HK,is_enabled:kK,connections:[]};if(!kK)return e;let t=await wO.getAllNodeRecords();if(_me.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(qK(t[n],e.connections));return await Promise.allSettled(r),e}o(Pme,"clusterStatus");function FT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(FT,"asDate");async function qK(e,t){let r=e.name,n=new gme(af.OPERATIONS_ENUM.CLUSTER_STATUS,HK,void 0,await wO.getSystemInfo()),s,i,a=Yl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Eme.request(Yl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Yl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Yl.CLUSTER_STATUS_STATUSES.CLOSED,IO.error(`Error getting node status from ${r} `,s))}catch(l){IO.warn(`Error getting node status from ${r}`,l),l.code===xK.NoResponders?a=Yl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===xK.Timeout?a=Yl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Yl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Lme(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 wO.upsertNodeRecord(l)}catch(l){IO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(qK,"buildNodeStatus");function Lme(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(Lme,"NodeStatusObject")});var OO=v((M0e,VK)=>{"use strict";var{handleHDBError:Dme,hdbErrors:Mme}=_e(),{HTTP_STATUS_CODES:vme}=Mme,Ume=hr(),xme=ta(),CO=ae(),HT=require("joi"),Bme=ft(),Fme=2e3,kme=HT.object({timeout:HT.number().min(1),connected_nodes:HT.boolean(),routes:HT.boolean()});VK.exports=Hme;async function Hme(e){xme.checkClusteringEnabled();let t=Bme.validateBySchema(e,kme);if(t)throw Dme(t,t.message,vme.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||CO.autoCastBoolean(n),a=s===void 0||CO.autoCastBoolean(s),c={nodes:[]},l=await Ume.getServerList(r??Fme),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:CO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(Hme,"clusterNetwork")});var zK=v((U0e,WK)=>{"use strict";var PO=require("joi"),KK=ft(),{routeConstraints:YK}=bb();WK.exports={setRoutesValidator:Gme,deleteRoutesValidator:qme};function Gme(e){let t=PO.object({server:PO.valid("hub","leaf"),routes:YK.required()});return KK.validateBySchema(e,t)}o(Gme,"setRoutesValidator");function qme(e){let t=PO.object({routes:YK.required()});return KK.validateBySchema(e,t)}o(qme,"deleteRoutesValidator")});var GT=v((B0e,tY)=>{"use strict";var na=gt(),LO=ae(),Ks=(q(),M(z)),cf=me(),jK=zK(),{handleHDBError:QK,hdbErrors:$me}=_e(),{HTTP_STATUS_CODES:JK}=$me,XK="cluster routes successfully set",ZK="cluster routes successfully deleted";tY.exports={setRoutes:Kme,getRoutes:Yme,deleteRoutes:Wme};function Vme(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=LO.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:XK,set:i,skipped:s}}o(Vme,"setRoutesNats");function Kme(e){let t=jK.setRoutesValidator(e);if(t)throw QK(t,t.message,JK.BAD_REQUEST,void 0,void 0,!0);if(cf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return Vme(e);let r=[],n=[],s=cf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{eY(s,i)?n.push(i):(s.push(i),r.push(i))}),na.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:XK,set:r,skipped:n}}o(Kme,"setRoutes");function eY(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(eY,"existsInArray");function Yme(){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(Yme,"getRoutes");function Wme(e){let t=jK.deleteRoutesValidator(e);if(t)throw QK(t,t.message,JK.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)??[],i=[];return s.forEach(a=>{eY(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),na.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:ZK,deleted:r,skipped:n}}o(Wme,"deleteRoutes");function zme(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=LO.isEmptyOrZeroLength(r)?null:r,na.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=LO.isEmptyOrZeroLength(n)?null:n,na.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:ZK,deleted:s,skipped:i}}o(zme,"deleteRoutesNats")});var nY=v((k0e,rY)=>{"use strict";var jme=Pt(),DO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+jme.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};rY.exports=DO});var oY=v((G0e,iY)=>{"use strict";var sY=Pt(),MO=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+sY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+sY.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"}};iY.exports=MO});var cY=v(($0e,aY)=>{"use strict";var vO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};aY.exports=vO});var uY=v((K0e,lY)=>{"use strict";var Qme=Pt(),UO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Qme.SERVER_SUFFIX.ADMIN,this.password=r}};lY.exports=UO});var KT=v((W0e,mY)=>{"use strict";var Wl=require("path"),zl=require("fs-extra"),Jme=nY(),Xme=oY(),Zme=cY(),epe=uY(),xO=ds(),uf=ae(),Vn=gt(),$T=(q(),M(z)),Ch=Pt(),{CONFIG_PARAMS:ir}=$T,df=Q(),Oh=me(),dY=Xi(),BO=hr(),tpe=Es(),lf="clustering",rpe=1e4,fY=50;mY.exports={generateNatsConfig:spe,removeNatsConfig:ipe,getHubConfigPath:npe};function npe(){let e=Oh.get(ir.ROOTPATH);return Wl.join(e,lf,Ch.NATS_CONFIG_FILES.HUB_SERVER)}o(npe,"getHubConfigPath");async function spe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Oh.get(ir.ROOTPATH);zl.ensureDirSync(Wl.join(r,"clustering","leaf")),Oh.initSync();let n=Vn.getConfigFromFile(ir.CLUSTERING_TLS_CERT_AUTH),s=Vn.getConfigFromFile(ir.CLUSTERING_TLS_PRIVATEKEY),i=Vn.getConfigFromFile(ir.CLUSTERING_TLS_CERTIFICATE);!await zl.exists(i)&&!await zl.exists(!n)&&await tpe.createNatsCerts();let a=Wl.join(r,lf,Ch.PID_FILES.HUB),c=Wl.join(r,lf,Ch.PID_FILES.LEAF),l=Vn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Wl.join(r,lf,Ch.NATS_CONFIG_FILES.HUB_SERVER),d=Wl.join(r,lf,Ch.NATS_CONFIG_FILES.LEAF_SERVER),f=Vn.getConfigFromFile(ir.CLUSTERING_TLS_INSECURE),m=Vn.getConfigFromFile(ir.CLUSTERING_TLS_VERIFY),p=Vn.getConfigFromFile(ir.CLUSTERING_NODENAME),h=Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await BO.checkNATSServerInstalled()||VT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await xO.listUsers(),g=Vn.getConfigFromFile(ir.CLUSTERING_USER),R=await xO.getClusterUser();(uf.isEmpty(R)||R.active!==!0)&&VT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await qT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await qT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await qT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await qT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[X,W]of E.entries())W.role?.role===$T.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(S.push(new epe(W.username,dY.decrypt(W.hash))),y.push(new Zme(W.username,dY.decrypt(W.hash))));let C=[],{hub_routes:I}=Vn.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 Jme(Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NAME),Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),C,S,y);n==null&&(delete k.tls.ca_file,delete k.leafnodes.tls.ca_file),t=uf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===$T.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await zl.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 Xme(Vn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[J],[G],S,y,i,s,n,f);n==null&&delete H.tls.ca_file,(t===void 0||t===$T.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await zl.writeJson(d,H),df.trace(`Leaf server config written to ${d}`))}o(spe,"generateNatsConfig");async function qT(e){let t=Oh.get(e);return uf.isEmpty(t)&&VT(`port undefined for '${e}'`),await uf.isPortTaken(t)&&VT(`'${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(qT,"isPortAvailable");function VT(e){let t=`Error generating clustering config: ${e}`;df.error(t),console.error(t),process.exit(1)}o(VT,"generateNatsConfigError");async function ipe(e){let{port:t,config_file:r}=BO.getServerConfig(e),{username:n,decrypt_hash:s}=await xO.getClusterUser(),i=0,a=2e3;for(;i<fY;){try{let d=await BO.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>=fY)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(rpe),l=Wl.join(Oh.get(ir.ROOTPATH),lf,r);await zl.writeFile(l,c),await zl.remove(l),df.notify(e,"started.")}o(ipe,"removeNatsConfig")});var HO={};Re(HO,{compactOnStart:()=>ope,copyDb:()=>SY});async function ope(){pc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,FO.get)(F.ROOTPATH),t=new Map,r=at();(0,kO.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,YT.join)(e,"backup",n+".mdb"),a=(0,YT.join)(e,qc,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){pc.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 SY(n,a),console.log("Backing up",n,"to",i);try{await(0,jl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{yd()}catch(n){pc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,jl.move)(i,s,{overwrite:!0}),await(0,jl.remove)((0,YT.join)(e,qc,`${n}-copy.mdb-lock`));try{yd()}catch(n){pc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){pc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,kO.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,jl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw 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 Xle(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 fT,jV,QV,ht,FC,Xo,dT,mT=se(()=>{WV();fT=require("easy-ocsp"),jV=require("node:crypto"),QV=b(es());we();qa();ht=(0,QV.loggerWithTag)("cert-verification"),FC=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([Jle(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(zle,"getCertificateCacheTable");o(jle,"getCertificateVerificationConfig");o(jd,"verifyCertificate");o(Qle,"verifyOCSP");o(Jle,"performOCSPCheck");o(zV,"bufferToPem");o(Xle,"extractCertificateChain")});var Qo={};Re(Qo,{clearThisNodeName:()=>aue,disableReplication:()=>rue,enabledDatabases:()=>ac,forEachReplicatedDatabase:()=>rc,getThisNodeId:()=>uT,getThisNodeName:()=>it,getThisNodeUrl:()=>nc,hostnameToUrl:()=>_T,lastTimeInAuditStore:()=>nh,monitorNodeCAs:()=>i1,replicateOperation:()=>lue,replicationCertificateAuthorities:()=>Jo,sendOperationToNode:()=>hh,servers:()=>eue,setReplicator:()=>a1,start:()=>tue,startOnMainThread:()=>mC,subscribeToNode:()=>ah,unsubscribeFromNode:()=>QS,urlToNodeName:()=>gi});function tue(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 ih(e))t.set(gi(s.url),s);nue(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(),fh(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,n1.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=ET.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()}i1(()=>{for(let s of n)s()})}function i1(e){let t=0;Gd(r=>{r?.ca&&(Jo.add(r.ca),Jo.size!==t&&(t=Jo.size,e?.()))})}function rue(e=!0){s1=e}function nue(e){s1||(at(),ac=e.databases,rc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||cc;for(let[s,i]of hT){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];a1(r,s,e),UC.get(s)?.forEach(i=>i(s))}}))}function a1(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 o1 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 Zn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===ve.hostname)continue;let E=iue(h,o1.subscription,e);if(E?.isConnected){let g=Hd(t.auditStore,e,h)[cT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new t1.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Zle++,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",ql,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function sue(e,t,r,n,s){let i=hT.get(e);i||hT.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 iue(e,t,r){let n=JV.get(ql);n||(n=new Map,JV.set(ql,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,ql,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function hh(e,t,r){r||(r={}),r.serverName=e.name;let n=await lT(e.url,r),s=fh(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 ah(e){try{r1.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=sue(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=>sh(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function QS({name:e,url:t,database:r}){It.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(jt().primaryStore.getRange({})));let n=hT.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function oue(){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 ZV.X509Certificate((0,e1.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return ql||(ql=$s.default.get("replication_hostname")??gi($s.default.get("replication_url"))??oue()??XV("operationsapi_network_secureport")??XV("operationsapi_network_port")??"127.0.0.1")}function aue(){ql=void 0}function XV(e){let t=$s.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function pT(e){let t=$s.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function uT(e){return rh(e)?.[it()]}function nc(){let e=$s.default.get("replication_url");return e||_T(it())}function _T(e){let t=pT("replication_port");if(t)return`ws://${e}:${t}`;if(t=pT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=pT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=pT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function gi(e){if(e)return new URL(e).hostname}function rc(e,t){for(let n of Object.getOwnPropertyNames(De))r(n);return kp(n=>{r(n)}),Pl((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):cue(n)&&t(s,n,!1)}o(r,"forDatabase")}function cue(e){let t=De[e];for(let r in t)if(t[r].replicate)return!0}function nh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function lue(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=>hh(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,ZV,e1,ET,t1,r1,n1,s1,Zle,eue,Jo,ac,hT,JV,kC,ql,ps=se(()=>{we();qa();Ou();xC();Fr();$s=b(me()),It=b(Q()),ZV=require("crypto");mT();e1=require("fs");ch();qd();q();fC();ET=b(require("node:tls")),t1=b(_e()),r1=require("worker_threads"),n1=b(Es()),Zle=1,eue=[],Jo=$s.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(ET.rootCertificates):new Set;o(tue,"start");o(i1,"monitorNodeCAs");o(rue,"disableReplication");o(nue,"assignReplicationSource");o(a1,"setReplicator");hT=new Map;o(sue,"getSubscriptionConnection");JV=new Map;o(iue,"getRetrievalConnectionByName");o(hh,"sendOperationToNode");o(ah,"subscribeToNode");o(QS,"unsubscribeFromNode");o(oue,"getCommonNameFromCert");o(it,"getThisNodeName");o(aue,"clearThisNodeName");Object.defineProperty(ve,"hostname",{get(){return it()}});o(XV,"getHostFromListeningPort");o(pT,"getPortFromListeningPort");o(uT,"getThisNodeId");ve.replication={getThisNodeId:uT,exportIdMapping:rh};o(nc,"getThisNodeUrl");o(_T,"hostnameToUrl");o(gi,"urlToNodeName");o(rc,"forEachReplicatedDatabase");o(cue,"hasExplicitlyReplicatedTable");o(nh,"lastTimeInAuditStore");o(lue,"replicateOperation")});var RT=v((lxe,f1)=>{"use strict";var Qd=a$(),{validateBySchema:Eh}=ft(),{commonValidators:Jd,schemaRegex:HC}=Ki(),_r=require("joi"),uue=Q(),due=require("uuid").v4,TT=Go(),Xd=(q(),M(z)),fue=require("util"),lc=ls(),{handleHDBError:Zo,hdbErrors:mue,ClientError:$l}=_e(),{HDB_ERROR_MSGS:gT,HTTP_STATUS_CODES:ea}=mue,{SchemaEventMsg:yT}=os(),c1=hr(),{getDatabases:pue}=(we(),M(mt)),{transformReq:Zd}=ae(),{replicateOperation:l1}=(ps(),M(Qo)),{cleanupOrphans:hue}=(ts(),M(L_)),ST=_r.string().min(1).max(Jd.schema_length.maximum).pattern(HC).messages({"string.pattern.base":"{:#label} "+Jd.schema_format.message}),Eue=_r.string().min(1).max(Jd.schema_length.maximum).pattern(HC).messages({"string.pattern.base":"{:#label} "+Jd.schema_format.message}).required(),_ue=_r.string().min(1).max(Jd.schema_length.maximum).pattern(HC).messages({"string.pattern.base":"{:#label} "+Jd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();f1.exports={createSchema:gue,createSchemaStructure:u1,createTable:Sue,createTableStructure:d1,createAttribute:Aue,dropSchema:Tue,dropTable:yue,dropAttribute:Rue,getBackup:Iue,cleanupOrphanBlobs:wue};async function gue(e){let t=await u1(e);return TT.signalSchemaChange(new yT(process.pid,e.operation,e.schema)),t}o(gue,"createSchema");async function u1(e){let t=Eh(e,_r.object({database:ST,schema:ST}));if(t)throw new $l(t.message);if(Zd(e),!await Qd.checkSchemaExists(e.schema))throw Zo(new Error,gT.SCHEMA_EXISTS_ERR(e.schema),ea.BAD_REQUEST,Xd.LOG_LEVELS.ERROR,gT.SCHEMA_EXISTS_ERR(e.schema),!0);return await lc.createSchema(e),`database '${e.schema}' successfully created`}o(u1,"createSchemaStructure");async function Sue(e){return Zd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await d1(e)}o(Sue,"createTable");async function d1(e){let t=Eh(e,_r.object({database:ST,schema:ST,table:Eue,residence:_r.array().items(_r.string().min(1)).optional(),hash_attribute:_ue}));if(t)throw new $l(t.message);if(!await Qd.checkSchemaTableExists(e.schema,e.table))throw Zo(new Error,gT.TABLE_EXISTS_ERR(e.schema,e.table),ea.BAD_REQUEST,Xd.LOG_LEVELS.ERROR,gT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:due(),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(d1,"createTableStructure");async function Tue(e){let t=Eh(e,_r.object({database:_r.string(),schema:_r.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new $l(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),TT.signalSchemaChange(new yT(process.pid,e.operation,e.schema)),await c1.purgeSchemaTableStreams(e.schema,s);let i=await l1(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Tue,"dropSchema");async function yue(e){let t=Eh(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required()}));if(t)throw new $l(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 c1.purgeTableStream(e.schema,e.table);let n=await l1(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(yue,"dropTable");async function Rue(e){let t=Eh(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required(),attribute:_r.string().required()}));if(t)throw new $l(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),bue(e),TT.signalSchemaChange(new yT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw uue.error(`Got an error deleting attribute ${fue.inspect(e)}.`),n}}o(Rue,"dropAttribute");function bue(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(bue,"dropAttributeFromGlobal");async function Aue(e){Zd(e);let t=pue()[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),TT.signalSchemaChange(new yT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Aue,"createAttribute");function Iue(e){return lc.getBackup(e)}o(Iue,"getBackup");function wue(e){if(!e.database)throw new $l('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new $l(`Unknown database '${e.database}'`);return hue(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}o(wue,"cleanupOrphanBlobs")});var p1=v((dxe,m1)=>{"use strict";var{OPERATIONS_ENUM:Nue}=(q(),M(z)),GC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Nue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};m1.exports=GC});var qC=v((pxe,S1)=>{"use strict";var Cue=ls(),mxe=p1(),bT=ae(),AT=(q(),M(z)),Oue=me(),{handleHDBError:h1,hdbErrors:Pue}=_e(),{HDB_ERROR_MSGS:E1,HTTP_STATUS_CODES:_1}=Pue,Lue=Object.values(AT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),g1="To use this operation audit log must be enabled in harperdb-config.yaml";S1.exports=Due;async function Due(e){if(bT.isEmpty(e.schema))throw new Error(E1.SCHEMA_REQUIRED_ERR);if(bT.isEmpty(e.table))throw new Error(E1.TABLE_REQUIRED_ERR);if(!Oue.get(AT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw h1(new Error,g1,_1.BAD_REQUEST,AT.LOG_LEVELS.ERROR,g1,!0);let t=bT.checkSchemaTableExist(e.schema,e.table);if(t)throw h1(new Error,t,_1.NOT_FOUND,AT.LOG_LEVELS.ERROR,t,!0);if(!bT.isEmpty(e.search_type)&&Lue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Cue.readAuditLog(e)}o(Due,"readAuditLog")});var y1=v((Exe,T1)=>{"use strict";var{OPERATIONS_ENUM:Mue}=(q(),M(z)),$C=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Mue.GET_BACKUP,this.schema=t,this.table=r}};T1.exports=$C});var A1=v((Txe,b1)=>{"use strict";var vue=ls(),gxe=y1(),VC=ae(),Uue=(q(),M(z)),Sxe=me(),{handleHDBError:xue,hdbErrors:Bue}=_e(),{HDB_ERROR_MSGS:R1,HTTP_STATUS_CODES:Fue}=Bue;b1.exports=kue;async function kue(e){if(VC.isEmpty(e.schema))throw new Error(R1.SCHEMA_REQUIRED_ERR);if(VC.isEmpty(e.table))throw new Error(R1.TABLE_REQUIRED_ERR);let t=VC.checkSchemaTableExist(e.schema,e.table);if(t)throw xue(new Error,t,Fue.NOT_FOUND,Uue.LOG_LEVELS.ERROR,t,!0);return await vue.getBackup(readAuditLogObject)}o(kue,"getBackup")});var C1=v((Rxe,N1)=>{"use strict";var Hue=me(),uc=require("joi"),Gue=ft(),I1=require("moment"),que=require("fs-extra"),KC=require("path"),$ue=require("lodash"),_h=(q(),M(z)),{LOG_LEVELS:Vl}=(q(),M(z)),Vue="YYYY-MM-DD hh:mm:ss",Kue=KC.resolve(__dirname,"../logs");N1.exports=function(e){return Gue.validateBySchema(e,Yue)};var Yue=uc.object({from:uc.custom(w1),until:uc.custom(w1),level:uc.valid(Vl.NOTIFY,Vl.FATAL,Vl.ERROR,Vl.WARN,Vl.INFO,Vl.DEBUG,Vl.TRACE),order:uc.valid("asc","desc"),limit:uc.number().min(1),start:uc.number().min(0),log_name:uc.custom(Wue)});function w1(e,t){if(I1(e,I1.ISO_8601).format(Vue)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(w1,"validateDatetime");function Wue(e,t){if($ue.invert(_h.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Hue.get(_h.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?_h.LOG_NAMES.HDB:e,i=s===_h.LOG_NAMES.INSTALL?KC.join(Kue,_h.LOG_NAMES.INSTALL):KC.join(n,s);return que.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Wue,"validateReadLogPath")});var WC=v((Axe,P1)=>{"use strict";var IT=(q(),M(z)),zue=Q(),jue=me(),Que=C1(),YC=require("path"),O1=require("fs-extra"),{once:Jue}=require("events"),{handleHDBError:Xue,hdbErrors:Zue}=_e(),{PACKAGE_ROOT:ede}=Ct(),{replicateOperation:tde}=(ps(),M(Qo)),rde=YC.join(ede,"logs"),nde=1e3,sde=200;P1.exports=ide;async function ide(e){let t=Que(e);if(t)throw Xue(t,t.message,Zue.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=tde(e),n=jue.get(IT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?IT.LOG_NAMES.HDB:e.log_name,i=s===IT.LOG_NAMES.INSTALL?YC.join(rde,IT.LOG_NAMES.INSTALL):YC.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?nde: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(O1.statSync(i).size-(E+5)*sde,0));let R=O1.createReadStream(i,{start:g});R.on("error",G=>{zue.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 Jue(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(ide,"readLog");function co(e,t,r){t==="desc"?ode(e,r):t==="asc"?ade(e,r):r.push(e)}o(co,"pushLineToResult");function ode(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(ode,"insertDescending");function ade(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(ade,"insertAscending")});var wT=v((Pxe,v1)=>{"use strict";var zC=require("joi"),{string:ef,boolean:L1,date:cde}=zC.types(),lde=ft(),{validateSchemaExists:wxe,validateTableExists:Nxe,validateSchemaName:Cxe}=Ki(),ude=(q(),M(z)),dde=Pt(),D1=me();D1.initSync();var Oxe=ef.invalid(D1.get(ude.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(dde.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),M1={operation:ef.valid("add_node","update_node","set_node_replication"),node_name:ef.optional(),subscriptions:zC.array().items({table:ef.optional(),schema:ef.optional(),database:ef.optional(),subscribe:L1.required(),publish:L1.required().custom(mde),start_time:cde.iso()})};function fde(e){return lde.validateBySchema(e,zC.object(M1))}o(fde,"addUpdateNodeValidator");function mde(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(mde,"checkForFalsy");v1.exports={addUpdateNodeValidator:fde,validationSchema:M1}});var tf=v((Dxe,U1)=>{"use strict";var jC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},QC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};U1.exports={Node:jC,NodeSubscription:QC}});var B1=v((vxe,x1)=>{"use strict";var pde=(q(),M(z)).OPERATIONS_ENUM,JC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=pde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};x1.exports=JC});var gh=v((xxe,F1)=>{"use strict";var XC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},ZC=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)}};F1.exports={RemotePayloadObject:XC,RemotePayloadSubscription:ZC}});var H1=v((Fxe,k1)=>{"use strict";var eO=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}};k1.exports=eO});var q1=v((Vxe,G1)=>{"use strict";var hde=H1(),Hxe=Yt(),Gxe=St(),Ede=Q(),{getSchemaPath:qxe,getTransactionAuditStorePath:$xe}=Rt(),{getDatabases:_de}=(we(),M(mt));G1.exports=gde;async function gde(e){let t=new hde;try{let r=_de()[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){Ede.warn(`unable to stat table dbi due to ${r}`)}return t}o(gde,"lmdbGetTableSize")});var V1=v((Yxe,$1)=>{"use strict";var tO=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}};$1.exports=tO});var Th=v((Xxe,z1)=>{"use strict";var Sde=require("fs-extra"),Tde=require("path"),Rn=require("systeminformation"),dc=Q(),K1=hr(),zxe=Pt(),rf=(q(),M(z)),yde=q1(),Rde=Dl(),{getThreadInfo:Y1}=nt(),Sh=me();Sh.initSync();var bde=V1(),{openEnvironment:jxe}=St(),{getSchemaPath:Qxe}=Rt(),{database:Jxe,databases:rO}=(we(),M(mt)),NT;z1.exports={getHDBProcessInfo:oO,getNetworkInfo:cO,getDiskInfo:aO,getMemoryInfo:iO,getCPUInfo:sO,getTimeInfo:nO,getSystemInformation:lO,systemInformation:Ade,getTableSize:uO,getMetrics:dO};function nO(){return Rn.time()}o(nO,"getTimeInfo");async function sO(){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(sO,"getCPUInfo");async function iO(){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(iO,"getMemoryInfo");async function oO(){let e={core:[],clustering:[]};try{let t=await Rn.processes(),r;try{r=Number.parseInt(await Sde.readFile(Tde.join(Sh.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(oO,"getHDBProcessInfo");async function aO(){let e={};try{if(!Sh.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(aO,"getDiskInfo");async function cO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Sh.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(cO,"getNetworkInfo");async function lO(){if(NT!==void 0)return NT;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,NT=e,NT}catch(t){return dc.error(`error in getSystemInformation: ${t}`),e}}o(lO,"getSystemInformation");async function uO(){let e=[],t=await Rde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await yde(n));return e}o(uO,"getTableSize");async function dO(){let e={};for(let t in rO){let r=e[t]={},n=r.tables={};for(let s in rO[t])try{let i=rO[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(dO,"getMetrics");async function W1(){if(Sh.get(rf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await K1.getNATSReferences(),t=await K1.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(W1,"getNatsStreamInfo");async function Ade(e){let t=new bde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await lO(),t.time=nO(),t.cpu=await sO(),t.memory=await iO(),t.disk=await aO(),t.network=await cO(),t.harperdb_processes=await oO(),t.table_size=await uO(),t.metrics=await dO(),t.threads=await Y1(),t.replication=await W1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await lO();break;case"time":t.time=nO();break;case"cpu":t.cpu=await sO();break;case"memory":t.memory=await iO();break;case"disk":t.disk=await aO();break;case"network":t.network=await cO();break;case"harperdb_processes":t.harperdb_processes=await oO();break;case"table_size":t.table_size=await uO();break;case"database_metrics":case"metrics":t.metrics=await dO();break;case"threads":t.threads=await Y1();break;case"replication":t.replication=await W1();break;default:break}return t}o(Ade,"systemInformation")});var ta=v((n0e,X1)=>{"use strict";var Ide=Gn(),fO=ae(),wde=require("util"),Kl=(q(),M(z)),j1=me();j1.initSync();var Nde=MN(),Q1=_n(),{Node:e0e,NodeSubscription:t0e}=tf(),Cde=rd(),Ode=B1(),{RemotePayloadObject:Pde,RemotePayloadSubscription:Lde}=gh(),{handleHDBError:Dde,hdbErrors:Mde}=_e(),{HTTP_STATUS_CODES:vde,HDB_ERROR_MSGS:Ude}=Mde,xde=di(),Bde=Th(),{packageJson:Fde}=Ct(),{getDatabases:kde}=(we(),M(mt)),r0e=wde.promisify(Nde.authorize),Hde=Q1.searchByHash,Gde=Q1.searchByValue;X1.exports={isEmpty:qde,getNodeRecord:$de,upsertNodeRecord:Vde,buildNodePayloads:Kde,checkClusteringEnabled:Yde,getAllNodeRecords:Wde,getSystemInfo:zde,reverseSubscription:J1};function qde(e){return e==null}o(qde,"isEmpty");async function $de(e){let t=new Cde(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Hde(t)}o($de,"getNodeRecord");async function Vde(e){let t=new Ode(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Ide.upsert(t)}o(Vde,"upsertNodeRecord");function J1(e){if(fO.isEmpty(e.subscribe)||fO.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(J1,"reverseSubscription");function Kde(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=fO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=J1(c),p=kde()[l]?.[u],h=new Lde(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Pde(r,t,s,n)}o(Kde,"buildNodePayloads");function Yde(){if(!j1.get(Kl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Dde(new Error,Ude.CLUSTERING_NOT_ENABLED,vde.BAD_REQUEST,void 0,void 0,!0)}o(Yde,"checkClusteringEnabled");async function Wde(){let e=new xde(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Gde(e))}o(Wde,"getAllNodeRecords");async function zde(){let e=await Bde.getSystemInformation();return{hdb_version:Fde.version,node_version:e.node_version,platform:e.platform}}o(zde,"getSystemInfo")});var mO=v((i0e,oK)=>{"use strict";var CT=hr(),Z1=ae(),eK=Pt(),tK=(q(),M(z)),OT=Q(),rK=RT(),jde=ap(),{RemotePayloadObject:Qde}=gh(),{handleHDBError:nK,hdbErrors:Jde}=_e(),{HTTP_STATUS_CODES:sK}=Jde,{NodeSubscription:iK}=tf();oK.exports=Xde;async function Xde(e,t){let r;try{r=await CT.request(`${t}.${eK.REQUEST_SUFFIX}`,new Qde(tK.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),OT.trace("Response from remote describe all request:",r)}catch(a){OT.error(`addNode received error from describe all request to remote node: ${a}`);let c=CT.requestErrorHandler(a,"add_node",t);throw nK(new Error,c,sK.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===eK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw nK(new Error,a,sK.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===tK.SYSTEM_SCHEMA_NAME){await CT.createLocalTableStream(l,c);let h=new iK(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=Z1.doesSchemaExist(l),d=n[l]!==void 0,f=c?Z1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(OT.trace(`addNode creating schema: ${l}`),await rK.createSchema({operation:"create_schema",schema:l})),!f&&m){OT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new jde(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await rK.createTable(h)}await CT.createLocalTableStream(l,c);let p=new iK(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(Xde,"reviewSubscriptions")});var nf={};Re(nf,{addNodeBack:()=>pO,removeNodeBack:()=>hO,setNode:()=>rfe});async function rfe(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=gi(t)):t=_T(r);let n=(0,cK.validateBySchema)(e,tfe);if(n)throw(0,ra.handleHDBError)(n,n.message,efe.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 hh({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(aK):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=aK(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 hh({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:Zde.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??gi(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 pO(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 hO(e){_s.trace("removeNodeBack received request:",e),await jt().delete(e.name)}function aK(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Vs,cK,fc,mc,_s,ra,Zde,efe,tfe,sf=se(()=>{Vs=b(Es()),cK=b(ft()),fc=b(require("joi")),mc=b(me());q();ch();qd();ps();_s=b(Q()),ra=b(_e()),{pki:Zde}=require("node-forge"),{HTTP_STATUS_CODES:efe}=ra.hdbErrors,tfe=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(rfe,"setNode");o(pO,"addNodeBack");o(hO,"removeNodeBack");o(aK,"reverseSubscription")});var vT=v((p0e,uK)=>{"use strict";var{handleHDBError:PT,hdbErrors:nfe}=_e(),{HTTP_STATUS_CODES:LT}=nfe,{addUpdateNodeValidator:sfe}=wT(),DT=Q(),MT=(q(),M(z)),lK=Pt(),ife=ae(),yh=hr(),Rh=ta(),EO=me(),ofe=mO(),{Node:afe,NodeSubscription:cfe}=tf(),{broadcast:lfe}=nt(),{setNode:ufe}=(sf(),M(nf)),f0e=me(),m0e=(q(),M(z)),dfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",ffe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",mfe=EO.get(MT.CONFIG_PARAMS.CLUSTERING_NODENAME);uK.exports=pfe;async function pfe(e,t=!1){if(DT.trace("addNode called with:",e),EO.get(MT.CONFIG_PARAMS.REPLICATION_URL)||EO.get(MT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ufe(e);Rh.checkClusteringEnabled();let r=sfe(e);if(r)throw PT(r,r.message,LT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Rh.getNodeRecord(n);if(!ife.isEmptyOrZeroLength(f))throw PT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,LT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await ofe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=dfe,a;let c=Rh.buildNodePayloads(s,mfe,MT.OPERATIONS_ENUM.ADD_NODE,await Rh.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 cfe(p.schema,p.table,p.publish,p.subscribe))}DT.trace("addNode sending remote payload:",c);let u;try{u=await yh.request(`${n}.${lK.REQUEST_SUFFIX}`,c)}catch(f){DT.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 yh.updateRemoteConsumer(E,n)}let m=yh.requestErrorHandler(f,"add_node",n);throw PT(new Error,m,LT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===lK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw PT(new Error,f,LT.INTERNAL_SERVER_ERROR,"error",f)}DT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await yh.updateRemoteConsumer(p,n),p.subscribe===!0&&await yh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new afe(n,l,u.system_info);return await Rh.upsertNodeRecord(d),lfe({type:"nats_update"}),i.length>0?a.message=ffe:a.message=`Successfully added '${n}' to manifest`,a}o(pfe,"addNode")});var TO=v((_0e,fK)=>{"use strict";var{handleHDBError:_O,hdbErrors:hfe}=_e(),{HTTP_STATUS_CODES:gO}=hfe,{addUpdateNodeValidator:Efe}=wT(),bh=Q(),UT=(q(),M(z)),dK=Pt(),E0e=ae(),Ah=hr(),Ih=ta(),SO=me(),{cloneDeep:_fe}=require("lodash"),gfe=mO(),{Node:Sfe,NodeSubscription:Tfe}=tf(),{broadcast:yfe}=nt(),{setNode:Rfe}=(sf(),M(nf)),bfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Afe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ife=SO.get(UT.CONFIG_PARAMS.CLUSTERING_NODENAME);fK.exports=wfe;async function wfe(e){if(bh.trace("updateNode called with:",e),SO.get(UT.CONFIG_PARAMS.REPLICATION_URL)??SO.get(UT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Rfe(e);Ih.checkClusteringEnabled();let t=Efe(e);if(t)throw _O(t,t.message,gO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Ih.getNodeRecord(r);s.length>0&&(n=_fe(s));let{added:i,skipped:a}=await gfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=bfe,c;let l=Ih.buildNodePayloads(i,Ife,UT.OPERATIONS_ENUM.UPDATE_NODE,await Ih.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];bh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}bh.trace("updateNode sending remote payload:",l);let u;try{u=await Ah.request(`${r}.${dK.REQUEST_SUFFIX}`,l)}catch(d){bh.error(`updateNode received error from request: ${d}`);let f=Ah.requestErrorHandler(d,"update_node",r);throw _O(new Error,f,gO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===dK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw _O(new Error,d,gO.INTERNAL_SERVER_ERROR,"error",d)}bh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Ah.updateRemoteConsumer(m,r),m.subscribe===!0?await Ah.updateConsumerIterator(m.schema,m.table,r,"start"):await Ah.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Sfe(r,[],u.system_info)]),await Nfe(n[0],i,u.system_info),a.length>0?c.message=Afe:c.message=`Successfully updated '${r}'`,c}o(wfe,"updateNode");async function Nfe(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 Tfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Ih.upsertNodeRecord(n),yfe({type:"nats_update"})}o(Nfe,"updateNodeTable")});var _K=v((S0e,EK)=>{"use strict";var hK=require("joi"),{string:mK}=hK.types(),Cfe=ft(),pK=(q(),M(z)),Ofe=me(),Pfe=Pt();EK.exports=Lfe;function Lfe(e){let t=mK.invalid(Ofe.get(pK.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Pfe.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=hK.object({operation:mK.valid(pK.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Cfe.validateBySchema(e,r)}o(Lfe,"removeNodeValidator")});var xT=v((y0e,RK)=>{"use strict";var{handleHDBError:gK,hdbErrors:Dfe}=_e(),{HTTP_STATUS_CODES:SK}=Dfe,Mfe=_K(),wh=Q(),TK=ta(),vfe=ae(),of=(q(),M(z)),yK=Pt(),yO=hr(),RO=me(),{RemotePayloadObject:Ufe}=gh(),{NodeSubscription:xfe}=tf(),Bfe=op(),Ffe=Rl(),{broadcast:kfe}=nt(),{setNode:Hfe}=(sf(),M(nf)),Gfe=RO.get(of.CONFIG_PARAMS.CLUSTERING_NODENAME);RK.exports=qfe;async function qfe(e){if(wh.trace("removeNode called with:",e),RO.get(of.CONFIG_PARAMS.REPLICATION_URL)??RO.get(of.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Hfe(e);TK.checkClusteringEnabled();let t=Mfe(e);if(t)throw gK(t,t.message,SK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await TK.getNodeRecord(r);if(vfe.isEmptyOrZeroLength(n))throw gK(new Error,`Node '${r}' was not found.`,SK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Ufe(of.OPERATIONS_ENUM.REMOVE_NODE,Gfe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await yO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await yO.updateRemoteConsumer(new xfe(d.schema,d.table,!1,!1),r)}catch(f){wh.error(f)}}try{i=await yO.request(`${r}.${yK.REQUEST_SUFFIX}`,s),wh.trace("Remove node reply from remote node:",r,i)}catch(l){wh.error("removeNode received error from request:",l),a=!0}let c=new Bfe(of.SYSTEM_SCHEMA_NAME,of.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Ffe.deleteRecord(c),kfe({type:"nats_update"}),i?.status===yK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(wh.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(qfe,"removeNode")});var IK=v((b0e,AK)=>{"use strict";var bK=require("joi"),{string:$fe,array:Vfe}=bK.types(),Kfe=ft(),Yfe=wT();AK.exports=Wfe;function Wfe(e){let t=bK.object({operation:$fe.valid("configure_cluster").required(),connections:Vfe.items(Yfe.validationSchema).required()});return Kfe.validateBySchema(e,t)}o(Wfe,"configureClusterValidator")});var bO=v((I0e,PK)=>{"use strict";var wK=(q(),M(z)),BT=Q(),zfe=ae(),jfe=me(),Qfe=xT(),Jfe=vT(),Xfe=ta(),Zfe=IK(),{handleHDBError:NK,hdbErrors:eme}=_e(),{HTTP_STATUS_CODES:CK}=eme,tme="Configure cluster complete.",rme="Failed to configure the cluster. Check the logs for more details.",nme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";PK.exports=sme;async function sme(e){BT.trace("configure cluster called with:",e);let t=Zfe(e);if(t)throw NK(t,t.message,CK.BAD_REQUEST,void 0,void 0,!0);let r=await Xfe.getAllNodeRecords(),n=[];if(jfe.get(wK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await OK(Qfe,{operation:wK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}BT.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 OK(Jfe,f,f.node_name);s.push(m)}BT.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"&&(BT.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(zfe.isEmptyOrZeroLength(a))return{message:tme,connections:c};if(l)return{message:nme,failed_nodes:a,connections:c};throw NK(new Error,rme,CK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(sme,"configureCluster");async function OK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(OK,"functionWrapper")});var vK=v((N0e,MK)=>{"use strict";var Nh=require("joi"),ime=ft(),{validateSchemaExists:LK,validateTableExists:ome,validateSchemaName:DK}=Ki(),ame=Nh.object({operation:Nh.string().valid("purge_stream"),schema:Nh.string().custom(LK).custom(DK).optional(),database:Nh.string().custom(LK).custom(DK).optional(),table:Nh.string().custom(ome).required()});function cme(e){return ime.validateBySchema(e,ame)}o(cme,"purgeStreamValidator");MK.exports=cme});var AO=v((O0e,UK)=>{"use strict";var{handleHDBError:lme,hdbErrors:ume}=_e(),{HTTP_STATUS_CODES:dme}=ume,fme=vK(),mme=hr(),pme=ta();UK.exports=hme;async function hme(e){e.schema=e.schema??e.database;let t=fme(e);if(t)throw lme(t,t.message,dme.BAD_REQUEST,void 0,void 0,!0);pme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await mme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(hme,"purgeStream")});var NO=v((L0e,$K)=>{"use strict";var wO=ta(),Eme=hr(),kT=me(),af=(q(),M(z)),Yl=Pt(),_me=ae(),IO=Q(),{RemotePayloadObject:gme}=gh(),{ErrorCode:xK}=require("nats"),{parentPort:BK}=require("worker_threads"),{onMessageByType:Sme}=nt(),{getThisNodeName:Tme}=(ps(),M(Qo)),{requestClusterStatus:yme}=(ch(),M(Q$)),{getReplicationSharedStatus:Rme,getHDBNodeTable:bme}=(qd(),M(K$)),{CONFIRMATION_STATUS_POSITION:Ame,RECEIVED_VERSION_POSITION:FK,RECEIVED_TIME_POSITION:Ime,SENDING_TIME_POSITION:wme,RECEIVING_STATUS_POSITION:Nme,RECEIVING_STATUS_RECEIVING:Cme,BACK_PRESSURE_RATIO_POSITION:Ome}=(xC(),M(qV)),kK=kT.get(af.CONFIG_PARAMS.CLUSTERING_ENABLED),HK=kT.get(af.CONFIG_PARAMS.CLUSTERING_NODENAME);$K.exports={clusterStatus:Pme,buildNodeStatus:qK};var GK;Sme("cluster-status",async e=>{GK(e)});async function Pme(){if(kT.get(af.CONFIG_PARAMS.REPLICATION_URL)||kT.get(af.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;BK?(BK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{GK=i})):n=yme();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=Rme(u,l,a);c.lastCommitConfirmed=FT(d[Ame]),c.lastReceivedRemoteTime=FT(d[FK]),c.lastReceivedLocalTime=FT(d[Ime]),c.lastReceivedVersion=d[FK],c.sendingMessage=FT(d[wme]),c.backPressurePercent=d[Ome]*100,c.lastReceivedStatus=d[Nme]===Cme?"Receiving":"Waiting"}}n.node_name=Tme();let s=bme().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:HK,is_enabled:kK,connections:[]};if(!kK)return e;let t=await wO.getAllNodeRecords();if(_me.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(qK(t[n],e.connections));return await Promise.allSettled(r),e}o(Pme,"clusterStatus");function FT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(FT,"asDate");async function qK(e,t){let r=e.name,n=new gme(af.OPERATIONS_ENUM.CLUSTER_STATUS,HK,void 0,await wO.getSystemInfo()),s,i,a=Yl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Eme.request(Yl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Yl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Yl.CLUSTER_STATUS_STATUSES.CLOSED,IO.error(`Error getting node status from ${r} `,s))}catch(l){IO.warn(`Error getting node status from ${r}`,l),l.code===xK.NoResponders?a=Yl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===xK.Timeout?a=Yl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Yl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Lme(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 wO.upsertNodeRecord(l)}catch(l){IO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(qK,"buildNodeStatus");function Lme(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(Lme,"NodeStatusObject")});var OO=v((M0e,VK)=>{"use strict";var{handleHDBError:Dme,hdbErrors:Mme}=_e(),{HTTP_STATUS_CODES:vme}=Mme,Ume=hr(),xme=ta(),CO=ae(),HT=require("joi"),Bme=ft(),Fme=2e3,kme=HT.object({timeout:HT.number().min(1),connected_nodes:HT.boolean(),routes:HT.boolean()});VK.exports=Hme;async function Hme(e){xme.checkClusteringEnabled();let t=Bme.validateBySchema(e,kme);if(t)throw Dme(t,t.message,vme.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||CO.autoCastBoolean(n),a=s===void 0||CO.autoCastBoolean(s),c={nodes:[]},l=await Ume.getServerList(r??Fme),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:CO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(Hme,"clusterNetwork")});var zK=v((U0e,WK)=>{"use strict";var PO=require("joi"),KK=ft(),{routeConstraints:YK}=bb();WK.exports={setRoutesValidator:Gme,deleteRoutesValidator:qme};function Gme(e){let t=PO.object({server:PO.valid("hub","leaf"),routes:YK.required()});return KK.validateBySchema(e,t)}o(Gme,"setRoutesValidator");function qme(e){let t=PO.object({routes:YK.required()});return KK.validateBySchema(e,t)}o(qme,"deleteRoutesValidator")});var GT=v((B0e,tY)=>{"use strict";var na=gt(),LO=ae(),Ks=(q(),M(z)),cf=me(),jK=zK(),{handleHDBError:QK,hdbErrors:$me}=_e(),{HTTP_STATUS_CODES:JK}=$me,XK="cluster routes successfully set",ZK="cluster routes successfully deleted";tY.exports={setRoutes:Kme,getRoutes:Yme,deleteRoutes:Wme};function Vme(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=LO.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:XK,set:i,skipped:s}}o(Vme,"setRoutesNats");function Kme(e){let t=jK.setRoutesValidator(e);if(t)throw QK(t,t.message,JK.BAD_REQUEST,void 0,void 0,!0);if(cf.get(Ks.CONFIG_PARAMS.CLUSTERING_ENABLED))return Vme(e);let r=[],n=[],s=cf.get(Ks.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{eY(s,i)?n.push(i):(s.push(i),r.push(i))}),na.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:XK,set:r,skipped:n}}o(Kme,"setRoutes");function eY(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(eY,"existsInArray");function Yme(){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(Yme,"getRoutes");function Wme(e){let t=jK.deleteRoutesValidator(e);if(t)throw QK(t,t.message,JK.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)??[],i=[];return s.forEach(a=>{eY(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),na.updateConfigValue(Ks.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:ZK,deleted:r,skipped:n}}o(Wme,"deleteRoutes");function zme(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=LO.isEmptyOrZeroLength(r)?null:r,na.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=LO.isEmptyOrZeroLength(n)?null:n,na.updateConfigValue(Ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:ZK,deleted:s,skipped:i}}o(zme,"deleteRoutesNats")});var nY=v((k0e,rY)=>{"use strict";var jme=Pt(),DO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+jme.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};rY.exports=DO});var oY=v((G0e,iY)=>{"use strict";var sY=Pt(),MO=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+sY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+sY.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"}};iY.exports=MO});var cY=v(($0e,aY)=>{"use strict";var vO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};aY.exports=vO});var uY=v((K0e,lY)=>{"use strict";var Qme=Pt(),UO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Qme.SERVER_SUFFIX.ADMIN,this.password=r}};lY.exports=UO});var KT=v((W0e,mY)=>{"use strict";var Wl=require("path"),zl=require("fs-extra"),Jme=nY(),Xme=oY(),Zme=cY(),epe=uY(),xO=ds(),uf=ae(),Vn=gt(),$T=(q(),M(z)),Ch=Pt(),{CONFIG_PARAMS:ir}=$T,df=Q(),Oh=me(),dY=Xi(),BO=hr(),tpe=Es(),lf="clustering",rpe=1e4,fY=50;mY.exports={generateNatsConfig:spe,removeNatsConfig:ipe,getHubConfigPath:npe};function npe(){let e=Oh.get(ir.ROOTPATH);return Wl.join(e,lf,Ch.NATS_CONFIG_FILES.HUB_SERVER)}o(npe,"getHubConfigPath");async function spe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Oh.get(ir.ROOTPATH);zl.ensureDirSync(Wl.join(r,"clustering","leaf")),Oh.initSync();let n=Vn.getConfigFromFile(ir.CLUSTERING_TLS_CERT_AUTH),s=Vn.getConfigFromFile(ir.CLUSTERING_TLS_PRIVATEKEY),i=Vn.getConfigFromFile(ir.CLUSTERING_TLS_CERTIFICATE);!await zl.exists(i)&&!await zl.exists(!n)&&await tpe.createNatsCerts();let a=Wl.join(r,lf,Ch.PID_FILES.HUB),c=Wl.join(r,lf,Ch.PID_FILES.LEAF),l=Vn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Wl.join(r,lf,Ch.NATS_CONFIG_FILES.HUB_SERVER),d=Wl.join(r,lf,Ch.NATS_CONFIG_FILES.LEAF_SERVER),f=Vn.getConfigFromFile(ir.CLUSTERING_TLS_INSECURE),m=Vn.getConfigFromFile(ir.CLUSTERING_TLS_VERIFY),p=Vn.getConfigFromFile(ir.CLUSTERING_NODENAME),h=Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await BO.checkNATSServerInstalled()||VT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await xO.listUsers(),g=Vn.getConfigFromFile(ir.CLUSTERING_USER),R=await xO.getClusterUser();(uf.isEmpty(R)||R.active!==!0)&&VT(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await qT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await qT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await qT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await qT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[X,W]of E.entries())W.role?.role===$T.ROLE_TYPES_ENUM.CLUSTER_USER&&W.active&&(S.push(new epe(W.username,dY.decrypt(W.hash))),y.push(new Zme(W.username,dY.decrypt(W.hash))));let C=[],{hub_routes:I}=Vn.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 Jme(Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NAME),Vn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),C,S,y);n==null&&(delete k.tls.ca_file,delete k.leafnodes.tls.ca_file),t=uf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===$T.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await zl.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 Xme(Vn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[J],[G],S,y,i,s,n,f);n==null&&delete H.tls.ca_file,(t===void 0||t===$T.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await zl.writeJson(d,H),df.trace(`Leaf server config written to ${d}`))}o(spe,"generateNatsConfig");async function qT(e){let t=Oh.get(e);return uf.isEmpty(t)&&VT(`port undefined for '${e}'`),await uf.isPortTaken(t)&&VT(`'${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(qT,"isPortAvailable");function VT(e){let t=`Error generating clustering config: ${e}`;df.error(t),console.error(t),process.exit(1)}o(VT,"generateNatsConfigError");async function ipe(e){let{port:t,config_file:r}=BO.getServerConfig(e),{username:n,decrypt_hash:s}=await xO.getClusterUser(),i=0,a=2e3;for(;i<fY;){try{let d=await BO.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>=fY)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(rpe),l=Wl.join(Oh.get(ir.ROOTPATH),lf,r);await zl.writeFile(l,c),await zl.remove(l),df.notify(e,"started.")}o(ipe,"removeNatsConfig")});var HO={};Re(HO,{compactOnStart:()=>ope,copyDb:()=>SY});async function ope(){pc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,FO.get)(F.ROOTPATH),t=new Map,r=at();(0,kO.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,YT.join)(e,"backup",n+".mdb"),a=(0,YT.join)(e,qc,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){pc.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 SY(n,a),console.log("Backing up",n,"to",i);try{await(0,jl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{yd()}catch(n){pc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,jl.move)(i,s,{overwrite:!0}),await(0,jl.remove)((0,YT.join)(e,qc,`${n}-copy.mdb-lock`));try{yd()}catch(n){pc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){pc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,kO.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,jl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw 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}`;pc.error(l),console.error(l)}(0,FO.get)(F.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,jl.remove)(s))}}async function pY(e){let t=await(0,gY.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function ff(){}async function SY(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=ff,m.primaryStore.remove=ff;for(let p in m.indices){let h=m.indices[p];h.put=ff,h.remove=ff}m.auditStore&&(m.auditStore.put=ff,m.auditStore.remove=ff),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,hY.open)(new EY.default(t)),c=a.openDB(WT.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=aS(),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 _Y.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(WT.AUDIT_STORE_NAME,Um);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 hY,YT,jl,FO,EY,_Y,WT,gY,kO,pc,GO=se(()=>{we();hY=require("lmdb"),YT=require("path"),jl=require("fs-extra"),FO=b(me()),EY=b(zm()),_Y=b(Wm()),WT=b(Yt());q();Fi();gY=b(Dl()),kO=b(gt()),pc=b(Q());o(ope,"compactOnStart");o(pY,"getTotalDBRecordCount");o(ff,"noop");o(SY,"copyDb")});var $O=v((Z0e,TY)=>{"use strict";var Ph=me();Ph.initSync();var mf=require("fs-extra"),qO=require("path"),pf=(q(),M(z)),ape=require("crypto"),cpe=require("uuid").v4;TY.exports=lpe;function lpe(){if(Ph.getHdbBasePath()!==void 0){let e=qO.join(Ph.getHdbBasePath(),pf.LICENSE_KEY_DIR_NAME,pf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=qO.join(Ph.getHdbBasePath(),pf.LICENSE_KEY_DIR_NAME,pf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=qO.join(Ph.getHdbBasePath(),pf.LICENSE_KEY_DIR_NAME,pf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{mf.accessSync(r),mf.accessSync(e),mf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=cpe(),i=ape.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});mf.writeFileSync(r,s),mf.writeFileSync(e,i.privateKey),mf.writeFileSync(t,i.publicKey)}else throw n}}}o(lpe,"checkJWTTokenExist")});var RY=v((tBe,yY)=>{"use strict";var VO=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};yY.exports={HdbInfoInsertObject:VO}});var IY=v((nBe,AY)=>{"use strict";var bY=(q(),M(z)),KO=class{static{o(this,"UpgradeObject")}constructor(t,r){this[bY.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[bY.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};AY.exports={UpgradeObject:KO}});var zT=v((iBe,NY)=>{"use strict";var Ys=require("prompt"),hf=require("chalk"),wY=Q(),yi=require("os"),YO=$c(),WO=["yes","y"];async function upe(e){let t=`${yi.EOL}`+hf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${yi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${yi.EOL}${yi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${yi.EOL}`;Ys.override=YO(["CONFIRM_UPGRADE"]),Ys.start(),Ys.message=t;let r={properties:{CONFIRM_UPGRADE:{description:hf.magenta(`${yi.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 wY.error("There was an error when prompting user about an upgrade."),wY.error(s),!1}return WO.includes(n.CONFIRM_UPGRADE)}o(upe,"forceUpdatePrompt");async function dpe(e){let t=`${yi.EOL}`+hf.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.${yi.EOL}`);Ys.override=YO(["CONFIRM_DOWNGRADE"]),Ys.start(),Ys.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:hf.magenta(`${yi.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 WO.includes(n.CONFIRM_DOWNGRADE)}o(dpe,"forceDowngradePrompt");async function fpe(){let e=`${yi.EOL}`+hf.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=YO(["GENERATE_CERTS"]),Ys.start(),Ys.message=e;let t={properties:{GENERATE_CERTS:{description:hf.magenta(`${yi.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 WO.includes(r.GENERATE_CERTS)}o(fpe,"upgradeCertsPrompt");NY.exports={forceUpdatePrompt:upe,forceDowngradePrompt:dpe,upgradeCertsPrompt:fpe}});var jT=v((aBe,CY)=>{"use strict";var zO=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};CY.exports=zO});var PY=v((mBe,OY)=>{"use strict";var mpe=ae(),ppe=gt(),lBe=Q(),uBe=require("path"),dBe=require("fs"),fBe=(q(),M(z));OY.exports={getOldPropsValue:hpe};function hpe(e,t,r=!1){let n=t.getRaw(e);return mpe.isNotEmptyAndHasValue(n)?n:r?ppe.getDefaultConfig(e):""}o(hpe,"getOldPropsValue")});var vY=v((hBe,MY)=>{"use strict";var hc=require("path"),Ec=require("fs-extra"),Epe=require("properties-reader"),_pe=jT(),gr=Q(),{getOldPropsValue:Tt}=PY(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:Ql}=(q(),M(z)),Jl=gt(),QT=me(),LY=ae(),lo=(q(),M(z)),jO=new _pe("3.1.0"),DY=[];function gpe(){let e=Epe(QT.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(ma,a);let f=await wi(e);return f.message=`Added ssh key: ${r}${d}`,f}o(fSe,"addSSHKey");async function mSe(e){let t=Yn.updateSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r,key:n}=e;Qt.trace("updating ssh key",r);let s=$e.join(Nc,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 wi(e);return i.message=`Updated ssh key: ${r}`,i}o(mSe,"updateSSHKey");async function pSe(e){let t=Yn.deleteSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r}=e;Qt.trace("deleting ssh key",r);let n=$e.join(Nc,r+".key"),s=$e.join(Nc,"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 wi(e);return c.message=`Deleted ssh key: ${r}`,c}o(pSe,"deleteSSHKey");async function hSe(e){let t=[];return await Oe.pathExists(Nc)&&(await Oe.readdir(Nc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(hSe,"listSSHKeys");async function ESe(e){let t=Yn.setSSHKnownHostsValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{known_hosts:r}=e;await Oe.outputFile(ma,r);let n=await wi(e);return n.message="Known hosts successfully set",n}o(ESe,"setSSHKnownHosts");async function _Se(e){return await Oe.pathExists(ma)?{known_hosts:await Oe.readFile(ma,"utf8")}:{known_hosts:null}}o(_Se,"getSSHKnownHosts");ar.customFunctionsStatus=Xge;ar.getCustomFunctions=Zge;ar.getCustomFunction=eSe;ar.setCustomFunction=tSe;ar.dropCustomFunction=rSe;ar.addComponent=nSe;ar.dropCustomFunctionProject=sSe;ar.packageComponent=iSe;ar.deployComponent=oSe;ar.getComponents=cSe;ar.getComponentFile=lSe;ar.setComponentFile=uSe;ar.dropComponent=dSe;ar.addSSHKey=fSe;ar.updateSSHKey=mSe;ar.deleteSSHKey=pSe;ar.listSSHKeys=hSe;ar.setSSHKnownHosts=ESe;ar.getSSHKnownHosts=_Se});var dL=v((YFe,wj)=>{"use strict";var Qs=require("joi"),Ij=ft();wj.exports={readTransactionLogValidator:gSe,deleteTransactionLogsBeforeValidator:SSe};function gSe(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 Ij.validateBySchema(e,t)}o(gSe,"readTransactionLogValidator");function SSe(e){let t=Qs.object({schema:Qs.string(),database:Qs.string(),table:Qs.string().required(),timestamp:Qs.date().timestamp().required()});return Ij.validateBySchema(e,t)}o(SSe,"deleteTransactionLogsBeforeValidator")});var Gy=v((zFe,Dj)=>{"use strict";var fL=(q(),M(z)),rE=hr(),Nj=ae(),Cj=me(),Oj=Xi(),Pj=Q(),{handleHDBError:ky,hdbErrors:TSe}=_e(),{HTTP_STATUS_CODES:Hy}=TSe,{readTransactionLogValidator:ySe,deleteTransactionLogsBeforeValidator:RSe}=dL(),Lj=ls(),bSe="Logs successfully deleted from transaction log.",ASe="All logs successfully deleted from transaction log.";Dj.exports={readTransactionLog:ISe,deleteTransactionLogsBefore:NSe};async function ISe(e){let t=ySe(e);if(t)throw ky(t,t.message,Hy.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=Nj.checkSchemaTableExist(e.database,e.table);if(r)throw ky(new Error,r,Hy.NOT_FOUND,void 0,void 0,!0);return Cj.get(fL.CONFIG_PARAMS.CLUSTERING_ENABLED)?await wSe(e):(Pj.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)),Lj.readAuditLog(e))}o(ISe,"readTransactionLog");async function*wSe(e){let t=Oj.createNatsTableStreamName(e.database,e.table),r=await rE.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===fL.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(wSe,"readTransactionLogNats");async function NSe(e){let t=RSe(e);if(t)throw ky(t,t.message,Hy.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!Cj.get(fL.CONFIG_PARAMS.CLUSTERING_ENABLED))return Pj.info("Delete transaction logs called for Plexus"),Lj.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=Nj.checkSchemaTableExist(r,n);if(i)throw ky(new Error,i,Hy.NOT_FOUND,void 0,void 0,!0);let a=Oj.createNatsTableStreamName(r,n),{jsm:c}=await rE.getNATSReferences(),l=await rE.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=bSe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=ASe):f=(await rE.viewStream(a,parseInt(s),1))[0].nats_sequence,await rE.purgeTableStream(r,n,{seq:f}),d}o(NSe,"deleteTransactionLogsBefore")});var mL=v((QFe,vj)=>{"use strict";var qy=require("joi"),CSe=require("path"),{handleHDBError:OSe,hdbErrors:PSe}=_e(),{HTTP_STATUS_CODES:LSe}=PSe,DSe=ft(),Mj=Q();vj.exports={installModules:xSe};var{CONFIG_PARAMS:MSe}=(q(),M(z)),{getConfigValue:vSe}=gt(),{nonInteractiveSpawn:USe}=(By(),M(xy));async function xSe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";Mj.warn(t,e.projects);let r=FSe(e);if(r)throw OSe(r,r.message,LSe.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=vSe(MSe.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=CSe.join(i,l);try{let{stdout:d,stderr:f}=USe(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=BSe(d.stderr):a[l].npm_error=d.message;continue}}return Mj.info(`finished installModules with response ${a}`),a.warning=t,a}o(xSe,"installModules");function BSe(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(BSe,"parseNPMStdErr");function FSe(e){let t=qy.object({projects:qy.array().min(1).items(qy.string()).required(),dry_run:qy.boolean().default(!1)});return DSe.validateBySchema(e,t)}o(FSe,"modulesValidator")});var _L={};Re(_L,{describeMetric:()=>Hj,describeMetricOp:()=>EL,get:()=>Fj,getOp:()=>pL,listMetrics:()=>kj,listMetricsOp:()=>hL});async function HSe(e){return(await q_().get(e)).hostname}function Uj(e,t){return e.length===0||e.includes(t)}function pL(e){return nE.trace?.("get_analytics request:",e),Fj(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function Bj(e){return"conditions"in e?{...e,conditions:e.conditions.map(Bj)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function Fj(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(Bj));let a=t??[];Uj(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),nE.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],Uj(a,"node")&&(nE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await HSe(d)),nE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function hL(e){return kj(e.metric_types)}async function kj(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 EL(e){return Hj(e.metric)}async function Hj(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 nE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var xj,kSe,nE,gL=se(()=>{xj=b(Q());EA();_A();({forComponent:kSe}=xj.default),nE=kSe("analytics").conditional;o(HSe,"lookupHostname");o(Uj,"isSelected");o(pL,"getOp");o(Bj,"conformCondition");o(Fj,"get");o(hL,"listMetricsOp");o(kj,"listMetrics");o(EL,"describeMetricOp");o(Hj,"describeMetric")});var $y,Vy,sE,Ky=se(()=>{$y={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},Vy=Object.keys($y),sE="primary"});function qj(e){return Gj.validateBySchema(e,VSe)}var iE,Gj,GSe,qSe,$Se,VSe,$j=se(()=>{iE=b(require("joi")),Gj=b(ft());Ky();GSe=Vy,qSe=Object.entries($y).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),$Se=o(()=>{let e=iE.default.string().min(1).max(512);return Object.entries($y).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:iE.default.string().valid(...r.allowedValues).messages({"any.only":qSe[t]})}))}),e.required()},"createStatusValidationSchema"),VSe=iE.default.object({id:iE.default.string().valid(...GSe).required(),status:$Se()});o(qj,"validateStatus")});function Vj(){SL||(SL=pa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),TL=new Uint8Array(SL))}function Kj(){Vj(),TL[0]=1}function Yj(){return Vj(),TL[0]===1}var SL,TL,yL=se(()=>{oE();o(Vj,"ensureInitialized");o(Kj,"requestRestart");o(Yj,"restartNeeded")});var wL={};Re(wL,{DEFAULT_STATUS_ID:()=>sE,STATUS_IDS:()=>Vy,Status:()=>pa,clear:()=>bL,get:()=>AL,set:()=>IL});function cE(){return RL||(RL=Ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),RL}function bL({id:e}){return aE.debug?.("clearStatus",e),cE().delete(e)}async function YSe(){aE.debug?.("getAllStatus");let e=cE().get({}),t=await bp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=Yj();return{systemStatus:e,componentStatus:r,restartRequired:n}}function AL({id:e}){return e?(aE.debug?.("getStatus",e),cE().get(e)):(aE.debug?.("getStatus","all"),YSe())}function IL({status:e,id:t=sE}){let r=qj({status:e,id:t});if(r)throw(0,Yy.handleHDBError)(r,r.message,KSe.BAD_REQUEST);return aE.debug?.("setStatus",t,e),cE().put(t,{status:e})}var Yy,Wj,KSe,RL,pa,aE,oE=se(()=>{we();Yy=b(_e()),Wj=b(es());$j();Ky();Ap();yL();Ky();({HTTP_STATUS_CODES:KSe}=Yy.hdbErrors);o(cE,"getStatusTable");pa={get primaryStore(){return cE().primaryStore}},aE=(0,Wj.loggerWithTag)("status");o(bL,"clearStatus");o(YSe,"getAllStatus");o(AL,"getStatus");o(IL,"setStatus")});var PL={};Re(PL,{getFingerprint:()=>CL,getRegistrationInfo:()=>NL,setLicense:()=>OL});function NL(){return{version:zj.packageJson.version,deprecated:!0}}function CL(){return{message:"this-is-deprecated",deprecated:!0}}function OL(){return{deprecated:!0}}var zj,LL=se(()=>{zj=b(Ct());o(NL,"getRegistrationInfo");o(CL,"getFingerprint");o(OL,"setLicense")});var Qj=v((Eke,jj)=>{"use strict";var lE=require("alasql"),cu=require("recursive-iterator"),Ni=Q(),WSe=ae(),uE=(q(),M(z)),DL=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,jSe(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=>uE.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=>!uE.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][uE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=zSe(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=>!uE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new lE.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 zSe(e){return e.filter(t=>t[uE.PERMS_CRUD_ENUM.READ])}o(zSe,"filterReadRestrictedAttrs");function jSe(e,t,r,n,s){QSe(e,t,r,n,s)}o(jSe,"interpretAST");function dE(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(dE,"addSchemaTableToMap");function QSe(e,t,r,n,s){if(!e){Ni.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof lE.yy.Insert?eTe(e,t,r):e instanceof lE.yy.Select?JSe(e,t,r,n,s):e instanceof lE.yy.Update?XSe(e,t,r):e instanceof lE.yy.Delete?ZSe(e,t,r):Ni.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(QSe,"getRecordAttributesAST");function JSe(e,t,r,n,s){if(!e){Ni.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(WSe.isEmptyOrZeroLength(i)){Ni.error("No schema specified");return}e.from.forEach(c=>{dE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),dE(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{Ni.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{Ni.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{Ni.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{Ni.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(JSe,"getSelectAttributes");function XSe(e,t,r){if(!e){Ni.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new cu(e.columns),s=e.table.databaseid;dE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&ML(e.table.tableid,s,i.columnid,t,r)}o(XSe,"getUpdateAttributes");function ZSe(e,t,r){if(!e){Ni.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new cu(e.where),s=e.table.databaseid;dE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&ML(e.table.tableid,s,i.columnid,t,r)}o(ZSe,"getDeleteAttributes");function eTe(e,t,r){if(!e){Ni.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new cu(e.columns),s=e.into.databaseid;dE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&ML(e.into.tableid,s,i.columnid,t,r)}o(eTe,"getInsertAttributes");function ML(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(ML,"pushAttribute");jj.exports=DL});var Qy=v((gke,m4)=>{"use strict";var vL=Gn(),Wy=_n(),bs=RT(),pE=Dl(),UL=Rl(),tTe=qC(),rTe=A1(),hE=ds(),zy=Gp(),Or=Q(),nTe=WC(),sTe=vT(),iTe=TO(),oTe=xT(),aTe=bO(),cTe=AO(),lTe=NO(),uTe=OO(),xL=GT(),ha=ae(),Zj=Pf(),wn=(q(),M(z)),e4=Wz(),dTe=Th(),t4=(Ld(),M(Wp)),r4=(My(),M(Jh)),n4=gt(),yr=cL(),s4=Gy(),fTe=mL(),Df=Es(),i4=(sf(),M(nf)),BL=(gL(),M(_L)),FL=(oE(),M(wL)),o4=(Hh(),M(my)),kL=(LL(),M(PL)),a4=WN(),{handleHDBError:Wn,hdbErrors:c4}=_e(),{HDB_ERROR_MSGS:ln,HTTP_STATUS_CODES:fE}=c4,ee=new Map,l4="delete",Cc="insert",Js="read",lu="update",mE="describe",Jj=pE.describeSchema.name,Xj=pE.describeTable.name,u4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},mTe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},pTe="catchup",hTe="handleGetJob",ETe="handleGetJobsByStartDate",jy={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},_Te=[bs.createTable.name,bs.createAttribute.name,bs.dropTable.name,bs.dropAttribute.name],d4={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(vL.insert.name,new re(!1,[Cc]));ee.set(vL.update.name,new re(!1,[lu]));ee.set(vL.upsert.name,new re(!1,[Cc,lu]));ee.set(Wy.searchByConditions.name,new re(!1,[Js]));ee.set(Wy.searchByHash.name,new re(!1,[Js]));ee.set(Wy.searchByValue.name,new re(!1,[Js]));ee.set(Wy.search.name,new re(!1,[Js]));ee.set(bs.createSchema.name,new re(!0,[]));ee.set(bs.createTable.name,new re(!0,[]));ee.set(bs.createAttribute.name,new re(!1,[Cc]));ee.set(bs.dropSchema.name,new re(!0,[]));ee.set(bs.dropTable.name,new re(!0,[]));ee.set(bs.dropAttribute.name,new re(!0,[]));ee.set(pE.describeSchema.name,new re(!1,[Js]));ee.set(pE.describeTable.name,new re(!1,[Js]));ee.set(UL.deleteRecord.name,new re(!1,[l4]));ee.set(hE.addUser.name,new re(!0,[]));ee.set(hE.alterUser.name,new re(!0,[]));ee.set(hE.dropUser.name,new re(!0,[]));ee.set(hE.listUsersExternal.name,new re(!0,[]));ee.set(zy.listRoles.name,new re(!0,[]));ee.set(zy.addRole.name,new re(!0,[]));ee.set(zy.alterRole.name,new re(!0,[]));ee.set(zy.dropRole.name,new re(!0,[]));ee.set(nTe.name,new re(!0,[]));ee.set(sTe.name,new re(!0,[]));ee.set(iTe.name,new re(!0,[]));ee.set(oTe.name,new re(!0,[]));ee.set(aTe.name,new re(!0,[]));ee.set(cTe.name,new re(!0,[]));ee.set(xL.setRoutes.name,new re(!0,[]));ee.set(xL.getRoutes.name,new re(!0,[]));ee.set(xL.deleteRoutes.name,new re(!0,[]));ee.set(n4.setConfiguration.name,new re(!0,[]));ee.set(lTe.clusterStatus.name,new re(!0,[]));ee.set(uTe.name,new re(!0,[]));ee.set(UL.deleteFilesBefore.name,new re(!0,[]));ee.set(UL.deleteAuditLogsBefore.name,new re(!0,[]));ee.set(Zj.restart.name,new re(!0,[]));ee.set(Zj.restartService.name,new re(!0,[]));ee.set(tTe.name,new re(!0,[]));ee.set(rTe.name,new re(!0,[Js]));ee.set(bs.cleanupOrphanBlobs.name,new re(!0,[]));ee.set(dTe.systemInformation.name,new re(!0,[]));ee.set(n4.getConfiguration.name,new re(!0,[]));ee.set(s4.readTransactionLog.name,new re(!0,[]));ee.set(s4.deleteTransactionLogsBefore.name,new re(!0,[]));ee.set(fTe.installModules.name,new re(!0,[]));ee.set(Df.createCsr.name,new re(!0,[]));ee.set(Df.signCertificate.name,new re(!0,[]));ee.set(Df.listCertificates.name,new re(!0,[]));ee.set(Df.addCertificate.name,new re(!0,[]));ee.set(Df.removeCertificate.name,new re(!0,[]));ee.set(Df.getKey.name,new re(!0,[]));ee.set(i4.addNodeBack.name,new re(!0,[]));ee.set(i4.removeNodeBack.name,new re(!0,[]));ee.set(BL.getOp.name,new re(!1,[Js]));ee.set(BL.listMetricsOp.name,new re(!1,[Js]));ee.set(BL.describeMetricOp.name,new re(!1,[Js]));ee.set(FL.clear.name,new re(!0,[]));ee.set(FL.get.name,new re(!0,[]));ee.set(FL.set.name,new re(!0,[]));ee.set(o4.installUsageLicenseOp.name,new re(!0,[]));ee.set(o4.getUsageLicensesOp.name,new re(!0,[]));ee.set(kL.getFingerprint.name,new re(!0,[]));ee.set(kL.setLicense.name,new re(!0,[]));ee.set(t4.createTokens.name,new re(!1,[]));ee.set(t4.refreshOperationToken.name,new re(!1,[]));ee.set(r4.login.name,new re(!1,[]));ee.set(r4.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(hE.userInfo.name,new re(!1,[]));ee.set(pE.describeAll.name,new re(!1,[]));ee.set(hTe,new re(!1,[]));ee.set(ETe,new re(!0,[]));ee.set(pTe,new re(!0,[]));ee.set(jy.CSV_DATA_LOAD,new re(!1,[Cc,lu]));ee.set(jy.CSV_URL_LOAD,new re(!1,[Cc,lu]));ee.set(jy.CSV_FILE_LOAD,new re(!1,[Cc,lu]));ee.set(jy.IMPORT_FROM_S3,new re(!1,[Cc,lu]));ee.set(d4.EXPORT_TO_S3,new re(!0,[]));ee.set(d4.EXPORT_LOCAL,new re(!0,[]));ee.set(wn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[l4]));ee.set(wn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[Js]));ee.set(wn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[Cc]));ee.set(wn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[lu]));m4.exports={verifyPerms:STe,verifyPermsAst:gTe,verifyBulkLoadAttributePerms:yTe};function gTe(e,t,r){if(ha.isEmptyOrZeroLength(e))throw Or.info("verify_perms_ast has an empty user parameter"),Wn(new Error);if(ha.isEmptyOrZeroLength(t))throw Or.info("verify_perms_ast has an empty user parameter"),Wn(new Error);if(ha.isEmptyOrZeroLength(r))throw Or.info("verify_perms_ast has a null operation parameter"),Wn(new Error);try{let n=Qj(),s=require("alasql"),i=new a4,a=new n(e),c=a.getSchemas(),l=new Map;if((!c||c.length===0)&&a.affected_attributes&&a.affected_attributes.size>0)throw Or.info("No schemas defined in verifyPermsAst(), will not continue."),Wn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&u4[r])throw Wn(new Error,ln.DROP_SYSTEM,fE.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=f4(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=GL(t.role.permission,h,p[E]);HL(g,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Wn(n)}}o(gTe,"verifyPermsAst");function STe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Or.info("null required parameter in verifyPerms"),Wn(new Error,ln.DEFAULT_INVALID_REQUEST,fE.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 a4;if(ha.isEmptyOrZeroLength(e.hdb_user?.role)||ha.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Or.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&&mTe[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&&u4[r])throw Wn(new Error,ln.DROP_SYSTEM,fE.FORBIDDEN);if(l&&!d||u===!0&&(r===bs.createSchema.name||r===bs.dropSchema.name))return null;if(_Te.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===Jj||r===Xj)&&!f.super_user){if(s===wn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(ln.SCHEMA_PERM_ERROR(s));if(r===Jj&&(!f[s]||!f[s][mE]))return c.handleInvalidItem(ln.SCHEMA_NOT_FOUND(s));if(r===Xj&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][mE]))return c.handleInvalidItem(ln.TABLE_NOT_FOUND(s,i))}let m=f4(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=TTe(e),h=GL(e.hdb_user?.role?.permission,s,i);return HL(p,h,r,i,s,c,n),c.getPermsResponse()}o(STe,"verifyPerms");function f4(e,t,r,n,s){if(ha.arrayHasEmptyValues([e,t,r]))throw Or.info("hasPermissions has an invalid parameter"),Wn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Or.info(`operation ${t} not found.`),Wn(new Error,ln.OP_NOT_FOUND(t),fE.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Or.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][mE]===!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[mE]===!1)n.addInvalidItem(ln.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!ha.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)&&(Or.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 Or.error(p),Or.error(m),Wn(c4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(f4,"hasPermissions");function HL(e,t,r,n,s,i,a){if(!e||!t)throw Or.info("no attributes specified in checkAttributePerms."),Wn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Or.info(`no permissions found for ${r} in checkAttributePerms().`),Wn(new Error);if(ha.isEmptyOrZeroLength(t))return Or.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[mE]===!1){i.addInvalidItem(ln.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(wn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Js)throw Wn(new Error,ln.SYSTEM_TIMESTAMP_PERMS_ERR,fE.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(HL,"checkAttributePerms");function TTe(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){Or.info(r)}return t}o(TTe,"getRecordAttributes");function GL(e,t,r){let n=new Map;if(ha.isEmpty(e))return Or.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{Or.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(GL,"getAttributePermissions");function yTe(e,t,r,n,s,i,a){let c=new Set(i),l=GL(e,n,s);HL(c,l,t,s,n,a,r)}o(yTe,"verifyBulkLoadAttributePerms")});var $L=v((Tke,p4)=>{"use strict";var qL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};p4.exports=qL});var jL=v((wke,L4)=>{"use strict";var Jy=Gn(),Zy=kN(),RTe=require("needle"),Ci=(q(),M(z)),Rke=Pt(),Mf=ae(),{handleHDBError:Zt,hdbErrors:b4}=_e(),{HTTP_STATUS_CODES:un,HDB_ERROR_MSGS:Pr,CHECK_LOGS_WRAPPER:du}=b4,vf=Q(),VL=require("papaparse");Mf.promisifyPapaParse();var Oi=require("fs-extra"),bTe=require("path"),{chain:h4}=require("stream-chain"),E4=require("stream-json/streamers/StreamArray"),_4=require("stream-json/utils/Batch"),g4=require("stream-chain/utils/comp"),{finished:S4}=require("stream"),ATe=me(),A4=HN(),ITe=GN(),{BulkLoadFileObject:YL,BulkLoadDataObject:wTe}=Yq(),WL=WN(),{verifyBulkLoadAttributePerms:I4}=Qy(),bke=$L(),Ake=hr(),Ike=Xi(),{databases:NTe}=(we(),M(mt)),{coerceType:CTe}=(sg(),M(EG)),T4="No records parsed from csv file.",uu=`${ATe.get("HDB_ROOT")}/tmp`,{schemaRegex:OTe}=Ki(),y4=1024*1024*2,R4=5e3,PTe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};L4.exports={csvDataLoad:LTe,csvURLLoad:DTe,csvFileLoad:MTe,importFromS3:vTe};async function LTe(e,t){let r=Zy.dataObject(e);if(r)throw Zt(r,r.message,un.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=C4(e.schema,e.table),i=VL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:KL.bind(null,s),dynamicTyping:!1}),a=new WL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&I4(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 wTe(e.action,e.schema,e.table,i.data);return n=await A4.callOperationFunctionAsAwait(O4,l,null),n.message===T4?T4:P4(n.records,n.number_written)}catch(s){throw fu(s)}}o(LTe,"csvDataLoad");async function DTe(e){let t=Zy.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 UTe(e,r)}catch(s){throw vf.error(Pr.DOWNLOAD_FILE_ERR(r)+" - "+s),Zt(s,du(Pr.DOWNLOAD_FILE_ERR(r)))}try{let s=new YL(this.job_operation_function.name,e.action,e.schema,e.table,n,Ci.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await zL(s);return await Xy(n),i}catch(s){throw await Xy(n),fu(s)}}o(DTe,"csvURLLoad");async function MTe(e){let t=Zy.fileObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r=new YL(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ci.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await zL(r)}catch(n){throw fu(n)}}o(MTe,"csvFileLoad");async function vTe(e){let t=Zy.s3FileObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=bTe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${uu}/${s}`;let i=new YL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await xTe(s,e);let a=await zL(i);return await Xy(r),a}catch(n){throw await Xy(r),fu(n)}}o(vTe,"importFromS3");async function UTe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await RTe("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,Ci.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}FTe(r,e.csv_url),await BTe(t,r.raw)}o(UTe,"downloadCSVFile");async function xTe(e,t){try{let r=`${uu}/${e}`;await Oi.mkdirp(uu),await Oi.writeFile(`${uu}/${e}`,"",{flag:"a+"});let n=await Oi.createWriteStream(r),s=await ITe.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(){vf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw vf.error(Pr.S3_DOWNLOAD_ERR+" - "+r),Zt(r,du(Pr.S3_DOWNLOAD_ERR))}}o(xTe,"downloadFileFromS3");async function BTe(e,t){try{await Oi.mkdirp(uu),await Oi.writeFile(`${uu}/${e}`,t)}catch(r){throw vf.error(Pr.WRITE_TEMP_FILE_ERR),Zt(r,du(Pr.DEFAULT_BULK_LOAD_ERR))}}o(BTe,"writeFileToTempFolder");async function Xy(e){if(e)try{await Oi.access(e),await Oi.unlink(e)}catch{vf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(Xy,"deleteTempFile");function FTe(e,t){if(e.statusCode!==b4.HTTP_STATUS_CODES.OK)throw Zt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,un.BAD_REQUEST);if(!PTe[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(FTe,"validateURLResponse");async function zL(e){try{let t;switch(e.file_type){case Ci.VALID_S3_FILE_TYPES.CSV:t=await kTe(e);break;case Ci.VALID_S3_FILE_TYPES.JSON:t=await HTe(e);break;default:throw Zt(new Error,Pr.DEFAULT_BULK_LOAD_ERR,un.BAD_REQUEST,Ci.LOG_LEVELS.ERROR,Pr.INVALID_FILE_EXT_ERR(e))}return P4(t.records,t.number_written)}catch(t){throw fu(t)}}o(zL,"fileLoad");async function w4(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 Jy.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&I4(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(w4,"validateChunk");async function N4(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Mf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!Mf.isEmpty(c)&&!Mf.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 A4.callOperationFunctionAsAwait(O4,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Zt(c,du(Pr.INSERT_CSV_ERR),un.INTERNAL_SERVER_ERROR,Ci.LOG_LEVELS.ERROR,Pr.INSERT_CSV_ERR+" - "+c);r(l)}}o(N4,"insertChunk");async function kTe(e){let t={records:0,number_written:0},r=C4(e.schema,e.table);try{let n=new WL,s=Oi.createReadStream(e.file_path,{highWaterMark:y4});s.setEncoding("utf8"),await VL.parsePromise(s,w4.bind(null,e,n),KL.bind(null,r));let i=n.getPermsResponse();if(i)throw Zt(new Error,i,un.BAD_REQUEST);return s=Oi.createReadStream(e.file_path,{highWaterMark:y4}),s.setEncoding("utf8"),await VL.parsePromise(s,N4.bind(null,e,t),KL.bind(null,r)),s.destroy(),t}catch(n){throw Zt(n,du(Pr.PAPA_PARSE_ERR),un.INTERNAL_SERVER_ERROR,Ci.LOG_LEVELS.ERROR,Pr.PAPA_PARSE_ERR+n)}}o(kTe,"callPapaParse");function C4(e,t){let r=NTe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>CTe(i,s));return n}o(C4,"createTransformMap");function KL(e,t,r){let n=e.get(r);return n?n(t):Mf.autoCast(t)}o(KL,"typeFunction");async function HTe(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new WL,s=h4([Oi.createReadStream(e.file_path,{encoding:"utf-8"}),E4.withParser(),c=>c.value,new _4({batchSize:R4}),g4(async c=>{await w4(e,n,r,c)})]);await new Promise((c,l)=>{S4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Zt(new Error,i,un.BAD_REQUEST);let a=h4([Oi.createReadStream(e.file_path,{encoding:"utf-8"}),E4.withParser(),c=>c.value,new _4({batchSize:R4}),g4(async c=>{await N4(e,t,r,c)})]);return await new Promise((c,l)=>{S4(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Zt(n,du(Pr.INSERT_JSON_ERR),un.INTERNAL_SERVER_ERROR,Ci.LOG_LEVELS.ERROR,Pr.INSERT_JSON_ERR+n)}}o(HTe,"insertJson");async function O4(e){let t={};try{e.data&&e.data.length>0&&GTe(e.data[0])?t=await qTe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",vf.info(t.message))}catch(r){throw fu(r)}return t}o(O4,"callBulkFileLoad");function GTe(e){let t=Object.keys(e);for(let r of t)if(!OTe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(GTe,"validateColumnNames");async function qTe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Jy.insert;break;case"update":i=Jy.update;break;case"upsert":i=Jy.upsert;break;default:throw Zt(new Error,Pr.INVALID_ACTION_PARAM_ERR(n),un.BAD_REQUEST,Ci.LOG_LEVELS.ERROR,Pr.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=Mf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw fu(a)}}o(qTe,"bulkFileLoad");function P4(e,t){return`successfully loaded ${t} of ${e} records`}o(P4,"buildResponseMsg");function fu(e){return Zt(e,du(Pr.DEFAULT_BULK_LOAD_ERR),un.INTERNAL_SERVER_ERROR,Ci.LOG_LEVELS.ERROR,Pr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(fu,"buildTopLevelErrMsg")});var U4=v((Oke,v4)=>{"use strict";var $Te=_n(),VTe=Qi(),D4=Q(),KTe=Gn(),Cke=xS(),YTe=require("clone"),JL=require("alasql"),WTe=xg(),M4=require("util"),zTe=M4.promisify(VTe.getTableSchema),jTe=M4.promisify($Te.search),QTe=(q(),M(z)),QL=ae();WTe(JL);v4.exports={update:XTe};var JTe="There was a problem performing this update. Please check the logs and try again.";async function XTe({statement:e,hdb_user:t}){let r=await zTe(e.table.databaseid,e.table.tableid),n=ZTe(e.columns);QL.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=YTe(s),c=QL.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=JL.parse(l).statements[0],d=await jTe(u),f=eye(n,d);return tye(a,f,t)}o(XTe,"update");function ZTe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=JL.compile(`SELECT ${r.expression.toString()} AS [${QTe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw D4.error(t),new Error(JTe)}}o(ZTe,"createUpdateRecord");function eye(e,t){return QL.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(eye,"buildUpdateRecords");async function tye(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await KTe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){D4.error(`Error delete new_attributes from update response: ${i}`)}return s}o(tye,"updateRecords")});var B4=v((Mke,x4)=>{var rye=require("alasql"),nye=_n(),sye=Q(),iye=ls(),ZL=require("util"),XL=ae(),oye=(q(),M(z)),aye=Qi(),Lke=xS(),Dke=Gn(),cye="record",lye="successfully deleted",uye=ZL.callbackify(pye),dye=ZL.promisify(nye.search),fye=ZL.promisify(aye.getTableSchema);x4.exports={convertDelete:uye};function mye(e){return`${e.deleted_hashes.length} ${cye}${e.deleted_hashes.length===1?"":"s"} ${lye}`}o(mye,"generateReturnMessage");async function pye({statement:e,hdb_user:t}){let r=await fye(e.table.databaseid,e.table.tableid);XL.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=XL.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=rye.parse(a).statements[0],l={operation:oye.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await dye(c);let u=await iye.deleteRecords(l);return XL.isEmptyOrZeroLength(u.message)&&(u.message=mye(u)),delete u.txn_time,u}catch(u){throw sye.error(u),u.hdb_code?u.message:u}}o(pye,"convertDelete")});var _E=v((Uke,q4)=>{"use strict";q4.exports={evaluateSQL:Nye,processAST:G4,convertSQLToAST:H4,checkASTPermissions:k4};var hye=Gn(),F4=require("util"),Eye=F4.callbackify(hye.insert),_ye=_n().search,gye=U4().update,Sye=F4.callbackify(gye),Tye=B4().convertDelete,Oc=require("alasql"),yye=Qy(),eR=Q(),Rye=xg(),bye=ae(),EE=(q(),M(z)),{hdbErrors:Aye,handleHDBError:eD}=_e(),{HTTP_STATUS_CODES:tD}=Aye;Rye(Oc);var Iye=403,wye="There was a problem performing this insert. Please check the logs and try again.",rD=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Nye(e,t){let r=e.parsed_sql_object;if(!r){r=H4(e.sql);let n,s=r.ast.statements[0];if(s instanceof Oc.yy.Insert?n=s.into.databaseid:s instanceof Oc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Oc.yy.Update||s instanceof Oc.yy.Delete?n=s.table.databaseid:eR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Oc.yy.Select)&&bye.isEmptyOrZeroLength(n))return t("No schema specified",null)}G4(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(Nye,"evaluateSQL");function k4(e,t){let r;try{r=yye.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(k4,"checkASTPermissions");function H4(e){let t=new rD;if(!e)throw eD(new Error,"The 'sql' parameter is missing from the request body",tD.BAD_REQUEST);try{let r=e.trim(),n=Oc.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(BSe,"parseNPMStdErr");function FSe(e){let t=qy.object({projects:qy.array().min(1).items(qy.string()).required(),dry_run:qy.boolean().default(!1)});return DSe.validateBySchema(e,t)}o(FSe,"modulesValidator")});var _L={};Re(_L,{describeMetric:()=>Hj,describeMetricOp:()=>EL,get:()=>Fj,getOp:()=>pL,listMetrics:()=>kj,listMetricsOp:()=>hL});async function HSe(e){return(await q_().get(e)).hostname}function Uj(e,t){return e.length===0||e.includes(t)}function pL(e){return nE.trace?.("get_analytics request:",e),Fj(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function Bj(e){return"conditions"in e?{...e,conditions:e.conditions.map(Bj)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function Fj(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(Bj));let a=t??[];Uj(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),nE.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],Uj(a,"node")&&(nE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await HSe(d)),nE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function hL(e){return kj(e.metric_types)}async function kj(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 EL(e){return Hj(e.metric)}async function Hj(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 nE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var xj,kSe,nE,gL=se(()=>{xj=b(Q());EA();_A();({forComponent:kSe}=xj.default),nE=kSe("analytics").conditional;o(HSe,"lookupHostname");o(Uj,"isSelected");o(pL,"getOp");o(Bj,"conformCondition");o(Fj,"get");o(hL,"listMetricsOp");o(kj,"listMetrics");o(EL,"describeMetricOp");o(Hj,"describeMetric")});var $y,Vy,sE,Ky=se(()=>{$y={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},Vy=Object.keys($y),sE="primary"});function qj(e){return Gj.validateBySchema(e,VSe)}var iE,Gj,GSe,qSe,$Se,VSe,$j=se(()=>{iE=b(require("joi")),Gj=b(ft());Ky();GSe=Vy,qSe=Object.entries($y).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),$Se=o(()=>{let e=iE.default.string().min(1).max(512);return Object.entries($y).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:iE.default.string().valid(...r.allowedValues).messages({"any.only":qSe[t]})}))}),e.required()},"createStatusValidationSchema"),VSe=iE.default.object({id:iE.default.string().valid(...GSe).required(),status:$Se()});o(qj,"validateStatus")});function Vj(){SL||(SL=pa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),TL=new Uint8Array(SL))}function Kj(){Vj(),TL[0]=1}function Yj(){return Vj(),TL[0]===1}var SL,TL,yL=se(()=>{oE();o(Vj,"ensureInitialized");o(Kj,"requestRestart");o(Yj,"restartNeeded")});var wL={};Re(wL,{DEFAULT_STATUS_ID:()=>sE,STATUS_IDS:()=>Vy,Status:()=>pa,clear:()=>bL,get:()=>AL,set:()=>IL});function cE(){return RL||(RL=Ze({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),RL}function bL({id:e}){return aE.debug?.("clearStatus",e),cE().delete(e)}async function YSe(){aE.debug?.("getAllStatus");let e=cE().get({}),t=await bp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=Yj();return{systemStatus:e,componentStatus:r,restartRequired:n}}function AL({id:e}){return e?(aE.debug?.("getStatus",e),cE().get(e)):(aE.debug?.("getStatus","all"),YSe())}function IL({status:e,id:t=sE}){let r=qj({status:e,id:t});if(r)throw(0,Yy.handleHDBError)(r,r.message,KSe.BAD_REQUEST);return aE.debug?.("setStatus",t,e),cE().put(t,{status:e})}var Yy,Wj,KSe,RL,pa,aE,oE=se(()=>{we();Yy=b(_e()),Wj=b(es());$j();Ky();Ap();yL();Ky();({HTTP_STATUS_CODES:KSe}=Yy.hdbErrors);o(cE,"getStatusTable");pa={get primaryStore(){return cE().primaryStore}},aE=(0,Wj.loggerWithTag)("status");o(bL,"clearStatus");o(YSe,"getAllStatus");o(AL,"getStatus");o(IL,"setStatus")});var PL={};Re(PL,{getFingerprint:()=>CL,getRegistrationInfo:()=>NL,setLicense:()=>OL});function NL(){return{version:zj.packageJson.version,deprecated:!0}}function CL(){return{message:"this-is-deprecated",deprecated:!0}}function OL(){return{deprecated:!0}}var zj,LL=se(()=>{zj=b(Ct());o(NL,"getRegistrationInfo");o(CL,"getFingerprint");o(OL,"setLicense")});var Qj=v((Eke,jj)=>{"use strict";var lE=require("alasql"),cu=require("recursive-iterator"),Ni=Q(),WSe=ae(),uE=(q(),M(z)),DL=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,jSe(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=>uE.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=>!uE.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][uE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=zSe(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=>!uE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new lE.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 zSe(e){return e.filter(t=>t[uE.PERMS_CRUD_ENUM.READ])}o(zSe,"filterReadRestrictedAttrs");function jSe(e,t,r,n,s){QSe(e,t,r,n,s)}o(jSe,"interpretAST");function dE(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(dE,"addSchemaTableToMap");function QSe(e,t,r,n,s){if(!e){Ni.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof lE.yy.Insert?eTe(e,t,r):e instanceof lE.yy.Select?JSe(e,t,r,n,s):e instanceof lE.yy.Update?XSe(e,t,r):e instanceof lE.yy.Delete?ZSe(e,t,r):Ni.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(QSe,"getRecordAttributesAST");function JSe(e,t,r,n,s){if(!e){Ni.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(WSe.isEmptyOrZeroLength(i)){Ni.error("No schema specified");return}e.from.forEach(c=>{dE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),dE(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{Ni.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{Ni.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{Ni.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{Ni.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(JSe,"getSelectAttributes");function XSe(e,t,r){if(!e){Ni.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new cu(e.columns),s=e.table.databaseid;dE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&ML(e.table.tableid,s,i.columnid,t,r)}o(XSe,"getUpdateAttributes");function ZSe(e,t,r){if(!e){Ni.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new cu(e.where),s=e.table.databaseid;dE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&ML(e.table.tableid,s,i.columnid,t,r)}o(ZSe,"getDeleteAttributes");function eTe(e,t,r){if(!e){Ni.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new cu(e.columns),s=e.into.databaseid;dE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&ML(e.into.tableid,s,i.columnid,t,r)}o(eTe,"getInsertAttributes");function ML(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(ML,"pushAttribute");jj.exports=DL});var Qy=v((gke,m4)=>{"use strict";var vL=Gn(),Wy=_n(),bs=RT(),pE=Dl(),UL=Rl(),tTe=qC(),rTe=A1(),hE=ds(),zy=Gp(),Or=Q(),nTe=WC(),sTe=vT(),iTe=TO(),oTe=xT(),aTe=bO(),cTe=AO(),lTe=NO(),uTe=OO(),xL=GT(),ha=ae(),Zj=Pf(),wn=(q(),M(z)),e4=Wz(),dTe=Th(),t4=(Ld(),M(Wp)),r4=(My(),M(Jh)),n4=gt(),yr=cL(),s4=Gy(),fTe=mL(),Df=Es(),i4=(sf(),M(nf)),BL=(gL(),M(_L)),FL=(oE(),M(wL)),o4=(Hh(),M(my)),kL=(LL(),M(PL)),a4=WN(),{handleHDBError:Wn,hdbErrors:c4}=_e(),{HDB_ERROR_MSGS:ln,HTTP_STATUS_CODES:fE}=c4,ee=new Map,l4="delete",Cc="insert",Js="read",lu="update",mE="describe",Jj=pE.describeSchema.name,Xj=pE.describeTable.name,u4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},mTe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},pTe="catchup",hTe="handleGetJob",ETe="handleGetJobsByStartDate",jy={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},_Te=[bs.createTable.name,bs.createAttribute.name,bs.dropTable.name,bs.dropAttribute.name],d4={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(vL.insert.name,new re(!1,[Cc]));ee.set(vL.update.name,new re(!1,[lu]));ee.set(vL.upsert.name,new re(!1,[Cc,lu]));ee.set(Wy.searchByConditions.name,new re(!1,[Js]));ee.set(Wy.searchByHash.name,new re(!1,[Js]));ee.set(Wy.searchByValue.name,new re(!1,[Js]));ee.set(Wy.search.name,new re(!1,[Js]));ee.set(bs.createSchema.name,new re(!0,[]));ee.set(bs.createTable.name,new re(!0,[]));ee.set(bs.createAttribute.name,new re(!1,[Cc]));ee.set(bs.dropSchema.name,new re(!0,[]));ee.set(bs.dropTable.name,new re(!0,[]));ee.set(bs.dropAttribute.name,new re(!0,[]));ee.set(pE.describeSchema.name,new re(!1,[Js]));ee.set(pE.describeTable.name,new re(!1,[Js]));ee.set(UL.deleteRecord.name,new re(!1,[l4]));ee.set(hE.addUser.name,new re(!0,[]));ee.set(hE.alterUser.name,new re(!0,[]));ee.set(hE.dropUser.name,new re(!0,[]));ee.set(hE.listUsersExternal.name,new re(!0,[]));ee.set(zy.listRoles.name,new re(!0,[]));ee.set(zy.addRole.name,new re(!0,[]));ee.set(zy.alterRole.name,new re(!0,[]));ee.set(zy.dropRole.name,new re(!0,[]));ee.set(nTe.name,new re(!0,[]));ee.set(sTe.name,new re(!0,[]));ee.set(iTe.name,new re(!0,[]));ee.set(oTe.name,new re(!0,[]));ee.set(aTe.name,new re(!0,[]));ee.set(cTe.name,new re(!0,[]));ee.set(xL.setRoutes.name,new re(!0,[]));ee.set(xL.getRoutes.name,new re(!0,[]));ee.set(xL.deleteRoutes.name,new re(!0,[]));ee.set(n4.setConfiguration.name,new re(!0,[]));ee.set(lTe.clusterStatus.name,new re(!0,[]));ee.set(uTe.name,new re(!0,[]));ee.set(UL.deleteFilesBefore.name,new re(!0,[]));ee.set(UL.deleteAuditLogsBefore.name,new re(!0,[]));ee.set(Zj.restart.name,new re(!0,[]));ee.set(Zj.restartService.name,new re(!0,[]));ee.set(tTe.name,new re(!0,[]));ee.set(rTe.name,new re(!0,[Js]));ee.set(bs.cleanupOrphanBlobs.name,new re(!0,[]));ee.set(dTe.systemInformation.name,new re(!0,[]));ee.set(n4.getConfiguration.name,new re(!0,[]));ee.set(s4.readTransactionLog.name,new re(!0,[]));ee.set(s4.deleteTransactionLogsBefore.name,new re(!0,[]));ee.set(fTe.installModules.name,new re(!0,[]));ee.set(Df.createCsr.name,new re(!0,[]));ee.set(Df.signCertificate.name,new re(!0,[]));ee.set(Df.listCertificates.name,new re(!0,[]));ee.set(Df.addCertificate.name,new re(!0,[]));ee.set(Df.removeCertificate.name,new re(!0,[]));ee.set(Df.getKey.name,new re(!0,[]));ee.set(i4.addNodeBack.name,new re(!0,[]));ee.set(i4.removeNodeBack.name,new re(!0,[]));ee.set(BL.getOp.name,new re(!1,[Js]));ee.set(BL.listMetricsOp.name,new re(!1,[Js]));ee.set(BL.describeMetricOp.name,new re(!1,[Js]));ee.set(FL.clear.name,new re(!0,[]));ee.set(FL.get.name,new re(!0,[]));ee.set(FL.set.name,new re(!0,[]));ee.set(o4.installUsageLicenseOp.name,new re(!0,[]));ee.set(o4.getUsageLicensesOp.name,new re(!0,[]));ee.set(kL.getFingerprint.name,new re(!0,[]));ee.set(kL.setLicense.name,new re(!0,[]));ee.set(t4.createTokens.name,new re(!1,[]));ee.set(t4.refreshOperationToken.name,new re(!1,[]));ee.set(r4.login.name,new re(!1,[]));ee.set(r4.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(hE.userInfo.name,new re(!1,[]));ee.set(pE.describeAll.name,new re(!1,[]));ee.set(hTe,new re(!1,[]));ee.set(ETe,new re(!0,[]));ee.set(pTe,new re(!0,[]));ee.set(jy.CSV_DATA_LOAD,new re(!1,[Cc,lu]));ee.set(jy.CSV_URL_LOAD,new re(!1,[Cc,lu]));ee.set(jy.CSV_FILE_LOAD,new re(!1,[Cc,lu]));ee.set(jy.IMPORT_FROM_S3,new re(!1,[Cc,lu]));ee.set(d4.EXPORT_TO_S3,new re(!0,[]));ee.set(d4.EXPORT_LOCAL,new re(!0,[]));ee.set(wn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[l4]));ee.set(wn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[Js]));ee.set(wn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[Cc]));ee.set(wn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[lu]));m4.exports={verifyPerms:STe,verifyPermsAst:gTe,verifyBulkLoadAttributePerms:yTe};function gTe(e,t,r){if(ha.isEmptyOrZeroLength(e))throw Or.info("verify_perms_ast has an empty user parameter"),Wn(new Error);if(ha.isEmptyOrZeroLength(t))throw Or.info("verify_perms_ast has an empty user parameter"),Wn(new Error);if(ha.isEmptyOrZeroLength(r))throw Or.info("verify_perms_ast has a null operation parameter"),Wn(new Error);try{let n=Qj(),s=require("alasql"),i=new a4,a=new n(e),c=a.getSchemas(),l=new Map;if((!c||c.length===0)&&a.affected_attributes&&a.affected_attributes.size>0)throw Or.info("No schemas defined in verifyPermsAst(), will not continue."),Wn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&u4[r])throw Wn(new Error,ln.DROP_SYSTEM,fE.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=f4(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=GL(t.role.permission,h,p[E]);HL(g,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Wn(n)}}o(gTe,"verifyPermsAst");function STe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Or.info("null required parameter in verifyPerms"),Wn(new Error,ln.DEFAULT_INVALID_REQUEST,fE.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 a4;if(ha.isEmptyOrZeroLength(e.hdb_user?.role)||ha.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Or.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&&mTe[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&&u4[r])throw Wn(new Error,ln.DROP_SYSTEM,fE.FORBIDDEN);if(l&&!d||u===!0&&(r===bs.createSchema.name||r===bs.dropSchema.name))return null;if(_Te.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===Jj||r===Xj)&&!f.super_user){if(s===wn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(ln.SCHEMA_PERM_ERROR(s));if(r===Jj&&(!f[s]||!f[s][mE]))return c.handleInvalidItem(ln.SCHEMA_NOT_FOUND(s));if(r===Xj&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][mE]))return c.handleInvalidItem(ln.TABLE_NOT_FOUND(s,i))}let m=f4(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=TTe(e),h=GL(e.hdb_user?.role?.permission,s,i);return HL(p,h,r,i,s,c,n),c.getPermsResponse()}o(STe,"verifyPerms");function f4(e,t,r,n,s){if(ha.arrayHasEmptyValues([e,t,r]))throw Or.info("hasPermissions has an invalid parameter"),Wn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Or.info(`operation ${t} not found.`),Wn(new Error,ln.OP_NOT_FOUND(t),fE.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Or.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][mE]===!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[mE]===!1)n.addInvalidItem(ln.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!ha.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)&&(Or.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 Or.error(p),Or.error(m),Wn(c4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(f4,"hasPermissions");function HL(e,t,r,n,s,i,a){if(!e||!t)throw Or.info("no attributes specified in checkAttributePerms."),Wn(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Or.info(`no permissions found for ${r} in checkAttributePerms().`),Wn(new Error);if(ha.isEmptyOrZeroLength(t))return Or.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[mE]===!1){i.addInvalidItem(ln.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(wn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Js)throw Wn(new Error,ln.SYSTEM_TIMESTAMP_PERMS_ERR,fE.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(HL,"checkAttributePerms");function TTe(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){Or.info(r)}return t}o(TTe,"getRecordAttributes");function GL(e,t,r){let n=new Map;if(ha.isEmpty(e))return Or.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{Or.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(GL,"getAttributePermissions");function yTe(e,t,r,n,s,i,a){let c=new Set(i),l=GL(e,n,s);HL(c,l,t,s,n,a,r)}o(yTe,"verifyBulkLoadAttributePerms")});var $L=v((Tke,p4)=>{"use strict";var qL=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};p4.exports=qL});var jL=v((wke,L4)=>{"use strict";var Jy=Gn(),Zy=kN(),RTe=require("needle"),Ci=(q(),M(z)),Rke=Pt(),Mf=ae(),{handleHDBError:Zt,hdbErrors:b4}=_e(),{HTTP_STATUS_CODES:un,HDB_ERROR_MSGS:Pr,CHECK_LOGS_WRAPPER:du}=b4,vf=Q(),VL=require("papaparse");Mf.promisifyPapaParse();var Oi=require("fs-extra"),bTe=require("path"),{chain:h4}=require("stream-chain"),E4=require("stream-json/streamers/StreamArray"),_4=require("stream-json/utils/Batch"),g4=require("stream-chain/utils/comp"),{finished:S4}=require("stream"),ATe=me(),A4=HN(),ITe=GN(),{BulkLoadFileObject:YL,BulkLoadDataObject:wTe}=Yq(),WL=WN(),{verifyBulkLoadAttributePerms:I4}=Qy(),bke=$L(),Ake=hr(),Ike=Xi(),{databases:NTe}=(we(),M(mt)),{coerceType:CTe}=(sg(),M(EG)),T4="No records parsed from csv file.",uu=`${ATe.get("HDB_ROOT")}/tmp`,{schemaRegex:OTe}=Ki(),y4=1024*1024*2,R4=5e3,PTe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};L4.exports={csvDataLoad:LTe,csvURLLoad:DTe,csvFileLoad:MTe,importFromS3:vTe};async function LTe(e,t){let r=Zy.dataObject(e);if(r)throw Zt(r,r.message,un.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=C4(e.schema,e.table),i=VL.parse(e.data,{header:!0,skipEmptyLines:!0,transform:KL.bind(null,s),dynamicTyping:!1}),a=new WL;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&I4(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 wTe(e.action,e.schema,e.table,i.data);return n=await A4.callOperationFunctionAsAwait(O4,l,null),n.message===T4?T4:P4(n.records,n.number_written)}catch(s){throw fu(s)}}o(LTe,"csvDataLoad");async function DTe(e){let t=Zy.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 UTe(e,r)}catch(s){throw vf.error(Pr.DOWNLOAD_FILE_ERR(r)+" - "+s),Zt(s,du(Pr.DOWNLOAD_FILE_ERR(r)))}try{let s=new YL(this.job_operation_function.name,e.action,e.schema,e.table,n,Ci.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await zL(s);return await Xy(n),i}catch(s){throw await Xy(n),fu(s)}}o(DTe,"csvURLLoad");async function MTe(e){let t=Zy.fileObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r=new YL(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ci.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await zL(r)}catch(n){throw fu(n)}}o(MTe,"csvFileLoad");async function vTe(e){let t=Zy.s3FileObject(e);if(t)throw Zt(t,t.message,un.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=bTe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${uu}/${s}`;let i=new YL(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await xTe(s,e);let a=await zL(i);return await Xy(r),a}catch(n){throw await Xy(r),fu(n)}}o(vTe,"importFromS3");async function UTe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await RTe("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,Ci.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}FTe(r,e.csv_url),await BTe(t,r.raw)}o(UTe,"downloadCSVFile");async function xTe(e,t){try{let r=`${uu}/${e}`;await Oi.mkdirp(uu),await Oi.writeFile(`${uu}/${e}`,"",{flag:"a+"});let n=await Oi.createWriteStream(r),s=await ITe.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(){vf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw vf.error(Pr.S3_DOWNLOAD_ERR+" - "+r),Zt(r,du(Pr.S3_DOWNLOAD_ERR))}}o(xTe,"downloadFileFromS3");async function BTe(e,t){try{await Oi.mkdirp(uu),await Oi.writeFile(`${uu}/${e}`,t)}catch(r){throw vf.error(Pr.WRITE_TEMP_FILE_ERR),Zt(r,du(Pr.DEFAULT_BULK_LOAD_ERR))}}o(BTe,"writeFileToTempFolder");async function Xy(e){if(e)try{await Oi.access(e),await Oi.unlink(e)}catch{vf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(Xy,"deleteTempFile");function FTe(e,t){if(e.statusCode!==b4.HTTP_STATUS_CODES.OK)throw Zt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,un.BAD_REQUEST);if(!PTe[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(FTe,"validateURLResponse");async function zL(e){try{let t;switch(e.file_type){case Ci.VALID_S3_FILE_TYPES.CSV:t=await kTe(e);break;case Ci.VALID_S3_FILE_TYPES.JSON:t=await HTe(e);break;default:throw Zt(new Error,Pr.DEFAULT_BULK_LOAD_ERR,un.BAD_REQUEST,Ci.LOG_LEVELS.ERROR,Pr.INVALID_FILE_EXT_ERR(e))}return P4(t.records,t.number_written)}catch(t){throw fu(t)}}o(zL,"fileLoad");async function w4(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 Jy.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&I4(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(w4,"validateChunk");async function N4(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Mf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!Mf.isEmpty(c)&&!Mf.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 A4.callOperationFunctionAsAwait(O4,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Zt(c,du(Pr.INSERT_CSV_ERR),un.INTERNAL_SERVER_ERROR,Ci.LOG_LEVELS.ERROR,Pr.INSERT_CSV_ERR+" - "+c);r(l)}}o(N4,"insertChunk");async function kTe(e){let t={records:0,number_written:0},r=C4(e.schema,e.table);try{let n=new WL,s=Oi.createReadStream(e.file_path,{highWaterMark:y4});s.setEncoding("utf8"),await VL.parsePromise(s,w4.bind(null,e,n),KL.bind(null,r));let i=n.getPermsResponse();if(i)throw Zt(new Error,i,un.BAD_REQUEST);return s=Oi.createReadStream(e.file_path,{highWaterMark:y4}),s.setEncoding("utf8"),await VL.parsePromise(s,N4.bind(null,e,t),KL.bind(null,r)),s.destroy(),t}catch(n){throw Zt(n,du(Pr.PAPA_PARSE_ERR),un.INTERNAL_SERVER_ERROR,Ci.LOG_LEVELS.ERROR,Pr.PAPA_PARSE_ERR+n)}}o(kTe,"callPapaParse");function C4(e,t){let r=NTe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>CTe(i,s));return n}o(C4,"createTransformMap");function KL(e,t,r){let n=e.get(r);return n?n(t):Mf.autoCast(t)}o(KL,"typeFunction");async function HTe(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new WL,s=h4([Oi.createReadStream(e.file_path,{encoding:"utf-8"}),E4.withParser(),c=>c.value,new _4({batchSize:R4}),g4(async c=>{await w4(e,n,r,c)})]);await new Promise((c,l)=>{S4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Zt(new Error,i,un.BAD_REQUEST);let a=h4([Oi.createReadStream(e.file_path,{encoding:"utf-8"}),E4.withParser(),c=>c.value,new _4({batchSize:R4}),g4(async c=>{await N4(e,t,r,c)})]);return await new Promise((c,l)=>{S4(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Zt(n,du(Pr.INSERT_JSON_ERR),un.INTERNAL_SERVER_ERROR,Ci.LOG_LEVELS.ERROR,Pr.INSERT_JSON_ERR+n)}}o(HTe,"insertJson");async function O4(e){let t={};try{e.data&&e.data.length>0&&GTe(e.data[0])?t=await qTe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",vf.info(t.message))}catch(r){throw fu(r)}return t}o(O4,"callBulkFileLoad");function GTe(e){let t=Object.keys(e);for(let r of t)if(!OTe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(GTe,"validateColumnNames");async function qTe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Jy.insert;break;case"update":i=Jy.update;break;case"upsert":i=Jy.upsert;break;default:throw Zt(new Error,Pr.INVALID_ACTION_PARAM_ERR(n),un.BAD_REQUEST,Ci.LOG_LEVELS.ERROR,Pr.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=Mf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw fu(a)}}o(qTe,"bulkFileLoad");function P4(e,t){return`successfully loaded ${t} of ${e} records`}o(P4,"buildResponseMsg");function fu(e){return Zt(e,du(Pr.DEFAULT_BULK_LOAD_ERR),un.INTERNAL_SERVER_ERROR,Ci.LOG_LEVELS.ERROR,Pr.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(fu,"buildTopLevelErrMsg")});var U4=v((Oke,v4)=>{"use strict";var $Te=_n(),VTe=Qi(),D4=Q(),KTe=Gn(),Cke=xS(),YTe=require("clone"),JL=require("alasql"),WTe=xg(),M4=require("util"),zTe=M4.promisify(VTe.getTableSchema),jTe=M4.promisify($Te.search),QTe=(q(),M(z)),QL=ae();WTe(JL);v4.exports={update:XTe};var JTe="There was a problem performing this update. Please check the logs and try again.";async function XTe({statement:e,hdb_user:t}){let r=await zTe(e.table.databaseid,e.table.tableid),n=ZTe(e.columns);QL.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=YTe(s),c=QL.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=JL.parse(l).statements[0],d=await jTe(u),f=eye(n,d);return tye(a,f,t)}o(XTe,"update");function ZTe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=JL.compile(`SELECT ${r.expression.toString()} AS [${QTe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw D4.error(t),new Error(JTe)}}o(ZTe,"createUpdateRecord");function eye(e,t){return QL.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(eye,"buildUpdateRecords");async function tye(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await KTe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){D4.error(`Error delete new_attributes from update response: ${i}`)}return s}o(tye,"updateRecords")});var B4=v((Mke,x4)=>{var rye=require("alasql"),nye=_n(),sye=Q(),iye=ls(),ZL=require("util"),XL=ae(),oye=(q(),M(z)),aye=Qi(),Lke=xS(),Dke=Gn(),cye="record",lye="successfully deleted",uye=ZL.callbackify(pye),dye=ZL.promisify(nye.search),fye=ZL.promisify(aye.getTableSchema);x4.exports={convertDelete:uye};function mye(e){return`${e.deleted_hashes.length} ${cye}${e.deleted_hashes.length===1?"":"s"} ${lye}`}o(mye,"generateReturnMessage");async function pye({statement:e,hdb_user:t}){let r=await fye(e.table.databaseid,e.table.tableid);XL.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=XL.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=rye.parse(a).statements[0],l={operation:oye.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await dye(c);let u=await iye.deleteRecords(l);return XL.isEmptyOrZeroLength(u.message)&&(u.message=mye(u)),delete u.txn_time,u}catch(u){throw sye.error(u),u.hdb_code?u.message:u}}o(pye,"convertDelete")});var _E=v((Uke,q4)=>{"use strict";q4.exports={evaluateSQL:Nye,processAST:G4,convertSQLToAST:H4,checkASTPermissions:k4};var hye=Gn(),F4=require("util"),Eye=F4.callbackify(hye.insert),_ye=_n().search,gye=U4().update,Sye=F4.callbackify(gye),Tye=B4().convertDelete,Oc=require("alasql"),yye=Qy(),eR=Q(),Rye=xg(),bye=ae(),EE=(q(),M(z)),{hdbErrors:Aye,handleHDBError:eD}=_e(),{HTTP_STATUS_CODES:tD}=Aye;Rye(Oc);var Iye=403,wye="There was a problem performing this insert. Please check the logs and try again.",rD=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Nye(e,t){let r=e.parsed_sql_object;if(!r){r=H4(e.sql);let n,s=r.ast.statements[0];if(s instanceof Oc.yy.Insert?n=s.into.databaseid:s instanceof Oc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Oc.yy.Update||s instanceof Oc.yy.Delete?n=s.table.databaseid:eR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Oc.yy.Select)&&bye.isEmptyOrZeroLength(n))return t("No schema specified",null)}G4(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(Nye,"evaluateSQL");function k4(e,t){let r;try{r=yye.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(k4,"checkASTPermissions");function H4(e){let t=new rD;if(!e)throw eD(new Error,"The 'sql' parameter is missing from the request body",tD.BAD_REQUEST);try{let r=e.trim(),n=Oc.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]?eD(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,tD.BAD_REQUEST):eD(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",tD.BAD_REQUEST)}return t}o(H4,"convertSQLToAST");function G4(e,t,r){try{let n=Cye;if(!e.bypass_auth&&!t.permissions_checked){let i=k4(e,t);if(i&&i.length>0)return r(Iye,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case EE.VALID_SQL_OPS_ENUM.SELECT:n=_ye,s=t.ast.statements[0];break;case EE.VALID_SQL_OPS_ENUM.INSERT:n=Oye;break;case EE.VALID_SQL_OPS_ENUM.UPDATE:n=Sye;break;case EE.VALID_SQL_OPS_ENUM.DELETE:n=Tye;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(G4,"processAST");function Cye(e,t){eR.info(e),t("unknown sql statement")}o(Cye,"nullFunction");function Oye({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=Pye(i,e.values)}catch(a){return r(a)}Eye(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){eR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(Oye,"convertInsert");function Pye(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]]=Oc.compile(`SELECT ${s.toString()} AS [${EE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw eR.error(r),new Error(wye)}}o(Pye,"createDataObjects")});var iD=v((Bke,Q4)=>{"use strict";var sD=_n(),Lye=GN(),{AsyncParser:Dye}=require("json2csv"),tR=require("stream"),As=ae(),nD=require("fs-extra"),Mye=require("path"),Xs=Q(),{promisify:K4}=require("util"),gE=ae(),{handleHDBError:Rr,hdbErrors:vye}=_e(),{HDB_ERROR_MSGS:zn,HTTP_STATUS_CODES:br}=vye,{streamAsJSON:Uye}=(Vb(),M(AU)),{Upload:xye}=require("@aws-sdk/lib-storage"),{toCsvStream:Bye}=(Mo(),M(vU)),$4=["search_by_value","search_by_hash","sql","search_by_conditions"],V4=["json","csv"],Y4="json",W4="csv",Fye="Successfully exported JSON locally.",kye="Successfully exported CSV locally.",Hye=1e3,Gye=sD.searchByHash,qye=sD.searchByValue,$ye=K4(tR.finished);Q4.exports={export_to_s3:Wye,export_local:Vye};async function Vye(e){Xs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=z4(e);if(!As.isEmpty(t))throw Xs.error(t),Rr(new Error,t,br.BAD_REQUEST,void 0,void 0,!0);if(As.isEmpty(e.path))throw Xs.error(zn.MISSING_VALUE("path")),Rr(new Error,zn.MISSING_VALUE("path"),br.BAD_REQUEST,void 0,void 0,!0);let r=(As.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Mye.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=As.buildFolderPath(e.path,r);await Kye(e.path);let s=await j4(e);return await Yye(n,e.format,s)}o(Vye,"export_local");async function Kye(e){if(Xs.trace("in confirmPath"),As.isEmptyOrZeroLength(e))throw Rr(new Error,`Invalid path: ${e}`,br.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await nD.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(Kye,"confirmPath");async function Yye(e,t,r){if(Xs.trace("in saveToLocal"),gE.isEmptyOrZeroLength(e))throw Rr(new Error,zn.INVALID_VALUE("file_path"),br.BAD_REQUEST,void 0,void 0,!0);if(gE.isEmptyOrZeroLength(t))throw Rr(new Error,zn.INVALID_VALUE("Source format"),br.BAD_REQUEST,void 0,void 0,!0);if(gE.isEmpty(r))throw Rr(new Error,zn.NOT_FOUND("Data"),br.BAD_REQUEST,void 0,void 0,!0);if(t===Y4){let n=nD.createWriteStream(e);return Uye(r).pipe(n),await $ye(n),{message:Fye,path:e}}else if(t===W4){let n=nD.createWriteStream(e),s=tR.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new Dye(i,c).fromInput(s).toOutput(n).promise(!1),{message:kye,path:e}}throw Rr(new Error,zn.INVALID_VALUE("format"),br.BAD_REQUEST)}o(Yye,"saveToLocal");async function Wye(e){if(!e.s3||Object.keys(e.s3).length===0)throw Rr(new Error,zn.MISSING_VALUE("S3 object"),br.BAD_REQUEST);if(As.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Rr(new Error,zn.MISSING_VALUE("aws_access_key_id"),br.BAD_REQUEST);if(As.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Rr(new Error,zn.MISSING_VALUE("aws_secret_access_key"),br.BAD_REQUEST);if(As.isEmptyOrZeroLength(e.s3.bucket))throw Rr(new Error,zn.MISSING_VALUE("bucket"),br.BAD_REQUEST);if(As.isEmptyOrZeroLength(e.s3.key))throw Rr(new Error,zn.MISSING_VALUE("key"),br.BAD_REQUEST);if(As.isEmptyOrZeroLength(e.s3.region))throw Rr(new Error,zn.MISSING_VALUE("region"),br.BAD_REQUEST);let t=z4(e);if(!As.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 j4(e)}catch(l){throw Xs.error(l),l}let n,s=await Lye.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new tR.PassThrough;if(e.format===W4){i=e.s3.key+".csv";let l=Bye(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===Y4){i=e.s3.key+".json";let l=new tR.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%Hye===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw Rr(new Error,zn.INVALID_VALUE("format"),br.BAD_REQUEST);return new xye({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(Wye,"export_to_s3");function z4(e){if(Xs.trace("in exportCoreValidation"),As.isEmpty(e.format))return"format missing";if(V4.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${V4.join(", ")}`;let t=e.search_operation.operation;if(As.isEmpty(t))return"search_operation.operation missing";if($4.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${$4.join(", ")}`}o(z4,"exportCoreValidation");async function j4(e){Xs.trace("in getRecords");let t,r;if(gE.isEmpty(e.search_operation)||gE.isEmptyOrZeroLength(e.search_operation.operation))throw Rr(new Error,zn.INVALID_VALUE("Search operation"),br.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=qye;break;case"search_by_hash":t=Gye;break;case"search_by_conditions":t=sD.searchByConditions;break;case"sql":{let n=_E();t=K4(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(j4,"getRecords")});var X4=v((kke,J4)=>{"use strict";var oD=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};J4.exports=oD});var tQ=v((Gke,eQ)=>{"use strict";var zye=(q(),M(z)),Z4=require("moment"),jye=require("uuid").v4,aD=class{static{o(this,"JobObject")}constructor(){this.id=jye(),this.type=void 0,this.start_datetime=Z4().valueOf(),this.created_datetime=Z4().valueOf(),this.end_datetime=void 0,this.status=zye.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};eQ.exports=aD});var lD=v(($ke,lQ)=>{"use strict";var Qye=require("uuid").v4,oQ=Gn(),aQ=_n(),Jye=di(),Xye=rd(),Zye=X4(),Mt=(q(),M(z)),eRe=tQ(),tRe=gS(),Pi=Q(),rRe=gm(),Uf=ae(),{promisify:nRe}=require("util"),mu=require("moment"),rR=kN(),rQ=sw(),{deleteTransactionLogsBeforeValidator:sRe}=dL(),{handleHDBError:nQ,hdbErrors:iRe,ClientError:oRe}=_e(),{HTTP_STATUS_CODES:sQ}=iRe,iQ=aQ.searchByValue,aRe=aQ.searchByHash,cRe=oQ.insert,lRe=oQ.update,cD;lQ.exports={addJob:fRe,updateJob:pRe,handleGetJob:uRe,handleGetJobsByStartDate:dRe,getJobById:cQ};async function uRe(e){if(e.id===void 0)throw new oRe("'id' is required");let t=await cQ(e.id);return Uf.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(uRe,"handleGetJob");async function dRe(e){try{let t=await mRe(e);if(Pi.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 Pi.error(r),new Error(r)}}o(dRe,"handleGetJobsByStartDate");async function fRe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Uf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Pi.info(d),t.error=d,t}if(!Mt.JOB_TYPE_ENUM[e.operation])return Pi.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Mt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=rR.fileObject(e);break;case Mt.OPERATIONS_ENUM.CSV_URL_LOAD:n=rR.urlObject(e);break;case Mt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=rR.dataObject(e);break;case Mt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=rR.s3FileObject(e);break;case Mt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Mt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=rQ(e,"date");break;case Mt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=rQ(e,"timestamp");break;case Mt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=sRe(e);break;case Mt.OPERATIONS_ENUM.RESTART_SERVICE:if(Mt.HDB_PROCESS_SERVICES[e.service]===void 0)throw nQ(new Error,"Invalid service",sQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw nQ(n,n.message,sQ.BAD_REQUEST,void 0,void 0,!0);let s=new eRe;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 Jye(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await iQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Pi.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=Qye();try{a=await iQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Pi.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Pi.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new rRe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await cRe(l)}catch(d){return Pi.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,Pi.trace(d)}return t}o(fRe,"addJob");async function mRe(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 Zye(n,e.hdb_user);try{if(!cD){let i=_E();cD=nRe(i.evaluateSQL)}return await cD(s)}catch(i){throw Pi.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(mRe,"getJobsInDateRange");async function cQ(e){if(Uf.isEmptyOrZeroLength(e))return Uf.errorizeMessage("Invalid job ID specified.");let t=new Xye(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await aRe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Pi.error(n),Uf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(cQ,"getJobById");async function pRe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Uf.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 tRe(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await lRe(t),r}o(pRe,"updateJob")});var _Q=v((Kke,EQ)=>{"use strict";var uQ=ae(),Lr=(q(),M(z)),hRe=require("moment"),nR=jL(),SE=Q(),dQ=lD(),fQ=iD(),mQ=Rl(),pQ=nt(),ERe=Gy(),_Re=Pf(),{parentPort:gRe,isMainThread:hQ}=require("worker_threads"),{onMessageByType:SRe}=nt(),uD=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function TRe(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(uQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(uQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Lr.JOB_TYPE_ENUM.csv_file_load:await Eo(e,nR.csvFileLoad);break;case Lr.JOB_TYPE_ENUM.csv_url_load:await Eo(e,nR.csvURLLoad);break;case Lr.JOB_TYPE_ENUM.csv_data_load:await Eo(e,nR.csvDataLoad);break;case Lr.JOB_TYPE_ENUM.import_from_s3:await Eo(e,nR.importFromS3);break;case Lr.JOB_TYPE_ENUM.empty_trash:break;case Lr.JOB_TYPE_ENUM.export_local:await Eo(e,fQ.export_local);break;case Lr.JOB_TYPE_ENUM.export_to_s3:await Eo(e,fQ.export_to_s3);break;case Lr.JOB_TYPE_ENUM.delete_files_before:case Lr.JOB_TYPE_ENUM.delete_records_before:await Eo(e,mQ.deleteFilesBefore);break;case Lr.JOB_TYPE_ENUM.delete_audit_logs_before:await Eo(e,mQ.deleteAuditLogsBefore);break;case Lr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Eo(e,ERe.deleteTransactionLogsBefore);break;case Lr.JOB_TYPE_ENUM.restart_service:return await Eo(e,_Re.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(TRe,"parseMessage");async function Eo(e,t){try{e.job.status=Lr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=hRe().valueOf(),await dQ.updateJob(e.job),await yRe(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):SE.error(`There was an error running ${t.name} job with id ${e.job.id}`),SE.error(n),e.job.message=n,e.job.status=Lr.JOB_STATUS_ENUM.ERROR;try{await dQ.updateJob(e.job)}catch(s){throw SE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(Eo,"runJob");async function yRe(e){SE.trace("launching job thread:",e),hQ?pQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):gRe.postMessage({type:Lr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(yRe,"launchJobThread");hQ&&SRe(Lr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{pQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Lr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){SE.error(r)}});EQ.exports={parseMessage:TRe,RunnerMessage:uD}});var SQ=v((Wke,gQ)=>{"use strict";var RRe=ae(),dD=me(),Pc=(q(),M(z)),bRe=Pt(),ARe=hr(),_o=Q(),IRe=$L(),wRe=Xi();dD.initSync();gQ.exports={postOperationHandler:CRe,sendOperationTransaction:TE};async function TE(e,t,r,n){if(e.schema===Pc.SYSTEM_SCHEMA_NAME)return;let s=NRe(e,t,r);s&&(_o.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await ARe.publishToStream(`${bRe.SUBJECT_PREFIXES.TXN}.${e.schema}`,wRe.createNatsTableStreamName(e.schema,e.table),n,s))}o(TE,"sendOperationTransaction");function NRe(e,t,r){if(RRe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Pc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(NRe,"convertCRUDOperationToTransaction");async function CRe(e,t,r){if(!dD.get(Pc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;_o.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=dD.get(Pc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new IRe(t.txn_time,n,s);switch(e.operation){case Pc.OPERATIONS_ENUM.INSERT:try{await TE(e,t.inserted_hashes,i,r)}catch(a){_o.error("There was an error calling clustering postOperationHandler for insert."),_o.error(a)}break;case Pc.OPERATIONS_ENUM.DELETE:try{await TE(e,t.deleted_hashes,i,r)}catch(a){_o.error("There was an error calling clustering postOperationHandler for delete."),_o.error(a)}break;case Pc.OPERATIONS_ENUM.UPDATE:try{await TE(e,t.update_hashes,i,r)}catch(a){_o.error("There was an error calling clustering postOperationHandler for update."),_o.error(a)}break;case Pc.OPERATIONS_ENUM.UPSERT:try{await TE(e,t.upserted_hashes,i,r)}catch(a){_o.error("There was an error calling clustering postOperationHandler for upsert."),_o.error(a)}break;default:break}return t}o(CRe,"postOperationHandler")});var Z,TQ=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 lL={};Re(lL,{chooseOperation:()=>HQ,executeJob:()=>Zs,getOperationFunction:()=>GQ,operation:()=>TD,processLocalTransaction:()=>kQ});function LRe(e){if(!fD){let t=_E();fD=SD.promisify(t.evaluateSQL)}return fD(e)}async function kQ(e,t){try{if(e.body.operation!=="read_log"&&(AE.default.log_level===nm.INFO||AE.default.log_level===nm.DEBUG||AE.default.log_level===nm.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 BQ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return DRe[e.body.operation]&&DQ.default.setSchemaDataToGlobal(n=>{n&&Nn.error(n)}),r}function HQ(e){let t;try{t=GQ(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=_E(),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(`${yQ.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=LQ.default.verifyPerms(i,s);if(a)throw Nn.error(`${yQ.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 GQ(e){if(Nn.trace(`getOperationFunction with operation: ${e.operation}`),RQ.has(e.operation))return RQ.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 TD(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=HQ(e);return kQ({body:e},n)}async function MRe(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[gb]=!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 Ff.default.deleteRecord(i);break;default:Nn.warn("invalid operation in catchup");break}await ORe.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 iR.default.addJob(e),r){t=r.createdJob,Nn.info("addJob result",r);let n=new ED.default.RunnerMessage(t,e);return{message:await ED.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 vRe(){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(Bf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(Bf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(Bf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(Bf.default.searchByValue)),e.set(V.SEARCH,new Z(PRe)),e.set(V.SQL,new Z(LRe)),e.set(V.CSV_DATA_LOAD,new Z(Zs,yE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(Zs,yE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(Zs,yE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(Zs,yE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(Li.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(Li.default.createSchema)),e.set(V.CREATE_TABLE,new Z(Li.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(Li.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(Li.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(Li.default.dropSchema)),e.set(V.DROP_TABLE,new Z(Li.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(Li.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(RE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(RE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(RE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(RE.default.describeAll)),e.set(V.DELETE,new Z(Ff.default.deleteRecord)),e.set(V.ADD_USER,new Z(xf.default.addUser)),e.set(V.ALTER_USER,new Z(xf.default.alterUser)),e.set(V.DROP_USER,new Z(xf.default.dropUser)),e.set(V.LIST_USERS,new Z(xf.default.listUsersExternal)),e.set(V.LIST_ROLES,new Z(bE.default.listRoles)),e.set(V.ADD_ROLE,new Z(bE.default.addRole)),e.set(V.ALTER_ROLE,new Z(bE.default.alterRole)),e.set(V.DROP_ROLE,new Z(bE.default.dropRole)),e.set(V.USER_INFO,new Z(xf.default.userInfo)),e.set(V.READ_LOG,new Z(AQ.default)),e.set(V.ADD_NODE,new Z(IQ.default)),e.set(V.UPDATE_NODE,new Z(mD.default)),e.set(V.SET_NODE_REPLICATION,new Z(mD.default)),e.set(V.REMOVE_NODE,new Z(wQ.default)),e.set(V.CONFIGURE_CLUSTER,new Z(NQ.default)),e.set(V.PURGE_STREAM,new Z(CQ.default)),e.set(V.SET_CONFIGURATION,new Z(_D.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(OQ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(PQ.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(sR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(sR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(sR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(Zs,pD.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(pO)),e.set(V.REMOVE_NODE_BACK,new Z(hO)),e.set(V.DELETE_FILES_BEFORE,new Z(Zs,Ff.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(Zs,Ff.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(Zs,pD.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(iR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(iR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z(NL)),e.set(V.GET_FINGERPRINT,new Z(CL)),e.set(V.SET_LICENSE,new Z(OL)),e.set(V.RESTART,new Z(hD.default.restart)),e.set(V.RESTART_SERVICE,new Z(Zs,hD.default.restartService)),e.set(V.CATCHUP,new Z(MRe)),e.set(V.SYSTEM_INFORMATION,new Z(MQ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(Zs,Ff.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(bQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(PN)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(LN)),e.set(V.LOGIN,new Z(sL)),e.set(V.LOGOUT,new Z(iL)),e.set(V.GET_CONFIGURATION,new Z(_D.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(gD.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(Zs,gD.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(vQ.default.installModules)),e.set(V.GET_BACKUP,new Z(Li.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new Z(Li.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(pL)),e.set(V.LIST_METRICS,new Z(hL)),e.set(V.DESCRIBE_METRIC,new Z(EL)),e.set(V.GET_STATUS,new Z(AL)),e.set(V.SET_STATUS,new Z(IL)),e.set(V.CLEAR_STATUS,new Z(bL)),e.set(V.INSTALL_USAGE_LICENSE,new Z(AP)),e.set(V.GET_USAGE_LICENSES,new Z(CP)),e}var Bf,yE,Li,RE,Ff,bQ,xf,bE,vt,AE,AQ,IQ,mD,wQ,NQ,CQ,OQ,PQ,sR,pD,LQ,iR,ei,hD,SD,hu,DQ,MQ,ED,_D,gD,vQ,UQ,xQ,pu,BQ,FQ,yQ,Nn,ORe,PRe,fD,DRe,RQ,uL=se(()=>{Bf=b(_n()),yE=b(jL()),Li=b(RT()),RE=b(Dl()),Ff=b(Rl()),bQ=b(qC()),xf=b(ds()),bE=b(Gp()),vt=b(cL()),AE=b(Q()),AQ=b(WC()),IQ=b(vT()),mD=b(TO()),wQ=b(xT()),NQ=b(bO()),CQ=b(AO()),OQ=b(NO()),PQ=b(OO()),sR=b(GT()),pD=b(iD()),LQ=b(Qy()),iR=b(lD());q();ei=b(_e()),hD=b(Pf()),SD=b(require("util")),hu=b(Gn()),DQ=b(Qi()),MQ=b(Th()),ED=b(_Q());Ld();My();_D=b(gt()),gD=b(Gy()),vQ=b(mL()),UQ=b(ii()),xQ=b(ae());Fr();pu=b(Es());sf();gL();BQ=b(HN()),FQ=b(SQ());oE();Hh();LL();TQ();({HTTP_STATUS_CODES:yQ}=ei.hdbErrors),Nn=AE.default.loggerWithTag("operation"),{transactToClusteringUtils:ORe}=FQ.default,PRe=SD.promisify(Bf.default.search);o(LRe,"evaluateSQL");DRe={[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(kQ,"processLocalTransaction");RQ=vRe();ve.operation=TD;o(HQ,"chooseOperation");o(GQ,"getOperationFunction");(0,UQ._assignPackageExport)("operation",TD);o(TD,"operation");o(MRe,"catchup");o(Zs,"executeJob");o(vRe,"initializeOperationFunctionMap")});var cR=v((eHe,VQ)=>{"use strict";var oR=(q(),M(z)),URe=ae(),IE=Q(),{handleHDBError:yD,hdbErrors:aR}=_e(),{isMainThread:xRe}=require("worker_threads"),{Readable:BRe}=require("stream"),qQ=require("os"),FRe=require("util"),kRe=MN(),HRe=FRe.promisify(kRe.authorize),$Q=(uL(),M(lL)),{createGzip:GRe,constants:qRe}=require("zlib"),$Re=[oR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,oR.OPERATIONS_ENUM.LOGIN,oR.OPERATIONS_ENUM.LOGOUT];function VRe(e){let t=`Found an uncaught exception with message: ${e.message}. ${qQ.EOL}Stack: ${e.stack} ${qQ.EOL}Terminating ${xRe?"HDB":"thread"}.`;console.error(t),IE.fatal(t),process.exit(1)}o(VRe,"handleServerUncaughtException");function KRe(e,t,r){if(IE[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:aR.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(KRe,"serverErrorHandler");function YRe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=yD(new Error,"Invalid JSON.",aR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(URe.isEmpty(e.body.operation)){let n=yD(new Error,"Request body must include an 'operation' property.",aR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(YRe,"reqBodyValidationHandler");function WRe(e,t,r){let n;!$Re.includes(e.body.operation)||e.body.operation===oR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?HRe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{IE.warn(i),IE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(yD(i,a,aR.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(WRe,"authHandler");async function zRe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=$Q.chooseOperation(e.body);let s=await $Q.processLocalTransaction(e,n);if(s instanceof BRe&&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(GRe({level:qRe.Z_BEST_SPEED})))}return s}catch(s){throw IE.error(s),s}}o(zRe,"handlePostRequest");VQ.exports={authHandler:WRe,handlePostRequest:zRe,handleServerUncaughtException:VRe,serverErrorHandler:KRe,reqBodyValidationHandler:YRe}});var zQ=v((rHe,WQ)=>{"use strict";var jRe=require("fastify-plugin"),{handlePostRequest:KQ,authHandler:QRe,reqBodyValidationHandler:JRe}=cR();async function XRe(e){e.decorate("hdbCore",{preValidation:[JRe,QRe],request:o(t=>YQ(KQ(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>YQ(KQ(t,r,!0)),"requestWithoutAuthentication")})}o(XRe,"hdbCore");async function YQ(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(YQ,"convertAsyncIterators");WQ.exports=jRe(XRe)});var QQ=v((iHe,jQ)=>{"use strict";var sHe=require("fs"),lR=me();lR.initSync();var{CONFIG_PARAMS:RD}=(q(),M(z)),ZRe=1024*1024*1024;function ebe(e){let t=lR.get(RD.HTTP_TIMEOUT),r=lR.get(RD.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:ZRe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:lR.get(RD.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(ebe,"getServerOptions");jQ.exports=ebe});var ZQ=v((aHe,XQ)=>{"use strict";var bD=me();bD.initSync();var{CONFIG_PARAMS:JQ}=(q(),M(z));function tbe(){let e=bD.get(JQ.HTTP_CORSACCESSLIST),t=bD.get(JQ.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(tbe,"getCORSOptions");XQ.exports=tbe});var r2=v((lHe,t2)=>{"use strict";var e2=me();e2.initSync();var rbe=(q(),M(z));function nbe(){return e2.get(rbe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(nbe,"getHeaderTimeoutConfig");t2.exports=nbe});var ID={};Re(ID,{customFunctionsServer:()=>obe,ready:()=>E2,start:()=>ibe});function ibe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ea||(Ea=h2(t),ve.http((await Ea).server));let a=await Ea,c=(0,AD.dirname)(s),l=(0,AD.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!n2.has(c)){n2.add(c);try{a.register(cbe(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:E2}}async function obe(){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 abe();let e=l2.get(F.HTTP_SECUREPORT)>0,t;try{t=Ea=await h2(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 abe(){try{yt.info("Custom Functions starting configuration."),await u2.setUsersWithRolesCache(),yt.info("Custom Functions completed configuration.")}catch(e){yt.error(e)}}function cbe(e,t){return async function(r){try{yt.info("Custom Functions starting buildRoutes"),yt.trace("Loading fastify routes folder "+e),(0,s2.existsSync)(e)&&r.register(c2.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 h2(e){yt.info("Custom Functions starting buildServer.");let t=(0,d2.default)(e),r=(0,i2.default)(t);r.server.headersTimeout=(0,m2.default)(),r.setErrorHandler(p2.serverErrorHandler);let n=(0,f2.default)();return n&&r.register(o2.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(a2.default),await r.register(sbe),await r.after(),wm(r),yt.info("Custom Functions completed buildServer."),r}function E2(){if(Ea)return Ea.then?Ea.then(e=>e.ready()):Ea.ready()}var AD,s2,i2,o2,a2,c2,l2,yt,sbe,u2,d2,f2,m2,p2,Ea,n2,_2=se(()=>{AD=require("path"),s2=require("fs"),i2=b(require("fastify")),o2=b(require("@fastify/cors")),a2=b(wN()),c2=b(require("@fastify/autoload")),l2=b(me());q();yt=b(Q()),sbe=b(zQ()),u2=b(ds()),d2=b(QQ()),f2=b(ZQ()),m2=b(r2()),p2=b(cR());Mo();Fr();n2=new Set;o(ibe,"start");o(obe,"customFunctionsServer");o(abe,"setUp");o(cbe,"buildRouteFolder");o(h2,"buildServer");o(E2,"ready")});var ND={};Re(ND,{handleApplication:()=>lbe,suppressHandleApplicationWarning:()=>ube});function lbe(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,Hf.join)(n.absolutePath,"index.html");(0,kf.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,Hf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Hf.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,wD.default)(n,(0,kf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(dbe(c),!c)return{status:404,body:"File not found"};let l=(0,Hf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,kf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,wD.default)(n,(0,kf.realpathSync)(l))}},{runFirst:!0})}function dbe(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 kf,Hf,wD,ube,g2=se(()=>{kf=require("node:fs"),Hf=require("node:path"),wD=b(require("send"));o(lbe,"handleApplication");ube=!0;o(dbe,"validateNotFoundOption")});var CD={};Re(CD,{start:()=>fbe});function fbe({override:e}){return{handleFile:o((t,r,n)=>{uR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,S2.parse)(t))){if(process.env[s]!==void 0)if(uR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)uR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var S2,uR,T2=se(()=>{S2=require("dotenv"),uR=b(Q());o(fbe,"start")});var OD={};Re(OD,{DataLoaderError:()=>Is,DataLoaderResult:()=>Gf,EmptyFileError:()=>mR,FileParseError:()=>fR,InvalidPropertyTypeError:()=>pR,MissingRequiredPropertyError:()=>wE,RecordProcessingError:()=>NE,SystemDatabaseError:()=>hR,UnsupportedFileExtensionError:()=>dR,handleApplication:()=>pbe,loadDataFile:()=>I2,suppressHandleApplicationWarning:()=>mbe});function pbe(e){if((0,R2.getWorkerIndex)()!==0){go.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||I2(t,Sn,De).then(r=>{go.debug?.("Data loader processed file: %s: %s",(0,_a.basename)(t.absolutePath),r.message)})})}async function I2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,_a.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,y2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new dR(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof Is?f:new fR(t,f)}if(!a)throw new mR(t);let{database:c,table:l,records:u}=a;if(!l)throw new wE(t,"table");if(!u)throw new wE(t,"records");if(!Array.isArray(u))throw new pR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new hR(c,l);try{let f;if(c&&s[c]&&s[c][l])go.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])go.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{go.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 Is)go.error?.(`Record processing error: ${I.message}`);else{let k=new NE(d,I);go.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)`),go.info?.(R),new Gf(t,c,l,"success",p+h,R)}else if(E>0){let R=`All ${E} records in ${d} already up-to-date`;return go.info?.(R),new Gf(t,c,l,"skipped",m,R)}else{let R=`No records to process in ${d}`;return go.info?.(R),new Gf(t,c,l,"success",0,R)}}catch(f){throw f instanceof Is?f:new NE(d,f)}}var _a,y2,R2,ga,b2,A2,go,mbe,Is,dR,fR,mR,wE,pR,hR,NE,Gf,w2=se(()=>{_a=require("node:path"),y2=require("yaml");we();R2=b(nt()),ga=b(zr()),b2=b(_e()),A2=b(Q()),go=A2.default.forComponent("dataLoader"),mbe=!0;o(pbe,"handleApplication");o(I2,"loadDataFile");Is=class extends b2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=ga.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},dR=class extends Is{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,_a.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},fR=class extends Is{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,_a.basename)(t)}: ${r.message}`,ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},mR=class extends Is{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,_a.basename)(t)} is empty or invalid`,ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},wE=class extends Is{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,_a.basename)(t)} is missing required "${r}" property`,ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},pR=class extends Is{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,_a.basename)(t)} has invalid "${r}" property, expected ${n}`,ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},hR=class extends Is{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,ga.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},NE=class extends Is{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,ga.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Gf=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 PD={};Re(PD,{hdbServer:()=>gbe,start:()=>gbe});async function gbe(e){try{So.default.debug("In Fastify server"+process.cwd()),So.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),So.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=N2.default.isMaster,await Sbe();let t=e.securePort>0;qf=Tbe(t),await qf.ready(),e||(e={}),e.isOperationsServer=!0;try{ve.http(qf.server,e),qf.server.closeIdleConnections||await qf.listen({port:0,host:"::"})}catch(r){throw qf.close(),So.default.error(r),So.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),So.default.fatal(t),process.exit(1)}}async function Sbe(){return So.default.trace("Configuring HarperDB process."),U2.default.setSchemaDataToGlobal(),B2.default.setUsersWithRolesCache()}function Tbe(e){So.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=ybe(e),r=(0,C2.default)(t);r.server.headersTimeout=bbe(),r.setErrorHandler(Lc.serverErrorHandler);let n=Rbe();n&&r.register(O2.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(D2.default),r.register(P2.default),r.register(L2.default,{root:M2.default.join(v2.PACKAGE_ROOT,"studio/web")}),wm(r);let s=Sa.default.get(im.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:[Lc.reqBodyValidationHandler,Lc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Lc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),So.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function ybe(e){let t=Sa.default.get($f.OPERATIONSAPI_NETWORK_TIMEOUT),r=Sa.default.get($f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Ebe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:Sa.default.get($f.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function Rbe(){let e=Sa.default.get($f.OPERATIONSAPI_NETWORK_CORS),t=Sa.default.get($f.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===_be)&&(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 bbe(){return Sa.default.get($f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??hbe}var N2,Sa,So,C2,O2,P2,L2,D2,M2,v2,U2,x2,B2,Lc,hbe,Ebe,_be,$f,qf,F2=se(()=>{N2=b(require("cluster")),Sa=b(me());q();So=b(Q()),C2=b(require("fastify")),O2=b(require("@fastify/cors")),P2=b(require("@fastify/compress")),L2=b(require("@fastify/static")),D2=b(wN()),M2=b(require("path")),v2=b(Ct()),U2=b(Qi()),x2=b(ae()),B2=b(ds());Fr();Lc=b(cR());Mo();Sa.default.initSync();hbe=6e4,Ebe=1024*1024*1024,_be="TRUE",{CONFIG_PARAMS:$f}=z;o(gbe,"operationsServer");o(Sbe,"setUp");o(Tbe,"buildServer");o(ybe,"getServerOptions");o(Rbe,"getCORSOpts");o(bbe,"getHeaderTimeoutConfig")});var xD={};Re(xD,{disableNATS:()=>Ibe,publishToStream:()=>gR,setNATSReplicator:()=>LD,setPublishToStream:()=>wbe,setSubscription:()=>UD,start:()=>Abe});function Abe(){CE.default.get(F.CLUSTERING_ENABLED)&&Cbe()}function Ibe(e=!0){$2=e}function wbe(e,t){gR=e,UD=t}function Cbe(){if($2||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];LD(s,r,i)}}Pl((r,n)=>{LD(r.tableName,r.databaseName,r),n&&K2(r)}),!k2&&(k2=!0)}function LD(e,t,r){if(t==="system"&&Obe.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){K2(i)}static subscribe(){let i=new Zn;return UD(t,e,i),i}static subscribeOnThisThread(i){return i<(CE.default.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Nbe)}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 ER(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=V2;return i}o(n,"getNATSTransaction")}function K2(e){let t=CE.default.get(F.CLUSTERING_NODENAME);gR(`${MD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,vD.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 H2,MD,vD,G2,q2,CE,_R,$2,gR,UD,Nbe,V2,k2,Obe,ER,DD,Y2=se(()=>{we();qa();H2=b(hr()),MD=b(Pt()),vD=b(Xi());Ou();G2=b(eC()),q2=b(Mn()),CE=b(me());q();_R=b(Q());o(Abe,"start");o(Ibe,"disableNATS");gR=H2.publishToStream,UD=G2.setSubscription;o(wbe,"setPublishToStream");Nbe=2;o(Cbe,"assignReplicationSource");Obe=["hdb_job","hdb_raw_analytics","hdb_info"];o(LD,"setNATSReplicator");o(K2,"publishSchema");ER=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=CE.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||(_R.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(gR(`${MD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,vD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw _R.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},DD=class extends ER{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,q2.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};V2=new DD});async function J2({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await BD.get(e,{returnNonexistent:!0});i=new HD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await BD.get(e);a&&a.delete()}i=new TR(e,t)}return n&&(n.id=e,n.user={username:t?.username},OE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function FD(){return SR++,SR>65500&&(SR=1),SR}function kD(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 z2,Dc,j2,Q2,W2,BD,OE,SR,TR,HD,X2=se(()=>{we();$a();z2=b(Mn()),Dc=b(Q());Ua();j2=b(nt()),Q2=b(kP());Fr();ig();W2=100,BD=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"}]}}]}),OE=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,j2.getWorkerIndex)()===0&&(async()=>{await Q2.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of OE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await ve.getUser(r.user.username));try{await kD(r,t,r)}catch{(0,Dc.warn)("Failed to publish will",t)}OE.delete(e.id)}})();o(J2,"getSession");SR=1;o(FD,"getNextMessageId");TR=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,Dc.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=FD());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>W2?await new Promise(H=>setTimeout(H,this.awaitingAcks.size-W2)):await new Promise(setImmediate)}catch(k){(0,Dc.warn)(k)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=FD();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 kD(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 OE.get(this.sessionId);n?.doesExist()&&await kD(n,n.data,r)}}finally{await OE.delete(this.sessionId)}}).catch(n=>{(0,Dc.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(kD,"publish");HD=class extends TR{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=FD(),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,Dc.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,z2.getNextMonotonicTime)()),(0,Dc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),BD.put(this.sessionRecord)}}});var GD={};Re(GD,{bypassAuth:()=>Pbe,start:()=>Dbe});function Pbe(){iJ=!0}function Dbe({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}=eJ(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,Vf.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&RR.notify?.({username:d?.username,status:si.SUCCESS,type:La.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Vf.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&RR.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&&Lbe(u.remoteAddress)&&(d=await(0,tJ.getSuperUser)(),er.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=eJ(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 eJ(e,t,r,n,s){Z2||(Z2=!0,qm(f=>{yR>0&&f.push({metric:"mqtt-connections",connections:yR,byThread:!0})}));let i;yR++;let a,c={protocolVersion:4},l=(0,bR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){yR--,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,Vf.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&RR.notify?.({username:n?.username,status:si.SUCCESS,type:La.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(X){return(0,Vf.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&RR.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=J2({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,bR.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 bR,tJ,Vf,rJ,nJ,sJ,RR,er,iJ,Lbe,Z2,yR,oJ=se(()=>{bR=require("mqtt-packet");X2();tJ=b(ds());Mo();rs();Fr();Vf=b(me());q();rJ=b(es()),nJ=b(Q()),sJ=require("events");mT();RR=(0,rJ.loggerWithTag)("auth-event"),er=(0,nJ.forComponent)("mqtt"),iJ=(0,Vf.get)(F.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(Pbe,"bypassAuth");Lbe=o(e=>iJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(Dbe,"start");yR=0;o(eJ,"onSocket")});function AR(e,t){if(t?.includes(".."))throw new qD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var qD,$D=se(()=>{qD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(AR,"resolveBaseURLPath")});function aJ(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 cJ=se(()=>{o(aJ,"deriveCommonPatternBase")});function IR(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 VD=se(()=>{o(IR,"deriveGlobOptions")});var lJ,KD,PE,uJ=se(()=>{$D();cJ();VD();lJ=require("micromatch"),KD=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"}},PE=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=AR(this.name,this.config.urlPath),this.globOptions=IR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new KD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,lJ.scan)(s).base),this.commonPatternBase=aJ(this.patternBases)}}});function dJ(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(dJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(dJ(n,t)){t=t.slice(n.length+1);break}}}return(0,fJ.join)(e.baseURLPath,t)}var fJ,YD=se(()=>{fJ=require("node:path");o(dJ,"pathStartsWithBase");o(Eu,"deriveURLPath")});function mJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var NR,pJ,hJ,WD,EJ,_J,wR,gJ=se(()=>{NR=require("node:events");uJ();pJ=b(Q()),hJ=b(require("chokidar")),WD=require("node:path"),EJ=require("node:fs/promises");YD();_J=require("micromatch"),wR=class extends NR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new PE(t,r,mJ(n)),this.#r=s||pJ.default.loggerWithTag(t),this.ready=(0,NR.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,_J.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,WD.join)(this.directory,r);switch(t){case"add":case"change":{let i=Eu(this.#e,r,"file");(0,EJ.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,WD.join)(this.#e.directory,r));return this.#t=hJ.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 PE(this.name,this.directory,mJ(t)),this.#a()}};o(mJ,"castConfig")});var CR,zD=se(()=>{CR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var PR,SJ,TJ,yJ,RJ,bJ,jD,QD,JD,XD,ZD,OR,AJ=se(()=>{PR=require("events"),SJ=b(require("yaml")),TJ=b(require("chokidar")),yJ=require("node:fs/promises"),RJ=require("util"),bJ=b(Q());zD();jD=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"}},QD=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},JD=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"}},XD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},ZD=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},OR=class extends PR.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||bJ.default.loggerWithTag(t),this.ready=(0,PR.once)(this,"ready"),this.#t=TJ.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,yJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=SJ.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 jD(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=CR,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,RJ.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 QD;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new JD(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 XD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new ZD(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 MR,IJ,LR,DR,wJ=se(()=>{MR=require("node:events");gJ();AJ();IJ=b(Q());yL();LR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},DR=class extends MR.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,IJ.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,MR.once)(this,"ready"),this.options=new OR(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 wR(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 LR);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 LR);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}`),Kj()}}});function _u(e){return typeof e=="string"&&e.trim()!==""}function eM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>_u(t))}function PJ(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function Mbe(e){e.config.root&&LE.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 aM(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(PJ(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,DE.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 LJ(e){let t=!1;if(t=await Mbe(e),t)return t;let r=await(0,NJ.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,DE.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,CJ.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 LE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var vR,NJ,LE,DE,CJ,OJ,UR,Di,tM,rM,nM,sM,iM,oM,aM,cM,lM,DJ=se(()=>{vR=require("node:worker_threads"),NJ=b(require("fast-glob")),LE=b(Q());$D();VD();DE=require("node:path"),CJ=require("node:fs/promises");YD();OJ=require("micromatch"),UR=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)&&!eM(this.config.files)&&!PJ(this.config.files))throw new tM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!eM(this.config.files.source)&&!_u(this.config.files.source))throw new rM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new nM(this);if(this.config.files.ignore!==void 0&&!eM(this.config.files.ignore)&&!_u(this.config.files.ignore))throw new sM(this)}if(this.config.root!==void 0&&!_u(this.config.root))throw new oM(this);if(this.config.path!==void 0&&!_u(this.config.path))throw new cM(this);if(this.config.path&&(LE.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 lM(this);this.globOptions=IR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new iM(this,r);return r.startsWith("/")&&(LE.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,OJ.scan)(r).base),this.baseURLPath=AR(this.name,this.config.urlPath)}},Di=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,DE.basename)(r.directory)}) ${t}`)}},tM=class extends Di{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)}},rM=class extends Di{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},nM=class extends Di{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},sM=class extends Di{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},iM=class extends Di{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},oM=class extends Di{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)}},aM=class extends Di{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)}},cM=class extends Di{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},lM=class extends Di{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(_u,"isNonEmptyString");o(eM,"isArrayOfNonEmptyStrings");o(PJ,"isObject");o(Mbe,"handleRoots");o(LJ,"processResourceExtensionComponent")});var by={};Re(by,{getComponentName:()=>Ty,loadComponent:()=>kR,loadComponentDirectories:()=>xJ,setErrorReporter:()=>Ube});function xJ(e,t){t&&(dM=t),e&&(hM=e);let r=[];if((0,Vt.existsSync)(uM)){let s=(0,Vt.readdirSync)(uM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,Kr.join)(uM,a);r.push(kR(c,dM,mb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(kR(n,dM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{UJ=!0})}function Ube(e){BR=e}function xbe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{pa.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(pa.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)(pM.PACKAGE_ROOT))return t();(0,Vt.rmSync)(i,{recursive:!0,force:!0})}(0,Vt.symlinkSync)(pM.PACKAGE_ROOT,i,"dir"),t()}finally{pa.primaryStore.unlock(e,0)}})}function BJ(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 pa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(BJ(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(()=>{pa.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 kR(e,t,r,n,s,i){let a=(0,Vt.realpathSync)(e);if(xR.has(a))return xR.get(a);xR.set(a,!0),s&&(hM=s);try{let c,l=(0,Kr.join)(e,"harperdb-config.yaml");if((0,Vt.existsSync)(l)?c=n?(0,HR.getConfigObj)():(0,mM.parseDocument)((0,Vt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Vt.existsSync)(l=(0,Kr.join)(e,"config.yaml"))?c=(0,mM.parseDocument)((0,Vt.readFileSync)(l,"utf8")).toJSON():c=CR,!n)try{await xbe(e)}catch(m){Ta.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Ta.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=FR,d={};for(let m in c){let p=n?m:`${(0,Kr.basename)(e)}.${m}`;FR=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,vJ.getHdbBasePath)().length){I=null;break}I=(0,Kr.join)(k,"node_modules",m)}}if(I)E=await kR(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=vbe[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&&Ta.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new DR(m,e,l,t,ve);await BJ(I,E),to.loaded(p,`Component '${p}' loaded successfully`);continue}if(fM.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&&!MJ.includes(I)){let k=EM.get(F.HTTP_SESSIONAFFINITY);k&&Ta.default.warn("Session affinity is not recommended and may cause memory leaks"),(k||!pS)&&(MJ.push(I),$P(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),hM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new UR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await LJ(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}`,BR?.(R),((0,ME.getWorkerIndex)()===0?console:Ta.default).error(R),t.set(h.path||"/",new cl(R),null,!0),to.failed(p,R,`Could not load component '${p}'`)}}if(FR=u,fM.isMainThread&&!UJ&&i&&(0,ME.watchDir)(e,async()=>xJ()),c.extensionModule||c.pluginModule){let m=await dS((0,Kr.join)(e,c.extensionModule||c.pluginModule));return xR.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?`;BR?.(new Error(m)),((0,ME.getWorkerIndex)()===0?console:Ta.default).error(m),to.failed((0,Kr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Ta.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}`,BR?.(c),t.set("",new cl(c))}}var Vt,Kr,fM,mM,EM,pM,Ta,ME,vJ,HR,uM,hM,UJ,dM,vbe,MJ,xR,BR,FR,Ty,Kh=se(()=>{Vt=require("node:fs"),Kr=require("node:path"),fM=require("node:worker_threads"),mM=require("yaml"),EM=b(me()),pM=b(Ct());q();LG();GG();tq();aq();cq();bq();_2();g2();T2();Ta=b(Q());w2();ME=b(nt());hN();Fr();we();KP();vJ=b(me());F2();My();Y2();ps();oJ();HR=b(gt());$p();FA();wJ();DJ();BP();oE();Ap();zD();uM=(0,HR.resolvePath)(EM.get(F.COMPONENTSROOT)),hM=new Map;o(xJ,"loadComponentDirectories");vbe={REST:ES,rest:ES,graphql:aN,graphqlSchema:iN,roles:pN,jsResource:EN,fastifyRoutes:ID,login:gN,static:ND,operationsApi:PD,customFunctions:{},http:Sy,clustering:xD,replication:Qo,authentication:Jh,mqtt:GD,loadEnv:CD,logging:Ta.default,dataLoader:OD},MJ=[],xR=new Map;o(Ube,"setErrorReporter");Ty=o(()=>FR,"getComponentName");o(xbe,"symlinkHarperModule");o(BJ,"sequentiallyHandleApplication");o(kR,"loadComponent")});var Ay=v(($Ge,FJ)=>{var{isMainThread:_M}=require("worker_threads"),{getTables:Bbe}=(we(),M(mt)),{loadComponentDirectories:Fbe,loadComponent:kbe}=(Kh(),M(by)),{resetResources:Hbe}=($a(),M(kA)),Gbe=gt(),{dirname:qbe}=require("path"),{getConnection:$be}=hr(),Vbe=me(),{CONFIG_PARAMS:Kbe}=(q(),M(z)),{loadCertificates:Ybe}=Es(),{installApplications:Wbe}=(By(),M(xy)),{loadAndWatchLicensesDir:zbe}=(Hh(),M(my)),gM=new Map;async function jbe(e=!1){!_M&&Vbe.get(Kbe.CLUSTERING_ENABLED)&&$be();try{_M&&await Wbe()}catch(n){console.error(n)}let t=Hbe();Bbe(),t.isWorker=e,_M&&zbe(),await Ybe(),await kbe(qbe(Gbe.getConfigFilePath()),t,"hdb",!0,gM),await Fbe(gM,t);let r=[];for(let[n]of gM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(jbe,"loadRootComponents");FJ.exports.loadRootComponents=jbe});var nt=v((KGe,vi)=>{"use strict";Db();var{Worker:Qbe,MessageChannel:Jbe,parentPort:To,isMainThread:bM,threadId:Xbe,workerData:yo}=require("worker_threads"),{PACKAGE_ROOT:Zbe}=Ct(),{join:qJ,isAbsolute:eAe,extname:tAe}=require("path"),{server:$J}=(Fr(),M(cm)),{watch:rAe,readdir:nAe}=require("fs/promises"),{totalmem:kJ}=require("os"),Kf=(q(),M(z)),VJ=me(),Mi=Q(),{randomBytes:sAe}=require("crypto"),{_assignPackageExport:iAe}=ii(),HJ=1024*1024,ya=[],ti=[],oAe=50,AM=1e4,aAe="restart",KJ="request_thread_info",YJ="resource_report",WJ="thread_info",zJ="added-port",cAe="ack",SM;iAe("threads",ti);vi.exports={startWorker:TM,restartWorkers:wM,shutdownWorkers:e3,shutdownWorkersNow:mAe,workers:ya,setMonitorListener:yAe,onMessageFromWorkers:pAe,onMessageByType:r3,broadcast:EAe,broadcastWithAcknowledgement:gAe,setChildListenerByType:fAe,getWorkerIndex:jJ,getWorkerCount:QJ,getTicketKeys:XJ,setMainIsWorker:uAe,setTerminateTimeout:lAe,restartNumber:yo?.restartNumber||1};ti.onMessageByType=r3;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};vi.exports.whenThreadsStarted=new Promise(e=>{vi.exports.threadsHaveStarted=e});var IM;function lAe(e){AM=e}o(lAe,"setTerminateTimeout");function jJ(){return yo?yo.workerIndex:IM?0:void 0}o(jJ,"getWorkerIndex");function QJ(){return yo?yo.workerCount:IM?1:void 0}o(QJ,"getWorkerCount");function uAe(e){IM=e,vi.exports.threadsHaveStarted()}o(uAe,"setMainIsWorker");var JJ=1,GR;function XJ(){return GR||(GR=bM?sAe(48):yo.ticketKeys,GR)}o(XJ,"getTicketKeys");Object.defineProperty($J,"workerIndex",{get(){return jJ()}});Object.defineProperty($J,"workerCount",{get(){return QJ()}});var ZJ={[KJ](e,t){SAe(t)},[YJ](e,t){TAe(t,e)}};function TM(e,t={}){let r=process.constrainedMemory?.()||kJ();r=Math.min(r,kJ(),2e4*HJ);let n=VJ.get(Kf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/HJ/(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 Jbe;u.existingPort=l,i.push(u),a.push(u.port2)}tAe(e)||(e+=".js");let c=new Qbe(eAe(e)?e:qJ(Zbe,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:JJ=t.threadCount,name:t.name,restartNumber:vi.exports.restartNumber,ticketKeys:XJ()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:zJ,port:l,threadId:c.threadId},[l]);return $R(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>TM(e,t),c.on("error",l=>{Mi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{ya.splice(ya.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<oAe?(t.unexpectedRestarts=c.unexpectedRestarts+1,TM(e,t)):Mi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{ZJ[l.type]?.(l,c)}),ya.push(c),bAe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(TM,"startWorker");var dAe=[Kf.THREAD_TYPES.HTTP];async function wM(e=null,t=Math.max(JJ>3,1),r=!0){if(bM){try{process.chdir(process.cwd())}catch(a){Mi.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=Ay();await a()}vi.exports.restartNumber++,t<1&&(t=t*ya.length);let n=[],s=[];for(let a of ya.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Mi.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:vi.exports.restartNumber,type:Kf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=dAe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Mi.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},AM*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===Kf.ITC_EVENT_TYPES.CHILD_STARTED&&(Mi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Mi.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}=Pf();r&&(e==="http"||!e)&&VJ.get(Kf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else To.postMessage({type:aAe,workerType:e})}o(wM,"restartWorkers");function fAe(e,t){ZJ[e]=t}o(fAe,"setChildListenerByType");function e3(e){return wM(e,1/0,!1)}o(e3,"shutdownWorkers");function mAe(e){return e3(e),Promise.all(ya.map(t=>t.terminate()))}o(mAe,"shutdownWorkersNow");var t3=[];function pAe(e){t3.push(e)}o(pAe,"onMessageFromWorkers");var yM=new Map;function r3(e,t){let r=yM.get(e);r||yM.set(e,r=[]),r.push(t)}o(r3,"onMessageByType");var hAe=10;async function EAe(e,t){let r=0;for(let n of ti)try{n.postMessage(e),r++>hAe&&(r=0,await new Promise(setImmediate))}catch(s){Mi.error("Unable to send message to worker",s)}t&&s3(e,null)}o(EAe,"broadcast");var qR=new Map,_Ae=1;function gAe(e){return new Promise(t=>{let r=0;for(let n of ti)try{let s=_Ae++,i=o(()=>{qR.delete(s),--r===0&&t(),n!==To&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,qR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of qR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Mi.error("Unable to send message to worker",s)}r===0&&t()})}o(gAe,"broadcastWithAcknowledgement");function SAe(e){e.postMessage({type:WJ,workers:n3()})}o(SAe,"sendThreadInfo");function n3(){let e=Date.now();return ya.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(n3,"getChildWorkerInfo");function TAe(e,t){e.resources=t,e.resources.updated=Date.now()}o(TAe,"recordResourceReport");var RM;function yAe(e){RM=e}o(yAe,"setMonitorListener");var RAe=1e3,GJ=!1;function bAe(){GJ||(GJ=!0,setInterval(()=>{for(let e of ya){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}RM&&RM()},RAe).unref())}o(bAe,"startMonitoring");var AAe=1e3;if(To&&yo?.addPorts){$R(To);for(let e=0,t=yo.addPorts.length;e<t;e++){let r=yo.addPorts[e];r.threadId=yo.addThreadIds[e],$R(r)}setInterval(()=>{let e=process.memoryUsage();To.postMessage({type:YJ,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},AAe).unref(),SM=o(()=>new Promise((e,t)=>{To.on("message",r),To.postMessage({type:KJ});function r(n){n.type===WJ&&(To.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else SM=n3;vi.exports.getThreadInfo=SM;function $R(e,t){ti.push(e),e.on("message",r=>{if(r.type===zJ)r.port.threadId=r.threadId,$R(r.port);else if(r.type===cAe){let n=qR.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($R,"addPort");function s3(e,t){for(let n of t3)n(e,t);let r=yM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Mi.error(s)}}o(s3,"notifyMessageListeners");if(bM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await nAe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(qJ(s,a.name));try{for await(let{filename:a}of rAe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await wM(),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");vi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else To.on("message",async e=>{let{type:t}=e;t===Kf.ITC_EVENT_TYPES.SHUTDOWN&&(vi.exports.restartNumber=e.restartNumber,To.unref(),setTimeout(()=>{Mi.warn("Thread did not voluntarily terminate",Xbe),process.exit(0)},AM).unref())})});var u3=v((jGe,l3)=>{"use strict";var{promises:Yf,createReadStream:IAe,createWriteStream:wAe}=require("fs"),{createGzip:NAe}=require("zlib"),{promisify:CAe}=require("util"),{pipeline:OAe}=require("stream"),PAe=CAe(OAe),CM=require("path"),c3=me();c3.initSync();var VR=Q(),{CONFIG_PARAMS:LAe,ITC_EVENT_TYPES:WGe}=(q(),M(z)),{onMessageFromWorkers:zGe}=nt(),{convertToMS:i3}=ae(),{onStorageReclamation:DAe}=(U_(),M(QU)),MAe=6e4,vAe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",UAe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",NM,o3;l3.exports=xAe;function xAe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(DAe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(vAe);if(!i)throw new Error(UAe);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=i3(r));let d;return NM=Date.now(),VR.trace("Log rotate enabled, maxSize:",t,"interval:",r),o3=setInterval(async()=>{if(l){let f;f=await Yf.stat(e.path),f.size>=l&&(d=await a3(e.path,i))}if(u&&Date.now()-NM>=u&&(d=await a3(e.path,i),NM=Date.now()),n||c){let f=i3(n??"1M")/(1+c);c=0;let m=await Yf.readdir(i);for(let p of m)try{let h=await Yf.stat(CM.join(i,p));Date.now()-h.mtimeMs>f&&await Yf.unlink(CM.join(i,p))}catch(h){VR.error("Error trying to remove log",p,h)}}},a??MAe).unref(),{end(){clearInterval(o3)},getLastRotatedLogPath(){return d}}}o(xAe,"logRotator");async function a3(e,t){let r=c3.get(LAe.LOGGING_ROTATION_COMPRESS),n=CM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Yf.rename(e,n),r&&(e=n,n+=".gz",await PAe(IAe(e),NAe(),wAe(n)),await Yf.unlink(e)),VR.closeLogFile(),VR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(a3,"moveLogFile")});var h3={};Re(h3,{RootConfigWatcher:()=>OM});var d3,f3,m3,KR,p3,OM,E3=se(()=>{d3=b(require("chokidar")),f3=require("node:fs/promises"),m3=b(gt()),KR=require("node:stream"),p3=require("yaml"),OM=class extends KR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,m3.getConfigFilePath)(),this.ready=(0,KR.once)(this,"ready"),this.#t=d3.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,f3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,p3.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,ZR)=>{"use strict";var Ra=require("fs-extra"),{workerData:BAe,threadId:FAe,isMainThread:R3}=require("worker_threads"),xE=require("path"),b3=require("yaml"),A3=require("properties-reader"),Yr=(q(),M(z)),_3=$c(),kAe=require("os"),{PACKAGE_ROOT:BM}=Ct(),{_assignPackageExport:HAe}=ii(),{Console:GAe}=require("console"),LM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),g3=new Map,{join:ba}=xE,S3=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},qAe={STDOUT:"stdOut",STDERR:"stdErr"},ZGe=ba(BM,"logs"),$Ae=ba(BM,"config/yaml/",Yr.HDB_DEFAULT_CONFIG_FILE),VAe=1e4,BE,FE,YR,Ro,DM,PM,zR,Ut,ws,jR,QR,Wf,UE,vE;function WR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=xE.dirname(n)):t.root?n=ba(t.root,DM):(n=Ut.path,t.root||(t.root=xE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Ut?.level??cr.info,I3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Ut.path===e.path&&r)}o(WR,"updateLogger");function I3(e){let t=e.conditional??(e.conditional={});t.notify=cr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=cr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=cr.error>=e.level?e.error.bind(e):void 0,t.warn=cr.warn>=e.level?e.warn.bind(e):void 0,t.info=cr.info>=e.level?e.info.bind(e):void 0,t.debug=cr.debug>=e.level?e.debug.bind(e):void 0,t.trace=cr.trace>=e.level?e.trace.bind(e):void 0}o(I3,"updateConditional");async function MM(){vE||(vE=new uIe,await vE.ready,vE.on("change",MM));let e=vE.config,t=e.logging??{};WR(Ut,t),zR=Ut.path,BE=t.console??!1,t.external&&WR(ws,t.external);for(let r in e){let n=e[r];n.logging?WR(Ut.forComponent(r),n.logging,r):Ut.hasComponent(r)&&WR(Ut.forComponent(r),t,r)}}o(MM,"updateLogSettings");var vM=class extends GAe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){Cn="trace",this.level<=cr.trace&&super.info(...t),Cn="info"}debug(...t){Cn="debug",this.level<=cr.debug&&super.info(...t),Cn="info"}info(...t){Cn="info",this.level<=cr.info&&super.info(...t),Cn="info"}warn(...t){Cn="warn",this.level<=cr.warn&&super.warn(...t),Cn="info"}error(...t){Cn="error",this.level<=cr.error&&super.error(...t),Cn="info"}fatal(...t){Wf=!0;try{Cn="fatal",this.level<=cr.fatal&&super.error(...t),Cn="info"}finally{Wf=!1}}notify(...t){Wf=!0;try{Cn="notify",this.level<=cr.notify&&super.info(...t),Cn="info"}finally{Wf=!1}}withTag(t){return N3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};UE===void 0&&w3();ZR.exports={notify:ZAe,fatal:eIe,error:xM,warn:tIe,info:QAe,debug:XAe,trace:JAe,logLevel:Ro,loggerWithTag:N3,suppressLogging:zAe,initLogSettings:w3,logCustomLevel:rIe,closeLogFile:C3,createLogger:XR,logsAtLevel:YAe,getLogFilePath:o(()=>zR,"getLogFilePath"),forComponent:o(e=>Ut.forComponent(e),"forComponent"),setMainLogger:cIe,setLogLevel:sIe,OUTPUTS:qAe,AuthAuditLog:lIe,start:MM,startOnMainThread:MM,errorToString:aIe,disableStdio:KAe};function KAe(){LM=o(function(){},"nativeStdWrite")}o(KAe,"disableStdio");ZR.exports.externalLogger={notify(...e){ws.notify(...e)},fatal(...e){ws.fatal(...e)},error(...e){ws.error(...e)},warn(...e){ws.warn(...e)},info(...e){ws.info(...e)},debug(...e){ws.debug(...e)},trace(...e){ws.trace(...e)},withTag(e){return ws.withTag(e)}};HAe("logger",ZR.exports.externalLogger);function YAe(e){return cr[Ro]<=cr[e]}o(YAe,"logsAtLevel");function w3(e=!1){try{if(UE===void 0||e){C3();let t=nIe(),r=_3(["ROOTPATH"]);try{UE=A3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ra.pathExistsSync(ba(r.ROOTPATH,Yr.HDB_CONFIG_FILE)))throw s}let n;if({level:Ro,configLogPath:PM,toFile:FE,logConsole:BE,rotation:n,toStream:YR}=iIe(r.ROOTPATH?ba(r.ROOTPATH,Yr.HDB_CONFIG_FILE):UE.get("settings_path")),DM=Yr.LOG_NAMES.HDB,zR=ba(PM,DM),Ut=XR({path:zR,level:Ro,stdStreams:YR,rotation:n}),ws=Ut.forComponent("external"),ws.tag=null,R3)try{require("segfault-handler").registerHandler(ba(PM,"crash.log"))}catch{}}}catch(t){if(UE=void 0,t.code===Yr.NODE_ERROR_CODES.ENOENT||t.code===Yr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=_3(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){Ro=a;continue}i===Yr.CONFIG_PARAMS.LOGGING_CONSOLE&&(BE=i)}let{defaultLevel:n}=oIe();FE=!1,YR=!0,Ro=Ro===void 0?n:Ro,Ut=XR({level:Ro}),ws=Ut.forComponent("external"),ws.tag=null;return}throw xM("Error initializing log settings"),xM(t),t}process.env.DEV_MODE&&(YR=!0),WAe()}o(w3,"initLogSettings");var Mc=!0;function WAe(){FE&&(process.stdout.write=function(e){return typeof e=="string"&&Mc&&BE&&(e=e.toString(),e[e.length-1]===`
135
135
  `&&(e=e.slice(0,-1)),QR(e)),LM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Mc&&BE&&(e[e.length-1]===`
136
136
  `&&(e=e.slice(0,-1)),QR(e)),LM.apply(process.stderr,arguments)})}o(WAe,"stdioLogging");function N3(e,t,r=Ut){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=cr[i]?function(...a){JR=e;try{return s.call(r,...a)}finally{JR=void 0}}:null}o(n,"logWithTag")}o(N3,"loggerWithTag");function zAe(e){try{Mc=!1,e()}finally{Mc=!0}}o(zAe,"suppressLogging");var jAe=BAe?.name?.replace(/ /g,"-")||"main",Cn="info",UM,JR;function XR({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=cr[t],l;function u(p){if(FE)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),Mc=!1;try{process.stdout.write(p)}finally{Mc=!0}}else f(p);else r&&process.stdout.write(p)}o(u,"logStdOut");function d(p){if(FE){if(f(p),r){Mc=!1;try{process.stderr.write(p)}finally{Mc=!0}}}else r&&process.stderr.write(p)}o(d,"logStdErr");let f=e&&y3(e,n,s);function m(p){return{write(h){let E=[Cn];E.unshift(UM||jAe+"/"+FAe),JR&&E.push(JR),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(o(m,"logPrepend"),s&&(QR=f),l=new vM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),I3(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=y3(e,l.rotation,s),s&&(QR=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=XR({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(XR,"createLogger");var T3=100;function y3(e,t,r){let n=g3.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,g3.set(e,n)),R3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=u3();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(`