harperdb 4.7.21 → 4.7.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +41 -82
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadServer.js +1 -1
- package/studio/web/assets/{index-cZbhNKPv.js → index-BlG-cpH9.js} +2 -2
- package/studio/web/assets/{index-cZbhNKPv.js.map → index-BlG-cpH9.js.map} +1 -1
- package/studio/web/assets/{index-BMKHXWrK.js → index-BpmqvC1O.js} +5 -5
- package/studio/web/assets/{index-BMKHXWrK.js.map → index-BpmqvC1O.js.map} +1 -1
- package/studio/web/assets/{index-DP5O80Ld.js → index-DFovvBYL.js} +2 -2
- package/studio/web/assets/{index-DP5O80Ld.js.map → index-DFovvBYL.js.map} +1 -1
- package/studio/web/assets/{index.lazy-_WqXCxX6.js → index.lazy-BhReIK4y.js} +2 -2
- package/studio/web/assets/{index.lazy-_WqXCxX6.js.map → index.lazy-BhReIK4y.js.map} +1 -1
- package/studio/web/assets/{profiler-CiZIC7ZI.js → profiler-BhXa8xgR.js} +2 -2
- package/studio/web/assets/{profiler-CiZIC7ZI.js.map → profiler-BhXa8xgR.js.map} +1 -1
- package/studio/web/assets/{react-redux-D8H6oZRQ.js → react-redux-DkN7OdDj.js} +2 -2
- package/studio/web/assets/{react-redux-D8H6oZRQ.js.map → react-redux-DkN7OdDj.js.map} +1 -1
- package/studio/web/assets/{startRecording-oz3NQO5N.js → startRecording-Da15t52a.js} +2 -2
- package/studio/web/assets/{startRecording-oz3NQO5N.js.map → startRecording-Da15t52a.js.map} +1 -1
- package/studio/web/index.html +1 -1
- package/utility/scripts/restartHdb.js +1 -1
package/README.md
CHANGED
package/bin/harperdb.js
CHANGED
|
@@ -98,7 +98,7 @@ MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
|
|
|
98
98
|
`:this.pem=`-----BEGIN PUBLIC KEY-----
|
|
99
99
|
MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
|
|
100
100
|
-----END PUBLIC KEY-----
|
|
101
|
-
`}getKey(){return(0,TR.createPublicKey)(this.pem)}toString(){return this.pem}},gR=class extends TypeError{static{a(this,"LicenseEncodingError")}},Zf=class extends TypeError{static{a(this,"InvalidLicenseError")}},pD=class extends Zf{static{a(this,"InvalidLicenseSignatureError")}},DE=class extends Zf{static{a(this,"InvalidHeaderError")}},SR=class extends Zf{static{a(this,"InvalidPayloadError")}},nTe=new mD(Yz.get(x.LICENSE_MODE));a(sTe,"validateLicenseSignature");a(iTe,"validateLicenseHeader");a(oTe,"valid");a(aTe,"validateLicensePayload");a(jz,"validateLicense")});var yR={};Re(yR,{getActiveLicense:()=>SD,getUsageLicenses:()=>iJ,getUsageLicensesOp:()=>yD,installUsageLicense:()=>gD,installUsageLicenseOp:()=>_D,isActiveLicense:()=>nJ,isLicensed:()=>TD,loadAndWatchLicensesDir:()=>uTe,recordUsage:()=>sJ});async function _D(e){let t=e.license;try{await gD(t)}catch(r){let n=new Xz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function gD(e){let t=jz(e),{id:r}=t;if(await xe.system.hdb_license.get(r))throw new ED(`A usage license with ${r} already exists`);return Bo.info?.("Installing usage license:",t),xe.system.hdb_license.put(r,t)}function nJ(e){return(e.reads===-1||(e.usedReads??0)<e.reads)&&(e.readBytes===-1||(e.usedReadBytes??0)<e.readBytes)&&(e.writes===-1||(e.usedWrites??0)<e.writes)&&(e.writeBytes===-1||(e.usedWriteBytes??0)<e.writeBytes)&&(e.realTimeMessages===-1||(e.usedRealTimeMessages??0)<e.realTimeMessages)&&(e.realTimeBytes===-1||(e.usedRealTimeBytes??0)<e.realTimeBytes)&&(e.cpuTime===-1||(e.usedCpuTime??0)<e.cpuTime)&&(e.storage===-1||(e.usedStorage??0)<e.storage)}async function SD(){let e=Zz.get(x.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=xe.system.hdb_license?.search(t);for await(let n of r??[])if(nJ(n))return n}async function TD(){return await SD()!==void 0}async function sJ(e){Va=Bo.forComponent("license"),Va.trace?.("Recording usage into license from analytics");let t,r=(await SD())?.id;if(r){Va.trace?.("Found license to record usage into:",r);let n={};Nt(n,()=>{t=xe.system.hdb_license.update(r,n);for(let s of e)switch(Va.trace?.("Processing analytics record:",s),s.metric){case"db-read":Va.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Va.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Va.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(Va.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Va.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";Jz||(console.error(n),Jz=!0),Qz===void 0&&(Qz=setInterval(()=>{Bo.notify(n)},cTe).unref())}}function yD(e){let t={};return e.region&&(t.region=e.region),iJ(t)}function iJ(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),xe.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function lTe(e){Bo.trace?.("Loading usage license from file:",e);let t=await tJ.readFile(e,{encoding:"utf-8"});try{await gD(t)}catch(r){Bo.error?.("Failed to install usage license from file:",e,r)}}function uTe(){let e=hD.default.join(hD.default.dirname(eJ.getConfigFilePath()),"licenses");(0,rJ.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",lTe)}var Xz,Bo,Zz,hD,eJ,tJ,rJ,ED,Jz,Qz,cTe,Va,vE=ie(()=>{zz();Xz=b(ge()),Bo=b(Z());es();pc();Zz=b(de());$();Ce();hD=b(require("node:path")),eJ=b(St()),tJ=b(require("node:fs/promises")),rJ=require("chokidar"),ED=class extends Error{static{a(this,"ExistingLicenseError")}};a(_D,"installUsageLicenseOp");a(gD,"installUsageLicense");Jz=!1,cTe=6e5;a(nJ,"isActiveLicense");a(SD,"getActiveLicense");a(TD,"isLicensed");a(sJ,"recordUsage");KC(sJ);a(yD,"getUsageLicensesOp");a(iJ,"getUsageLicenses");a(lTe,"loadLicenseFile");a(uTe,"loadAndWatchLicensesDir")});var NR={};Re(NR,{deliverSocket:()=>_J,getHttpOptions:()=>pTe,getRequestId:()=>yJ,handleApplication:()=>mTe,httpServer:()=>OD,logRequest:()=>xE,proxyRequest:()=>hTe,registerServer:()=>ND,suppressHandleApplicationWarning:()=>fTe});function mTe(e){BE=e.options.getAll(),e.options.on("change",t=>{BE=e.options.getAll()})}function pTe(){return BE}function _J(e,t,r){let n=e?.read?e:new uJ.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Xf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Xf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Ka.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function hTe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=oJ.get(s),r){case"connection":i=_J(void 0,t),oJ.set(s,i),i.write=(c,l,u)=>(bR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(bR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),bR.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function ND(e,t,r=!0){t||(t=xr.default.get(x.HTTP_PORT));let n=Xf[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",lJ),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Xf[t]=e;e.on("unhandled",lJ)}function CD(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],xr.default.get(x.HTTP_PORT)!=null&&t.push({port:xr.default.get(x.HTTP_PORT),secure:xr.default.get(x.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),xr.default.get(x.HTTP_SECUREPORT)!=null&&t.push({port:xr.default.get(x.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&xr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,dJ.resolvePath)(xr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function OD(e,t){let r=[];for(let{port:n,secure:s}of CD(t))r.push(gJ(n,s,t)),typeof e=="function"?ID[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,ND(e,n,!1)),AR[n]=IR(ID,n);return r}function gJ(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(ER(e,{protocol_name:t?"HTTPS":"HTTP",name:CR()}),!RR[e]){let o=i?"operationsApi_network":"http",c=xr.default.get(o+"_keepAliveTimeout"),l=xr.default.get(o+"_timeout"),u=xr.default.get(o+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:xr.default.get(x.HTTP_MAXHEADERSIZE)},f=xr.default.get(o+"_mtls"),m=xr.default.get(o+"_mtls_required"),p;if(t){let R=xr.default.get("tls");p=xr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,fJ.getTicketKeys)(),SNICallback:(0,mJ.createTLSSelector)(s??"server",f),ciphers:R.ciphers??R[0]?.ciphers})}let h=a(async(R,S)=>{let y=performance.now(),I=0;try{let M=new Lc(R,S);i&&(M.isOperationsServer=!0),BE.logging?.id&&(M.requestId=I=yJ());let F=await AR[e](M);if(!F){if(M._nodeResponse.statusCode){xE(R,M._nodeResponse.statusCode,I,performance.now()-y);return}F=SJ(M)}if(F.headers?.set||(F.headers=new Qs(F.headers)),await TD()?F.headers.set("Server","HarperDB"):F.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),F.status===-1){for(let Se of F.headers||[])S.setHeader(Se[0],Se[1]);return R.baseRequest=M,S.baseResponse=F,RR[e].emit("unhandled",R,S)}let X=F.status||200;S.statusCode=X;let Q=performance.now(),W=Q-y,H=F.body,ae,ue=!1;if(!F.handlesHeaders){let Se=F.headers||new Qs;H?H.length>=0?(typeof H=="string"?Se.set("Content-Length",Buffer.byteLength(H)):Se.set("Content-Length",H.length),ae=!0):H instanceof js&&(H.size?Se.set("Content-Length",H.size):H.on&&(ue=!0,H.on("size",tt=>{S.headersSent||S.setHeader("Content-Length",tt)})),H=H.stream()):(M.method!=="HEAD"&&Se.set("Content-Length","0"),ae=!0);let Me=`hdb;dur=${W.toFixed(2)}`;if(F.wasCacheMiss&&(Me+=", miss"),bh(Se,"Server-Timing",Me,!0),!S.headersSent)if(ue){if(Se)if(Se[Symbol.iterator])for(let[tt,$e]of Se)S.setHeader(tt,$e);else for(let tt in Se)S.setHeader(tt,Se[tt])}else S.writeHead(X,Se&&(Se[Symbol.iterator]?Array.from(Se):Se));ae&&S.end(H)}let oe=M.handlerPath,Ee=M.method;if(qe(W,"duration",oe,Ee,F.wasCacheMiss==null?void 0:F.wasCacheMiss?"cache-miss":"cache-hit"),ln(X<400,"success",oe,Ee),ln(1,"response_"+X,oe,Ee),xE(R,X,I,W),!ae)if(H instanceof ReadableStream&&(H=AD.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=AD.Readable.from(H)),H?.pipe){H.pipe(S),H.destroy&&S.on("close",()=>{H.destroy()});let Se=0;H.on("data",Me=>{Se+=Me.length}),H.on("end",()=>{qe(performance.now()-Q,"transfer",oe,Ee),qe(Se,"bytes-sent",oe,Ee)})}else H?.then?H.then(Se=>{S.end(Se)},w):S.end(H)}catch(M){w(M)}function w(M){let F=M.headers,X=M.statusCode||500;try{S.writeHead(X,F&&(F[Symbol.iterator]?Array.from(F):F))}catch{}S.end(dTe(M)),xE(R,X,I,performance.now()-y),M.statusCode?M.statusCode===500?Ka.default.warn(M):Ka.default.info(M):Ka.default.error(M)}a(w,"onError")},"requestHandler"),E=_R(h,(R,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},xr.default.get(o+"_requestQueueLimit")),_=RR[e]=(t?p?pJ.createSecureServer:hJ.createServer:wR.createServer)(d,(R,S)=>{let y=R.method;y==="GET"||y==="OPTIONS"||y==="HEAD"?h(R,S):E(R,S)});c>=0&&(_.keepAliveTimeout=c),u>=0&&(_.headersTimeout=u),t&&(_.ports||(_.ports=[]),_.ports.push(e),d.SNICallback.initialize(_),f&&(_.mtlsConfig=f),_.on("secureConnection",R=>{R._parent.startTime&&qe(performance.now()-R._parent.startTime,"tls-handshake",e),qe(R.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),ND(_,e)}return RR[e]}function IR(e,t){let r=SJ;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"nextCallback")}}return r}function SJ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Qs}}function ETe(e,t){OD(e,{requestOnly:!0,...t})}function TJ(e,t){for(let{port:r}of CD(t))aJ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),wD[r]=IR(aJ,r)}function _Te(e,t){let r=[];for(let{port:n,secure:s}of CD(t)){ER(n,{protocol_name:s?"WSS":"WS",name:CR()});let i=gJ(n,s,t);ME[n]||(ME[n]=new EJ.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),ME[n].on("connection",(o,c)=>{try{let l=new Lc(c);l.isWebSocket=!0;let u=AR[n](l);Ka.default.debug("Received WS connection, calling listeners",RD),cJ[n](o,l,u)}catch(l){Ka.default.warn("Error in handling WS connection",l)}}),TJ((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):ME[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),ME[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{wD[n]&&wD[n](o,c,l)})),r.push(i),RD[t?.runFirst?"unshift":"push"]({listener:e,port:n}),cJ[n]=IR(RD,n),AR[n]=IR(ID,n)}return r}function lJ(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
|
|
101
|
+
`}getKey(){return(0,TR.createPublicKey)(this.pem)}toString(){return this.pem}},gR=class extends TypeError{static{a(this,"LicenseEncodingError")}},Zf=class extends TypeError{static{a(this,"InvalidLicenseError")}},pD=class extends Zf{static{a(this,"InvalidLicenseSignatureError")}},DE=class extends Zf{static{a(this,"InvalidHeaderError")}},SR=class extends Zf{static{a(this,"InvalidPayloadError")}},nTe=new mD(Yz.get(x.LICENSE_MODE));a(sTe,"validateLicenseSignature");a(iTe,"validateLicenseHeader");a(oTe,"valid");a(aTe,"validateLicensePayload");a(jz,"validateLicense")});var yR={};Re(yR,{getActiveLicense:()=>SD,getUsageLicenses:()=>iJ,getUsageLicensesOp:()=>yD,installUsageLicense:()=>gD,installUsageLicenseOp:()=>_D,isActiveLicense:()=>nJ,isLicensed:()=>TD,loadAndWatchLicensesDir:()=>uTe,recordUsage:()=>sJ});async function _D(e){let t=e.license;try{await gD(t)}catch(r){let n=new Xz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function gD(e){let t=jz(e),{id:r}=t;if(await xe.system.hdb_license.get(r))throw new ED(`A usage license with ${r} already exists`);return Bo.info?.("Installing usage license:",t),xe.system.hdb_license.put(r,t)}function nJ(e){return(e.reads===-1||(e.usedReads??0)<e.reads)&&(e.readBytes===-1||(e.usedReadBytes??0)<e.readBytes)&&(e.writes===-1||(e.usedWrites??0)<e.writes)&&(e.writeBytes===-1||(e.usedWriteBytes??0)<e.writeBytes)&&(e.realTimeMessages===-1||(e.usedRealTimeMessages??0)<e.realTimeMessages)&&(e.realTimeBytes===-1||(e.usedRealTimeBytes??0)<e.realTimeBytes)&&(e.cpuTime===-1||(e.usedCpuTime??0)<e.cpuTime)&&(e.storage===-1||(e.usedStorage??0)<e.storage)}async function SD(){let e=Zz.get(x.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=xe.system.hdb_license?.search(t);for await(let n of r??[])if(nJ(n))return n}async function TD(){return await SD()!==void 0}async function sJ(e){Va=Bo.forComponent("license"),Va.trace?.("Recording usage into license from analytics");let t,r=(await SD())?.id;if(r){Va.trace?.("Found license to record usage into:",r);let n={};Nt(n,()=>{t=xe.system.hdb_license.update(r,n);for(let s of e)switch(Va.trace?.("Processing analytics record:",s),s.metric){case"db-read":Va.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Va.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Va.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(Va.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Va.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";Jz||(console.error(n),Jz=!0),Qz===void 0&&(Qz=setInterval(()=>{Bo.notify(n)},cTe).unref())}}function yD(e){let t={};return e.region&&(t.region=e.region),iJ(t)}function iJ(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),xe.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function lTe(e){Bo.trace?.("Loading usage license from file:",e);let t=await tJ.readFile(e,{encoding:"utf-8"});try{await gD(t)}catch(r){Bo.error?.("Failed to install usage license from file:",e,r)}}function uTe(){let e=hD.default.join(hD.default.dirname(eJ.getConfigFilePath()),"licenses");(0,rJ.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",lTe)}var Xz,Bo,Zz,hD,eJ,tJ,rJ,ED,Jz,Qz,cTe,Va,vE=ie(()=>{zz();Xz=b(ge()),Bo=b(Z());es();pc();Zz=b(de());$();Ce();hD=b(require("node:path")),eJ=b(St()),tJ=b(require("node:fs/promises")),rJ=require("chokidar"),ED=class extends Error{static{a(this,"ExistingLicenseError")}};a(_D,"installUsageLicenseOp");a(gD,"installUsageLicense");Jz=!1,cTe=6e5;a(nJ,"isActiveLicense");a(SD,"getActiveLicense");a(TD,"isLicensed");a(sJ,"recordUsage");KC(sJ);a(yD,"getUsageLicensesOp");a(iJ,"getUsageLicenses");a(lTe,"loadLicenseFile");a(uTe,"loadAndWatchLicensesDir")});var NR={};Re(NR,{deliverSocket:()=>_J,getHttpOptions:()=>pTe,getRequestId:()=>yJ,handleApplication:()=>mTe,httpServer:()=>OD,logRequest:()=>xE,proxyRequest:()=>hTe,registerServer:()=>ND,suppressHandleApplicationWarning:()=>fTe});function mTe(e){BE=e.options.getAll(),e.options.on("change",t=>{BE=e.options.getAll()})}function pTe(){return BE}function _J(e,t,r){let n=e?.read?e:new uJ.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Xf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Xf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Ka.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function hTe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=oJ.get(s),r){case"connection":i=_J(void 0,t),oJ.set(s,i),i.write=(c,l,u)=>(bR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(bR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),bR.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function ND(e,t,r=!0){t||(t=xr.default.get(x.HTTP_PORT));let n=Xf[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",lJ),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Xf[t]=e;e.on("unhandled",lJ)}function CD(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],xr.default.get(x.HTTP_PORT)!=null&&t.push({port:xr.default.get(x.HTTP_PORT),secure:xr.default.get(x.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),xr.default.get(x.HTTP_SECUREPORT)!=null&&t.push({port:xr.default.get(x.HTTP_SECUREPORT),secure:!0})),e?.usageType==="operations-api"&&xr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,dJ.resolvePath)(xr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function OD(e,t){let r=[];for(let{port:n,secure:s}of CD(t))r.push(gJ(n,s,t)),typeof e=="function"?ID[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,ND(e,n,!1)),AR[n]=IR(ID,n);return r}function gJ(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(ER(e,{protocol_name:t?"HTTPS":"HTTP",name:CR()}),!RR[e]){let o=i?"operationsApi_network":"http",c=xr.default.get(o+"_keepAliveTimeout"),l=xr.default.get(o+"_timeout"),u=xr.default.get(o+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:xr.default.get(x.HTTP_MAXHEADERSIZE)},f=xr.default.get(o+"_mtls"),m=xr.default.get(o+"_mtls_required"),p;if(t){let R=xr.default.get("tls");p=xr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,fJ.getTicketKeys)(),SNICallback:(0,mJ.createTLSSelector)(s??"server",f),ciphers:R.ciphers??R[0]?.ciphers})}let h=a(async(R,S)=>{let y=performance.now(),I=0;try{let M=new Lc(R,S);i&&(M.isOperationsServer=!0),BE.logging?.id&&(M.requestId=I=yJ());let F=await AR[e](M);if(!F){if(M._nodeResponse.statusCode){xE(R,M._nodeResponse.statusCode,I,performance.now()-y);return}F=SJ(M)}if(F.headers?.set||(F.headers=new Qs(F.headers)),await TD()?F.headers.set("Server","HarperDB"):F.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),F.status===-1){for(let Se of F.headers||[])S.setHeader(Se[0],Se[1]);return R.baseRequest=M,S.baseResponse=F,RR[e].emit("unhandled",R,S)}let X=F.status||200;S.statusCode=X;let Q=performance.now(),W=Q-y,H=F.body,ae,ue=!1;if(!F.handlesHeaders){let Se=F.headers||new Qs;H?H.length>=0?(typeof H=="string"?Se.set("Content-Length",Buffer.byteLength(H)):Se.set("Content-Length",H.length),ae=!0):H instanceof js&&(H.size?Se.set("Content-Length",H.size):H.on&&(ue=!0,H.on("size",tt=>{S.headersSent||S.setHeader("Content-Length",tt)})),H=H.stream()):(M.method!=="HEAD"&&Se.set("Content-Length","0"),ae=!0);let Me=`hdb;dur=${W.toFixed(2)}`;if(F.wasCacheMiss&&(Me+=", miss"),bh(Se,"Server-Timing",Me,!0),!S.headersSent)if(ue){if(Se)if(Se[Symbol.iterator])for(let[tt,$e]of Se)S.setHeader(tt,$e);else for(let tt in Se)S.setHeader(tt,Se[tt])}else S.writeHead(X,Se&&(Se[Symbol.iterator]?Array.from(Se):Se));ae&&S.end(H)}let oe=M.handlerPath,Ee=M.method;if(qe(W,"duration",oe,Ee,F.wasCacheMiss==null?void 0:F.wasCacheMiss?"cache-miss":"cache-hit"),ln(X<400,"success",oe,Ee),ln(1,"response_"+X,oe,Ee),xE(R,X,I,W),!ae)if(H instanceof ReadableStream&&(H=AD.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=AD.Readable.from(H)),H?.pipe){H.pipe(S),H.destroy&&S.on("close",()=>{H.destroy()});let Se=0;H.on("data",Me=>{Se+=Me.length}),H.on("end",()=>{qe(performance.now()-Q,"transfer",oe,Ee),qe(Se,"bytes-sent",oe,Ee)})}else H?.then?H.then(Se=>{S.end(Se)},w):S.end(H)}catch(M){w(M)}function w(M){let F=M.headers,X=M.statusCode||500;try{S.writeHead(X,F&&(F[Symbol.iterator]?Array.from(F):F))}catch{}S.end(dTe(M)),xE(R,X,I,performance.now()-y),M.statusCode?M.statusCode===500?Ka.default.warn(M):Ka.default.info(M):Ka.default.error(M)}a(w,"onError")},"requestHandler"),E=_R(h,(R,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},xr.default.get(o+"_requestQueueLimit")),_=RR[e]=(t?p?pJ.createSecureServer:hJ.createServer:wR.createServer)(d,(R,S)=>{let y=R.method;y==="GET"||y==="OPTIONS"||y==="HEAD"?h(R,S):E(R,S)});c>=0&&(_.keepAliveTimeout=c),u>=0&&(_.headersTimeout=u),t&&(_.ports||(_.ports=[]),_.ports.push(e),d.SNICallback.initialize(_),f&&(_.mtlsConfig=f),_.on("secureConnection",R=>{R._parent.startTime&&qe(performance.now()-R._parent.startTime,"tls-handshake",e),qe(R.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),ND(_,e)}return RR[e]}function IR(e,t){let r=SJ;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"nextCallback")}}return r}function SJ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Qs}}function ETe(e,t){OD(e,{requestOnly:!0,...t})}function TJ(e,t){for(let{port:r}of CD(t))aJ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),wD[r]=IR(aJ,r)}function _Te(e,t){let r=[];for(let{port:n,secure:s}of CD(t)){ER(n,{protocol_name:s?"WSS":"WS",name:CR()});let i=gJ(n,s,t);ME[n]||(ME[n]=new EJ.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),ME[n].on("connection",(o,c)=>{try{let l=new Lc(c);l.isWebSocket=!0;let u=AR[n](l);Ka.default.debug("Received WS connection, calling listeners",RD),cJ[n](o,l,u)}catch(l){Ka.default.warn("Error in handling WS connection",l)}}),TJ((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):ME[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),ME[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{wD[n]&&wD[n](o,c,l)})),r.push(i),RD[t?.runFirst?"unshift":"push"]({listener:e,port:n}),cJ[n]=IR(RD,n),AR[n]=IR(ID,n)}return r}function lJ(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
|
|
102
102
|
`),xE(e,404,0,e.requestId))}function xE(e,t,r,n){let s=BE.logging;if(s){bD||(bD=Ka.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";bD[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+gTe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function gTe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function yJ(){return UE||(UE=new BigInt64Array([1n]),UE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",UE.buffer))),Number(Atomics.add(UE,0,1n))}var uJ,Ka,bR,xr,dJ,fJ,mJ,pJ,hJ,wR,AD,EJ,dTe,ME,RR,AR,ID,BE,fTe,oJ,aJ,wD,RD,cJ,bD,UE,PD=ie(()=>{uJ=require("node:net"),Ka=b(Z()),bR=require("node:worker_threads"),xr=b(de());$();dJ=b(St()),fJ=b(at()),mJ=b(Ln()),pJ=require("node:http2"),hJ=require("node:https"),wR=require("node:http");Ih();Ah();Rs();es();AD=require("node:stream");Wr();lD();em();fD();EJ=require("ws");vE();({errorToString:dTe}=Ka.default);Ue.http=OD;Ue.request=ETe;Ue.ws=_Te;Ue.upgrade=TJ;ME={},RR={},AR={},ID=[],BE={},fTe=!0;a(mTe,"handleApplication");a(pTe,"getHttpOptions");a(_J,"deliverSocket");oJ=new Map;a(hTe,"proxyRequest");a(ND,"registerServer");a(CD,"getPorts");a(OD,"httpServer");a(gJ,"getHTTPServer");a(IR,"makeCallbackChain");a(SJ,"unhandled");a(ETe,"onRequest");Object.defineProperty(wR.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});aJ=[],wD={};a(TJ,"onUpgrade");RD=[],cJ={};a(_Te,"onWebSocket");a(lJ,"defaultNotFound");a(xE,"logRequest");a(gTe,"headersToString");a(yJ,"getRequestId")});var DD=U(HE=>{"use strict";ig();var{isMainThread:LD,parentPort:RJ,threadId:OR,workerData:STe}=require("node:worker_threads"),{createServer:TTe}=require("node:net"),{unlinkSync:yTe,existsSync:RTe}=require("fs"),IJ;HE.whenComponentsLoaded=new Promise(e=>{IJ=e});var Ki=Z(),ko=de(),Fo=($(),O(J)),{server:bTe}=(Wr(),O(fp)),{createServer:ATe}=require("node:tls"),{restartNumber:ITe,getWorkerIndex:FE}=at(),{createReuseportFd:kE}=(Ih(),O(K$)),{createTLSSelector:wTe}=Ln(),{startupLog:NTe}=Hu(),{SERVERS:tm,setPortServerMap:bJ,portServer:CTe}=(lD(),O($z)),AJ=(PD(),O(NR)),OTe=wi(),wJ=ko.get(Fo.CONFIG_PARAMS.THREADS_DEBUG),PTe=ko.get(Fo.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);bTe.socket=LTe;if(wJ){let e;if(LD)e=ko.get(Fo.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Ki.info("Could not close debugger",t)}});else{let t=ko.get(Fo.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&FE()>=0&&(e=t+FE())}if(e){let t=ko.get(Fo.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ko.get(Fo.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Ki.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&LD)try{require("inspector").open(9229)}catch(e){ITe<=1&&Ki.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&Ki.error("uncaughtException",e)});ko.initSync();HE.globals=OTe;HE.listenOnPorts=CJ;HE.startServers=NJ;function NJ(){let e=ko.get(Fo.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=PR().loadRootComponents(!0).then(()=>{RJ?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)AJ.deliverSocket(i,s,o);else if(n.requestId)AJ.proxyRequest(n);else if(n.type===Fo.ITC_EVENT_TYPES.SHUTDOWN){Ki.trace("received shutdown request",OR);for(let c in tm){let l=tm[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100;if(!l[f]){h&&l.closeAllConnections?.(),clearInterval(p);return}let E=l[f][h?"all":"idle"]?.()||[];if(E.length===0){h&&clearInterval(p);return}m===1?Ki.info(`Closing ${E.length} idle connections`):h&&Ki.warn(`Forcefully closing ${E.length} active connections`);for(let _=0,R=E.length;_<R;_++){let S=E[_].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
103
103
|
Connection: close\r
|
|
104
104
|
\r
|
package/bin/lite.js
CHANGED
|
@@ -135,7 +135,7 @@ MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
|
|
|
135
135
|
MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
|
|
136
136
|
-----END PUBLIC KEY-----
|
|
137
137
|
`}getKey(){return(0,HR.createPublicKey)(this.pem)}toString(){return this.pem}},FR=class extends TypeError{static{a(this,"LicenseEncodingError")}},Gf=class extends TypeError{static{a(this,"InvalidLicenseError")}},vD=class extends Gf{static{a(this,"InvalidLicenseSignatureError")}},PE=class extends Gf{static{a(this,"InvalidHeaderError")}},kR=class extends Gf{static{a(this,"InvalidPayloadError")}},hbe=new DD(jQ.get(U.LICENSE_MODE));a(Ebe,"validateLicenseSignature");a(_be,"validateLicenseHeader");a(gbe,"valid");a(Sbe,"validateLicensePayload");a(zQ,"validateLicense")});var GR={};Re(GR,{getActiveLicense:()=>FD,getUsageLicenses:()=>o4,getUsageLicensesOp:()=>HD,installUsageLicense:()=>BD,installUsageLicenseOp:()=>xD,isActiveLicense:()=>s4,isLicensed:()=>kD,loadAndWatchLicensesDir:()=>Rbe,recordUsage:()=>i4});async function xD(e){let t=e.license;try{await BD(t)}catch(r){let n=new ZQ.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function BD(e){let t=zQ(e),{id:r}=t;if(await xe.system.hdb_license.get(r))throw new UD(`A usage license with ${r} already exists`);return Oo.info?.("Installing usage license:",t),xe.system.hdb_license.put(r,t)}function s4(e){return(e.reads===-1||(e.usedReads??0)<e.reads)&&(e.readBytes===-1||(e.usedReadBytes??0)<e.readBytes)&&(e.writes===-1||(e.usedWrites??0)<e.writes)&&(e.writeBytes===-1||(e.usedWriteBytes??0)<e.writeBytes)&&(e.realTimeMessages===-1||(e.usedRealTimeMessages??0)<e.realTimeMessages)&&(e.realTimeBytes===-1||(e.usedRealTimeBytes??0)<e.realTimeBytes)&&(e.cpuTime===-1||(e.usedCpuTime??0)<e.cpuTime)&&(e.storage===-1||(e.usedStorage??0)<e.storage)}async function FD(){let e=e4.get(U.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=xe.system.hdb_license?.search(t);for await(let n of r??[])if(s4(n))return n}async function kD(){return await FD()!==void 0}async function i4(e){xa=Oo.forComponent("license"),xa.trace?.("Recording usage into license from analytics");let t,r=(await FD())?.id;if(r){xa.trace?.("Found license to record usage into:",r);let n={};At(n,()=>{t=xe.system.hdb_license.update(r,n);for(let s of e)switch(xa.trace?.("Processing analytics record:",s),s.metric){case"db-read":xa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":xa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":xa.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(xa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:xa.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";JQ||(console.error(n),JQ=!0),XQ===void 0&&(XQ=setInterval(()=>{Oo.notify(n)},Tbe).unref())}}function HD(e){let t={};return e.region&&(t.region=e.region),o4(t)}function o4(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),xe.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function ybe(e){Oo.trace?.("Loading usage license from file:",e);let t=await r4.readFile(e,{encoding:"utf-8"});try{await BD(t)}catch(r){Oo.error?.("Failed to install usage license from file:",e,r)}}function Rbe(){let e=MD.default.join(MD.default.dirname(t4.getConfigFilePath()),"licenses");(0,n4.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",ybe)}var ZQ,Oo,e4,MD,t4,r4,n4,UD,JQ,XQ,Tbe,xa,LE=ie(()=>{QQ();ZQ=b(ge()),Oo=b(ee());Fn();Qa();e4=b(fe());$();Oe();MD=b(require("node:path")),t4=b(wt()),r4=b(require("node:fs/promises")),n4=require("chokidar"),UD=class extends Error{static{a(this,"ExistingLicenseError")}};a(xD,"installUsageLicenseOp");a(BD,"installUsageLicense");JQ=!1,Tbe=6e5;a(s4,"isActiveLicense");a(FD,"getActiveLicense");a(kD,"isLicensed");a(i4,"recordUsage");dI(i4);a(HD,"getUsageLicensesOp");a(o4,"getUsageLicenses");a(ybe,"loadLicenseFile");a(Rbe,"loadAndWatchLicensesDir")});var VD={};Re(VD,{getFingerprint:()=>qD,getRegistrationInfo:()=>GD,setLicense:()=>$D});function GD(){return{version:a4.packageJson.version,deprecated:!0}}function qD(){return{message:"this-is-deprecated",deprecated:!0}}function $D(){return{deprecated:!0}}var a4,KD=ie(()=>{a4=b(Lt());a(GD,"getRegistrationInfo");a(qD,"getFingerprint");a($D,"setLicense")});var l4=x((iHe,c4)=>{"use strict";var DE=require("alasql"),Iu=require("recursive-iterator"),vi=ee(),bbe=de(),vE=($(),L(Q)),YD=class{static{a(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,Ibe(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=>vE.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=>!vE.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,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][vE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Abe(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!vE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new DE.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(o,l)}}),this.ast}};function Abe(e){return e.filter(t=>t[vE.PERMS_CRUD_ENUM.READ])}a(Abe,"filterReadRestrictedAttrs");function Ibe(e,t,r,n,s){wbe(e,t,r,n,s)}a(Ibe,"interpretAST");function ME(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,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(ME,"addSchemaTableToMap");function wbe(e,t,r,n,s){if(!e){vi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof DE.yy.Insert?Pbe(e,t,r):e instanceof DE.yy.Select?Nbe(e,t,r,n,s):e instanceof DE.yy.Update?Cbe(e,t,r):e instanceof DE.yy.Delete?Obe(e,t,r):vi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(wbe,"getRecordAttributesAST");function Nbe(e,t,r,n,s){if(!e){vi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(bbe.isEmptyOrZeroLength(i)){vi.error("No schema specified");return}e.from.forEach(c=>{ME(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ME(c.table,t,r,n,s)});let o=new Iu(e.columns);for(let{node:c}of o)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{vi.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 Iu(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{vi.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 Iu(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{vi.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 Iu(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{vi.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)}}}a(Nbe,"getSelectAttributes");function Cbe(e,t,r){if(!e){vi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Iu(e.columns),s=e.table.databaseid;ME(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&WD(e.table.tableid,s,i.columnid,t,r)}a(Cbe,"getUpdateAttributes");function Obe(e,t,r){if(!e){vi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Iu(e.where),s=e.table.databaseid;ME(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&WD(e.table.tableid,s,i.columnid,t,r)}a(Obe,"getDeleteAttributes");function Pbe(e,t,r){if(!e){vi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Iu(e.columns),s=e.into.databaseid;ME(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&WD(e.into.tableid,s,i.columnid,t,r)}a(Pbe,"getInsertAttributes");function WD(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)}a(WD,"pushAttribute");c4.exports=YD});var KR=x((aHe,w4)=>{"use strict";var jD=ps(),qR=Yn(),Ps=Ny(),BE=Qd(),zD=Bl(),Lbe=wP(),Dbe=cW(),FE=(gs(),L(oo)),$R=hh(),Ur=ee(),vbe=DP(),Mbe=ky(),Ube=iL(),xbe=Gy(),Bbe=cL(),Fbe=lL(),kbe=fL(),Hbe=pL(),QD=Yy(),Ba=de(),f4=kf(),Dn=($(),L(Q)),m4=Q2(),Gbe=Zh(),p4=(Wd(),L(yh)),h4=(AR(),L(AE)),E4=wt(),fr=yD(),_4=xR(),qbe=wD(),qf=As(),g4=(yf(),L(Tf)),JD=(LD(),L(PD)),XD=(mh(),L(TC)),S4=(LE(),L(GR)),ZD=(KD(),L(VD)),T4=hO(),{handleHDBError:ts,hdbErrors:y4}=ge(),{HDB_ERROR_MSGS:mn,HTTP_STATUS_CODES:UE}=y4,re=new Map,R4="delete",Yc="insert",ti="read",wu="update",xE="describe",u4=BE.describeSchema.name,d4=BE.describeTable.name,b4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},$be={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},Vbe="catchup",Kbe="handleGetJob",Ybe="handleGetJobsByStartDate",VR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Wbe=[Ps.createTable.name,Ps.createAttribute.name,Ps.dropTable.name,Ps.dropAttribute.name],A4={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},se=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};re.set(jD.insert.name,new se(!1,[Yc]));re.set(jD.update.name,new se(!1,[wu]));re.set(jD.upsert.name,new se(!1,[Yc,wu]));re.set(qR.searchByConditions.name,new se(!1,[ti]));re.set(qR.searchByHash.name,new se(!1,[ti]));re.set(qR.searchByValue.name,new se(!1,[ti]));re.set(qR.search.name,new se(!1,[ti]));re.set(Ps.createSchema.name,new se(!0,[]));re.set(Ps.createTable.name,new se(!0,[]));re.set(Ps.createAttribute.name,new se(!1,[Yc]));re.set(Ps.dropSchema.name,new se(!0,[]));re.set(Ps.dropTable.name,new se(!0,[]));re.set(Ps.dropAttribute.name,new se(!0,[]));re.set(BE.describeSchema.name,new se(!1,[ti]));re.set(BE.describeTable.name,new se(!1,[ti]));re.set(zD.deleteRecord.name,new se(!1,[R4]));re.set(FE.addUser.name,new se(!0,[]));re.set(FE.alterUser.name,new se(!0,[]));re.set(FE.dropUser.name,new se(!0,[]));re.set(FE.listUsersExternal.name,new se(!0,[]));re.set($R.listRoles.name,new se(!0,[]));re.set($R.addRole.name,new se(!0,[]));re.set($R.alterRole.name,new se(!0,[]));re.set($R.dropRole.name,new se(!0,[]));re.set(vbe.name,new se(!0,[]));re.set(Mbe.name,new se(!0,[]));re.set(Ube.name,new se(!0,[]));re.set(xbe.name,new se(!0,[]));re.set(Bbe.name,new se(!0,[]));re.set(Fbe.name,new se(!0,[]));re.set(QD.setRoutes.name,new se(!0,[]));re.set(QD.getRoutes.name,new se(!0,[]));re.set(QD.deleteRoutes.name,new se(!0,[]));re.set(E4.setConfiguration.name,new se(!0,[]));re.set(kbe.clusterStatus.name,new se(!0,[]));re.set(Hbe.name,new se(!0,[]));re.set(zD.deleteFilesBefore.name,new se(!0,[]));re.set(zD.deleteAuditLogsBefore.name,new se(!0,[]));re.set(f4.restart.name,new se(!0,[]));re.set(f4.restartService.name,new se(!0,[]));re.set(Lbe.name,new se(!0,[]));re.set(Dbe.name,new se(!0,[ti]));re.set(Ps.cleanupOrphanBlobs.name,new se(!0,[]));re.set(Gbe.systemInformation.name,new se(!0,[]));re.set(E4.getConfiguration.name,new se(!0,[]));re.set(_4.readTransactionLog.name,new se(!0,[]));re.set(_4.deleteTransactionLogsBefore.name,new se(!0,[]));re.set(qbe.installModules.name,new se(!0,[]));re.set(qf.createCsr.name,new se(!0,[]));re.set(qf.signCertificate.name,new se(!0,[]));re.set(qf.listCertificates.name,new se(!0,[]));re.set(qf.addCertificate.name,new se(!0,[]));re.set(qf.removeCertificate.name,new se(!0,[]));re.set(qf.getKey.name,new se(!0,[]));re.set(g4.addNodeBack.name,new se(!0,[]));re.set(g4.removeNodeBack.name,new se(!0,[]));re.set(JD.getOp.name,new se(!1,[ti]));re.set(JD.listMetricsOp.name,new se(!1,[ti]));re.set(JD.describeMetricOp.name,new se(!1,[ti]));re.set(XD.clear.name,new se(!0,[]));re.set(XD.get.name,new se(!0,[]));re.set(XD.set.name,new se(!0,[]));re.set(S4.installUsageLicenseOp.name,new se(!0,[]));re.set(S4.getUsageLicensesOp.name,new se(!0,[]));re.set(ZD.getFingerprint.name,new se(!0,[]));re.set(ZD.setLicense.name,new se(!0,[]));re.set(p4.createTokens.name,new se(!1,[]));re.set(p4.refreshOperationToken.name,new se(!1,[]));re.set(h4.login.name,new se(!1,[]));re.set(h4.logout.name,new se(!1,[]));re.set(fr.customFunctionsStatus.name,new se(!0,[]));re.set(fr.getCustomFunctions.name,new se(!0,[]));re.set(fr.getComponents.name,new se(!0,[]));re.set(fr.getComponentFile.name,new se(!0,[]));re.set(fr.setComponentFile.name,new se(!0,[]));re.set(fr.dropComponent.name,new se(!0,[]));re.set(fr.getCustomFunction.name,new se(!0,[]));re.set(fr.setCustomFunction.name,new se(!0,[]));re.set(fr.dropCustomFunction.name,new se(!0,[]));re.set(fr.addComponent.name,new se(!0,[]));re.set(fr.dropCustomFunctionProject.name,new se(!0,[]));re.set(fr.packageComponent.name,new se(!0,[]));re.set(fr.deployComponent.name,new se(!0,[]));re.set(fr.addSSHKey.name,new se(!0,[]));re.set(fr.getSSHKey.name,new se(!0,[]));re.set(fr.updateSSHKey.name,new se(!0,[]));re.set(fr.deleteSSHKey.name,new se(!0,[]));re.set(fr.listSSHKeys.name,new se(!0,[]));re.set(fr.setSSHKnownHosts.name,new se(!0,[]));re.set(fr.getSSHKnownHosts.name,new se(!0,[]));re.set(ZD.getRegistrationInfo.name,new se(!1,[]));re.set(FE.userInfo.name,new se(!1,[]));re.set(BE.describeAll.name,new se(!1,[]));re.set(Kbe,new se(!1,[]));re.set(Ybe,new se(!0,[]));re.set(Vbe,new se(!0,[]));re.set(VR.CSV_DATA_LOAD,new se(!1,[Yc,wu]));re.set(VR.CSV_URL_LOAD,new se(!1,[Yc,wu]));re.set(VR.CSV_FILE_LOAD,new se(!1,[Yc,wu]));re.set(VR.IMPORT_FROM_S3,new se(!1,[Yc,wu]));re.set(A4.EXPORT_TO_S3,new se(!0,[]));re.set(A4.EXPORT_LOCAL,new se(!0,[]));re.set(Dn.VALID_SQL_OPS_ENUM.DELETE,new se(!1,[R4]));re.set(Dn.VALID_SQL_OPS_ENUM.SELECT,new se(!1,[ti]));re.set(Dn.VALID_SQL_OPS_ENUM.INSERT,new se(!1,[Yc]));re.set(Dn.VALID_SQL_OPS_ENUM.UPDATE,new se(!1,[wu]));w4.exports={verifyPerms:zbe,verifyPermsAst:jbe,verifyBulkLoadAttributePerms:Jbe};function jbe(e,t,r){if(Ba.isEmptyOrZeroLength(e))throw Ur.info("verify_perms_ast has an empty user parameter"),ts(new Error);if(Ba.isEmptyOrZeroLength(t))throw Ur.info("verify_perms_ast has an empty user parameter"),ts(new Error);if(Ba.isEmptyOrZeroLength(r))throw Ur.info("verify_perms_ast has a null operation parameter"),ts(new Error);try{let n=l4(),s=require("alasql"),i=new T4,o=new n(e),c=o.getSchemas(),l=new Map;if((!c||c.length===0)&&o.affected_attributes&&o.affected_attributes.size>0)throw Ur.info("No schemas defined in verifyPermsAst(), will not continue."),ts(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&b4[r])throw ts(new Error,mn.DROP_SYSTEM,UE.FORBIDDEN);if(u&&!d)return null;let f=m4.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=o.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=o.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=I4(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let _=o.getAttributesBySchemaTableName(h,p[E]),R=tv(t.role.permission,h,p[E]);ev(_,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw ts(n)}}a(jbe,"verifyPermsAst");function zbe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ur.info("null required parameter in verifyPerms"),ts(new Error,mn.DEFAULT_INVALID_REQUEST,UE.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new T4;if(Ba.isEmptyOrZeroLength(e.hdb_user?.role)||Ba.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Ur.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(mn.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=o.has(Dn.SYSTEM_SCHEMA_NAME)||s===Dn.SYSTEM_SCHEMA_NAME;if(l&&d&&$be[e.operation]&&(i===Dn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Dn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Dn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&b4[r])throw ts(new Error,mn.DROP_SYSTEM,UE.FORBIDDEN);if(l&&!d||u===!0&&(r===Ps.createSchema.name||r===Ps.dropSchema.name))return null;if(Wbe.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=m4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===u4||r===d4)&&!f.super_user){if(s===Dn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(mn.SCHEMA_PERM_ERROR(s));if(r===u4&&(!f[s]||!f[s][xE]))return c.handleInvalidItem(mn.SCHEMA_NOT_FOUND(s));if(r===d4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][xE]))return c.handleInvalidItem(mn.TABLE_NOT_FOUND(s,i))}let m=I4(e.hdb_user,r,o,c,n);if(m)return m;if(re.get(r)&&re.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Dn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],_=f[s].tables[i];_[Dn.PERMS_CRUD_ENUM.READ]&&(_.attribute_permissions.length>0?_.attribute_permissions.filter(S=>S[Dn.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=Qbe(e),h=tv(e.hdb_user?.role?.permission,s,i);return ev(p,h,r,i,s,c,n),c.getPermsResponse()}a(zbe,"verifyPerms");function I4(e,t,r,n,s){if(Ba.arrayHasEmptyValues([e,t,r]))throw Ur.info("hasPermissions has an invalid parameter"),ts(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||re.get(t).requires_su))return null;if(!re.get(t))throw Ur.info(`operation ${t} not found.`),ts(new Error,mn.OP_NOT_FOUND(t),UE.BAD_REQUEST);if(re.get(t)&&re.get(t).requires_su)return Ur.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(mn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][xE]===!1){n.addInvalidItem(mn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(mn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=o[l].tables[d];if(!f||f[xE]===!1)n.addInvalidItem(mn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=re.get(t).perms;!Ba.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],_=f[E];(_==null||_===!1)&&(Ur.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=mn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Ur.error(p),Ur.error(m),ts(y4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}a(I4,"hasPermissions");function ev(e,t,r,n,s,i,o){if(!e||!t)throw Ur.info("no attributes specified in checkAttributePerms."),ts(new Error);let c=re.get(r).perms;if(!c||c==="")throw Ur.info(`no permissions found for ${r} in checkAttributePerms().`),ts(new Error);if(Ba.isEmptyOrZeroLength(t))return Ur.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[xE]===!1){i.addInvalidItem(mn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Dn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==ti)throw ts(new Error,mn.SYSTEM_TIMESTAMP_PERMS_ERR,UE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(mn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(ev,"checkAttributePerms");function Qbe(e){let t=new Set;try{if(e.action)return t;if(e.operation===Dn.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){Ur.info(r)}return t}a(Qbe,"getRecordAttributes");function tv(e,t,r){let n=new Map;if(Ba.isEmpty(e))return Ur.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{Ur.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(tv,"getAttributePermissions");function Jbe(e,t,r,n,s,i,o){let c=new Set(i),l=tv(e,n,s);ev(c,l,t,s,n,o,r)}a(Jbe,"verifyBulkLoadAttributePerms")});var av=x((lHe,$4)=>{"use strict";var YR=ps(),jR=aO(),Xbe=require("needle"),Mi=($(),L(Q)),$f=de(),{handleHDBError:sr,hdbErrors:U4}=ge(),{HTTP_STATUS_CODES:pn,HDB_ERROR_MSGS:xr,CHECK_LOGS_WRAPPER:Cu}=U4,Vf=ee(),rv=require("papaparse");$f.promisifyPapaParse();var Ui=require("fs-extra"),Zbe=require("path"),{chain:N4}=require("stream-chain"),C4=require("stream-json/streamers/StreamArray"),O4=require("stream-json/utils/Batch"),P4=require("stream-chain/utils/comp"),{finished:L4}=require("stream"),eAe=fe(),x4=cO(),tAe=lO(),{BulkLoadFileObject:sv,BulkLoadDataObject:rAe}=l1(),iv=hO(),{verifyBulkLoadAttributePerms:B4}=KR(),{databases:nAe}=(Oe(),L(ht)),{coerceType:sAe}=(Ag(),L(xq)),D4="No records parsed from csv file.",Nu=`${eAe.get("HDB_ROOT")}/tmp`,{schemaRegex:iAe}=ea(),v4=1024*1024*2,M4=5e3,oAe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};$4.exports={csvDataLoad:aAe,csvURLLoad:cAe,csvFileLoad:lAe,importFromS3:uAe};async function aAe(e,t){let r=jR.dataObject(e);if(r)throw sr(r,r.message,pn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=H4(e.schema,e.table),i=rv.parse(e.data,{header:!0,skipEmptyLines:!0,transform:nv.bind(null,s),dynamicTyping:!1}),o=new iv;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&B4(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw sr(new Error,c,pn.BAD_REQUEST,void 0,void 0,!0);let l=new rAe(e.action,e.schema,e.table,i.data);return n=await x4.callOperationFunctionAsAwait(G4,l,null),n.message===D4?D4:q4(n.records,n.number_written)}catch(s){throw Ou(s)}}a(aAe,"csvDataLoad");async function cAe(e){let t=jR.urlObject(e);if(t)throw sr(t,t.message,pn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Nu}/${r}`;try{await dAe(e,r)}catch(s){throw Vf.error(xr.DOWNLOAD_FILE_ERR(r)+" - "+s),sr(s,Cu(xr.DOWNLOAD_FILE_ERR(r)))}try{let s=new sv(this.job_operation_function.name,e.action,e.schema,e.table,n,Mi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await ov(s);return await WR(n),i}catch(s){throw await WR(n),Ou(s)}}a(cAe,"csvURLLoad");async function lAe(e){let t=jR.fileObject(e);if(t)throw sr(t,t.message,pn.BAD_REQUEST,void 0,void 0,!0);let r=new sv(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Mi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await ov(r)}catch(n){throw Ou(n)}}a(lAe,"csvFileLoad");async function uAe(e){let t=jR.s3FileObject(e);if(t)throw sr(t,t.message,pn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Zbe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Nu}/${s}`;let i=new sv(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await fAe(s,e);let o=await ov(i);return await WR(r),o}catch(n){throw await WR(r),Ou(n)}}a(uAe,"importFromS3");async function dAe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Xbe("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 sr(n,s,n.statusCode,Mi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}pAe(r,e.csv_url),await mAe(t,r.raw)}a(dAe,"downloadCSVFile");async function fAe(e,t){try{let r=`${Nu}/${e}`;await Ui.mkdirp(Nu),await Ui.writeFile(`${Nu}/${e}`,"",{flag:"a+"});let n=await Ui.createWriteStream(r),s=await tAe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){Vf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Vf.error(xr.S3_DOWNLOAD_ERR+" - "+r),sr(r,Cu(xr.S3_DOWNLOAD_ERR))}}a(fAe,"downloadFileFromS3");async function mAe(e,t){try{await Ui.mkdirp(Nu),await Ui.writeFile(`${Nu}/${e}`,t)}catch(r){throw Vf.error(xr.WRITE_TEMP_FILE_ERR),sr(r,Cu(xr.DEFAULT_BULK_LOAD_ERR))}}a(mAe,"writeFileToTempFolder");async function WR(e){if(e)try{await Ui.access(e),await Ui.unlink(e)}catch{Vf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(WR,"deleteTempFile");function pAe(e,t){if(e.statusCode!==U4.HTTP_STATUS_CODES.OK)throw sr(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,pn.BAD_REQUEST);if(!oAe[e.headers["content-type"]])throw sr(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,pn.BAD_REQUEST);if(!e.raw)throw sr(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,pn.BAD_REQUEST)}a(pAe,"validateURLResponse");async function ov(e){try{let t;switch(e.file_type){case Mi.VALID_S3_FILE_TYPES.CSV:t=await hAe(e);break;case Mi.VALID_S3_FILE_TYPES.JSON:t=await EAe(e);break;default:throw sr(new Error,xr.DEFAULT_BULK_LOAD_ERR,pn.BAD_REQUEST,Mi.LOG_LEVELS.ERROR,xr.INVALID_FILE_EXT_ERR(e))}return q4(t.records,t.number_written)}catch(t){throw Ou(t)}}a(ov,"fileLoad");async function F4(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await YR.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&B4(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=sr(c);r(l)}}a(F4,"validateChunk");async function k4(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;$f.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!$f.isEmpty(c)&&!$f.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await x4.callOperationFunctionAsAwait(G4,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=sr(c,Cu(xr.INSERT_CSV_ERR),pn.INTERNAL_SERVER_ERROR,Mi.LOG_LEVELS.ERROR,xr.INSERT_CSV_ERR+" - "+c);r(l)}}a(k4,"insertChunk");async function hAe(e){let t={records:0,number_written:0},r=H4(e.schema,e.table);try{let n=new iv,s=Ui.createReadStream(e.file_path,{highWaterMark:v4});s.setEncoding("utf8"),await rv.parsePromise(s,F4.bind(null,e,n),nv.bind(null,r));let i=n.getPermsResponse();if(i)throw sr(new Error,i,pn.BAD_REQUEST);return s=Ui.createReadStream(e.file_path,{highWaterMark:v4}),s.setEncoding("utf8"),await rv.parsePromise(s,k4.bind(null,e,t),nv.bind(null,r)),s.destroy(),t}catch(n){throw sr(n,Cu(xr.PAPA_PARSE_ERR),pn.INTERNAL_SERVER_ERROR,Mi.LOG_LEVELS.ERROR,xr.PAPA_PARSE_ERR+n)}}a(hAe,"callPapaParse");function H4(e,t){let r=nAe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>sAe(i,s));return n}a(H4,"createTransformMap");function nv(e,t,r){let n=e.get(r);return n?n(t):$f.autoCast(t)}a(nv,"typeFunction");async function EAe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new iv,s=N4([Ui.createReadStream(e.file_path,{encoding:"utf-8"}),C4.withParser(),c=>c.value,new O4({batchSize:M4}),P4(async c=>{await F4(e,n,r,c)})]);await new Promise((c,l)=>{L4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw sr(new Error,i,pn.BAD_REQUEST);let o=N4([Ui.createReadStream(e.file_path,{encoding:"utf-8"}),C4.withParser(),c=>c.value,new O4({batchSize:M4}),P4(async c=>{await k4(e,t,r,c)})]);return await new Promise((c,l)=>{L4(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw sr(n,Cu(xr.INSERT_JSON_ERR),pn.INTERNAL_SERVER_ERROR,Mi.LOG_LEVELS.ERROR,xr.INSERT_JSON_ERR+n)}}a(EAe,"insertJson");async function G4(e){let t={};try{e.data&&e.data.length>0&&_Ae(e.data[0])?t=await gAe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Vf.info(t.message))}catch(r){throw Ou(r)}return t}a(G4,"callBulkFileLoad");function _Ae(e){let t=Object.keys(e);for(let r of t)if(!iAe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(_Ae,"validateColumnNames");async function gAe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=YR.insert;break;case"update":i=YR.update;break;case"upsert":i=YR.upsert;break;default:throw sr(new Error,xr.INVALID_ACTION_PARAM_ERR(n),pn.BAD_REQUEST,Mi.LOG_LEVELS.ERROR,xr.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)o.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=$f.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Ou(o)}}a(gAe,"bulkFileLoad");function q4(e,t){return`successfully loaded ${t} of ${e} records`}a(q4,"buildResponseMsg");function Ou(e){return sr(e,Cu(xr.DEFAULT_BULK_LOAD_ERR),pn.INTERNAL_SERVER_ERROR,Mi.LOG_LEVELS.ERROR,xr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ou,"buildTopLevelErrMsg")});var W4=x((dHe,Y4)=>{"use strict";var SAe=Yn(),TAe=to(),V4=ee(),yAe=ps(),RAe=require("clone"),lv=require("alasql"),bAe=rS(),K4=require("util"),AAe=K4.promisify(TAe.getTableSchema),IAe=K4.promisify(SAe.search),wAe=($(),L(Q)),cv=de();bAe(lv);Y4.exports={update:CAe};var NAe="There was a problem performing this update. Please check the logs and try again.";async function CAe({statement:e,hdb_user:t}){let r=await AAe(e.table.databaseid,e.table.tableid),n=OAe(e.columns);cv.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=RAe(s),c=cv.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=lv.parse(l).statements[0],d=await IAe(u),f=PAe(n,d);return LAe(o,f,t)}a(CAe,"update");function OAe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=lv.compile(`SELECT ${r.expression.toString()} AS [${wAe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw V4.error(t),new Error(NAe)}}a(OAe,"createUpdateRecord");function PAe(e,t){return cv.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(PAe,"buildUpdateRecords");async function LAe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await yAe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){V4.error(`Error delete new_attributes from update response: ${i}`)}return s}a(LAe,"updateRecords")});var z4=x((mHe,j4)=>{var DAe=require("alasql"),vAe=Yn(),MAe=ee(),UAe=ms(),dv=require("util"),uv=de(),xAe=($(),L(Q)),BAe=to(),FAe="record",kAe="successfully deleted",HAe=dv.callbackify(VAe),GAe=dv.promisify(vAe.search),qAe=dv.promisify(BAe.getTableSchema);j4.exports={convertDelete:HAe};function $Ae(e){return`${e.deleted_hashes.length} ${FAe}${e.deleted_hashes.length===1?"":"s"} ${kAe}`}a($Ae,"generateReturnMessage");async function VAe({statement:e,hdb_user:t}){let r=await qAe(e.table.databaseid,e.table.tableid);uv.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=uv.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=DAe.parse(o).statements[0],l={operation:xAe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await GAe(c);let u=await UAe.deleteRecords(l);return uv.isEmptyOrZeroLength(u.message)&&(u.message=$Ae(u)),delete u.txn_time,u}catch(u){throw MAe.error(u),u.hdb_code?u.message:u}}a(VAe,"convertDelete")});var HE=x((hHe,eJ)=>{"use strict";eJ.exports={evaluateSQL:nIe,processAST:Z4,convertSQLToAST:X4,checkASTPermissions:J4};var KAe=ps(),Q4=require("util"),YAe=Q4.callbackify(KAe.insert),WAe=Yn().search,jAe=W4().update,zAe=Q4.callbackify(jAe),QAe=z4().convertDelete,Wc=require("alasql"),JAe=KR(),zR=ee(),XAe=rS(),ZAe=de(),kE=($(),L(Q)),{hdbErrors:eIe,handleHDBError:fv}=ge(),{HTTP_STATUS_CODES:mv}=eIe;XAe(Wc);var tIe=403,rIe="There was a problem performing this insert. Please check the logs and try again.",pv=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function nIe(e,t){let r=e.parsed_sql_object;if(!r){r=X4(e.sql);let n,s=r.ast.statements[0];if(s instanceof Wc.yy.Insert?n=s.into.databaseid:s instanceof Wc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Wc.yy.Update||s instanceof Wc.yy.Delete?n=s.table.databaseid:zR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Wc.yy.Select)&&ZAe.isEmptyOrZeroLength(n))return t("No schema specified",null)}Z4(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(nIe,"evaluateSQL");function J4(e,t){let r;try{r=JAe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(J4,"checkASTPermissions");function X4(e){let t=new pv;if(!e)throw fv(new Error,"The 'sql' parameter is missing from the request body",mv.BAD_REQUEST);try{let r=e.trim(),n=Wc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
138
|
-
`);throw n[1]?fv(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,mv.BAD_REQUEST):fv(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",mv.BAD_REQUEST)}return t}a(X4,"convertSQLToAST");function Z4(e,t,r){try{let n=sIe;if(!e.bypass_auth&&!t.permissions_checked){let i=J4(e,t);if(i&&i.length>0)return r(tIe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case kE.VALID_SQL_OPS_ENUM.SELECT:n=WAe,s=t.ast.statements[0];break;case kE.VALID_SQL_OPS_ENUM.INSERT:n=iIe;break;case kE.VALID_SQL_OPS_ENUM.UPDATE:n=zAe;break;case kE.VALID_SQL_OPS_ENUM.DELETE:n=QAe;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(Z4,"processAST");function sIe(e,t){zR.info(e),t("unknown sql statement")}a(sIe,"nullFunction");function iIe({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(o=>o.columnid);try{s.records=oIe(i,e.values)}catch(o){return r(o)}YAe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){zR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(iIe,"convertInsert");function oIe(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]]=Wc.compile(`SELECT ${s.toString()} AS [${kE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw zR.error(r),new Error(rIe)}}a(oIe,"createDataObjects")});var _v=x((_He,cJ)=>{"use strict";var Ev=Yn(),aIe=lO(),{AsyncParser:cIe}=require("json2csv"),QR=require("stream"),Ls=de(),hv=require("fs-extra"),lIe=require("path"),ri=ee(),{promisify:nJ}=require("util"),GE=de(),{handleHDBError:Ir,hdbErrors:uIe}=ge(),{HDB_ERROR_MSGS:rs,HTTP_STATUS_CODES:wr}=uIe,{streamAsJSON:dIe}=(PA(),L(gx)),{Upload:fIe}=require("@aws-sdk/lib-storage"),{toCsvStream:mIe}=(jo(),L(Nx)),tJ=["search_by_value","search_by_hash","sql","search_by_conditions"],rJ=["json","csv"],sJ="json",iJ="csv",pIe="Successfully exported JSON locally.",hIe="Successfully exported CSV locally.",EIe=1e3,_Ie=Ev.searchByHash,gIe=Ev.searchByValue,SIe=nJ(QR.finished);cJ.exports={export_to_s3:bIe,export_local:TIe};async function TIe(e){ri.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=oJ(e);if(!Ls.isEmpty(t))throw ri.error(t),Ir(new Error,t,wr.BAD_REQUEST,void 0,void 0,!0);if(Ls.isEmpty(e.path))throw ri.error(rs.MISSING_VALUE("path")),Ir(new Error,rs.MISSING_VALUE("path"),wr.BAD_REQUEST,void 0,void 0,!0);let r=(Ls.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(lIe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Ls.buildFolderPath(e.path,r);await yIe(e.path);let s=await aJ(e);return await RIe(n,e.format,s)}a(TIe,"export_local");async function yIe(e){if(ri.trace("in confirmPath"),Ls.isEmptyOrZeroLength(e))throw Ir(new Error,`Invalid path: ${e}`,wr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await hv.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,ri.error(n),Ir(new Error,n,wr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw ri.error(r),Ir(new Error,r,wr.BAD_REQUEST,void 0,void 0,!0)}return!0}a(yIe,"confirmPath");async function RIe(e,t,r){if(ri.trace("in saveToLocal"),GE.isEmptyOrZeroLength(e))throw Ir(new Error,rs.INVALID_VALUE("file_path"),wr.BAD_REQUEST,void 0,void 0,!0);if(GE.isEmptyOrZeroLength(t))throw Ir(new Error,rs.INVALID_VALUE("Source format"),wr.BAD_REQUEST,void 0,void 0,!0);if(GE.isEmpty(r))throw Ir(new Error,rs.NOT_FOUND("Data"),wr.BAD_REQUEST,void 0,void 0,!0);if(t===sJ){let n=hv.createWriteStream(e);return dIe(r).pipe(n),await SIe(n),{message:pIe,path:e}}else if(t===iJ){let n=hv.createWriteStream(e),s=QR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new cIe(i,c).fromInput(s).toOutput(n).promise(!1),{message:hIe,path:e}}throw Ir(new Error,rs.INVALID_VALUE("format"),wr.BAD_REQUEST)}a(RIe,"saveToLocal");async function bIe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Ir(new Error,rs.MISSING_VALUE("S3 object"),wr.BAD_REQUEST);if(Ls.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Ir(new Error,rs.MISSING_VALUE("aws_access_key_id"),wr.BAD_REQUEST);if(Ls.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Ir(new Error,rs.MISSING_VALUE("aws_secret_access_key"),wr.BAD_REQUEST);if(Ls.isEmptyOrZeroLength(e.s3.bucket))throw Ir(new Error,rs.MISSING_VALUE("bucket"),wr.BAD_REQUEST);if(Ls.isEmptyOrZeroLength(e.s3.key))throw Ir(new Error,rs.MISSING_VALUE("key"),wr.BAD_REQUEST);if(Ls.isEmptyOrZeroLength(e.s3.region))throw Ir(new Error,rs.MISSING_VALUE("region"),wr.BAD_REQUEST);let t=oJ(e);if(!Ls.isEmpty(t))throw Ir(new Error,t,wr.BAD_REQUEST);ri.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await aJ(e)}catch(c){throw ri.error(c),c}let n=await aIe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),s,i=new QR.PassThrough;if(e.format===iJ){s=e.s3.key+".csv";let c=mIe(r,r.getColumns?.());c.on("error",l=>{throw l}),c.pipe(i)}else if(e.format===sJ){s=e.s3.key+".json";let c=new QR.Readable;c.pipe(i),c.on("error",d=>{throw d}),c.push("[");let l=r.length,u="";for(let[d,f]of r.entries()){let m=d===l-1?JSON.stringify(f):JSON.stringify(f)+",";u+=m,d!==0&&d%EIe===0&&(c.push(u),u="")}u.length!==0&&c.push(u),c.push("]"),c.push(null)}else throw Ir(new Error,rs.INVALID_VALUE("format"),wr.BAD_REQUEST);return new fIe({client:n,params:{Bucket:e.s3.bucket,Key:s,Body:i}}).done()}a(bIe,"export_to_s3");function oJ(e){if(ri.trace("in exportCoreValidation"),Ls.isEmpty(e.format))return"format missing";if(rJ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${rJ.join(", ")}`;let t=e.search_operation.operation;if(Ls.isEmpty(t))return"search_operation.operation missing";if(tJ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${tJ.join(", ")}`}a(oJ,"exportCoreValidation");async function aJ(e){ri.trace("in getRecords");let t,r;if(GE.isEmpty(e.search_operation)||GE.isEmptyOrZeroLength(e.search_operation.operation))throw Ir(new Error,rs.INVALID_VALUE("Search operation"),wr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=gIe;break;case"search_by_hash":t=_Ie;break;case"search_by_conditions":t=Ev.searchByConditions;break;case"sql":{let n=HE();t=nJ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ri.error(r),Ir(new Error,r,wr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(aJ,"getRecords")});var uJ=x((SHe,lJ)=>{"use strict";var gv=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};lJ.exports=gv});var mJ=x((yHe,fJ)=>{"use strict";var AIe=($(),L(Q)),dJ=require("moment"),IIe=require("uuid").v4,Sv=class{static{a(this,"JobObject")}constructor(){this.id=IIe(),this.type=void 0,this.start_datetime=dJ().valueOf(),this.created_datetime=dJ().valueOf(),this.end_datetime=void 0,this.status=AIe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};fJ.exports=Sv});var yv=x((bHe,yJ)=>{"use strict";var wIe=require("uuid").v4,gJ=ps(),SJ=Yn(),NIe=Xi(),CIe=gp(),OIe=uJ(),Ht=($(),L(Q)),PIe=mJ(),LIe=hT(),xi=ee(),DIe=wm(),Kf=de(),{promisify:vIe}=require("util"),Pu=require("moment"),JR=aO(),pJ=$w(),{deleteTransactionLogsBeforeValidator:MIe}=AD(),{handleHDBError:hJ,hdbErrors:UIe,ClientError:xIe}=ge(),{HTTP_STATUS_CODES:EJ}=UIe,_J=SJ.searchByValue,BIe=SJ.searchByHash,FIe=gJ.insert,kIe=gJ.update,Tv;yJ.exports={addJob:qIe,updateJob:VIe,handleGetJob:HIe,handleGetJobsByStartDate:GIe,getJobById:TJ};async function HIe(e){if(e.id===void 0)throw new xIe("'id' is required");let t=await TJ(e.id);return Kf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(HIe,"handleGetJob");async function GIe(e){try{let t=await $Ie(e);if(xi.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Pu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Pu(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw xi.error(r),new Error(r)}}a(GIe,"handleGetJobsByStartDate");async function qIe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Kf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return xi.info(d),t.error=d,t}if(!Ht.JOB_TYPE_ENUM[e.operation])return xi.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ht.OPERATIONS_ENUM.CSV_FILE_LOAD:n=JR.fileObject(e);break;case Ht.OPERATIONS_ENUM.CSV_URL_LOAD:n=JR.urlObject(e);break;case Ht.OPERATIONS_ENUM.CSV_DATA_LOAD:n=JR.dataObject(e);break;case Ht.OPERATIONS_ENUM.IMPORT_FROM_S3:n=JR.s3FileObject(e);break;case Ht.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ht.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=pJ(e,"date");break;case Ht.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=pJ(e,"timestamp");break;case Ht.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=MIe(e);break;case Ht.OPERATIONS_ENUM.RESTART_SERVICE:if(Ht.HDB_PROCESS_SERVICES[e.service]===void 0)throw hJ(new Error,"Invalid service",EJ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw hJ(n,n.message,EJ.BAD_REQUEST,void 0,void 0,!0);let s=new PIe;s.type=e.operation===Ht.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ht.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new NIe(Ht.SYSTEM_SCHEMA_NAME,Ht.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await _J(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return xi.error(f),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=wIe();try{o=await _J(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return xi.error(f),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return xi.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new DIe(Ht.SYSTEM_SCHEMA_NAME,Ht.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await FIe(l)}catch(d){return xi.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,xi.trace(d)}return t}a(qIe,"addJob");async function $Ie(e){let t=Pu(e.from_date,Pu.ISO_8601),r=Pu(e.to_date,Pu.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new OIe(n,e.hdb_user);try{if(!Tv){let i=HE();Tv=vIe(i.evaluateSQL)}return await Tv(s)}catch(i){throw xi.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.")}}a($Ie,"getJobsInDateRange");async function TJ(e){if(Kf.isEmptyOrZeroLength(e))return Kf.errorizeMessage("Invalid job ID specified.");let t=new CIe(Ht.SYSTEM_SCHEMA_NAME,Ht.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await BIe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return xi.error(n),Kf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(TJ,"getJobById");async function VIe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Kf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ht.JOB_STATUS_ENUM.COMPLETE||e.status===Ht.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Pu().valueOf());let t=new LIe(Ht.SYSTEM_SCHEMA_NAME,Ht.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await kIe(t),r}a(VIe,"updateJob")});var OJ=x((IHe,CJ)=>{"use strict";var RJ=de(),Br=($(),L(Q)),KIe=require("moment"),XR=av(),qE=ee(),bJ=yv(),AJ=_v(),IJ=Bl(),wJ=at(),YIe=xR(),WIe=kf(),{parentPort:jIe,isMainThread:NJ}=require("worker_threads"),{onMessageByType:zIe}=at(),Rv=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function QIe(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(RJ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(RJ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Br.JOB_TYPE_ENUM.csv_file_load:await Po(e,XR.csvFileLoad);break;case Br.JOB_TYPE_ENUM.csv_url_load:await Po(e,XR.csvURLLoad);break;case Br.JOB_TYPE_ENUM.csv_data_load:await Po(e,XR.csvDataLoad);break;case Br.JOB_TYPE_ENUM.import_from_s3:await Po(e,XR.importFromS3);break;case Br.JOB_TYPE_ENUM.empty_trash:break;case Br.JOB_TYPE_ENUM.export_local:await Po(e,AJ.export_local);break;case Br.JOB_TYPE_ENUM.export_to_s3:await Po(e,AJ.export_to_s3);break;case Br.JOB_TYPE_ENUM.delete_files_before:case Br.JOB_TYPE_ENUM.delete_records_before:await Po(e,IJ.deleteFilesBefore);break;case Br.JOB_TYPE_ENUM.delete_audit_logs_before:await Po(e,IJ.deleteAuditLogsBefore);break;case Br.JOB_TYPE_ENUM.delete_transaction_logs_before:await Po(e,YIe.deleteTransactionLogsBefore);break;case Br.JOB_TYPE_ENUM.restart_service:return await Po(e,WIe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(QIe,"parseMessage");async function Po(e,t){try{e.job.status=Br.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=KIe().valueOf(),await bJ.updateJob(e.job),await JIe(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):qE.error(`There was an error running ${t.name} job with id ${e.job.id}`),qE.error(n),e.job.message=n,e.job.status=Br.JOB_STATUS_ENUM.ERROR;try{await bJ.updateJob(e.job)}catch(s){throw qE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Po,"runJob");async function JIe(e){qE.trace("launching job thread:",e),NJ?wJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Br.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):jIe.postMessage({type:Br.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(JIe,"launchJobThread");NJ&&zIe(Br.ITC_EVENT_TYPES.START_JOB,async e=>{try{wJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Br.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(t){qE.error(t)}});CJ.exports={parseMessage:QIe,RunnerMessage:Rv}});var LJ=x((NHe,PJ)=>{"use strict";var bv=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};PJ.exports=bv});var vJ=x((OHe,DJ)=>{"use strict";var XIe=de(),Av=fe(),jc=($(),L(Q)),ZIe=Er(),ewe=vr(),Lo=ee(),twe=LJ(),rwe=aa();Av.initSync();DJ.exports={postOperationHandler:swe,sendOperationTransaction:$E};async function $E(e,t,r,n){if(e.schema===jc.SYSTEM_SCHEMA_NAME)return;let s=nwe(e,t,r);s&&(Lo.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await ewe.publishToStream(`${ZIe.SUBJECT_PREFIXES.TXN}.${e.schema}`,rwe.createNatsTableStreamName(e.schema,e.table),n,s))}a($E,"sendOperationTransaction");function nwe(e,t,r){if(XIe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===jc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(nwe,"convertCRUDOperationToTransaction");async function swe(e,t,r){if(!Av.get(jc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Lo.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=Av.get(jc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new twe(t.txn_time,n,s);switch(e.operation){case jc.OPERATIONS_ENUM.INSERT:try{await $E(e,t.inserted_hashes,i,r)}catch(o){Lo.error("There was an error calling clustering postOperationHandler for insert."),Lo.error(o)}break;case jc.OPERATIONS_ENUM.DELETE:try{await $E(e,t.deleted_hashes,i,r)}catch(o){Lo.error("There was an error calling clustering postOperationHandler for delete."),Lo.error(o)}break;case jc.OPERATIONS_ENUM.UPDATE:try{await $E(e,t.update_hashes,i,r)}catch(o){Lo.error("There was an error calling clustering postOperationHandler for update."),Lo.error(o)}break;case jc.OPERATIONS_ENUM.UPSERT:try{await $E(e,t.upserted_hashes,i,r)}catch(o){Lo.error("There was an error calling clustering postOperationHandler for upsert."),Lo.error(o)}break;default:break}return t}a(swe,"postOperationHandler")});var te,MJ=ie(()=>{te=class{static{a(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var RD={};Re(RD,{chooseOperation:()=>e3,executeJob:()=>ni,getOperationFunction:()=>t3,operation:()=>vv,processLocalTransaction:()=>ZJ});function awe(e){if(!Iv){let t=HE();Iv=Dv.promisify(t.evaluateSQL)}return Iv(e)}async function ZJ(e,t){try{if(e.body.operation!=="read_log"&&(WE.default.log_level===Em.INFO||WE.default.log_level===Em.DEBUG||WE.default.log_level===Em.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;vn.info(c)}}catch(n){vn.error(n)}let r=await JJ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return cwe[e.body.operation]&&YJ.default.setSchemaDataToGlobal(n=>{n&&vn.error(n)}),r}function e3(e){let t;try{t=t3(e)}catch(s){throw vn.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=HE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,o=s.convertSQLToAST(i);if(e.parsed_sql_object=o,!e.bypass_auth){let c=s.checkASTPermissions(e,o);if(c)throw vn.error(`${UJ.FORBIDDEN} from operation ${e.operation}`),vn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,si.handleHDBError)(new Error,c,si.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==j.CREATE_AUTHENTICATION_TOKENS&&e.operation!==j.LOGIN&&e.operation!==j.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 o=KJ.default.verifyPerms(i,s);if(o)throw vn.error(`${UJ.FORBIDDEN} from operation ${e.operation}`),vn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,si.handleHDBError)(new Error,o,si.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,si.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function t3(e){if(vn.trace(`getOperationFunction with operation: ${e.operation}`),xJ.has(e.operation))return xJ.get(e.operation);throw(0,si.handleHDBError)(new Error,si.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),si.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function vv(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=e3(e);return ZJ({body:e},n)}async function lwe(e){vn.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[fA]=!0;let o;switch(i.operation){case j.INSERT:o=await Du.default.insert(i);break;case j.UPDATE:o=await Du.default.update(i);break;case j.UPSERT:o=await Du.default.upsert(i);break;case j.DELETE:o=await Wf.default.deleteRecord(i);break;default:vn.warn("invalid operation in catchup");break}await iwe.postOperationHandler(i,o,e)}catch(o){vn.info("Invalid operation in transaction"),vn.error(o)}}async function ni(e){(0,QJ.transformReq)(e);let t,r;try{if(r=await eb.default.addJob(e),r){t=r.createdJob,vn.info("addJob result",r);let n=new Ov.default.RunnerMessage(t,e);return{message:await Ov.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 vn.error(i),(0,si.handleHDBError)(n,i)}}function uwe(){let e=new Map;return e.set(j.INSERT,new te(Du.default.insert)),e.set(j.UPDATE,new te(Du.default.update)),e.set(j.UPSERT,new te(Du.default.upsert)),e.set(j.SEARCH_BY_CONDITIONS,new te(Yf.default.searchByConditions)),e.set(j.SEARCH_BY_HASH,new te(Yf.default.searchByHash)),e.set(j.SEARCH_BY_ID,new te(Yf.default.searchByHash)),e.set(j.SEARCH_BY_VALUE,new te(Yf.default.searchByValue)),e.set(j.SEARCH,new te(owe)),e.set(j.SQL,new te(awe)),e.set(j.CSV_DATA_LOAD,new te(ni,VE.default.csvDataLoad)),e.set(j.CSV_FILE_LOAD,new te(ni,VE.default.csvFileLoad)),e.set(j.CSV_URL_LOAD,new te(ni,VE.default.csvURLLoad)),e.set(j.IMPORT_FROM_S3,new te(ni,VE.default.importFromS3)),e.set(j.CREATE_SCHEMA,new te(Bi.default.createSchema)),e.set(j.CREATE_DATABASE,new te(Bi.default.createSchema)),e.set(j.CREATE_TABLE,new te(Bi.default.createTable)),e.set(j.CREATE_ATTRIBUTE,new te(Bi.default.createAttribute)),e.set(j.DROP_SCHEMA,new te(Bi.default.dropSchema)),e.set(j.DROP_DATABASE,new te(Bi.default.dropSchema)),e.set(j.DROP_TABLE,new te(Bi.default.dropTable)),e.set(j.DROP_ATTRIBUTE,new te(Bi.default.dropAttribute)),e.set(j.DESCRIBE_SCHEMA,new te(KE.default.describeSchema)),e.set(j.DESCRIBE_DATABASE,new te(KE.default.describeSchema)),e.set(j.DESCRIBE_TABLE,new te(KE.default.describeTable)),e.set(j.DESCRIBE_ALL,new te(KE.default.describeAll)),e.set(j.DELETE,new te(Wf.default.deleteRecord)),e.set(j.ADD_USER,new te(vN)),e.set(j.ALTER_USER,new te(MN)),e.set(j.DROP_USER,new te(UN)),e.set(j.LIST_USERS,new te(BN)),e.set(j.LIST_ROLES,new te(YE.default.listRoles)),e.set(j.ADD_ROLE,new te(YE.default.addRole)),e.set(j.ALTER_ROLE,new te(YE.default.alterRole)),e.set(j.DROP_ROLE,new te(YE.default.dropRole)),e.set(j.USER_INFO,new te(xN)),e.set(j.READ_LOG,new te(FJ.default)),e.set(j.ADD_NODE,new te(kJ.default)),e.set(j.UPDATE_NODE,new te(wv.default)),e.set(j.SET_NODE_REPLICATION,new te(wv.default)),e.set(j.REMOVE_NODE,new te(HJ.default)),e.set(j.CONFIGURE_CLUSTER,new te(GJ.default)),e.set(j.PURGE_STREAM,new te(qJ.default)),e.set(j.SET_CONFIGURATION,new te(Pv.default.setConfiguration)),e.set(j.CLUSTER_STATUS,new te($J.default.clusterStatus)),e.set(j.CLUSTER_NETWORK,new te(VJ.default)),e.set(j.CLUSTER_SET_ROUTES,new te(ZR.default.setRoutes)),e.set(j.CLUSTER_GET_ROUTES,new te(ZR.default.getRoutes)),e.set(j.CLUSTER_DELETE_ROUTES,new te(ZR.default.deleteRoutes)),e.set(j.EXPORT_TO_S3,new te(ni,Nv.default.export_to_s3)),e.set(j.CREATE_CSR,new te(Lu.default.createCsr)),e.set(j.SIGN_CERTIFICATE,new te(Lu.default.signCertificate)),e.set(j.LIST_CERTIFICATES,new te(Lu.default.listCertificates)),e.set(j.ADD_CERTIFICATES,new te(Lu.default.addCertificate)),e.set(j.REMOVE_CERTIFICATE,new te(Lu.default.removeCertificate)),e.set(j.GET_KEY,new te(Lu.default.getKey)),e.set(j.ADD_NODE_BACK,new te(ZP)),e.set(j.REMOVE_NODE_BACK,new te(eL)),e.set(j.DELETE_FILES_BEFORE,new te(ni,Wf.default.deleteFilesBefore)),e.set(j.DELETE_RECORDS_BEFORE,new te(ni,Wf.default.deleteFilesBefore)),e.set(j.EXPORT_LOCAL,new te(ni,Nv.default.export_local)),e.set(j.SEARCH_JOBS_BY_START_DATE,new te(eb.default.handleGetJobsByStartDate)),e.set(j.GET_JOB,new te(eb.default.handleGetJob)),e.set(j.GET_REGISTRATION_INFO,new te(GD)),e.set(j.GET_FINGERPRINT,new te(qD)),e.set(j.SET_LICENSE,new te($D)),e.set(j.RESTART,new te(Cv.default.restart)),e.set(j.RESTART_SERVICE,new te(ni,Cv.default.restartService)),e.set(j.CATCHUP,new te(lwe)),e.set(j.SYSTEM_INFORMATION,new te(WJ.default.systemInformation)),e.set(j.DELETE_AUDIT_LOGS_BEFORE,new te(ni,Wf.default.deleteAuditLogsBefore)),e.set(j.READ_AUDIT_LOG,new te(BJ.default)),e.set(j.CREATE_AUTHENTICATION_TOKENS,new te(ZC)),e.set(j.REFRESH_OPERATION_TOKEN,new te(eO)),e.set(j.LOGIN,new te(_D)),e.set(j.LOGOUT,new te(gD)),e.set(j.GET_CONFIGURATION,new te(Pv.default.getConfiguration)),e.set(j.CUSTOM_FUNCTIONS_STATUS,new te(Ct.default.customFunctionsStatus)),e.set(j.GET_CUSTOM_FUNCTIONS,new te(Ct.default.getCustomFunctions)),e.set(j.GET_COMPONENT_FILE,new te(Ct.default.getComponentFile)),e.set(j.GET_COMPONENTS,new te(Ct.default.getComponents)),e.set(j.SET_COMPONENT_FILE,new te(Ct.default.setComponentFile)),e.set(j.DROP_COMPONENT,new te(Ct.default.dropComponent)),e.set(j.GET_CUSTOM_FUNCTION,new te(Ct.default.getCustomFunction)),e.set(j.SET_CUSTOM_FUNCTION,new te(Ct.default.setCustomFunction)),e.set(j.DROP_CUSTOM_FUNCTION,new te(Ct.default.dropCustomFunction)),e.set(j.ADD_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.addComponent)),e.set(j.ADD_COMPONENT,new te(Ct.default.addComponent)),e.set(j.DROP_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.dropCustomFunctionProject)),e.set(j.PACKAGE_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.packageComponent)),e.set(j.PACKAGE_COMPONENT,new te(Ct.default.packageComponent)),e.set(j.DEPLOY_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.deployComponent)),e.set(j.DEPLOY_COMPONENT,new te(Ct.default.deployComponent)),e.set(j.READ_TRANSACTION_LOG,new te(Lv.default.readTransactionLog)),e.set(j.DELETE_TRANSACTION_LOGS_BEFORE,new te(ni,Lv.default.deleteTransactionLogsBefore)),e.set(j.INSTALL_NODE_MODULES,new te(jJ.default.installModules)),e.set(j.GET_BACKUP,new te(Bi.default.getBackup)),e.set(j.CLEANUP_ORPHAN_BLOBS,new te(Bi.default.cleanupOrphanBlobs)),e.set(j.ADD_SSH_KEY,new te(Ct.default.addSSHKey)),e.set(j.GET_SSH_KEY,new te(Ct.default.getSSHKey)),e.set(j.UPDATE_SSH_KEY,new te(Ct.default.updateSSHKey)),e.set(j.DELETE_SSH_KEY,new te(Ct.default.deleteSSHKey)),e.set(j.LIST_SSH_KEYS,new te(Ct.default.listSSHKeys)),e.set(j.SET_SSH_KNOWN_HOSTS,new te(Ct.default.setSSHKnownHosts)),e.set(j.GET_SSH_KNOWN_HOSTS,new te(Ct.default.getSSHKnownHosts)),e.set(j.GET_ANALYTICS,new te(ND)),e.set(j.LIST_METRICS,new te(CD)),e.set(j.DESCRIBE_METRIC,new te(OD)),e.set(j.GET_STATUS,new te(gC)),e.set(j.SET_STATUS,new te(SC)),e.set(j.CLEAR_STATUS,new te(_C)),e.set(j.INSTALL_USAGE_LICENSE,new te(xD)),e.set(j.GET_USAGE_LICENSES,new te(HD)),e}var Yf,VE,Bi,KE,Wf,BJ,YE,Ct,WE,FJ,kJ,wv,HJ,GJ,qJ,$J,VJ,ZR,Nv,KJ,eb,si,Cv,Dv,Du,YJ,WJ,Ov,Pv,Lv,jJ,zJ,QJ,Lu,JJ,XJ,UJ,vn,iwe,owe,Iv,cwe,xJ,bD=ie(()=>{Yf=b(Yn()),VE=b(av()),Bi=b(Ny()),KE=b(Qd()),Wf=b(Bl()),BJ=b(wP());gs();YE=b(hh()),Ct=b(yD()),WE=b(ee()),FJ=b(DP()),kJ=b(ky()),wv=b(iL()),HJ=b(Gy()),GJ=b(cL()),qJ=b(lL()),$J=b(fL()),VJ=b(pL()),ZR=b(Yy()),Nv=b(_v()),KJ=b(KR()),eb=b(yv());$();si=b(ge()),Cv=b(kf()),Dv=b(require("util")),Du=b(ps()),YJ=b(to()),WJ=b(Zh()),Ov=b(OJ());Wd();AR();Pv=b(wt()),Lv=b(xR()),jJ=b(wD()),zJ=b(di()),QJ=b(de());qr();Lu=b(As());yf();LD();JJ=b(cO()),XJ=b(vJ());mh();LE();KD();MJ();({HTTP_STATUS_CODES:UJ}=si.hdbErrors),vn=WE.default.loggerWithTag("operation"),{transactToClusteringUtils:iwe}=XJ.default,owe=Dv.promisify(Yf.default.search);a(awe,"evaluateSQL");cwe={[j.CREATE_ATTRIBUTE]:!0,[j.CREATE_TABLE]:!0,[j.CREATE_SCHEMA]:!0,[j.DROP_ATTRIBUTE]:!0,[j.DROP_TABLE]:!0,[j.DROP_SCHEMA]:!0};a(ZJ,"processLocalTransaction");xJ=uwe();Ue.operation=vv;a(e3,"chooseOperation");a(t3,"getOperationFunction");(0,zJ._assignPackageExport)("operation",vv);a(vv,"operation");a(lwe,"catchup");a(ni,"executeJob");a(uwe,"initializeOperationFunctionMap")});var nb=x((xHe,i3)=>{"use strict";var tb=($(),L(Q)),dwe=de(),jf=ee(),{handleHDBError:Mv,hdbErrors:rb}=ge(),{isMainThread:fwe}=require("worker_threads"),{Readable:mwe}=require("stream"),r3=require("os"),pwe=require("util"),hwe=e1(),s3=pwe.promisify(hwe.authorize),n3=(bD(),L(RD)),{createGzip:Ewe,constants:_we}=require("zlib"),gwe=[tb.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,tb.OPERATIONS_ENUM.LOGIN,tb.OPERATIONS_ENUM.LOGOUT];function Swe(e){let t=`Found an uncaught exception with message: ${e.message}. ${r3.EOL}Stack: ${e.stack} ${r3.EOL}Terminating ${fwe?"HDB":"thread"}.`;console.error(t),jf.fatal(t),process.exit(1)}a(Swe,"handleServerUncaughtException");function Twe(e,t,r){if(jf[e.logLevel||"info"](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:rb.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)}a(Twe,"serverErrorHandler");function ywe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Mv(new Error,"Invalid JSON.",rb.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(dwe.isEmpty(e.body.operation)){let n=Mv(new Error,"Request body must include an 'operation' property.",rb.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(ywe,"reqBodyValidationHandler");function Rwe(e,t,r){let n;!gwe.includes(e.body.operation)||e.body.operation===tb.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?s3(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{i.statusCode=401,jf.debug("Login failed",i),r(i,null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(Rwe,"authHandler");function bwe(e,t,r){s3(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{jf.warn(n),jf.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(Mv(n,s,rb.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(bwe,"authAndEnsureUserOnRequest");async function Awe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=n3.chooseOperation(e.body);let s=await n3.processLocalTransaction(e,n);if(s instanceof mwe&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Ewe({level:_we.Z_BEST_SPEED})))}return s}catch(s){throw jf.error(s),s}}a(Awe,"handlePostRequest");i3.exports={authHandler:Rwe,authAndEnsureUserOnRequest:bwe,handlePostRequest:Awe,handleServerUncaughtException:Swe,serverErrorHandler:Twe,reqBodyValidationHandler:ywe}});var l3=x((FHe,c3)=>{"use strict";var Iwe=require("fastify-plugin"),{handlePostRequest:o3,authHandler:wwe,reqBodyValidationHandler:Nwe}=nb();async function Cwe(e){e.decorate("hdbCore",{preValidation:[Nwe,wwe],request:a((t,r)=>a3(o3(t,r)),"request"),requestWithoutAuthentication:a((t,r)=>a3(o3(t,r,!0)),"requestWithoutAuthentication")})}a(Cwe,"hdbCore");async function a3(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}a(a3,"convertAsyncIterators");c3.exports=Iwe(Cwe)});var d3=x((HHe,u3)=>{"use strict";var sb=fe();sb.initSync();var{CONFIG_PARAMS:Uv}=($(),L(Q)),Owe=1024*1024*1024;function Pwe(e){let t=sb.get(Uv.HTTP_TIMEOUT),r=sb.get(Uv.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Owe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:sb.get(Uv.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(Pwe,"getServerOptions");u3.exports=Pwe});var p3=x((qHe,m3)=>{"use strict";var xv=fe();xv.initSync();var{CONFIG_PARAMS:f3}=($(),L(Q));function Lwe(){let e=xv.get(f3.HTTP_CORSACCESSLIST),t=xv.get(f3.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}a(Lwe,"getCORSOptions");m3.exports=Lwe});var _3=x((VHe,E3)=>{"use strict";var h3=fe();h3.initSync();var Dwe=($(),L(Q));function vwe(){return h3.get(Dwe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(vwe,"getHeaderTimeoutConfig");E3.exports=vwe});var Fv={};Re(Fv,{customFunctionsServer:()=>xwe,ready:()=>P3,start:()=>Uwe});function Uwe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Fa||(Fa=O3(t),Ue.http((await Fa).server));let o=await Fa,c=(0,Bv.dirname)(s),l=(0,Bv.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!g3.has(c)){g3.add(c);try{o.register(Fwe(c,l))}catch(u){if(u.message==="Root plugin has already booted")Tt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:P3}}async function xwe(){try{Tt.info("In Custom Functions Fastify server"+process.cwd()),Tt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tt.debug(`Custom Functions server process ${process.pid} starting up.`),await Bwe();let e=A3.get(U.HTTP_SECUREPORT)>0,t;try{t=Fa=await O3(e)}catch(r){throw Tt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Tt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Tt.error(`Custom Functions ${process.pid} Error: ${e}`),Tt.error(e),process.exit(1)}}async function Bwe(){try{Tt.info("Custom Functions starting configuration."),await Ti(),Tt.info("Custom Functions completed configuration.")}catch(e){Tt.error(e)}}function Fwe(e,t){return async function(r){try{Tt.info("Custom Functions starting buildRoutes"),Tt.trace("Loading fastify routes folder "+e),(0,S3.existsSync)(e)&&r.register(b3.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Tt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Tt.error(s.message):s&&Tt.error(s),o()})}catch(n){Tt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function O3(e){Tt.info("Custom Functions starting buildServer.");let t=(0,I3.default)(e),r=(0,T3.default)(t);r.server.headersTimeout=(0,N3.default)(),r.setErrorHandler(C3.serverErrorHandler);let n=(0,w3.default)();return n&&r.register(y3.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){l.sent||l.raw.headersSent||l.raw.writableEnded||r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(R3.default),await r.register(Mwe),await r.after(),Mm(r),Tt.info("Custom Functions completed buildServer."),r}function P3(){if(Fa)return Fa.then?Fa.then(e=>e.ready()):Fa.ready()}var Bv,S3,T3,y3,R3,b3,A3,Tt,Mwe,I3,w3,N3,C3,Fa,g3,L3=ie(()=>{Bv=require("path"),S3=require("fs"),T3=b(require("fastify")),y3=b(require("@fastify/cors")),R3=b(QC()),b3=b(require("@fastify/autoload")),A3=b(fe());$();Tt=b(ee()),Mwe=b(l3());gs();I3=b(d3()),w3=b(p3()),N3=b(_3()),C3=b(nb());jo();qr();g3=new Set;a(Uwe,"start");a(xwe,"customFunctionsServer");a(Bwe,"setUp");a(Fwe,"buildRouteFolder");a(O3,"buildServer");a(P3,"ready")});var Hv={};Re(Hv,{handleApplication:()=>kwe,suppressHandleApplicationWarning:()=>Hwe});function kwe(e){let t=new Map,r=new Map;e.options.on("change",n=>{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,ka.join)(n.absolutePath,"index.html");(0,zf.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,ka.dirname)(n.urlPath),null),r.set((0,ka.join)((0,ka.dirname)(n.urlPath),"/"),n.absolutePath));break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,ka.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 o=t.get(n.pathname);if(!o){let d=e.options.get(["index"])??!0;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);if(d&&(o=r.get(n.pathname),o===null))return{status:301,headers:{Location:(0,ka.join)(n.pathname,"/")}}}if(!o){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(o=t.get(`${n.pathname}.${f}`),o)break}if(o)return{handlesHeaders:!0,body:(0,kv.default)(n,(0,zf.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(Gwe(c),!c)return{status:404,body:"File not found"};let l=(0,ka.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,zf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,kv.default)(n,(0,zf.realpathSync)(l))}},{runFirst:!0})}function Gwe(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 zf,ka,kv,Hwe,D3=ie(()=>{zf=require("node:fs"),ka=require("node:path"),kv=b(require("send"));a(kwe,"handleApplication");Hwe=!0;a(Gwe,"validateNotFoundOption")});var Gv={};Re(Gv,{start:()=>qwe});function qwe({override:e}){return{handleFile:a((t,r,n)=>{ib.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,v3.parse)(t))){if(process.env[s]!==void 0)if(ib.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)ib.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var v3,ib,M3=ie(()=>{v3=require("dotenv"),ib=b(ee());a(qwe,"start")});var Vv={};Re(Vv,{DataLoaderError:()=>Ds,DataLoaderResult:()=>Qf,EmptyFileError:()=>lb,FileParseError:()=>cb,InvalidPropertyTypeError:()=>ub,MissingRequiredPropertyError:()=>jE,RecordProcessingError:()=>zE,SystemDatabaseError:()=>db,UnsupportedFileExtensionError:()=>ab,computeRecordHash:()=>$v,handleApplication:()=>Kwe,loadDataFile:()=>q3,suppressHandleApplicationWarning:()=>Vwe});function $v(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,x3.createHash)("sha256").update(n).digest("hex")}function G3(e){return e.system&&e.system[qv]?e.system[qv]:ob||(ob=We({database:"system",table:qv,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),ob)}async function $we(e,t,r,n){try{let s=G3(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return ii.error?.(`Failed to get stored hash: ${s.message}`),null}}async function U3(e,t,r,n,s){try{let i=G3(s),o=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:o,hash:n})}catch(i){ii.error?.(`Failed to store hash: ${i.message}`)}}function Kwe(e){if((0,F3.getWorkerIndex)()!==0){ii.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(a(function(r){return r.entryType!=="file"||r.eventType==="unlink"?Promise.resolve():q3(r,yn,xe).then(n=>{ii.debug?.("Data loader processed file: %s: %s",(0,Ha.basename)(r.absolutePath),n.message)})},"handleDataLoaderEntry"))}async function q3({contents:e,absolutePath:t},r,n){let s=(0,Ha.extname)(t)||"unknown",i;try{if(s===".yaml"||s===".yml")i=(0,B3.parseDocument)(e.toString()).toJSON();else if(s===".json")i=JSON.parse(e.toString());else throw new ab(t,s)}catch(d){throw d instanceof Ds?d:new cb(t,d)}if(!i)throw new lb(t);let{database:o,table:c,records:l}=i;if(!c)throw new jE(t,"table");if(!l)throw new jE(t,"records");if(!Array.isArray(l))throw new ub(t,"records","array");let u=o?`${o}.${c}`:c;if(o?.toLowerCase()==="system")throw new db(o,c);try{let d;if(o&&n[o]&&n[o][c])ii.debug?.(`Using existing table ${u} from database tables`),d=n[o][c];else if(r&&r[c])ii.debug?.(`Using existing table ${u} from global tables`),d=r[c];else{ii.debug?.(`Table ${u} not found, creating new table`);let _=[];if(l.length>0){let R=l[0];Object.keys(R).map(S=>{let y={name:S,type:typeof R[S]};return S==="id"&&(y.isPrimaryKey=!0),y}).forEach(S=>{_.push(S)})}d=await We({database:o,table:c,attributes:_})}let f=l.length,m=0,p=0,h=0,E=100;for(let _=0;_<l.length;_+=E){let R=l.slice(_,_+E),S=[];for(let y of R)S.push(async()=>{try{let I=null,w=y.id;w!==void 0&&(I=await d.get(w));let M=$v(y);if(!I){m++;let Y=await d.put(y);return await U3(o,c,w,M,n),Y}let k=await $we(o,c,w,n);if(!k)return h++,Promise.resolve({inserted:0,updated:0});let X={};for(let Y of Object.keys(y))Y in I&&(X[Y]=I[Y]);return $v(X)!==k?(h++,Promise.resolve({inserted:0,updated:0})):M!==k?(p++,await d.patch(w,y),await U3(o,c,w,M,n),{updated:1}):(h++,Promise.resolve({inserted:0,updated:0}))}catch(I){if(I instanceof Ds)ii.error?.(`Record processing error: ${I.message}`);else{let w=new zE(u,I);ii.error?.(`Record processing error: ${w.message}`)}return Promise.resolve({inserted:0,updated:0,error:I.message})}});await Promise.all(S.map(y=>y()))}if(m>0||p>0){let _=`Loaded ${m} new and updated ${p} records in ${u}`;return h>0&&(_+=` (${h} records skipped)`),ii.info?.(_),new Qf(t,o,c,"success",m+p,_)}else if(h>0){let _=`All ${h} records in ${u} already up-to-date`;return ii.info?.(_),new Qf(t,o,c,"skipped",f,_)}else{let _=`No records to process in ${u}`;return ii.info?.(_),new Qf(t,o,c,"success",0,_)}}catch(d){throw d instanceof Ds?d:new zE(u,d)}}var Ha,x3,B3,F3,Ga,k3,H3,ii,qv,ob,Vwe,Ds,ab,cb,lb,jE,ub,db,zE,Qf,$3=ie(()=>{Ha=require("node:path"),x3=require("node:crypto"),B3=require("yaml");Oe();F3=b(at()),Ga=b(En()),k3=b(ge()),H3=b(ee()),ii=H3.default.forComponent("dataLoader"),qv="hdb_dataloader_hash";a($v,"computeRecordHash");a(G3,"getHashTrackingTable");a($we,"getStoredHash");a(U3,"storeHash");Vwe=!0;a(Kwe,"handleApplication");a(q3,"loadDataFile");Ds=class extends k3.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=Ga.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},ab=class extends Ds{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Ha.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},cb=class extends Ds{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Ha.basename)(t)}: ${r.message}`,Ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},lb=class extends Ds{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Ha.basename)(t)} is empty or invalid`,Ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},jE=class extends Ds{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Ha.basename)(t)} is missing required "${r}" property`,Ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},ub=class extends Ds{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Ha.basename)(t)} has invalid "${r}" property, expected ${n}`,Ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},db=class extends Ds{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ga.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},zE=class extends Ds{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ga.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Qf=class{static{a(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=o}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 Kv={};Re(Kv,{calculateRestHttpURL:()=>t6,hdbServer:()=>zwe,start:()=>zwe});async function zwe(e){try{Fi.default.debug("In Fastify server"+process.cwd()),Fi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Fi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=V3.default.isMaster,await Qwe();let t=e.securePort>0;Jf=Jwe(t,e.resources),await Jf.ready(),e||(e={}),e.usageType="operations-api";try{Ue.http(Jf.server,e),Jf.server.closeIdleConnections||await Jf.listen({port:0,host:"::"})}catch(r){throw Jf.close(),Fi.default.error(r),Fi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Fi.default.fatal(t),process.exit(1)}}async function Qwe(){return Fi.default.trace("Configuring HarperDB process."),X3.default.setSchemaDataToGlobal(),Ti()}function Jwe(e,t){Fi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=eNe(e),n=(0,K3.default)(r);n.server.headersTimeout=rNe(),n.setErrorHandler(Do.serverErrorHandler);let s=tNe();s&&n.register(Y3.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){d.sent||d.raw.headersSent||d.raw.writableEnded||n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(z3.default),n.register(W3.default,{brotliOptions:{params:{[fb.default.constants.BROTLI_PARAM_MODE]:fb.default.constants.BROTLI_MODE_TEXT,[fb.default.constants.BROTLI_PARAM_QUALITY]:2}}}),Mm(n),n.get("/health",()=>"HarperDB is running."),n.register(j3.default,{root:Q3.default.join(J3.PACKAGE_ROOT,"studio/web")});let i=oi.default.get(gm.LOCAL_STUDIO_ON);return!Z3.default.isEmpty(i)&&i.toString().toLowerCase()==="true"?n.get("/",(o,c)=>c.sendFile("index.html")):n.get("/",(o,c)=>c.sendFile("running.html")),n.get("/api/openapi/rest",{preValidation:[Do.authAndEnsureUserOnRequest]},Xwe(t)),n.post("/",{preValidation:[Do.reqBodyValidationHandler,Do.authHandler],config:{isOperation:!0}},Zwe),Fi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function Xwe(e){let t=oi.default.get(U.HTTP_PORT),r=oi.default.get(U.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?uT(e,t6(t,r,n)):(Fi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new e6.ServerError("Forbidden",403))}function t6(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return n.hostname.toLowerCase()==="localhost"||n.hostname.match(/^[\d.:]+$/)?t?(n.port=t,n.protocol="https:"):e&&(n.port=e,n.protocol="http:"):(n.port="443",n.protocol="https:"),n.toString()}function Zwe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,Do.handlePostRequest)(e,t)}function eNe(e){let t=oi.default.get(Xf.OPERATIONSAPI_NETWORK_TIMEOUT),r=oi.default.get(Xf.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Wwe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:oi.default.get(Xf.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function tNe(){let e=oi.default.get(Xf.OPERATIONSAPI_NETWORK_CORS),t=oi.default.get(Xf.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===jwe)&&(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 rNe(){return oi.default.get(Xf.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Ywe}var V3,fb,oi,Fi,K3,Y3,W3,j3,z3,Q3,J3,X3,Z3,Do,e6,Ywe,Wwe,jwe,Xf,Jf,r6=ie(()=>{V3=b(require("cluster")),fb=b(require("node:zlib")),oi=b(fe());$();Fi=b(ee()),K3=b(require("fastify")),Y3=b(require("@fastify/cors")),W3=b(require("@fastify/compress")),j3=b(require("@fastify/static")),z3=b(QC()),Q3=b(require("path")),J3=b(Lt()),X3=b(to()),Z3=b(de());gs();qr();Do=b(nb());jo();KC();e6=b(ge());oi.default.initSync();Ywe=6e4,Wwe=oi.default.get(U.OPERATIONSAPI_NETWORK_MAXREQUESTBODYSIZE)??1024*1024*1024,jwe="TRUE",{CONFIG_PARAMS:Xf}=Q;a(zwe,"operationsServer");a(Qwe,"setUp");a(Jwe,"buildServer");a(Xwe,"restOpenAPIHandler");a(t6,"calculateRestHttpURL");a(Zwe,"handler");a(eNe,"getServerOptions");a(tNe,"getCORSOpts");a(rNe,"getHeaderTimeoutConfig")});var Jv={};Re(Jv,{disableNATS:()=>sNe,publishToStream:()=>hb,setNATSReplicator:()=>Yv,setPublishToStream:()=>iNe,setSubscription:()=>Qv,start:()=>nNe});function nNe(){QE.default.get(U.CLUSTERING_ENABLED)&&aNe()}function sNe(e=!0){a6=e}function iNe(e,t){hb=e,Qv=t}function aNe(){if(a6||process.env._DISABLE_NATS)return;let e=dt(),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];Yv(s,r,i)}}Kl((r,n)=>{Yv(r.tableName,r.databaseName,r),n&&l6(r)}),!n6&&(n6=!0)}function Yv(e,t,r){if(t==="system"&&cNe.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 qt{static{a(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){l6(i)}static subscribe(){let i=new is;return Qv(t,e,i),i}static subscribeOnThisThread(i){return i<(QE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??oNe)}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 mb(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=c6;return i}a(n,"getNATSTransaction")}function l6(e){let t=QE.default.get(U.CLUSTERING_NODENAME);hb(`${jv.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,zv.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 s6,jv,zv,i6,o6,QE,pb,a6,hb,Qv,oNe,c6,n6,cNe,mb,Wv,u6=ie(()=>{Oe();zi();s6=b(vr()),jv=b(Er()),zv=b(aa());qu();i6=b(RO()),o6=b(Ms()),QE=b(fe());$();pb=b(ee());a(nNe,"start");a(sNe,"disableNATS");hb=s6.publishToStream,Qv=i6.setSubscription;a(iNe,"setPublishToStream");oNe=2;a(aNe,"assignReplicationSource");cNe=["hdb_job","hdb_raw_analytics","hdb_info"];a(Yv,"setNATSReplicator");a(l6,"publishSchema");mb=class{constructor(t,r){this.transaction=t;this.options=r}static{a(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=QE.default.get(U.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let o=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(pb.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=o)),l.table===f&&l.operation===m?(o.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(hb(`${jv.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,zv.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw pb.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},Wv=class extends mb{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,o6.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};c6=new Wv});var d6={};Re(d6,{SERVERS:()=>Zf,portServer:()=>Xv,setPortServerMap:()=>Eb});function Eb(e,t){let r=Xv.get(e)??[];Xv.set(e,[...r,t])}var Zf,Xv,Zv=ie(()=>{Zf={},Xv=new Map;a(Eb,"setPortServerMap")});var Rb={};Re(Rb,{deliverSocket:()=>b6,getHttpOptions:()=>fNe,getRequestId:()=>N6,handleApplication:()=>dNe,httpServer:()=>aM,logRequest:()=>ZE,proxyRequest:()=>mNe,registerServer:()=>iM,suppressHandleApplicationWarning:()=>uNe});function dNe(e){e_=e.options.getAll(),e.options.on("change",t=>{e_=e.options.getAll()})}function fNe(){return e_}function b6(e,t,r){let n=e?.read?e:new E6.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Zf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Zf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(qa.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function mNe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=f6.get(s),r){case"connection":i=b6(void 0,t),f6.set(s,i),i.write=(c,l,u)=>(gb.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(gb.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),gb.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function iM(e,t,r=!0){t||(t=Fr.default.get(U.HTTP_PORT));let n=Zf[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",h6),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Zf[t]=e;e.on("unhandled",h6)}function oM(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Fr.default.get(U.HTTP_PORT)!=null&&t.push({port:Fr.default.get(U.HTTP_PORT),secure:Fr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Fr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Fr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Fr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,_6.resolvePath)(Fr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function aM(e,t){let r=[];for(let{port:n,secure:s}of oM(t))r.push(A6(n,s,t)),typeof e=="function"?nM[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,iM(e,n,!1)),Sb[n]=Tb(nM,n);return r}function A6(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(Eb(e,{protocol_name:t?"HTTPS":"HTTP",name:bb()}),!_b[e]){let o=i?"operationsApi_network":"http",c=Fr.default.get(o+"_keepAliveTimeout"),l=Fr.default.get(o+"_timeout"),u=Fr.default.get(o+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Fr.default.get(U.HTTP_MAXHEADERSIZE)},f=Fr.default.get(o+"_mtls"),m=Fr.default.get(o+"_mtls_required"),p;if(t){let R=Fr.default.get("tls");p=Fr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,g6.getTicketKeys)(),SNICallback:(0,S6.createTLSSelector)(s??"server",f),ciphers:R.ciphers??R[0]?.ciphers})}let h=a(async(R,S)=>{let y=performance.now(),I=0;try{let M=new yc(R,S);i&&(M.isOperationsServer=!0),e_.logging?.id&&(M.requestId=I=N6());let k=await Sb[e](M);if(!k){if(M._nodeResponse.statusCode){ZE(R,M._nodeResponse.statusCode,I,performance.now()-y);return}k=I6(M)}if(k.headers?.set||(k.headers=new $s(k.headers)),await kD()?k.headers.set("Server","HarperDB"):k.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),k.status===-1){for(let Se of k.headers||[])S.setHeader(Se[0],Se[1]);return R.baseRequest=M,S.baseResponse=k,_b[e].emit("unhandled",R,S)}let X=k.status||200;S.statusCode=X;let J=performance.now(),Y=J-y,H=k.body,ae,le=!1;if(!k.handlesHeaders){let Se=k.headers||new $s;H?H.length>=0?(typeof H=="string"?Se.set("Content-Length",Buffer.byteLength(H)):Se.set("Content-Length",H.length),ae=!0):H instanceof Us&&(H.size?Se.set("Content-Length",H.size):H.on&&(le=!0,H.on("size",et=>{S.headersSent||S.setHeader("Content-Length",et)})),H=H.stream()):(M.method!=="HEAD"&&Se.set("Content-Length","0"),ae=!0);let Me=`hdb;dur=${Y.toFixed(2)}`;if(k.wasCacheMiss&&(Me+=", miss"),Yp(Se,"Server-Timing",Me,!0),!S.headersSent)if(le){if(Se)if(Se[Symbol.iterator])for(let[et,$e]of Se)S.setHeader(et,$e);else for(let et in Se)S.setHeader(et,Se[et])}else S.writeHead(X,Se&&(Se[Symbol.iterator]?Array.from(Se):Se));ae&&S.end(H)}let oe=M.handlerPath,Ee=M.method;if(qe(Y,"duration",oe,Ee,k.wasCacheMiss==null?void 0:k.wasCacheMiss?"cache-miss":"cache-hit"),tn(X<400,"success",oe,Ee),tn(1,"response_"+X,oe,Ee),ZE(R,X,I,Y),!ae)if(H instanceof ReadableStream&&(H=rM.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=rM.Readable.from(H)),H?.pipe){H.pipe(S),H.destroy&&S.on("close",()=>{H.destroy()});let Se=0;H.on("data",Me=>{Se+=Me.length}),H.on("end",()=>{qe(performance.now()-J,"transfer",oe,Ee),qe(Se,"bytes-sent",oe,Ee)})}else H?.then?H.then(Se=>{S.end(Se)},w):S.end(H)}catch(M){w(M)}function w(M){let k=M.headers,X=M.statusCode||500;try{S.writeHead(X,k&&(k[Symbol.iterator]?Array.from(k):k))}catch{}S.end(lNe(M)),ZE(R,X,I,performance.now()-y),M.statusCode?M.statusCode===500?qa.default.warn(M):qa.default.info(M):qa.default.error(M)}a(w,"onError")},"requestHandler"),E=yS(h,(R,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},Fr.default.get(o+"_requestQueueLimit")),_=_b[e]=(t?p?T6.createSecureServer:y6.createServer:yb.createServer)(d,(R,S)=>{let y=R.method;y==="GET"||y==="OPTIONS"||y==="HEAD"?h(R,S):E(R,S)});c>=0&&(_.keepAliveTimeout=c),u>=0&&(_.headersTimeout=u),t&&(_.ports||(_.ports=[]),_.ports.push(e),d.SNICallback.initialize(_),f&&(_.mtlsConfig=f),_.on("secureConnection",R=>{R._parent.startTime&&qe(performance.now()-R._parent.startTime,"tls-handshake",e),qe(R.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),iM(_,e)}return _b[e]}function Tb(e,t){let r=I6;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"nextCallback")}}return r}function I6(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new $s}}function pNe(e,t){aM(e,{requestOnly:!0,...t})}function w6(e,t){for(let{port:r}of oM(t))m6[t?.runFirst?"unshift":"push"]({listener:e,port:r}),sM[r]=Tb(m6,r)}function hNe(e,t){let r=[];for(let{port:n,secure:s}of oM(t)){Eb(n,{protocol_name:s?"WSS":"WS",name:bb()});let i=A6(n,s,t);JE[n]||(JE[n]=new R6.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),JE[n].on("connection",(o,c)=>{try{let l=new yc(c);l.isWebSocket=!0;let u=Sb[n](l);qa.default.debug("Received WS connection, calling listeners",eM),p6[n](o,l,u)}catch(l){qa.default.warn("Error in handling WS connection",l)}}),w6((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):JE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),JE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{sM[n]&&sM[n](o,c,l)})),r.push(i),eM[t?.runFirst?"unshift":"push"]({listener:e,port:n}),p6[n]=Tb(eM,n),Sb[n]=Tb(nM,n)}return r}function h6(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
|
|
138
|
+
`);throw n[1]?fv(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,mv.BAD_REQUEST):fv(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",mv.BAD_REQUEST)}return t}a(X4,"convertSQLToAST");function Z4(e,t,r){try{let n=sIe;if(!e.bypass_auth&&!t.permissions_checked){let i=J4(e,t);if(i&&i.length>0)return r(tIe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case kE.VALID_SQL_OPS_ENUM.SELECT:n=WAe,s=t.ast.statements[0];break;case kE.VALID_SQL_OPS_ENUM.INSERT:n=iIe;break;case kE.VALID_SQL_OPS_ENUM.UPDATE:n=zAe;break;case kE.VALID_SQL_OPS_ENUM.DELETE:n=QAe;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(Z4,"processAST");function sIe(e,t){zR.info(e),t("unknown sql statement")}a(sIe,"nullFunction");function iIe({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(o=>o.columnid);try{s.records=oIe(i,e.values)}catch(o){return r(o)}YAe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){zR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(iIe,"convertInsert");function oIe(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]]=Wc.compile(`SELECT ${s.toString()} AS [${kE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw zR.error(r),new Error(rIe)}}a(oIe,"createDataObjects")});var _v=x((_He,cJ)=>{"use strict";var Ev=Yn(),aIe=lO(),{AsyncParser:cIe}=require("json2csv"),QR=require("stream"),Ls=de(),hv=require("fs-extra"),lIe=require("path"),ri=ee(),{promisify:nJ}=require("util"),GE=de(),{handleHDBError:Ir,hdbErrors:uIe}=ge(),{HDB_ERROR_MSGS:rs,HTTP_STATUS_CODES:wr}=uIe,{streamAsJSON:dIe}=(PA(),L(gx)),{Upload:fIe}=require("@aws-sdk/lib-storage"),{toCsvStream:mIe}=(jo(),L(Nx)),tJ=["search_by_value","search_by_hash","sql","search_by_conditions"],rJ=["json","csv"],sJ="json",iJ="csv",pIe="Successfully exported JSON locally.",hIe="Successfully exported CSV locally.",EIe=1e3,_Ie=Ev.searchByHash,gIe=Ev.searchByValue,SIe=nJ(QR.finished);cJ.exports={export_to_s3:bIe,export_local:TIe};async function TIe(e){ri.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=oJ(e);if(!Ls.isEmpty(t))throw ri.error(t),Ir(new Error,t,wr.BAD_REQUEST,void 0,void 0,!0);if(Ls.isEmpty(e.path))throw ri.error(rs.MISSING_VALUE("path")),Ir(new Error,rs.MISSING_VALUE("path"),wr.BAD_REQUEST,void 0,void 0,!0);let r=(Ls.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(lIe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Ls.buildFolderPath(e.path,r);await yIe(e.path);let s=await aJ(e);return await RIe(n,e.format,s)}a(TIe,"export_local");async function yIe(e){if(ri.trace("in confirmPath"),Ls.isEmptyOrZeroLength(e))throw Ir(new Error,`Invalid path: ${e}`,wr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await hv.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,ri.error(n),Ir(new Error,n,wr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw ri.error(r),Ir(new Error,r,wr.BAD_REQUEST,void 0,void 0,!0)}return!0}a(yIe,"confirmPath");async function RIe(e,t,r){if(ri.trace("in saveToLocal"),GE.isEmptyOrZeroLength(e))throw Ir(new Error,rs.INVALID_VALUE("file_path"),wr.BAD_REQUEST,void 0,void 0,!0);if(GE.isEmptyOrZeroLength(t))throw Ir(new Error,rs.INVALID_VALUE("Source format"),wr.BAD_REQUEST,void 0,void 0,!0);if(GE.isEmpty(r))throw Ir(new Error,rs.NOT_FOUND("Data"),wr.BAD_REQUEST,void 0,void 0,!0);if(t===sJ){let n=hv.createWriteStream(e);return dIe(r).pipe(n),await SIe(n),{message:pIe,path:e}}else if(t===iJ){let n=hv.createWriteStream(e),s=QR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new cIe(i,c).fromInput(s).toOutput(n).promise(!1),{message:hIe,path:e}}throw Ir(new Error,rs.INVALID_VALUE("format"),wr.BAD_REQUEST)}a(RIe,"saveToLocal");async function bIe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Ir(new Error,rs.MISSING_VALUE("S3 object"),wr.BAD_REQUEST);if(Ls.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Ir(new Error,rs.MISSING_VALUE("aws_access_key_id"),wr.BAD_REQUEST);if(Ls.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Ir(new Error,rs.MISSING_VALUE("aws_secret_access_key"),wr.BAD_REQUEST);if(Ls.isEmptyOrZeroLength(e.s3.bucket))throw Ir(new Error,rs.MISSING_VALUE("bucket"),wr.BAD_REQUEST);if(Ls.isEmptyOrZeroLength(e.s3.key))throw Ir(new Error,rs.MISSING_VALUE("key"),wr.BAD_REQUEST);if(Ls.isEmptyOrZeroLength(e.s3.region))throw Ir(new Error,rs.MISSING_VALUE("region"),wr.BAD_REQUEST);let t=oJ(e);if(!Ls.isEmpty(t))throw Ir(new Error,t,wr.BAD_REQUEST);ri.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await aJ(e)}catch(c){throw ri.error(c),c}let n=await aIe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),s,i=new QR.PassThrough;if(e.format===iJ){s=e.s3.key+".csv";let c=mIe(r,r.getColumns?.());c.on("error",l=>{throw l}),c.pipe(i)}else if(e.format===sJ){s=e.s3.key+".json";let c=new QR.Readable;c.pipe(i),c.on("error",d=>{throw d}),c.push("[");let l=r.length,u="";for(let[d,f]of r.entries()){let m=d===l-1?JSON.stringify(f):JSON.stringify(f)+",";u+=m,d!==0&&d%EIe===0&&(c.push(u),u="")}u.length!==0&&c.push(u),c.push("]"),c.push(null)}else throw Ir(new Error,rs.INVALID_VALUE("format"),wr.BAD_REQUEST);return new fIe({client:n,params:{Bucket:e.s3.bucket,Key:s,Body:i}}).done()}a(bIe,"export_to_s3");function oJ(e){if(ri.trace("in exportCoreValidation"),Ls.isEmpty(e.format))return"format missing";if(rJ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${rJ.join(", ")}`;let t=e.search_operation.operation;if(Ls.isEmpty(t))return"search_operation.operation missing";if(tJ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${tJ.join(", ")}`}a(oJ,"exportCoreValidation");async function aJ(e){ri.trace("in getRecords");let t,r;if(GE.isEmpty(e.search_operation)||GE.isEmptyOrZeroLength(e.search_operation.operation))throw Ir(new Error,rs.INVALID_VALUE("Search operation"),wr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=gIe;break;case"search_by_hash":t=_Ie;break;case"search_by_conditions":t=Ev.searchByConditions;break;case"sql":{let n=HE();t=nJ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ri.error(r),Ir(new Error,r,wr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(aJ,"getRecords")});var uJ=x((SHe,lJ)=>{"use strict";var gv=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};lJ.exports=gv});var mJ=x((yHe,fJ)=>{"use strict";var AIe=($(),L(Q)),dJ=require("moment"),IIe=require("uuid").v4,Sv=class{static{a(this,"JobObject")}constructor(){this.id=IIe(),this.type=void 0,this.start_datetime=dJ().valueOf(),this.created_datetime=dJ().valueOf(),this.end_datetime=void 0,this.status=AIe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};fJ.exports=Sv});var yv=x((bHe,yJ)=>{"use strict";var wIe=require("uuid").v4,gJ=ps(),SJ=Yn(),NIe=Xi(),CIe=gp(),OIe=uJ(),Ht=($(),L(Q)),PIe=mJ(),LIe=hT(),xi=ee(),DIe=wm(),Kf=de(),{promisify:vIe}=require("util"),Pu=require("moment"),JR=aO(),pJ=$w(),{deleteTransactionLogsBeforeValidator:MIe}=AD(),{handleHDBError:hJ,hdbErrors:UIe,ClientError:xIe}=ge(),{HTTP_STATUS_CODES:EJ}=UIe,_J=SJ.searchByValue,BIe=SJ.searchByHash,FIe=gJ.insert,kIe=gJ.update,Tv;yJ.exports={addJob:qIe,updateJob:VIe,handleGetJob:HIe,handleGetJobsByStartDate:GIe,getJobById:TJ};async function HIe(e){if(e.id===void 0)throw new xIe("'id' is required");let t=await TJ(e.id);return Kf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(HIe,"handleGetJob");async function GIe(e){try{let t=await $Ie(e);if(xi.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Pu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Pu(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw xi.error(r),new Error(r)}}a(GIe,"handleGetJobsByStartDate");async function qIe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Kf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return xi.info(d),t.error=d,t}if(!Ht.JOB_TYPE_ENUM[e.operation])return xi.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ht.OPERATIONS_ENUM.CSV_FILE_LOAD:n=JR.fileObject(e);break;case Ht.OPERATIONS_ENUM.CSV_URL_LOAD:n=JR.urlObject(e);break;case Ht.OPERATIONS_ENUM.CSV_DATA_LOAD:n=JR.dataObject(e);break;case Ht.OPERATIONS_ENUM.IMPORT_FROM_S3:n=JR.s3FileObject(e);break;case Ht.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ht.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=pJ(e,"date");break;case Ht.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=pJ(e,"timestamp");break;case Ht.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=MIe(e);break;case Ht.OPERATIONS_ENUM.RESTART_SERVICE:if(Ht.HDB_PROCESS_SERVICES[e.service]===void 0)throw hJ(new Error,"Invalid service",EJ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw hJ(n,n.message,EJ.BAD_REQUEST,void 0,void 0,!0);let s=new PIe;s.type=e.operation===Ht.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ht.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new NIe(Ht.SYSTEM_SCHEMA_NAME,Ht.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await _J(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return xi.error(f),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=wIe();try{o=await _J(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return xi.error(f),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return xi.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new DIe(Ht.SYSTEM_SCHEMA_NAME,Ht.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await FIe(l)}catch(d){return xi.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,xi.trace(d)}return t}a(qIe,"addJob");async function $Ie(e){let t=Pu(e.from_date,Pu.ISO_8601),r=Pu(e.to_date,Pu.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new OIe(n,e.hdb_user);try{if(!Tv){let i=HE();Tv=vIe(i.evaluateSQL)}return await Tv(s)}catch(i){throw xi.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.")}}a($Ie,"getJobsInDateRange");async function TJ(e){if(Kf.isEmptyOrZeroLength(e))return Kf.errorizeMessage("Invalid job ID specified.");let t=new CIe(Ht.SYSTEM_SCHEMA_NAME,Ht.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await BIe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return xi.error(n),Kf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(TJ,"getJobById");async function VIe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Kf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ht.JOB_STATUS_ENUM.COMPLETE||e.status===Ht.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Pu().valueOf());let t=new LIe(Ht.SYSTEM_SCHEMA_NAME,Ht.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await kIe(t),r}a(VIe,"updateJob")});var OJ=x((IHe,CJ)=>{"use strict";var RJ=de(),Br=($(),L(Q)),KIe=require("moment"),XR=av(),qE=ee(),bJ=yv(),AJ=_v(),IJ=Bl(),wJ=at(),YIe=xR(),WIe=kf(),{parentPort:jIe,isMainThread:NJ}=require("worker_threads"),{onMessageByType:zIe}=at(),Rv=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function QIe(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(RJ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(RJ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Br.JOB_TYPE_ENUM.csv_file_load:await Po(e,XR.csvFileLoad);break;case Br.JOB_TYPE_ENUM.csv_url_load:await Po(e,XR.csvURLLoad);break;case Br.JOB_TYPE_ENUM.csv_data_load:await Po(e,XR.csvDataLoad);break;case Br.JOB_TYPE_ENUM.import_from_s3:await Po(e,XR.importFromS3);break;case Br.JOB_TYPE_ENUM.empty_trash:break;case Br.JOB_TYPE_ENUM.export_local:await Po(e,AJ.export_local);break;case Br.JOB_TYPE_ENUM.export_to_s3:await Po(e,AJ.export_to_s3);break;case Br.JOB_TYPE_ENUM.delete_files_before:case Br.JOB_TYPE_ENUM.delete_records_before:await Po(e,IJ.deleteFilesBefore);break;case Br.JOB_TYPE_ENUM.delete_audit_logs_before:await Po(e,IJ.deleteAuditLogsBefore);break;case Br.JOB_TYPE_ENUM.delete_transaction_logs_before:await Po(e,YIe.deleteTransactionLogsBefore);break;case Br.JOB_TYPE_ENUM.restart_service:return await Po(e,WIe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(QIe,"parseMessage");async function Po(e,t){try{e.job.status=Br.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=KIe().valueOf(),await bJ.updateJob(e.job),await JIe(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):qE.error(`There was an error running ${t.name} job with id ${e.job.id}`),qE.error(n),e.job.message=n,e.job.status=Br.JOB_STATUS_ENUM.ERROR;try{await bJ.updateJob(e.job)}catch(s){throw qE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Po,"runJob");async function JIe(e){qE.trace("launching job thread:",e),NJ?wJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Br.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):jIe.postMessage({type:Br.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(JIe,"launchJobThread");NJ&&zIe(Br.ITC_EVENT_TYPES.START_JOB,async e=>{try{wJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Br.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(t){qE.error(t)}});CJ.exports={parseMessage:QIe,RunnerMessage:Rv}});var LJ=x((NHe,PJ)=>{"use strict";var bv=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};PJ.exports=bv});var vJ=x((OHe,DJ)=>{"use strict";var XIe=de(),Av=fe(),jc=($(),L(Q)),ZIe=Er(),ewe=vr(),Lo=ee(),twe=LJ(),rwe=aa();Av.initSync();DJ.exports={postOperationHandler:swe,sendOperationTransaction:$E};async function $E(e,t,r,n){if(e.schema===jc.SYSTEM_SCHEMA_NAME)return;let s=nwe(e,t,r);s&&(Lo.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await ewe.publishToStream(`${ZIe.SUBJECT_PREFIXES.TXN}.${e.schema}`,rwe.createNatsTableStreamName(e.schema,e.table),n,s))}a($E,"sendOperationTransaction");function nwe(e,t,r){if(XIe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===jc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(nwe,"convertCRUDOperationToTransaction");async function swe(e,t,r){if(!Av.get(jc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Lo.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=Av.get(jc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new twe(t.txn_time,n,s);switch(e.operation){case jc.OPERATIONS_ENUM.INSERT:try{await $E(e,t.inserted_hashes,i,r)}catch(o){Lo.error("There was an error calling clustering postOperationHandler for insert."),Lo.error(o)}break;case jc.OPERATIONS_ENUM.DELETE:try{await $E(e,t.deleted_hashes,i,r)}catch(o){Lo.error("There was an error calling clustering postOperationHandler for delete."),Lo.error(o)}break;case jc.OPERATIONS_ENUM.UPDATE:try{await $E(e,t.update_hashes,i,r)}catch(o){Lo.error("There was an error calling clustering postOperationHandler for update."),Lo.error(o)}break;case jc.OPERATIONS_ENUM.UPSERT:try{await $E(e,t.upserted_hashes,i,r)}catch(o){Lo.error("There was an error calling clustering postOperationHandler for upsert."),Lo.error(o)}break;default:break}return t}a(swe,"postOperationHandler")});var te,MJ=ie(()=>{te=class{static{a(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var RD={};Re(RD,{chooseOperation:()=>e3,executeJob:()=>ni,getOperationFunction:()=>t3,operation:()=>vv,processLocalTransaction:()=>ZJ});function awe(e){if(!Iv){let t=HE();Iv=Dv.promisify(t.evaluateSQL)}return Iv(e)}async function ZJ(e,t){try{if(e.body.operation!=="read_log"&&(WE.default.log_level===Em.INFO||WE.default.log_level===Em.DEBUG||WE.default.log_level===Em.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;vn.info(c)}}catch(n){vn.error(n)}let r=await JJ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return cwe[e.body.operation]&&YJ.default.setSchemaDataToGlobal(n=>{n&&vn.error(n)}),r}function e3(e){let t;try{t=t3(e)}catch(s){throw vn.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=HE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,o=s.convertSQLToAST(i);if(e.parsed_sql_object=o,!e.bypass_auth){let c=s.checkASTPermissions(e,o);if(c)throw vn.error(`${UJ.FORBIDDEN} from operation ${e.operation}`),vn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,si.handleHDBError)(new Error,c,si.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==j.CREATE_AUTHENTICATION_TOKENS&&e.operation!==j.LOGIN&&e.operation!==j.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 o=KJ.default.verifyPerms(i,s);if(o)throw vn.error(`${UJ.FORBIDDEN} from operation ${e.operation}`),vn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,si.handleHDBError)(new Error,o,si.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,si.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function t3(e){if(vn.trace(`getOperationFunction with operation: ${e.operation}`),xJ.has(e.operation))return xJ.get(e.operation);throw(0,si.handleHDBError)(new Error,si.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),si.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function vv(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=e3(e);return ZJ({body:e},n)}async function lwe(e){vn.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[fA]=!0;let o;switch(i.operation){case j.INSERT:o=await Du.default.insert(i);break;case j.UPDATE:o=await Du.default.update(i);break;case j.UPSERT:o=await Du.default.upsert(i);break;case j.DELETE:o=await Wf.default.deleteRecord(i);break;default:vn.warn("invalid operation in catchup");break}await iwe.postOperationHandler(i,o,e)}catch(o){vn.info("Invalid operation in transaction"),vn.error(o)}}async function ni(e){(0,QJ.transformReq)(e);let t,r;try{if(r=await eb.default.addJob(e),r){t=r.createdJob,vn.info("addJob result",r);let n=new Ov.default.RunnerMessage(t,e);return{message:await Ov.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 vn.error(i),(0,si.handleHDBError)(n,i)}}function uwe(){let e=new Map;return e.set(j.INSERT,new te(Du.default.insert)),e.set(j.UPDATE,new te(Du.default.update)),e.set(j.UPSERT,new te(Du.default.upsert)),e.set(j.SEARCH_BY_CONDITIONS,new te(Yf.default.searchByConditions)),e.set(j.SEARCH_BY_HASH,new te(Yf.default.searchByHash)),e.set(j.SEARCH_BY_ID,new te(Yf.default.searchByHash)),e.set(j.SEARCH_BY_VALUE,new te(Yf.default.searchByValue)),e.set(j.SEARCH,new te(owe)),e.set(j.SQL,new te(awe)),e.set(j.CSV_DATA_LOAD,new te(ni,VE.default.csvDataLoad)),e.set(j.CSV_FILE_LOAD,new te(ni,VE.default.csvFileLoad)),e.set(j.CSV_URL_LOAD,new te(ni,VE.default.csvURLLoad)),e.set(j.IMPORT_FROM_S3,new te(ni,VE.default.importFromS3)),e.set(j.CREATE_SCHEMA,new te(Bi.default.createSchema)),e.set(j.CREATE_DATABASE,new te(Bi.default.createSchema)),e.set(j.CREATE_TABLE,new te(Bi.default.createTable)),e.set(j.CREATE_ATTRIBUTE,new te(Bi.default.createAttribute)),e.set(j.DROP_SCHEMA,new te(Bi.default.dropSchema)),e.set(j.DROP_DATABASE,new te(Bi.default.dropSchema)),e.set(j.DROP_TABLE,new te(Bi.default.dropTable)),e.set(j.DROP_ATTRIBUTE,new te(Bi.default.dropAttribute)),e.set(j.DESCRIBE_SCHEMA,new te(KE.default.describeSchema)),e.set(j.DESCRIBE_DATABASE,new te(KE.default.describeSchema)),e.set(j.DESCRIBE_TABLE,new te(KE.default.describeTable)),e.set(j.DESCRIBE_ALL,new te(KE.default.describeAll)),e.set(j.DELETE,new te(Wf.default.deleteRecord)),e.set(j.ADD_USER,new te(vN)),e.set(j.ALTER_USER,new te(MN)),e.set(j.DROP_USER,new te(UN)),e.set(j.LIST_USERS,new te(BN)),e.set(j.LIST_ROLES,new te(YE.default.listRoles)),e.set(j.ADD_ROLE,new te(YE.default.addRole)),e.set(j.ALTER_ROLE,new te(YE.default.alterRole)),e.set(j.DROP_ROLE,new te(YE.default.dropRole)),e.set(j.USER_INFO,new te(xN)),e.set(j.READ_LOG,new te(FJ.default)),e.set(j.ADD_NODE,new te(kJ.default)),e.set(j.UPDATE_NODE,new te(wv.default)),e.set(j.SET_NODE_REPLICATION,new te(wv.default)),e.set(j.REMOVE_NODE,new te(HJ.default)),e.set(j.CONFIGURE_CLUSTER,new te(GJ.default)),e.set(j.PURGE_STREAM,new te(qJ.default)),e.set(j.SET_CONFIGURATION,new te(Pv.default.setConfiguration)),e.set(j.CLUSTER_STATUS,new te($J.default.clusterStatus)),e.set(j.CLUSTER_NETWORK,new te(VJ.default)),e.set(j.CLUSTER_SET_ROUTES,new te(ZR.default.setRoutes)),e.set(j.CLUSTER_GET_ROUTES,new te(ZR.default.getRoutes)),e.set(j.CLUSTER_DELETE_ROUTES,new te(ZR.default.deleteRoutes)),e.set(j.EXPORT_TO_S3,new te(ni,Nv.default.export_to_s3)),e.set(j.CREATE_CSR,new te(Lu.default.createCsr)),e.set(j.SIGN_CERTIFICATE,new te(Lu.default.signCertificate)),e.set(j.LIST_CERTIFICATES,new te(Lu.default.listCertificates)),e.set(j.ADD_CERTIFICATES,new te(Lu.default.addCertificate)),e.set(j.REMOVE_CERTIFICATE,new te(Lu.default.removeCertificate)),e.set(j.GET_KEY,new te(Lu.default.getKey)),e.set(j.ADD_NODE_BACK,new te(ZP)),e.set(j.REMOVE_NODE_BACK,new te(eL)),e.set(j.DELETE_FILES_BEFORE,new te(ni,Wf.default.deleteFilesBefore)),e.set(j.DELETE_RECORDS_BEFORE,new te(ni,Wf.default.deleteFilesBefore)),e.set(j.EXPORT_LOCAL,new te(ni,Nv.default.export_local)),e.set(j.SEARCH_JOBS_BY_START_DATE,new te(eb.default.handleGetJobsByStartDate)),e.set(j.GET_JOB,new te(eb.default.handleGetJob)),e.set(j.GET_REGISTRATION_INFO,new te(GD)),e.set(j.GET_FINGERPRINT,new te(qD)),e.set(j.SET_LICENSE,new te($D)),e.set(j.RESTART,new te(Cv.default.restart)),e.set(j.RESTART_SERVICE,new te(ni,Cv.default.restartService)),e.set(j.CATCHUP,new te(lwe)),e.set(j.SYSTEM_INFORMATION,new te(WJ.default.systemInformation)),e.set(j.DELETE_AUDIT_LOGS_BEFORE,new te(ni,Wf.default.deleteAuditLogsBefore)),e.set(j.READ_AUDIT_LOG,new te(BJ.default)),e.set(j.CREATE_AUTHENTICATION_TOKENS,new te(ZC)),e.set(j.REFRESH_OPERATION_TOKEN,new te(eO)),e.set(j.LOGIN,new te(_D)),e.set(j.LOGOUT,new te(gD)),e.set(j.GET_CONFIGURATION,new te(Pv.default.getConfiguration)),e.set(j.CUSTOM_FUNCTIONS_STATUS,new te(Ct.default.customFunctionsStatus)),e.set(j.GET_CUSTOM_FUNCTIONS,new te(Ct.default.getCustomFunctions)),e.set(j.GET_COMPONENT_FILE,new te(Ct.default.getComponentFile)),e.set(j.GET_COMPONENTS,new te(Ct.default.getComponents)),e.set(j.SET_COMPONENT_FILE,new te(Ct.default.setComponentFile)),e.set(j.DROP_COMPONENT,new te(Ct.default.dropComponent)),e.set(j.GET_CUSTOM_FUNCTION,new te(Ct.default.getCustomFunction)),e.set(j.SET_CUSTOM_FUNCTION,new te(Ct.default.setCustomFunction)),e.set(j.DROP_CUSTOM_FUNCTION,new te(Ct.default.dropCustomFunction)),e.set(j.ADD_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.addComponent)),e.set(j.ADD_COMPONENT,new te(Ct.default.addComponent)),e.set(j.DROP_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.dropCustomFunctionProject)),e.set(j.PACKAGE_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.packageComponent)),e.set(j.PACKAGE_COMPONENT,new te(Ct.default.packageComponent)),e.set(j.DEPLOY_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.deployComponent)),e.set(j.DEPLOY_COMPONENT,new te(Ct.default.deployComponent)),e.set(j.READ_TRANSACTION_LOG,new te(Lv.default.readTransactionLog)),e.set(j.DELETE_TRANSACTION_LOGS_BEFORE,new te(ni,Lv.default.deleteTransactionLogsBefore)),e.set(j.INSTALL_NODE_MODULES,new te(jJ.default.installModules)),e.set(j.GET_BACKUP,new te(Bi.default.getBackup)),e.set(j.CLEANUP_ORPHAN_BLOBS,new te(Bi.default.cleanupOrphanBlobs)),e.set(j.ADD_SSH_KEY,new te(Ct.default.addSSHKey)),e.set(j.GET_SSH_KEY,new te(Ct.default.getSSHKey)),e.set(j.UPDATE_SSH_KEY,new te(Ct.default.updateSSHKey)),e.set(j.DELETE_SSH_KEY,new te(Ct.default.deleteSSHKey)),e.set(j.LIST_SSH_KEYS,new te(Ct.default.listSSHKeys)),e.set(j.SET_SSH_KNOWN_HOSTS,new te(Ct.default.setSSHKnownHosts)),e.set(j.GET_SSH_KNOWN_HOSTS,new te(Ct.default.getSSHKnownHosts)),e.set(j.GET_ANALYTICS,new te(ND)),e.set(j.LIST_METRICS,new te(CD)),e.set(j.DESCRIBE_METRIC,new te(OD)),e.set(j.GET_STATUS,new te(gC)),e.set(j.SET_STATUS,new te(SC)),e.set(j.CLEAR_STATUS,new te(_C)),e.set(j.INSTALL_USAGE_LICENSE,new te(xD)),e.set(j.GET_USAGE_LICENSES,new te(HD)),e}var Yf,VE,Bi,KE,Wf,BJ,YE,Ct,WE,FJ,kJ,wv,HJ,GJ,qJ,$J,VJ,ZR,Nv,KJ,eb,si,Cv,Dv,Du,YJ,WJ,Ov,Pv,Lv,jJ,zJ,QJ,Lu,JJ,XJ,UJ,vn,iwe,owe,Iv,cwe,xJ,bD=ie(()=>{Yf=b(Yn()),VE=b(av()),Bi=b(Ny()),KE=b(Qd()),Wf=b(Bl()),BJ=b(wP());gs();YE=b(hh()),Ct=b(yD()),WE=b(ee()),FJ=b(DP()),kJ=b(ky()),wv=b(iL()),HJ=b(Gy()),GJ=b(cL()),qJ=b(lL()),$J=b(fL()),VJ=b(pL()),ZR=b(Yy()),Nv=b(_v()),KJ=b(KR()),eb=b(yv());$();si=b(ge()),Cv=b(kf()),Dv=b(require("util")),Du=b(ps()),YJ=b(to()),WJ=b(Zh()),Ov=b(OJ());Wd();AR();Pv=b(wt()),Lv=b(xR()),jJ=b(wD()),zJ=b(di()),QJ=b(de());qr();Lu=b(As());yf();LD();JJ=b(cO()),XJ=b(vJ());mh();LE();KD();MJ();({HTTP_STATUS_CODES:UJ}=si.hdbErrors),vn=WE.default.loggerWithTag("operation"),{transactToClusteringUtils:iwe}=XJ.default,owe=Dv.promisify(Yf.default.search);a(awe,"evaluateSQL");cwe={[j.CREATE_ATTRIBUTE]:!0,[j.CREATE_TABLE]:!0,[j.CREATE_SCHEMA]:!0,[j.DROP_ATTRIBUTE]:!0,[j.DROP_TABLE]:!0,[j.DROP_SCHEMA]:!0};a(ZJ,"processLocalTransaction");xJ=uwe();Ue.operation=vv;a(e3,"chooseOperation");a(t3,"getOperationFunction");(0,zJ._assignPackageExport)("operation",vv);a(vv,"operation");a(lwe,"catchup");a(ni,"executeJob");a(uwe,"initializeOperationFunctionMap")});var nb=x((xHe,i3)=>{"use strict";var tb=($(),L(Q)),dwe=de(),jf=ee(),{handleHDBError:Mv,hdbErrors:rb}=ge(),{isMainThread:fwe}=require("worker_threads"),{Readable:mwe}=require("stream"),r3=require("os"),pwe=require("util"),hwe=e1(),s3=pwe.promisify(hwe.authorize),n3=(bD(),L(RD)),{createGzip:Ewe,constants:_we}=require("zlib"),gwe=[tb.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,tb.OPERATIONS_ENUM.LOGIN,tb.OPERATIONS_ENUM.LOGOUT];function Swe(e){let t=`Found an uncaught exception with message: ${e.message}. ${r3.EOL}Stack: ${e.stack} ${r3.EOL}Terminating ${fwe?"HDB":"thread"}.`;console.error(t),jf.fatal(t),process.exit(1)}a(Swe,"handleServerUncaughtException");function Twe(e,t,r){if(jf[e.logLevel||"info"](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:rb.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)}a(Twe,"serverErrorHandler");function ywe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Mv(new Error,"Invalid JSON.",rb.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(dwe.isEmpty(e.body.operation)){let n=Mv(new Error,"Request body must include an 'operation' property.",rb.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(ywe,"reqBodyValidationHandler");function Rwe(e,t,r){let n;!gwe.includes(e.body.operation)||e.body.operation===tb.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?s3(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{i.statusCode=401,jf.debug("Login failed",i),r(i,null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(Rwe,"authHandler");function bwe(e,t,r){s3(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{jf.warn(n),jf.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(Mv(n,s,rb.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(bwe,"authAndEnsureUserOnRequest");async function Awe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=n3.chooseOperation(e.body);let s=await n3.processLocalTransaction(e,n);if(s instanceof mwe&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Ewe({level:_we.Z_BEST_SPEED})))}return s}catch(s){throw jf.error(s),s}}a(Awe,"handlePostRequest");i3.exports={authHandler:Rwe,authAndEnsureUserOnRequest:bwe,handlePostRequest:Awe,handleServerUncaughtException:Swe,serverErrorHandler:Twe,reqBodyValidationHandler:ywe}});var l3=x((FHe,c3)=>{"use strict";var Iwe=require("fastify-plugin"),{handlePostRequest:o3,authHandler:wwe,reqBodyValidationHandler:Nwe}=nb();async function Cwe(e){e.decorate("hdbCore",{preValidation:[Nwe,wwe],request:a((t,r)=>a3(o3(t,r)),"request"),requestWithoutAuthentication:a((t,r)=>a3(o3(t,r,!0)),"requestWithoutAuthentication")})}a(Cwe,"hdbCore");async function a3(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}a(a3,"convertAsyncIterators");c3.exports=Iwe(Cwe)});var d3=x((HHe,u3)=>{"use strict";var sb=fe();sb.initSync();var{CONFIG_PARAMS:Uv}=($(),L(Q)),Owe=1024*1024*1024;function Pwe(e){let t=sb.get(Uv.HTTP_TIMEOUT),r=sb.get(Uv.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Owe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:sb.get(Uv.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(Pwe,"getServerOptions");u3.exports=Pwe});var p3=x((qHe,m3)=>{"use strict";var xv=fe();xv.initSync();var{CONFIG_PARAMS:f3}=($(),L(Q));function Lwe(){let e=xv.get(f3.HTTP_CORSACCESSLIST),t=xv.get(f3.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}a(Lwe,"getCORSOptions");m3.exports=Lwe});var _3=x((VHe,E3)=>{"use strict";var h3=fe();h3.initSync();var Dwe=($(),L(Q));function vwe(){return h3.get(Dwe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(vwe,"getHeaderTimeoutConfig");E3.exports=vwe});var Fv={};Re(Fv,{customFunctionsServer:()=>xwe,ready:()=>P3,start:()=>Uwe});function Uwe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Fa||(Fa=O3(t),Ue.http((await Fa).server));let o=await Fa,c=(0,Bv.dirname)(s),l=(0,Bv.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!g3.has(c)){g3.add(c);try{o.register(Fwe(c,l))}catch(u){if(u.message==="Root plugin has already booted")Tt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:P3}}async function xwe(){try{Tt.info("In Custom Functions Fastify server"+process.cwd()),Tt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tt.debug(`Custom Functions server process ${process.pid} starting up.`),await Bwe();let e=A3.get(U.HTTP_SECUREPORT)>0,t;try{t=Fa=await O3(e)}catch(r){throw Tt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Tt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Tt.error(`Custom Functions ${process.pid} Error: ${e}`),Tt.error(e),process.exit(1)}}async function Bwe(){try{Tt.info("Custom Functions starting configuration."),await Ti(),Tt.info("Custom Functions completed configuration.")}catch(e){Tt.error(e)}}function Fwe(e,t){return async function(r){try{Tt.info("Custom Functions starting buildRoutes"),Tt.trace("Loading fastify routes folder "+e),(0,S3.existsSync)(e)&&r.register(b3.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Tt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Tt.error(s.message):s&&Tt.error(s),o()})}catch(n){Tt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function O3(e){Tt.info("Custom Functions starting buildServer.");let t=(0,I3.default)(e),r=(0,T3.default)(t);r.server.headersTimeout=(0,N3.default)(),r.setErrorHandler(C3.serverErrorHandler);let n=(0,w3.default)();return n&&r.register(y3.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){l.sent||l.raw.headersSent||l.raw.writableEnded||r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(R3.default),await r.register(Mwe),await r.after(),Mm(r),Tt.info("Custom Functions completed buildServer."),r}function P3(){if(Fa)return Fa.then?Fa.then(e=>e.ready()):Fa.ready()}var Bv,S3,T3,y3,R3,b3,A3,Tt,Mwe,I3,w3,N3,C3,Fa,g3,L3=ie(()=>{Bv=require("path"),S3=require("fs"),T3=b(require("fastify")),y3=b(require("@fastify/cors")),R3=b(QC()),b3=b(require("@fastify/autoload")),A3=b(fe());$();Tt=b(ee()),Mwe=b(l3());gs();I3=b(d3()),w3=b(p3()),N3=b(_3()),C3=b(nb());jo();qr();g3=new Set;a(Uwe,"start");a(xwe,"customFunctionsServer");a(Bwe,"setUp");a(Fwe,"buildRouteFolder");a(O3,"buildServer");a(P3,"ready")});var Hv={};Re(Hv,{handleApplication:()=>kwe,suppressHandleApplicationWarning:()=>Hwe});function kwe(e){let t=new Map,r=new Map;e.options.on("change",n=>{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,ka.join)(n.absolutePath,"index.html");(0,zf.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,ka.dirname)(n.urlPath),null),r.set((0,ka.join)((0,ka.dirname)(n.urlPath),"/"),n.absolutePath));break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,ka.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 o=t.get(n.pathname);if(!o){let d=e.options.get(["index"])??!0;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);if(d&&(o=r.get(n.pathname),o===null))return{status:301,headers:{Location:(0,ka.join)(n.pathname,"/")}}}if(!o){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(o=t.get(`${n.pathname}.${f}`),o)break}if(o)return{handlesHeaders:!0,body:(0,kv.default)(n,(0,zf.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(Gwe(c),!c)return{status:404,body:"File not found"};let l=(0,ka.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,zf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,kv.default)(n,(0,zf.realpathSync)(l))}},{runFirst:!0})}function Gwe(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 zf,ka,kv,Hwe,D3=ie(()=>{zf=require("node:fs"),ka=require("node:path"),kv=b(require("send"));a(kwe,"handleApplication");Hwe=!0;a(Gwe,"validateNotFoundOption")});var Gv={};Re(Gv,{start:()=>qwe});function qwe({override:e}){return{handleFile:a((t,r,n)=>{ib.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,v3.parse)(t))){if(process.env[s]!==void 0)if(ib.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)ib.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var v3,ib,M3=ie(()=>{v3=require("dotenv"),ib=b(ee());a(qwe,"start")});var Vv={};Re(Vv,{DataLoaderError:()=>Ds,DataLoaderResult:()=>Qf,EmptyFileError:()=>lb,FileParseError:()=>cb,InvalidPropertyTypeError:()=>ub,MissingRequiredPropertyError:()=>jE,RecordProcessingError:()=>zE,SystemDatabaseError:()=>db,UnsupportedFileExtensionError:()=>ab,computeRecordHash:()=>$v,handleApplication:()=>Kwe,loadDataFile:()=>q3,suppressHandleApplicationWarning:()=>Vwe});function $v(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,x3.createHash)("sha256").update(n).digest("hex")}function G3(e){return e.system&&e.system[qv]?e.system[qv]:ob||(ob=We({database:"system",table:qv,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),ob)}async function $we(e,t,r,n){try{let s=G3(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return ii.error?.(`Failed to get stored hash: ${s.message}`),null}}async function U3(e,t,r,n,s){try{let i=G3(s),o=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:o,hash:n})}catch(i){ii.error?.(`Failed to store hash: ${i.message}`)}}function Kwe(e){if((0,F3.getWorkerIndex)()!==0){ii.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(a(function(r){return r.entryType!=="file"||r.eventType==="unlink"?Promise.resolve():q3(r,yn,xe).then(n=>{ii.debug?.("Data loader processed file: %s: %s",(0,Ha.basename)(r.absolutePath),n.message)})},"handleDataLoaderEntry"))}async function q3({contents:e,absolutePath:t},r,n){let s=(0,Ha.extname)(t)||"unknown",i;try{if(s===".yaml"||s===".yml")i=(0,B3.parseDocument)(e.toString()).toJSON();else if(s===".json")i=JSON.parse(e.toString());else throw new ab(t,s)}catch(d){throw d instanceof Ds?d:new cb(t,d)}if(!i)throw new lb(t);let{database:o,table:c,records:l}=i;if(!c)throw new jE(t,"table");if(!l)throw new jE(t,"records");if(!Array.isArray(l))throw new ub(t,"records","array");let u=o?`${o}.${c}`:c;if(o?.toLowerCase()==="system")throw new db(o,c);try{let d;if(o&&n[o]&&n[o][c])ii.debug?.(`Using existing table ${u} from database tables`),d=n[o][c];else if(r&&r[c])ii.debug?.(`Using existing table ${u} from global tables`),d=r[c];else{ii.debug?.(`Table ${u} not found, creating new table`);let _=[];if(l.length>0){let R=l[0];Object.keys(R).map(S=>{let y={name:S,type:typeof R[S]};return S==="id"&&(y.isPrimaryKey=!0),y}).forEach(S=>{_.push(S)})}d=await We({database:o,table:c,attributes:_})}let f=l.length,m=0,p=0,h=0,E=100;for(let _=0;_<l.length;_+=E){let R=l.slice(_,_+E),S=[];for(let y of R)S.push(async()=>{try{let I=null,w=y.id;w!==void 0&&(I=await d.get(w));let M=$v(y);if(!I){m++;let Y=await d.put(y);return await U3(o,c,w,M,n),Y}let k=await $we(o,c,w,n);if(!k)return h++,Promise.resolve({inserted:0,updated:0});let X={};for(let Y of Object.keys(y))Y in I&&(X[Y]=I[Y]);return $v(X)!==k?(h++,Promise.resolve({inserted:0,updated:0})):M!==k?(p++,await d.patch(w,y),await U3(o,c,w,M,n),{updated:1}):(h++,Promise.resolve({inserted:0,updated:0}))}catch(I){if(I instanceof Ds)ii.error?.(`Record processing error: ${I.message}`);else{let w=new zE(u,I);ii.error?.(`Record processing error: ${w.message}`)}return Promise.resolve({inserted:0,updated:0,error:I.message})}});await Promise.all(S.map(y=>y()))}if(m>0||p>0){let _=`Loaded ${m} new and updated ${p} records in ${u}`;return h>0&&(_+=` (${h} records skipped)`),ii.info?.(_),new Qf(t,o,c,"success",m+p,_)}else if(h>0){let _=`All ${h} records in ${u} already up-to-date`;return ii.info?.(_),new Qf(t,o,c,"skipped",f,_)}else{let _=`No records to process in ${u}`;return ii.info?.(_),new Qf(t,o,c,"success",0,_)}}catch(d){throw d instanceof Ds?d:new zE(u,d)}}var Ha,x3,B3,F3,Ga,k3,H3,ii,qv,ob,Vwe,Ds,ab,cb,lb,jE,ub,db,zE,Qf,$3=ie(()=>{Ha=require("node:path"),x3=require("node:crypto"),B3=require("yaml");Oe();F3=b(at()),Ga=b(En()),k3=b(ge()),H3=b(ee()),ii=H3.default.forComponent("dataLoader"),qv="hdb_dataloader_hash";a($v,"computeRecordHash");a(G3,"getHashTrackingTable");a($we,"getStoredHash");a(U3,"storeHash");Vwe=!0;a(Kwe,"handleApplication");a(q3,"loadDataFile");Ds=class extends k3.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=Ga.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},ab=class extends Ds{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Ha.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},cb=class extends Ds{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Ha.basename)(t)}: ${r.message}`,Ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},lb=class extends Ds{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Ha.basename)(t)} is empty or invalid`,Ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},jE=class extends Ds{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Ha.basename)(t)} is missing required "${r}" property`,Ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},ub=class extends Ds{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Ha.basename)(t)} has invalid "${r}" property, expected ${n}`,Ga.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},db=class extends Ds{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ga.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},zE=class extends Ds{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ga.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Qf=class{static{a(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=o}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 Kv={};Re(Kv,{calculateRestHttpURL:()=>t6,hdbServer:()=>zwe,start:()=>zwe});async function zwe(e){try{Fi.default.debug("In Fastify server"+process.cwd()),Fi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Fi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=V3.default.isMaster,await Qwe();let t=e.securePort>0;Jf=Jwe(t,e.resources),await Jf.ready(),e||(e={}),e.usageType="operations-api";try{Ue.http(Jf.server,e),Jf.server.closeIdleConnections||await Jf.listen({port:0,host:"::"})}catch(r){throw Jf.close(),Fi.default.error(r),Fi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Fi.default.fatal(t),process.exit(1)}}async function Qwe(){return Fi.default.trace("Configuring HarperDB process."),X3.default.setSchemaDataToGlobal(),Ti()}function Jwe(e,t){Fi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=eNe(e),n=(0,K3.default)(r);n.server.headersTimeout=rNe(),n.setErrorHandler(Do.serverErrorHandler);let s=tNe();s&&n.register(Y3.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){d.sent||d.raw.headersSent||d.raw.writableEnded||n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(z3.default),n.register(W3.default,{brotliOptions:{params:{[fb.default.constants.BROTLI_PARAM_MODE]:fb.default.constants.BROTLI_MODE_TEXT,[fb.default.constants.BROTLI_PARAM_QUALITY]:2}}}),Mm(n),n.get("/health",()=>"HarperDB is running."),n.register(j3.default,{root:Q3.default.join(J3.PACKAGE_ROOT,"studio/web")});let i=oi.default.get(gm.LOCAL_STUDIO_ON);return!Z3.default.isEmpty(i)&&i.toString().toLowerCase()==="true"?n.get("/",(o,c)=>c.sendFile("index.html")):n.get("/",(o,c)=>c.sendFile("running.html")),n.get("/api/openapi/rest",{preValidation:[Do.authAndEnsureUserOnRequest]},Xwe(t)),n.post("/",{preValidation:[Do.reqBodyValidationHandler,Do.authHandler],config:{isOperation:!0}},Zwe),Fi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function Xwe(e){let t=oi.default.get(U.HTTP_PORT),r=oi.default.get(U.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?uT(e,t6(t,r,n)):(Fi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new e6.ServerError("Forbidden",403))}function t6(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return n.hostname.toLowerCase()==="localhost"||n.hostname.match(/^[\d.:]+$/)?t?(n.port=t,n.protocol="https:"):e&&(n.port=e,n.protocol="http:"):(n.port="443",n.protocol="https:"),n.toString()}function Zwe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,Do.handlePostRequest)(e,t)}function eNe(e){let t=oi.default.get(Xf.OPERATIONSAPI_NETWORK_TIMEOUT),r=oi.default.get(Xf.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Wwe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:oi.default.get(Xf.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function tNe(){let e=oi.default.get(Xf.OPERATIONSAPI_NETWORK_CORS),t=oi.default.get(Xf.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===jwe)&&(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 rNe(){return oi.default.get(Xf.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Ywe}var V3,fb,oi,Fi,K3,Y3,W3,j3,z3,Q3,J3,X3,Z3,Do,e6,Ywe,Wwe,jwe,Xf,Jf,r6=ie(()=>{V3=b(require("cluster")),fb=b(require("node:zlib")),oi=b(fe());$();Fi=b(ee()),K3=b(require("fastify")),Y3=b(require("@fastify/cors")),W3=b(require("@fastify/compress")),j3=b(require("@fastify/static")),z3=b(QC()),Q3=b(require("path")),J3=b(Lt()),X3=b(to()),Z3=b(de());gs();qr();Do=b(nb());jo();KC();e6=b(ge());oi.default.initSync();Ywe=6e4,Wwe=oi.default.get(U.OPERATIONSAPI_NETWORK_MAXREQUESTBODYSIZE)??1024*1024*1024,jwe="TRUE",{CONFIG_PARAMS:Xf}=Q;a(zwe,"operationsServer");a(Qwe,"setUp");a(Jwe,"buildServer");a(Xwe,"restOpenAPIHandler");a(t6,"calculateRestHttpURL");a(Zwe,"handler");a(eNe,"getServerOptions");a(tNe,"getCORSOpts");a(rNe,"getHeaderTimeoutConfig")});var Jv={};Re(Jv,{disableNATS:()=>sNe,publishToStream:()=>hb,setNATSReplicator:()=>Yv,setPublishToStream:()=>iNe,setSubscription:()=>Qv,start:()=>nNe});function nNe(){QE.default.get(U.CLUSTERING_ENABLED)&&aNe()}function sNe(e=!0){a6=e}function iNe(e,t){hb=e,Qv=t}function aNe(){if(a6||process.env._DISABLE_NATS)return;let e=dt(),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];Yv(s,r,i)}}Kl((r,n)=>{Yv(r.tableName,r.databaseName,r),n&&l6(r)}),!n6&&(n6=!0)}function Yv(e,t,r){if(t==="system"&&cNe.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 qt{static{a(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){l6(i)}static subscribe(){let i=new is;return Qv(t,e,i),i}static subscribeOnThisThread(i){return i<(QE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??oNe)}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 mb(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=c6;return i}a(n,"getNATSTransaction")}function l6(e){let t=QE.default.get(U.CLUSTERING_NODENAME);hb(`${jv.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,zv.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 s6,jv,zv,i6,o6,QE,pb,a6,hb,Qv,oNe,c6,n6,cNe,mb,Wv,u6=ie(()=>{Oe();zi();s6=b(vr()),jv=b(Er()),zv=b(aa());qu();i6=b(RO()),o6=b(Ms()),QE=b(fe());$();pb=b(ee());a(nNe,"start");a(sNe,"disableNATS");hb=s6.publishToStream,Qv=i6.setSubscription;a(iNe,"setPublishToStream");oNe=2;a(aNe,"assignReplicationSource");cNe=["hdb_job","hdb_raw_analytics","hdb_info"];a(Yv,"setNATSReplicator");a(l6,"publishSchema");mb=class{constructor(t,r){this.transaction=t;this.options=r}static{a(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=QE.default.get(U.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let o=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(pb.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=o)),l.table===f&&l.operation===m?(o.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(hb(`${jv.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,zv.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw pb.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},Wv=class extends mb{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,o6.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};c6=new Wv});var d6={};Re(d6,{SERVERS:()=>Zf,portServer:()=>Xv,setPortServerMap:()=>Eb});function Eb(e,t){let r=Xv.get(e)??[];Xv.set(e,[...r,t])}var Zf,Xv,Zv=ie(()=>{Zf={},Xv=new Map;a(Eb,"setPortServerMap")});var Rb={};Re(Rb,{deliverSocket:()=>b6,getHttpOptions:()=>fNe,getRequestId:()=>N6,handleApplication:()=>dNe,httpServer:()=>aM,logRequest:()=>ZE,proxyRequest:()=>mNe,registerServer:()=>iM,suppressHandleApplicationWarning:()=>uNe});function dNe(e){e_=e.options.getAll(),e.options.on("change",t=>{e_=e.options.getAll()})}function fNe(){return e_}function b6(e,t,r){let n=e?.read?e:new E6.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Zf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Zf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(qa.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function mNe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=f6.get(s),r){case"connection":i=b6(void 0,t),f6.set(s,i),i.write=(c,l,u)=>(gb.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(gb.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),gb.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function iM(e,t,r=!0){t||(t=Fr.default.get(U.HTTP_PORT));let n=Zf[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",h6),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Zf[t]=e;e.on("unhandled",h6)}function oM(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Fr.default.get(U.HTTP_PORT)!=null&&t.push({port:Fr.default.get(U.HTTP_PORT),secure:Fr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Fr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Fr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.usageType==="operations-api"&&Fr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,_6.resolvePath)(Fr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function aM(e,t){let r=[];for(let{port:n,secure:s}of oM(t))r.push(A6(n,s,t)),typeof e=="function"?nM[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,iM(e,n,!1)),Sb[n]=Tb(nM,n);return r}function A6(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(Eb(e,{protocol_name:t?"HTTPS":"HTTP",name:bb()}),!_b[e]){let o=i?"operationsApi_network":"http",c=Fr.default.get(o+"_keepAliveTimeout"),l=Fr.default.get(o+"_timeout"),u=Fr.default.get(o+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Fr.default.get(U.HTTP_MAXHEADERSIZE)},f=Fr.default.get(o+"_mtls"),m=Fr.default.get(o+"_mtls_required"),p;if(t){let R=Fr.default.get("tls");p=Fr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,g6.getTicketKeys)(),SNICallback:(0,S6.createTLSSelector)(s??"server",f),ciphers:R.ciphers??R[0]?.ciphers})}let h=a(async(R,S)=>{let y=performance.now(),I=0;try{let M=new yc(R,S);i&&(M.isOperationsServer=!0),e_.logging?.id&&(M.requestId=I=N6());let k=await Sb[e](M);if(!k){if(M._nodeResponse.statusCode){ZE(R,M._nodeResponse.statusCode,I,performance.now()-y);return}k=I6(M)}if(k.headers?.set||(k.headers=new $s(k.headers)),await kD()?k.headers.set("Server","HarperDB"):k.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),k.status===-1){for(let Se of k.headers||[])S.setHeader(Se[0],Se[1]);return R.baseRequest=M,S.baseResponse=k,_b[e].emit("unhandled",R,S)}let X=k.status||200;S.statusCode=X;let J=performance.now(),Y=J-y,H=k.body,ae,le=!1;if(!k.handlesHeaders){let Se=k.headers||new $s;H?H.length>=0?(typeof H=="string"?Se.set("Content-Length",Buffer.byteLength(H)):Se.set("Content-Length",H.length),ae=!0):H instanceof Us&&(H.size?Se.set("Content-Length",H.size):H.on&&(le=!0,H.on("size",et=>{S.headersSent||S.setHeader("Content-Length",et)})),H=H.stream()):(M.method!=="HEAD"&&Se.set("Content-Length","0"),ae=!0);let Me=`hdb;dur=${Y.toFixed(2)}`;if(k.wasCacheMiss&&(Me+=", miss"),Yp(Se,"Server-Timing",Me,!0),!S.headersSent)if(le){if(Se)if(Se[Symbol.iterator])for(let[et,$e]of Se)S.setHeader(et,$e);else for(let et in Se)S.setHeader(et,Se[et])}else S.writeHead(X,Se&&(Se[Symbol.iterator]?Array.from(Se):Se));ae&&S.end(H)}let oe=M.handlerPath,Ee=M.method;if(qe(Y,"duration",oe,Ee,k.wasCacheMiss==null?void 0:k.wasCacheMiss?"cache-miss":"cache-hit"),tn(X<400,"success",oe,Ee),tn(1,"response_"+X,oe,Ee),ZE(R,X,I,Y),!ae)if(H instanceof ReadableStream&&(H=rM.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=rM.Readable.from(H)),H?.pipe){H.pipe(S),H.destroy&&S.on("close",()=>{H.destroy()});let Se=0;H.on("data",Me=>{Se+=Me.length}),H.on("end",()=>{qe(performance.now()-J,"transfer",oe,Ee),qe(Se,"bytes-sent",oe,Ee)})}else H?.then?H.then(Se=>{S.end(Se)},w):S.end(H)}catch(M){w(M)}function w(M){let k=M.headers,X=M.statusCode||500;try{S.writeHead(X,k&&(k[Symbol.iterator]?Array.from(k):k))}catch{}S.end(lNe(M)),ZE(R,X,I,performance.now()-y),M.statusCode?M.statusCode===500?qa.default.warn(M):qa.default.info(M):qa.default.error(M)}a(w,"onError")},"requestHandler"),E=yS(h,(R,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},Fr.default.get(o+"_requestQueueLimit")),_=_b[e]=(t?p?T6.createSecureServer:y6.createServer:yb.createServer)(d,(R,S)=>{let y=R.method;y==="GET"||y==="OPTIONS"||y==="HEAD"?h(R,S):E(R,S)});c>=0&&(_.keepAliveTimeout=c),u>=0&&(_.headersTimeout=u),t&&(_.ports||(_.ports=[]),_.ports.push(e),d.SNICallback.initialize(_),f&&(_.mtlsConfig=f),_.on("secureConnection",R=>{R._parent.startTime&&qe(performance.now()-R._parent.startTime,"tls-handshake",e),qe(R.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),iM(_,e)}return _b[e]}function Tb(e,t){let r=I6;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"nextCallback")}}return r}function I6(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new $s}}function pNe(e,t){aM(e,{requestOnly:!0,...t})}function w6(e,t){for(let{port:r}of oM(t))m6[t?.runFirst?"unshift":"push"]({listener:e,port:r}),sM[r]=Tb(m6,r)}function hNe(e,t){let r=[];for(let{port:n,secure:s}of oM(t)){Eb(n,{protocol_name:s?"WSS":"WS",name:bb()});let i=A6(n,s,t);JE[n]||(JE[n]=new R6.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),JE[n].on("connection",(o,c)=>{try{let l=new yc(c);l.isWebSocket=!0;let u=Sb[n](l);qa.default.debug("Received WS connection, calling listeners",eM),p6[n](o,l,u)}catch(l){qa.default.warn("Error in handling WS connection",l)}}),w6((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):JE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),JE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{sM[n]&&sM[n](o,c,l)})),r.push(i),eM[t?.runFirst?"unshift":"push"]({listener:e,port:n}),p6[n]=Tb(eM,n),Sb[n]=Tb(nM,n)}return r}function h6(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
|
|
139
139
|
`),ZE(e,404,0,e.requestId))}function ZE(e,t,r,n){let s=e_.logging;if(s){tM||(tM=qa.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";tM[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+ENe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function ENe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function N6(){return XE||(XE=new BigInt64Array([1n]),XE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",XE.buffer))),Number(Atomics.add(XE,0,1n))}var E6,qa,gb,Fr,_6,g6,S6,T6,y6,yb,rM,R6,lNe,JE,_b,Sb,nM,e_,uNe,f6,m6,sM,eM,p6,tM,XE,cM=ie(()=>{E6=require("node:net"),qa=b(ee()),gb=require("node:worker_threads"),Fr=b(fe());$();_6=b(wt()),g6=b(at()),S6=b(As()),T6=require("node:http2"),y6=require("node:https"),yb=require("node:http");_h();Wp();os();Fn();rM=require("node:stream");qr();Zv();Hf();zN();R6=require("ws");LE();({errorToString:lNe}=qa.default);Ue.http=aM;Ue.request=pNe;Ue.ws=hNe;Ue.upgrade=w6;JE={},_b={},Sb={},nM=[],e_={},uNe=!0;a(dNe,"handleApplication");a(fNe,"getHttpOptions");a(b6,"deliverSocket");f6=new Map;a(mNe,"proxyRequest");a(iM,"registerServer");a(oM,"getPorts");a(aM,"httpServer");a(A6,"getHTTPServer");a(Tb,"makeCallbackChain");a(I6,"unhandled");a(pNe,"onRequest");Object.defineProperty(yb.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});m6=[],sM={};a(w6,"onUpgrade");eM=[],p6={};a(hNe,"onWebSocket");a(h6,"defaultNotFound");a(ZE,"logRequest");a(ENe,"headersToString");a(N6,"getRequestId")});var uM=x(n_=>{"use strict";g_();var{isMainThread:lM,parentPort:C6,threadId:Ab,workerData:_Ne}=require("node:worker_threads"),{createServer:gNe}=require("node:net"),{unlinkSync:SNe,existsSync:TNe}=require("fs"),L6;n_.whenComponentsLoaded=new Promise(e=>{L6=e});var ki=ee(),vo=fe(),Mo=($(),L(Q)),{server:yNe}=(qr(),L(hm)),{createServer:RNe}=require("node:tls"),{restartNumber:bNe,getWorkerIndex:r_}=at(),{createReuseportFd:t_}=(_h(),L(MV)),{createTLSSelector:ANe}=As(),{startupLog:INe}=SR(),{SERVERS:em,setPortServerMap:O6,portServer:wNe}=(Zv(),L(d6)),P6=(cM(),L(Rb)),NNe=di(),D6=vo.get(Mo.CONFIG_PARAMS.THREADS_DEBUG),CNe=vo.get(Mo.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);yNe.socket=ONe;if(D6){let e;if(lM)e=vo.get(Mo.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){ki.info("Could not close debugger",t)}});else{let t=vo.get(Mo.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&r_()>=0&&(e=t+r_())}if(e){let t=vo.get(Mo.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=vo.get(Mo.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){ki.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&lM)try{require("inspector").open(9229)}catch(e){bNe<=1&&ki.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&ki.error("uncaughtException",e)});vo.initSync();n_.globals=NNe;n_.listenOnPorts=M6;n_.startServers=v6;function v6(){let e=vo.get(Mo.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=Ib().loadRootComponents(!0).then(()=>{C6?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)P6.deliverSocket(i,s,o);else if(n.requestId)P6.proxyRequest(n);else if(n.type===Mo.ITC_EVENT_TYPES.SHUTDOWN){ki.trace("received shutdown request",Ab);for(let c in em){let l=em[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100;if(!l[f]){h&&l.closeAllConnections?.(),clearInterval(p);return}let E=l[f][h?"all":"idle"]?.()||[];if(E.length===0){h&&clearInterval(p);return}m===1?ki.info(`Closing ${E.length} idle connections`):h&&ki.warn(`Forcefully closing ${E.length} active connections`);for(let _=0,R=E.length;_<R;_++){let S=E[_].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
140
140
|
Connection: close\r
|
|
141
141
|
\r
|
|
@@ -95,7 +95,7 @@ MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
|
|
|
95
95
|
`:this.pem=`-----BEGIN PUBLIC KEY-----
|
|
96
96
|
MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
|
|
97
97
|
-----END PUBLIC KEY-----
|
|
98
|
-
`}getKey(){return(0,gy.createPublicKey)(this.pem)}toString(){return this.pem}},Ey=class extends TypeError{static{a(this,"LicenseEncodingError")}},_f=class extends TypeError{static{a(this,"InvalidLicenseError")}},nL=class extends _f{static{a(this,"InvalidLicenseSignatureError")}},$h=class extends _f{static{a(this,"InvalidHeaderError")}},_y=class extends _f{static{a(this,"InvalidPayloadError")}},t_e=new rL(lj.get(U.LICENSE_MODE));a(r_e,"validateLicenseSignature");a(n_e,"validateLicenseHeader");a(s_e,"valid");a(i_e,"validateLicensePayload");a(uj,"validateLicense")});var Sy={};Re(Sy,{getActiveLicense:()=>cL,getUsageLicenses:()=>yj,getUsageLicensesOp:()=>uL,installUsageLicense:()=>aL,installUsageLicenseOp:()=>oL,isActiveLicense:()=>Sj,isLicensed:()=>lL,loadAndWatchLicensesDir:()=>c_e,recordUsage:()=>Tj});async function oL(e){let t=e.license;try{await aL(t)}catch(r){let n=new pj.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function aL(e){let t=uj(e),{id:r}=t;if(await xe.system.hdb_license.get(r))throw new iL(`A usage license with ${r} already exists`);return yo.info?.("Installing usage license:",t),xe.system.hdb_license.put(r,t)}function Sj(e){return(e.reads===-1||(e.usedReads??0)<e.reads)&&(e.readBytes===-1||(e.usedReadBytes??0)<e.readBytes)&&(e.writes===-1||(e.usedWrites??0)<e.writes)&&(e.writeBytes===-1||(e.usedWriteBytes??0)<e.writeBytes)&&(e.realTimeMessages===-1||(e.usedRealTimeMessages??0)<e.realTimeMessages)&&(e.realTimeBytes===-1||(e.usedRealTimeBytes??0)<e.realTimeBytes)&&(e.cpuTime===-1||(e.usedCpuTime??0)<e.cpuTime)&&(e.storage===-1||(e.usedStorage??0)<e.storage)}async function cL(){let e=hj.get(U.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=xe.system.hdb_license?.search(t);for await(let n of r??[])if(Sj(n))return n}async function lL(){return await cL()!==void 0}async function Tj(e){Na=yo.forComponent("license"),Na.trace?.("Recording usage into license from analytics");let t,r=(await cL())?.id;if(r){Na.trace?.("Found license to record usage into:",r);let n={};At(n,()=>{t=xe.system.hdb_license.update(r,n);for(let s of e)switch(Na.trace?.("Processing analytics record:",s),s.metric){case"db-read":Na.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Na.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Na.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(Na.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Na.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";fj||(console.error(n),fj=!0),mj===void 0&&(mj=setInterval(()=>{yo.notify(n)},o_e).unref())}}function uL(e){let t={};return e.region&&(t.region=e.region),yj(t)}function yj(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),xe.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function a_e(e){yo.trace?.("Loading usage license from file:",e);let t=await _j.readFile(e,{encoding:"utf-8"});try{await aL(t)}catch(r){yo.error?.("Failed to install usage license from file:",e,r)}}function c_e(){let e=sL.default.join(sL.default.dirname(Ej.getConfigFilePath()),"licenses");(0,gj.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",a_e)}var pj,yo,hj,sL,Ej,_j,gj,iL,fj,mj,o_e,Na,Vh=ie(()=>{dj();pj=b(ge()),yo=b(ee());Kn();Qa();hj=b(fe());$();Oe();sL=b(require("node:path")),Ej=b(wt()),_j=b(require("node:fs/promises")),gj=require("chokidar"),iL=class extends Error{static{a(this,"ExistingLicenseError")}};a(oL,"installUsageLicenseOp");a(aL,"installUsageLicense");fj=!1,o_e=6e5;a(Sj,"isActiveLicense");a(cL,"getActiveLicense");a(lL,"isLicensed");a(Tj,"recordUsage");KN(Tj);a(uL,"getUsageLicensesOp");a(yj,"getUsageLicenses");a(a_e,"loadLicenseFile");a(c_e,"loadAndWatchLicensesDir")});var Iy={};Re(Iy,{deliverSocket:()=>vj,getHttpOptions:()=>f_e,getRequestId:()=>Bj,handleApplication:()=>d_e,httpServer:()=>gL,logRequest:()=>Wh,proxyRequest:()=>m_e,registerServer:()=>EL,suppressHandleApplicationWarning:()=>u_e});function d_e(e){jh=e.options.getAll(),e.options.on("change",t=>{jh=e.options.getAll()})}function f_e(){return jh}function vj(e,t,r){let n=e?.read?e:new wj.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Ef[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Ef[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Ca.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function m_e(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Rj.get(s),r){case"connection":i=vj(void 0,t),Rj.set(s,i),i.write=(c,l,u)=>(yy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(yy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),yy.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function EL(e,t,r=!0){t||(t=vr.default.get(U.HTTP_PORT));let n=Ef[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",Ij),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Ef[t]=e;e.on("unhandled",Ij)}function _L(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],vr.default.get(U.HTTP_PORT)!=null&&t.push({port:vr.default.get(U.HTTP_PORT),secure:vr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),vr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:vr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&vr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,Nj.resolvePath)(vr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function gL(e,t){let r=[];for(let{port:n,secure:s}of _L(t))r.push(Mj(n,s,t)),typeof e=="function"?pL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,EL(e,n,!1)),Ry[n]=by(pL,n);return r}function Mj(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(py(e,{protocol_name:t?"HTTPS":"HTTP",name:wy()}),!Ty[e]){let o=i?"operationsApi_network":"http",c=vr.default.get(o+"_keepAliveTimeout"),l=vr.default.get(o+"_timeout"),u=vr.default.get(o+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:vr.default.get(U.HTTP_MAXHEADERSIZE)},f=vr.default.get(o+"_mtls"),m=vr.default.get(o+"_mtls_required"),p;if(t){let R=vr.default.get("tls");p=vr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,Cj.getTicketKeys)(),SNICallback:(0,Oj.createTLSSelector)(s??"server",f),ciphers:R.ciphers??R[0]?.ciphers})}let h=a(async(R,S)=>{let y=performance.now(),I=0;try{let M=new mc(R,S);i&&(M.isOperationsServer=!0),jh.logging?.id&&(M.requestId=I=Bj());let k=await Ry[e](M);if(!k){if(M._nodeResponse.statusCode){Wh(R,M._nodeResponse.statusCode,I,performance.now()-y);return}k=Uj(M)}if(k.headers?.set||(k.headers=new Hs(k.headers)),await lL()?k.headers.set("Server","HarperDB"):k.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),k.status===-1){for(let Se of k.headers||[])S.setHeader(Se[0],Se[1]);return R.baseRequest=M,S.baseResponse=k,Ty[e].emit("unhandled",R,S)}let X=k.status||200;S.statusCode=X;let J=performance.now(),Y=J-y,H=k.body,ae,le=!1;if(!k.handlesHeaders){let Se=k.headers||new Hs;H?H.length>=0?(typeof H=="string"?Se.set("Content-Length",Buffer.byteLength(H)):Se.set("Content-Length",H.length),ae=!0):H instanceof Bs&&(H.size?Se.set("Content-Length",H.size):H.on&&(le=!0,H.on("size",et=>{S.headersSent||S.setHeader("Content-Length",et)})),H=H.stream()):(M.method!=="HEAD"&&Se.set("Content-Length","0"),ae=!0);let Me=`hdb;dur=${Y.toFixed(2)}`;if(k.wasCacheMiss&&(Me+=", miss"),Gp(Se,"Server-Timing",Me,!0),!S.headersSent)if(le){if(Se)if(Se[Symbol.iterator])for(let[et,$e]of Se)S.setHeader(et,$e);else for(let et in Se)S.setHeader(et,Se[et])}else S.writeHead(X,Se&&(Se[Symbol.iterator]?Array.from(Se):Se));ae&&S.end(H)}let oe=M.handlerPath,Ee=M.method;if(qe(Y,"duration",oe,Ee,k.wasCacheMiss==null?void 0:k.wasCacheMiss?"cache-miss":"cache-hit"),nn(X<400,"success",oe,Ee),nn(1,"response_"+X,oe,Ee),Wh(R,X,I,Y),!ae)if(H instanceof ReadableStream&&(H=mL.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=mL.Readable.from(H)),H?.pipe){H.pipe(S),H.destroy&&S.on("close",()=>{H.destroy()});let Se=0;H.on("data",Me=>{Se+=Me.length}),H.on("end",()=>{qe(performance.now()-J,"transfer",oe,Ee),qe(Se,"bytes-sent",oe,Ee)})}else H?.then?H.then(Se=>{S.end(Se)},w):S.end(H)}catch(M){w(M)}function w(M){let k=M.headers,X=M.statusCode||500;try{S.writeHead(X,k&&(k[Symbol.iterator]?Array.from(k):k))}catch{}S.end(l_e(M)),Wh(R,X,I,performance.now()-y),M.statusCode?M.statusCode===500?Ca.default.warn(M):Ca.default.info(M):Ca.default.error(M)}a(w,"onError")},"requestHandler"),E=hy(h,(R,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},vr.default.get(o+"_requestQueueLimit")),_=Ty[e]=(t?p?Pj.createSecureServer:Lj.createServer:Ay.createServer)(d,(R,S)=>{let y=R.method;y==="GET"||y==="OPTIONS"||y==="HEAD"?h(R,S):E(R,S)});c>=0&&(_.keepAliveTimeout=c),u>=0&&(_.headersTimeout=u),t&&(_.ports||(_.ports=[]),_.ports.push(e),d.SNICallback.initialize(_),f&&(_.mtlsConfig=f),_.on("secureConnection",R=>{R._parent.startTime&&qe(performance.now()-R._parent.startTime,"tls-handshake",e),qe(R.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),EL(_,e)}return Ty[e]}function by(e,t){let r=Uj;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"nextCallback")}}return r}function Uj(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hs}}function p_e(e,t){gL(e,{requestOnly:!0,...t})}function xj(e,t){for(let{port:r}of _L(t))bj[t?.runFirst?"unshift":"push"]({listener:e,port:r}),hL[r]=by(bj,r)}function h_e(e,t){let r=[];for(let{port:n,secure:s}of _L(t)){py(n,{protocol_name:s?"WSS":"WS",name:wy()});let i=Mj(n,s,t);Kh[n]||(Kh[n]=new Dj.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),Kh[n].on("connection",(o,c)=>{try{let l=new mc(c);l.isWebSocket=!0;let u=Ry[n](l);Ca.default.debug("Received WS connection, calling listeners",dL),Aj[n](o,l,u)}catch(l){Ca.default.warn("Error in handling WS connection",l)}}),xj((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):Kh[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),Kh[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{hL[n]&&hL[n](o,c,l)})),r.push(i),dL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),Aj[n]=by(dL,n),Ry[n]=by(pL,n)}return r}function Ij(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
|
|
98
|
+
`}getKey(){return(0,gy.createPublicKey)(this.pem)}toString(){return this.pem}},Ey=class extends TypeError{static{a(this,"LicenseEncodingError")}},_f=class extends TypeError{static{a(this,"InvalidLicenseError")}},nL=class extends _f{static{a(this,"InvalidLicenseSignatureError")}},$h=class extends _f{static{a(this,"InvalidHeaderError")}},_y=class extends _f{static{a(this,"InvalidPayloadError")}},t_e=new rL(lj.get(U.LICENSE_MODE));a(r_e,"validateLicenseSignature");a(n_e,"validateLicenseHeader");a(s_e,"valid");a(i_e,"validateLicensePayload");a(uj,"validateLicense")});var Sy={};Re(Sy,{getActiveLicense:()=>cL,getUsageLicenses:()=>yj,getUsageLicensesOp:()=>uL,installUsageLicense:()=>aL,installUsageLicenseOp:()=>oL,isActiveLicense:()=>Sj,isLicensed:()=>lL,loadAndWatchLicensesDir:()=>c_e,recordUsage:()=>Tj});async function oL(e){let t=e.license;try{await aL(t)}catch(r){let n=new pj.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function aL(e){let t=uj(e),{id:r}=t;if(await xe.system.hdb_license.get(r))throw new iL(`A usage license with ${r} already exists`);return yo.info?.("Installing usage license:",t),xe.system.hdb_license.put(r,t)}function Sj(e){return(e.reads===-1||(e.usedReads??0)<e.reads)&&(e.readBytes===-1||(e.usedReadBytes??0)<e.readBytes)&&(e.writes===-1||(e.usedWrites??0)<e.writes)&&(e.writeBytes===-1||(e.usedWriteBytes??0)<e.writeBytes)&&(e.realTimeMessages===-1||(e.usedRealTimeMessages??0)<e.realTimeMessages)&&(e.realTimeBytes===-1||(e.usedRealTimeBytes??0)<e.realTimeBytes)&&(e.cpuTime===-1||(e.usedCpuTime??0)<e.cpuTime)&&(e.storage===-1||(e.usedStorage??0)<e.storage)}async function cL(){let e=hj.get(U.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=xe.system.hdb_license?.search(t);for await(let n of r??[])if(Sj(n))return n}async function lL(){return await cL()!==void 0}async function Tj(e){Na=yo.forComponent("license"),Na.trace?.("Recording usage into license from analytics");let t,r=(await cL())?.id;if(r){Na.trace?.("Found license to record usage into:",r);let n={};At(n,()=>{t=xe.system.hdb_license.update(r,n);for(let s of e)switch(Na.trace?.("Processing analytics record:",s),s.metric){case"db-read":Na.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Na.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Na.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(Na.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Na.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";fj||(console.error(n),fj=!0),mj===void 0&&(mj=setInterval(()=>{yo.notify(n)},o_e).unref())}}function uL(e){let t={};return e.region&&(t.region=e.region),yj(t)}function yj(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),xe.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function a_e(e){yo.trace?.("Loading usage license from file:",e);let t=await _j.readFile(e,{encoding:"utf-8"});try{await aL(t)}catch(r){yo.error?.("Failed to install usage license from file:",e,r)}}function c_e(){let e=sL.default.join(sL.default.dirname(Ej.getConfigFilePath()),"licenses");(0,gj.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",a_e)}var pj,yo,hj,sL,Ej,_j,gj,iL,fj,mj,o_e,Na,Vh=ie(()=>{dj();pj=b(ge()),yo=b(ee());Kn();Qa();hj=b(fe());$();Oe();sL=b(require("node:path")),Ej=b(wt()),_j=b(require("node:fs/promises")),gj=require("chokidar"),iL=class extends Error{static{a(this,"ExistingLicenseError")}};a(oL,"installUsageLicenseOp");a(aL,"installUsageLicense");fj=!1,o_e=6e5;a(Sj,"isActiveLicense");a(cL,"getActiveLicense");a(lL,"isLicensed");a(Tj,"recordUsage");KN(Tj);a(uL,"getUsageLicensesOp");a(yj,"getUsageLicenses");a(a_e,"loadLicenseFile");a(c_e,"loadAndWatchLicensesDir")});var Iy={};Re(Iy,{deliverSocket:()=>vj,getHttpOptions:()=>f_e,getRequestId:()=>Bj,handleApplication:()=>d_e,httpServer:()=>gL,logRequest:()=>Wh,proxyRequest:()=>m_e,registerServer:()=>EL,suppressHandleApplicationWarning:()=>u_e});function d_e(e){jh=e.options.getAll(),e.options.on("change",t=>{jh=e.options.getAll()})}function f_e(){return jh}function vj(e,t,r){let n=e?.read?e:new wj.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Ef[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Ef[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Ca.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function m_e(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Rj.get(s),r){case"connection":i=vj(void 0,t),Rj.set(s,i),i.write=(c,l,u)=>(yy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(yy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),yy.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function EL(e,t,r=!0){t||(t=vr.default.get(U.HTTP_PORT));let n=Ef[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",Ij),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Ef[t]=e;e.on("unhandled",Ij)}function _L(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],vr.default.get(U.HTTP_PORT)!=null&&t.push({port:vr.default.get(U.HTTP_PORT),secure:vr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),vr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:vr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.usageType==="operations-api"&&vr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,Nj.resolvePath)(vr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function gL(e,t){let r=[];for(let{port:n,secure:s}of _L(t))r.push(Mj(n,s,t)),typeof e=="function"?pL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,EL(e,n,!1)),Ry[n]=by(pL,n);return r}function Mj(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(py(e,{protocol_name:t?"HTTPS":"HTTP",name:wy()}),!Ty[e]){let o=i?"operationsApi_network":"http",c=vr.default.get(o+"_keepAliveTimeout"),l=vr.default.get(o+"_timeout"),u=vr.default.get(o+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:vr.default.get(U.HTTP_MAXHEADERSIZE)},f=vr.default.get(o+"_mtls"),m=vr.default.get(o+"_mtls_required"),p;if(t){let R=vr.default.get("tls");p=vr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,Cj.getTicketKeys)(),SNICallback:(0,Oj.createTLSSelector)(s??"server",f),ciphers:R.ciphers??R[0]?.ciphers})}let h=a(async(R,S)=>{let y=performance.now(),I=0;try{let M=new mc(R,S);i&&(M.isOperationsServer=!0),jh.logging?.id&&(M.requestId=I=Bj());let k=await Ry[e](M);if(!k){if(M._nodeResponse.statusCode){Wh(R,M._nodeResponse.statusCode,I,performance.now()-y);return}k=Uj(M)}if(k.headers?.set||(k.headers=new Hs(k.headers)),await lL()?k.headers.set("Server","HarperDB"):k.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),k.status===-1){for(let Se of k.headers||[])S.setHeader(Se[0],Se[1]);return R.baseRequest=M,S.baseResponse=k,Ty[e].emit("unhandled",R,S)}let X=k.status||200;S.statusCode=X;let J=performance.now(),Y=J-y,H=k.body,ae,le=!1;if(!k.handlesHeaders){let Se=k.headers||new Hs;H?H.length>=0?(typeof H=="string"?Se.set("Content-Length",Buffer.byteLength(H)):Se.set("Content-Length",H.length),ae=!0):H instanceof Bs&&(H.size?Se.set("Content-Length",H.size):H.on&&(le=!0,H.on("size",et=>{S.headersSent||S.setHeader("Content-Length",et)})),H=H.stream()):(M.method!=="HEAD"&&Se.set("Content-Length","0"),ae=!0);let Me=`hdb;dur=${Y.toFixed(2)}`;if(k.wasCacheMiss&&(Me+=", miss"),Gp(Se,"Server-Timing",Me,!0),!S.headersSent)if(le){if(Se)if(Se[Symbol.iterator])for(let[et,$e]of Se)S.setHeader(et,$e);else for(let et in Se)S.setHeader(et,Se[et])}else S.writeHead(X,Se&&(Se[Symbol.iterator]?Array.from(Se):Se));ae&&S.end(H)}let oe=M.handlerPath,Ee=M.method;if(qe(Y,"duration",oe,Ee,k.wasCacheMiss==null?void 0:k.wasCacheMiss?"cache-miss":"cache-hit"),nn(X<400,"success",oe,Ee),nn(1,"response_"+X,oe,Ee),Wh(R,X,I,Y),!ae)if(H instanceof ReadableStream&&(H=mL.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=mL.Readable.from(H)),H?.pipe){H.pipe(S),H.destroy&&S.on("close",()=>{H.destroy()});let Se=0;H.on("data",Me=>{Se+=Me.length}),H.on("end",()=>{qe(performance.now()-J,"transfer",oe,Ee),qe(Se,"bytes-sent",oe,Ee)})}else H?.then?H.then(Se=>{S.end(Se)},w):S.end(H)}catch(M){w(M)}function w(M){let k=M.headers,X=M.statusCode||500;try{S.writeHead(X,k&&(k[Symbol.iterator]?Array.from(k):k))}catch{}S.end(l_e(M)),Wh(R,X,I,performance.now()-y),M.statusCode?M.statusCode===500?Ca.default.warn(M):Ca.default.info(M):Ca.default.error(M)}a(w,"onError")},"requestHandler"),E=hy(h,(R,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},vr.default.get(o+"_requestQueueLimit")),_=Ty[e]=(t?p?Pj.createSecureServer:Lj.createServer:Ay.createServer)(d,(R,S)=>{let y=R.method;y==="GET"||y==="OPTIONS"||y==="HEAD"?h(R,S):E(R,S)});c>=0&&(_.keepAliveTimeout=c),u>=0&&(_.headersTimeout=u),t&&(_.ports||(_.ports=[]),_.ports.push(e),d.SNICallback.initialize(_),f&&(_.mtlsConfig=f),_.on("secureConnection",R=>{R._parent.startTime&&qe(performance.now()-R._parent.startTime,"tls-handshake",e),qe(R.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),EL(_,e)}return Ty[e]}function by(e,t){let r=Uj;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"nextCallback")}}return r}function Uj(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hs}}function p_e(e,t){gL(e,{requestOnly:!0,...t})}function xj(e,t){for(let{port:r}of _L(t))bj[t?.runFirst?"unshift":"push"]({listener:e,port:r}),hL[r]=by(bj,r)}function h_e(e,t){let r=[];for(let{port:n,secure:s}of _L(t)){py(n,{protocol_name:s?"WSS":"WS",name:wy()});let i=Mj(n,s,t);Kh[n]||(Kh[n]=new Dj.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),Kh[n].on("connection",(o,c)=>{try{let l=new mc(c);l.isWebSocket=!0;let u=Ry[n](l);Ca.default.debug("Received WS connection, calling listeners",dL),Aj[n](o,l,u)}catch(l){Ca.default.warn("Error in handling WS connection",l)}}),xj((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):Kh[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),Kh[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{hL[n]&&hL[n](o,c,l)})),r.push(i),dL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),Aj[n]=by(dL,n),Ry[n]=by(pL,n)}return r}function Ij(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
|
|
99
99
|
`),Wh(e,404,0,e.requestId))}function Wh(e,t,r,n){let s=jh.logging;if(s){fL||(fL=Ca.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";fL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+E_e(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function E_e(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function Bj(){return Yh||(Yh=new BigInt64Array([1n]),Yh=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",Yh.buffer))),Number(Atomics.add(Yh,0,1n))}var wj,Ca,yy,vr,Nj,Cj,Oj,Pj,Lj,Ay,mL,Dj,l_e,Kh,Ty,Ry,pL,jh,u_e,Rj,bj,hL,dL,Aj,fL,Yh,SL=ie(()=>{wj=require("node:net"),Ca=b(ee()),yy=require("node:worker_threads"),vr=b(fe());$();Nj=b(wt()),Cj=b(at()),Oj=b(ys()),Pj=require("node:http2"),Lj=require("node:https"),Ay=require("node:http");$p();qp();us();Kn();mL=require("node:stream");qr();XP();gf();tL();Dj=require("ws");Vh();({errorToString:l_e}=Ca.default);Ue.http=gL;Ue.request=p_e;Ue.ws=h_e;Ue.upgrade=xj;Kh={},Ty={},Ry={},pL=[],jh={},u_e=!0;a(d_e,"handleApplication");a(f_e,"getHttpOptions");a(vj,"deliverSocket");Rj=new Map;a(m_e,"proxyRequest");a(EL,"registerServer");a(_L,"getPorts");a(gL,"httpServer");a(Mj,"getHTTPServer");a(by,"makeCallbackChain");a(Uj,"unhandled");a(p_e,"onRequest");Object.defineProperty(Ay.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});bj=[],hL={};a(xj,"onUpgrade");dL=[],Aj={};a(h_e,"onWebSocket");a(Ij,"defaultNotFound");a(Wh,"logRequest");a(E_e,"headersToString");a(Bj,"getRequestId")});var yL=x(Jh=>{"use strict";AA();var{isMainThread:TL,parentPort:Fj,threadId:Ny,workerData:__e}=require("node:worker_threads"),{createServer:g_e}=require("node:net"),{unlinkSync:S_e,existsSync:T_e}=require("fs"),Gj;Jh.whenComponentsLoaded=new Promise(e=>{Gj=e});var Ci=ee(),Ro=fe(),bo=($(),L(Q)),{server:y_e}=(qr(),L(Om)),{createServer:R_e}=require("node:tls"),{restartNumber:b_e,getWorkerIndex:Qh}=at(),{createReuseportFd:zh}=($p(),L(Uq)),{createTLSSelector:A_e}=ys(),{startupLog:I_e}=Cy(),{SERVERS:Sf,setPortServerMap:kj,portServer:w_e}=(XP(),L(ij)),Hj=(SL(),L(Iy)),N_e=fi(),qj=Ro.get(bo.CONFIG_PARAMS.THREADS_DEBUG),C_e=Ro.get(bo.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);y_e.socket=O_e;if(qj){let e;if(TL)e=Ro.get(bo.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Ci.info("Could not close debugger",t)}});else{let t=Ro.get(bo.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Qh()>=0&&(e=t+Qh())}if(e){let t=Ro.get(bo.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Ro.get(bo.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Ci.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&TL)try{require("inspector").open(9229)}catch(e){b_e<=1&&Ci.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&Ci.error("uncaughtException",e)});Ro.initSync();Jh.globals=N_e;Jh.listenOnPorts=Vj;Jh.startServers=$j;function $j(){let e=Ro.get(bo.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=Oy().loadRootComponents(!0).then(()=>{Fj?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)Hj.deliverSocket(i,s,o);else if(n.requestId)Hj.proxyRequest(n);else if(n.type===bo.ITC_EVENT_TYPES.SHUTDOWN){Ci.trace("received shutdown request",Ny);for(let c in Sf){let l=Sf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100;if(!l[f]){h&&l.closeAllConnections?.(),clearInterval(p);return}let E=l[f][h?"all":"idle"]?.()||[];if(E.length===0){h&&clearInterval(p);return}m===1?Ci.info(`Closing ${E.length} idle connections`):h&&Ci.warn(`Forcefully closing ${E.length} active connections`);for(let _=0,R=E.length;_<R;_++){let S=E[_].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
100
100
|
Connection: close\r
|
|
101
101
|
\r
|