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.
Files changed (26) hide show
  1. package/README.md +1 -1
  2. package/bin/harperdb.js +1 -1
  3. package/bin/lite.js +1 -1
  4. package/launchServiceScripts/launchNatsIngestService.js +1 -1
  5. package/launchServiceScripts/launchNatsReplyService.js +1 -1
  6. package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
  7. package/npm-shrinkwrap.json +41 -82
  8. package/package.json +1 -1
  9. package/server/jobs/jobProcess.js +1 -1
  10. package/server/threads/threadServer.js +1 -1
  11. package/studio/web/assets/{index-cZbhNKPv.js → index-BlG-cpH9.js} +2 -2
  12. package/studio/web/assets/{index-cZbhNKPv.js.map → index-BlG-cpH9.js.map} +1 -1
  13. package/studio/web/assets/{index-BMKHXWrK.js → index-BpmqvC1O.js} +5 -5
  14. package/studio/web/assets/{index-BMKHXWrK.js.map → index-BpmqvC1O.js.map} +1 -1
  15. package/studio/web/assets/{index-DP5O80Ld.js → index-DFovvBYL.js} +2 -2
  16. package/studio/web/assets/{index-DP5O80Ld.js.map → index-DFovvBYL.js.map} +1 -1
  17. package/studio/web/assets/{index.lazy-_WqXCxX6.js → index.lazy-BhReIK4y.js} +2 -2
  18. package/studio/web/assets/{index.lazy-_WqXCxX6.js.map → index.lazy-BhReIK4y.js.map} +1 -1
  19. package/studio/web/assets/{profiler-CiZIC7ZI.js → profiler-BhXa8xgR.js} +2 -2
  20. package/studio/web/assets/{profiler-CiZIC7ZI.js.map → profiler-BhXa8xgR.js.map} +1 -1
  21. package/studio/web/assets/{react-redux-D8H6oZRQ.js → react-redux-DkN7OdDj.js} +2 -2
  22. package/studio/web/assets/{react-redux-D8H6oZRQ.js.map → react-redux-DkN7OdDj.js.map} +1 -1
  23. package/studio/web/assets/{startRecording-oz3NQO5N.js → startRecording-Da15t52a.js} +2 -2
  24. package/studio/web/assets/{startRecording-oz3NQO5N.js.map → startRecording-Da15t52a.js.map} +1 -1
  25. package/studio/web/index.html +1 -1
  26. package/utility/scripts/restartHdb.js +1 -1
@@ -97,7 +97,7 @@ MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
97
97
  `:this.pem=`-----BEGIN PUBLIC KEY-----
98
98
  MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
99
99
  -----END PUBLIC KEY-----
100
- `}getKey(){return(0,UR.createPublicKey)(this.pem)}toString(){return this.pem}},vR=class extends TypeError{static{a(this,"LicenseEncodingError")}},Af=class extends TypeError{static{a(this,"InvalidLicenseError")}},CL=class extends Af{static{a(this,"InvalidLicenseSignatureError")}},tE=class extends Af{static{a(this,"InvalidHeaderError")}},MR=class extends Af{static{a(this,"InvalidPayloadError")}},eSe=new NL(oz.get(x.LICENSE_MODE));a(tSe,"validateLicenseSignature");a(rSe,"validateLicenseHeader");a(nSe,"valid");a(sSe,"validateLicensePayload");a(az,"validateLicense")});var xR={};ye(xR,{getActiveLicense:()=>vL,getUsageLicenses:()=>gz,getUsageLicensesOp:()=>UL,installUsageLicense:()=>DL,installUsageLicenseOp:()=>LL,isActiveLicense:()=>Ez,isLicensed:()=>ML,loadAndWatchLicensesDir:()=>aSe,recordUsage:()=>_z});async function LL(e){let t=e.license;try{await DL(t)}catch(r){let n=new dz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function DL(e){let t=az(e),{id:r}=t;if(await xe.system.hdb_license.get(r))throw new PL(`A usage license with ${r} already exists`);return bo.info?.("Installing usage license:",t),xe.system.hdb_license.put(r,t)}function Ez(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 vL(){let e=fz.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(Ez(n))return n}async function ML(){return await vL()!==void 0}async function _z(e){Na=bo.forComponent("license"),Na.trace?.("Recording usage into license from analytics");let t,r=(await vL())?.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.";lz||(console.error(n),lz=!0),uz===void 0&&(uz=setInterval(()=>{bo.notify(n)},iSe).unref())}}function UL(e){let t={};return e.region&&(t.region=e.region),gz(t)}function gz(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 oSe(e){bo.trace?.("Loading usage license from file:",e);let t=await pz.readFile(e,{encoding:"utf-8"});try{await DL(t)}catch(r){bo.error?.("Failed to install usage license from file:",e,r)}}function aSe(){let e=OL.default.join(OL.default.dirname(mz.getConfigFilePath()),"licenses");(0,hz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",oSe)}var dz,bo,fz,OL,mz,pz,hz,PL,lz,uz,iSe,Na,rE=ie(()=>{cz();dz=b(ge()),bo=b(Z());Yn();Ja();fz=b(ue());G();Oe();OL=b(require("node:path")),mz=b(wt()),pz=b(require("node:fs/promises")),hz=require("chokidar"),PL=class extends Error{static{a(this,"ExistingLicenseError")}};a(LL,"installUsageLicenseOp");a(DL,"installUsageLicense");lz=!1,iSe=6e5;a(Ez,"isActiveLicense");a(vL,"getActiveLicense");a(ML,"isLicensed");a(_z,"recordUsage");tC(_z);a(UL,"getUsageLicensesOp");a(gz,"getUsageLicenses");a(oSe,"loadLicenseFile");a(aSe,"loadAndWatchLicensesDir")});var qR={};ye(qR,{deliverSocket:()=>Pz,getHttpOptions:()=>dSe,getRequestId:()=>Mz,handleApplication:()=>uSe,httpServer:()=>$L,logRequest:()=>iE,proxyRequest:()=>fSe,registerServer:()=>GL,suppressHandleApplicationWarning:()=>lSe});function uSe(e){oE=e.options.getAll(),e.options.on("change",t=>{oE=e.options.getAll()})}function dSe(){return oE}function Pz(e,t,r){let n=e?.read?e:new bz.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=bf[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=bf[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 fSe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Sz.get(s),r){case"connection":i=Pz(void 0,t),Sz.set(s,i),i.write=(c,l,u)=>(FR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(FR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),FR.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 GL(e,t,r=!0){t||(t=vr.default.get(x.HTTP_PORT));let n=bf[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",yz),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else bf[t]=e;e.on("unhandled",yz)}function qL(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(x.HTTP_PORT)!=null&&t.push({port:vr.default.get(x.HTTP_PORT),secure:vr.default.get(x.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),vr.default.get(x.HTTP_SECUREPORT)!=null&&t.push({port:vr.default.get(x.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&vr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,Az.resolvePath)(vr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function $L(e,t){let r=[];for(let{port:n,secure:s}of qL(t))r.push(Lz(n,s,t)),typeof e=="function"?kL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,GL(e,n,!1)),kR[n]=HR(kL,n);return r}function Lz(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(LR(e,{protocol_name:t?"HTTPS":"HTTP",name:$R()}),!BR[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(x.HTTP_MAXHEADERSIZE)},f=vr.default.get(o+"_mtls"),m=vr.default.get(o+"_mtls_required"),p;if(t){let y=vr.default.get("tls");p=vr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,Iz.getTicketKeys)(),SNICallback:(0,wz.createTLSSelector)(s??"server",f),ciphers:y.ciphers??y[0]?.ciphers})}let h=a(async(y,S)=>{let R=performance.now(),I=0;try{let U=new hc(y,S);i&&(U.isOperationsServer=!0),oE.logging?.id&&(U.requestId=I=Mz());let k=await kR[e](U);if(!k){if(U._nodeResponse.statusCode){iE(y,U._nodeResponse.statusCode,I,performance.now()-R);return}k=Dz(U)}if(k.headers?.set||(k.headers=new Hs(k.headers)),await ML()?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 y.baseRequest=U,S.baseResponse=k,BR[e].emit("unhandled",y,S)}let X=k.status||200;S.statusCode=X;let J=performance.now(),Y=J-R,H=k.body,ae,de=!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&&(de=!0,H.on("size",et=>{S.headersSent||S.setHeader("Content-Length",et)})),H=H.stream()):(U.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(de){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=U.handlerPath,Ee=U.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),iE(y,X,I,Y),!ae)if(H instanceof ReadableStream&&(H=FL.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=FL.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(U){w(U)}function w(U){let k=U.headers,X=U.statusCode||500;try{S.writeHead(X,k&&(k[Symbol.iterator]?Array.from(k):k))}catch{}S.end(cSe(U)),iE(y,X,I,performance.now()-R),U.statusCode?U.statusCode===500?Ca.default.warn(U):Ca.default.info(U):Ca.default.error(U)}a(w,"onError")},"requestHandler"),E=DR(h,(y,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},vr.default.get(o+"_requestQueueLimit")),_=BR[e]=(t?p?Nz.createSecureServer:Cz.createServer:GR.createServer)(d,(y,S)=>{let R=y.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?h(y,S):E(y,S)});c>=0&&(_.keepAliveTimeout=c),u>=0&&(_.headersTimeout=u),t&&(_.ports||(_.ports=[]),_.ports.push(e),d.SNICallback.initialize(_),f&&(_.mtlsConfig=f),_.on("secureConnection",y=>{y._parent.startTime&&qe(performance.now()-y._parent.startTime,"tls-handshake",e),qe(y.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),GL(_,e)}return BR[e]}function HR(e,t){let r=Dz;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 Dz(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hs}}function mSe(e,t){$L(e,{requestOnly:!0,...t})}function vz(e,t){for(let{port:r}of qL(t))Tz[t?.runFirst?"unshift":"push"]({listener:e,port:r}),HL[r]=HR(Tz,r)}function pSe(e,t){let r=[];for(let{port:n,secure:s}of qL(t)){LR(n,{protocol_name:s?"WSS":"WS",name:$R()});let i=Lz(n,s,t);nE[n]||(nE[n]=new Oz.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),nE[n].on("connection",(o,c)=>{try{let l=new hc(c);l.isWebSocket=!0;let u=kR[n](l);Ca.default.debug("Received WS connection, calling listeners",xL),Rz[n](o,l,u)}catch(l){Ca.default.warn("Error in handling WS connection",l)}}),vz((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):nE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),nE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{HL[n]&&HL[n](o,c,l)})),r.push(i),xL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),Rz[n]=HR(xL,n),kR[n]=HR(kL,n)}return r}function yz(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
100
+ `}getKey(){return(0,UR.createPublicKey)(this.pem)}toString(){return this.pem}},vR=class extends TypeError{static{a(this,"LicenseEncodingError")}},Af=class extends TypeError{static{a(this,"InvalidLicenseError")}},CL=class extends Af{static{a(this,"InvalidLicenseSignatureError")}},tE=class extends Af{static{a(this,"InvalidHeaderError")}},MR=class extends Af{static{a(this,"InvalidPayloadError")}},eSe=new NL(oz.get(x.LICENSE_MODE));a(tSe,"validateLicenseSignature");a(rSe,"validateLicenseHeader");a(nSe,"valid");a(sSe,"validateLicensePayload");a(az,"validateLicense")});var xR={};ye(xR,{getActiveLicense:()=>vL,getUsageLicenses:()=>gz,getUsageLicensesOp:()=>UL,installUsageLicense:()=>DL,installUsageLicenseOp:()=>LL,isActiveLicense:()=>Ez,isLicensed:()=>ML,loadAndWatchLicensesDir:()=>aSe,recordUsage:()=>_z});async function LL(e){let t=e.license;try{await DL(t)}catch(r){let n=new dz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function DL(e){let t=az(e),{id:r}=t;if(await xe.system.hdb_license.get(r))throw new PL(`A usage license with ${r} already exists`);return bo.info?.("Installing usage license:",t),xe.system.hdb_license.put(r,t)}function Ez(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 vL(){let e=fz.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(Ez(n))return n}async function ML(){return await vL()!==void 0}async function _z(e){Na=bo.forComponent("license"),Na.trace?.("Recording usage into license from analytics");let t,r=(await vL())?.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.";lz||(console.error(n),lz=!0),uz===void 0&&(uz=setInterval(()=>{bo.notify(n)},iSe).unref())}}function UL(e){let t={};return e.region&&(t.region=e.region),gz(t)}function gz(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 oSe(e){bo.trace?.("Loading usage license from file:",e);let t=await pz.readFile(e,{encoding:"utf-8"});try{await DL(t)}catch(r){bo.error?.("Failed to install usage license from file:",e,r)}}function aSe(){let e=OL.default.join(OL.default.dirname(mz.getConfigFilePath()),"licenses");(0,hz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",oSe)}var dz,bo,fz,OL,mz,pz,hz,PL,lz,uz,iSe,Na,rE=ie(()=>{cz();dz=b(ge()),bo=b(Z());Yn();Ja();fz=b(ue());G();Oe();OL=b(require("node:path")),mz=b(wt()),pz=b(require("node:fs/promises")),hz=require("chokidar"),PL=class extends Error{static{a(this,"ExistingLicenseError")}};a(LL,"installUsageLicenseOp");a(DL,"installUsageLicense");lz=!1,iSe=6e5;a(Ez,"isActiveLicense");a(vL,"getActiveLicense");a(ML,"isLicensed");a(_z,"recordUsage");tC(_z);a(UL,"getUsageLicensesOp");a(gz,"getUsageLicenses");a(oSe,"loadLicenseFile");a(aSe,"loadAndWatchLicensesDir")});var qR={};ye(qR,{deliverSocket:()=>Pz,getHttpOptions:()=>dSe,getRequestId:()=>Mz,handleApplication:()=>uSe,httpServer:()=>$L,logRequest:()=>iE,proxyRequest:()=>fSe,registerServer:()=>GL,suppressHandleApplicationWarning:()=>lSe});function uSe(e){oE=e.options.getAll(),e.options.on("change",t=>{oE=e.options.getAll()})}function dSe(){return oE}function Pz(e,t,r){let n=e?.read?e:new bz.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=bf[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=bf[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 fSe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Sz.get(s),r){case"connection":i=Pz(void 0,t),Sz.set(s,i),i.write=(c,l,u)=>(FR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(FR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),FR.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 GL(e,t,r=!0){t||(t=vr.default.get(x.HTTP_PORT));let n=bf[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",yz),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else bf[t]=e;e.on("unhandled",yz)}function qL(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(x.HTTP_PORT)!=null&&t.push({port:vr.default.get(x.HTTP_PORT),secure:vr.default.get(x.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),vr.default.get(x.HTTP_SECUREPORT)!=null&&t.push({port:vr.default.get(x.HTTP_SECUREPORT),secure:!0})),e?.usageType==="operations-api"&&vr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,Az.resolvePath)(vr.default.get(x.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function $L(e,t){let r=[];for(let{port:n,secure:s}of qL(t))r.push(Lz(n,s,t)),typeof e=="function"?kL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,GL(e,n,!1)),kR[n]=HR(kL,n);return r}function Lz(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(LR(e,{protocol_name:t?"HTTPS":"HTTP",name:$R()}),!BR[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(x.HTTP_MAXHEADERSIZE)},f=vr.default.get(o+"_mtls"),m=vr.default.get(o+"_mtls_required"),p;if(t){let y=vr.default.get("tls");p=vr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,Iz.getTicketKeys)(),SNICallback:(0,wz.createTLSSelector)(s??"server",f),ciphers:y.ciphers??y[0]?.ciphers})}let h=a(async(y,S)=>{let R=performance.now(),I=0;try{let U=new hc(y,S);i&&(U.isOperationsServer=!0),oE.logging?.id&&(U.requestId=I=Mz());let k=await kR[e](U);if(!k){if(U._nodeResponse.statusCode){iE(y,U._nodeResponse.statusCode,I,performance.now()-R);return}k=Dz(U)}if(k.headers?.set||(k.headers=new Hs(k.headers)),await ML()?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 y.baseRequest=U,S.baseResponse=k,BR[e].emit("unhandled",y,S)}let X=k.status||200;S.statusCode=X;let J=performance.now(),Y=J-R,H=k.body,ae,de=!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&&(de=!0,H.on("size",et=>{S.headersSent||S.setHeader("Content-Length",et)})),H=H.stream()):(U.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(de){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=U.handlerPath,Ee=U.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),iE(y,X,I,Y),!ae)if(H instanceof ReadableStream&&(H=FL.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=FL.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(U){w(U)}function w(U){let k=U.headers,X=U.statusCode||500;try{S.writeHead(X,k&&(k[Symbol.iterator]?Array.from(k):k))}catch{}S.end(cSe(U)),iE(y,X,I,performance.now()-R),U.statusCode?U.statusCode===500?Ca.default.warn(U):Ca.default.info(U):Ca.default.error(U)}a(w,"onError")},"requestHandler"),E=DR(h,(y,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},vr.default.get(o+"_requestQueueLimit")),_=BR[e]=(t?p?Nz.createSecureServer:Cz.createServer:GR.createServer)(d,(y,S)=>{let R=y.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?h(y,S):E(y,S)});c>=0&&(_.keepAliveTimeout=c),u>=0&&(_.headersTimeout=u),t&&(_.ports||(_.ports=[]),_.ports.push(e),d.SNICallback.initialize(_),f&&(_.mtlsConfig=f),_.on("secureConnection",y=>{y._parent.startTime&&qe(performance.now()-y._parent.startTime,"tls-handshake",e),qe(y.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),GL(_,e)}return BR[e]}function HR(e,t){let r=Dz;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 Dz(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hs}}function mSe(e,t){$L(e,{requestOnly:!0,...t})}function vz(e,t){for(let{port:r}of qL(t))Tz[t?.runFirst?"unshift":"push"]({listener:e,port:r}),HL[r]=HR(Tz,r)}function pSe(e,t){let r=[];for(let{port:n,secure:s}of qL(t)){LR(n,{protocol_name:s?"WSS":"WS",name:$R()});let i=Lz(n,s,t);nE[n]||(nE[n]=new Oz.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),nE[n].on("connection",(o,c)=>{try{let l=new hc(c);l.isWebSocket=!0;let u=kR[n](l);Ca.default.debug("Received WS connection, calling listeners",xL),Rz[n](o,l,u)}catch(l){Ca.default.warn("Error in handling WS connection",l)}}),vz((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):nE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),nE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{HL[n]&&HL[n](o,c,l)})),r.push(i),xL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),Rz[n]=HR(xL,n),kR[n]=HR(kL,n)}return r}function yz(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
101
101
  `),iE(e,404,0,e.requestId))}function iE(e,t,r,n){let s=oE.logging;if(s){BL||(BL=Ca.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";BL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+hSe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function hSe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function Mz(){return sE||(sE=new BigInt64Array([1n]),sE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",sE.buffer))),Number(Atomics.add(sE,0,1n))}var bz,Ca,FR,vr,Az,Iz,wz,Nz,Cz,GR,FL,Oz,cSe,nE,BR,kR,kL,oE,lSe,Sz,Tz,HL,xL,Rz,BL,sE,VL=ie(()=>{bz=require("node:net"),Ca=b(Z()),FR=require("node:worker_threads"),vr=b(ue());G();Az=b(wt()),Iz=b(rt()),wz=b(Rs()),Nz=require("node:http2"),Cz=require("node:https"),GR=require("node:http");jp();Wp();ds();Yn();FL=require("node:stream");qr();bL();If();wL();Oz=require("ws");rE();({errorToString:cSe}=Ca.default);Ue.http=$L;Ue.request=mSe;Ue.ws=pSe;Ue.upgrade=vz;nE={},BR={},kR={},kL=[],oE={},lSe=!0;a(uSe,"handleApplication");a(dSe,"getHttpOptions");a(Pz,"deliverSocket");Sz=new Map;a(fSe,"proxyRequest");a(GL,"registerServer");a(qL,"getPorts");a($L,"httpServer");a(Lz,"getHTTPServer");a(HR,"makeCallbackChain");a(Dz,"unhandled");a(mSe,"onRequest");Object.defineProperty(GR.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){}});Tz=[],HL={};a(vz,"onUpgrade");xL=[],Rz={};a(pSe,"onWebSocket");a(yz,"defaultNotFound");a(iE,"logRequest");a(hSe,"headersToString");a(Mz,"getRequestId")});var YL=M(lE=>{"use strict";C_();var{isMainThread:KL,parentPort:Uz,threadId:VR,workerData:ESe}=require("node:worker_threads"),{createServer:_Se}=require("node:net"),{unlinkSync:gSe,existsSync:SSe}=require("fs"),Fz;lE.whenComponentsLoaded=new Promise(e=>{Fz=e});var Li=Z(),Ao=ue(),Io=(G(),P(Q)),{server:TSe}=(qr(),P(Mm)),{createServer:RSe}=require("node:tls"),{restartNumber:ySe,getWorkerIndex:cE}=rt(),{createReuseportFd:aE}=(jp(),P(t$)),{createTLSSelector:bSe}=Rs(),{startupLog:ASe}=KR(),{SERVERS:wf,setPortServerMap:xz,portServer:ISe}=(bL(),P(rz)),Bz=(VL(),P(qR)),wSe=mi(),kz=Ao.get(Io.CONFIG_PARAMS.THREADS_DEBUG),NSe=Ao.get(Io.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);TSe.socket=CSe;if(kz){let e;if(KL)e=Ao.get(Io.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Li.info("Could not close debugger",t)}});else{let t=Ao.get(Io.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&cE()>=0&&(e=t+cE())}if(e){let t=Ao.get(Io.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Ao.get(Io.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Li.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&KL)try{require("inspector").open(9229)}catch(e){ySe<=1&&Li.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"&&Li.error("uncaughtException",e)});Ao.initSync();lE.globals=wSe;lE.listenOnPorts=Gz;lE.startServers=Hz;function Hz(){let e=Ao.get(Io.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=YR().loadRootComponents(!0).then(()=>{Uz?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)Bz.deliverSocket(i,s,o);else if(n.requestId)Bz.proxyRequest(n);else if(n.type===Io.ITC_EVENT_TYPES.SHUTDOWN){Li.trace("received shutdown request",VR);for(let c in wf){let l=wf[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?Li.info(`Closing ${E.length} idle connections`):h&&Li.warn(`Forcefully closing ${E.length} active connections`);for(let _=0,y=E.length;_<y;_++){let S=E[_].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
102
102
  Connection: close\r
103
103
  \r
@@ -97,7 +97,7 @@ MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
97
97
  `:this.pem=`-----BEGIN PUBLIC KEY-----
98
98
  MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
99
99
  -----END PUBLIC KEY-----
100
- `}getKey(){return(0,iR.createPublicKey)(this.pem)}toString(){return this.pem}},nR=class extends TypeError{static{a(this,"LicenseEncodingError")}},xf=class extends TypeError{static{a(this,"InvalidLicenseError")}},VL=class extends xf{static{a(this,"InvalidLicenseSignatureError")}},SE=class extends xf{static{a(this,"InvalidHeaderError")}},sR=class extends xf{static{a(this,"InvalidPayloadError")}},lSe=new $L(qz.get(U.LICENSE_MODE));a(uSe,"validateLicenseSignature");a(dSe,"validateLicenseHeader");a(fSe,"valid");a(mSe,"validateLicensePayload");a($z,"validateLicense")});var oR={};Re(oR,{getActiveLicense:()=>zL,getUsageLicenses:()=>e4,getUsageLicensesOp:()=>JL,installUsageLicense:()=>jL,installUsageLicenseOp:()=>WL,isActiveLicense:()=>Xz,isLicensed:()=>QL,loadAndWatchLicensesDir:()=>ESe,recordUsage:()=>Zz});async function WL(e){let t=e.license;try{await jL(t)}catch(r){let n=new Wz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function jL(e){let t=$z(e),{id:r}=t;if(await xe.system.hdb_license.get(r))throw new YL(`A usage license with ${r} already exists`);return No.info?.("Installing usage license:",t),xe.system.hdb_license.put(r,t)}function Xz(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 zL(){let e=jz.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(Xz(n))return n}async function QL(){return await zL()!==void 0}async function Zz(e){Da=No.forComponent("license"),Da.trace?.("Recording usage into license from analytics");let t,r=(await zL())?.id;if(r){Da.trace?.("Found license to record usage into:",r);let n={};It(n,()=>{t=xe.system.hdb_license.update(r,n);for(let s of e)switch(Da.trace?.("Processing analytics record:",s),s.metric){case"db-read":Da.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Da.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Da.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"&&(Da.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Da.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.";Kz||(console.error(n),Kz=!0),Yz===void 0&&(Yz=setInterval(()=>{No.notify(n)},pSe).unref())}}function JL(e){let t={};return e.region&&(t.region=e.region),e4(t)}function e4(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 hSe(e){No.trace?.("Loading usage license from file:",e);let t=await Qz.readFile(e,{encoding:"utf-8"});try{await jL(t)}catch(r){No.error?.("Failed to install usage license from file:",e,r)}}function ESe(){let e=KL.default.join(KL.default.dirname(zz.getConfigFilePath()),"licenses");(0,Jz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",hSe)}var Wz,No,jz,KL,zz,Qz,Jz,YL,Kz,Yz,pSe,Da,TE=ie(()=>{Vz();Wz=b(ge()),No=b(ee());Hn();ec();jz=b(fe());$();Oe();KL=b(require("node:path")),zz=b(At()),Qz=b(require("node:fs/promises")),Jz=require("chokidar"),YL=class extends Error{static{a(this,"ExistingLicenseError")}};a(WL,"installUsageLicenseOp");a(jL,"installUsageLicense");Kz=!1,pSe=6e5;a(Xz,"isActiveLicense");a(zL,"getActiveLicense");a(QL,"isLicensed");a(Zz,"recordUsage");TI(Zz);a(JL,"getUsageLicensesOp");a(e4,"getUsageLicenses");a(hSe,"loadLicenseFile");a(ESe,"loadAndWatchLicensesDir")});var fR={};Re(fR,{deliverSocket:()=>f4,getHttpOptions:()=>TSe,getRequestId:()=>E4,handleApplication:()=>SSe,httpServer:()=>iD,logRequest:()=>bE,proxyRequest:()=>ySe,registerServer:()=>nD,suppressHandleApplicationWarning:()=>gSe});function SSe(e){AE=e.options.getAll(),e.options.on("change",t=>{AE=e.options.getAll()})}function TSe(){return AE}function f4(e,t,r){let n=e?.read?e:new i4.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Uf[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=Uf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(va.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function ySe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=t4.get(s),r){case"connection":i=f4(void 0,t),t4.set(s,i),i.write=(c,l,u)=>(cR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(cR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),cR.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=Mr.default.get(U.HTTP_PORT));let n=Uf[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",s4),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Uf[t]=e;e.on("unhandled",s4)}function sD(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=[],Mr.default.get(U.HTTP_PORT)!=null&&t.push({port:Mr.default.get(U.HTTP_PORT),secure:Mr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Mr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Mr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Mr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,o4.resolvePath)(Mr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function iD(e,t){let r=[];for(let{port:n,secure:s}of sD(t))r.push(m4(n,s,t)),typeof e=="function"?tD[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,nD(e,n,!1)),lR[n]=uR(tD,n);return r}function m4(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(rR(e,{protocol_name:t?"HTTPS":"HTTP",name:mR()}),!aR[e]){let o=i?"operationsApi_network":"http",c=Mr.default.get(o+"_keepAliveTimeout"),l=Mr.default.get(o+"_timeout"),u=Mr.default.get(o+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Mr.default.get(U.HTTP_MAXHEADERSIZE)},f=Mr.default.get(o+"_mtls"),m=Mr.default.get(o+"_mtls_required"),p;if(t){let R=Mr.default.get("tls");p=Mr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,a4.getTicketKeys)(),SNICallback:(0,c4.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 Sc(R,S);i&&(M.isOperationsServer=!0),AE.logging?.id&&(M.requestId=I=E4());let k=await lR[e](M);if(!k){if(M._nodeResponse.statusCode){bE(R,M._nodeResponse.statusCode,I,performance.now()-y);return}k=p4(M)}if(k.headers?.set||(k.headers=new $s(k.headers)),await QL()?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,aR[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 xs&&(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"),zp(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"),rn(X<400,"success",oe,Ee),rn(1,"response_"+X,oe,Ee),bE(R,X,I,Y),!ae)if(H instanceof ReadableStream&&(H=eD.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=eD.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(_Se(M)),bE(R,X,I,performance.now()-y),M.statusCode?M.statusCode===500?va.default.warn(M):va.default.info(M):va.default.error(M)}a(w,"onError")},"requestHandler"),E=RS(h,(R,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},Mr.default.get(o+"_requestQueueLimit")),_=aR[e]=(t?p?l4.createSecureServer:u4.createServer:dR.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 aR[e]}function uR(e,t){let r=p4;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 p4(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new $s}}function RSe(e,t){iD(e,{requestOnly:!0,...t})}function h4(e,t){for(let{port:r}of sD(t))r4[t?.runFirst?"unshift":"push"]({listener:e,port:r}),rD[r]=uR(r4,r)}function bSe(e,t){let r=[];for(let{port:n,secure:s}of sD(t)){rR(n,{protocol_name:s?"WSS":"WS",name:mR()});let i=m4(n,s,t);yE[n]||(yE[n]=new d4.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),yE[n].on("connection",(o,c)=>{try{let l=new Sc(c);l.isWebSocket=!0;let u=lR[n](l);va.default.debug("Received WS connection, calling listeners",XL),n4[n](o,l,u)}catch(l){va.default.warn("Error in handling WS connection",l)}}),h4((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):yE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),yE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{rD[n]&&rD[n](o,c,l)})),r.push(i),XL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),n4[n]=uR(XL,n),lR[n]=uR(tD,n)}return r}function s4(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
100
+ `}getKey(){return(0,iR.createPublicKey)(this.pem)}toString(){return this.pem}},nR=class extends TypeError{static{a(this,"LicenseEncodingError")}},xf=class extends TypeError{static{a(this,"InvalidLicenseError")}},VL=class extends xf{static{a(this,"InvalidLicenseSignatureError")}},SE=class extends xf{static{a(this,"InvalidHeaderError")}},sR=class extends xf{static{a(this,"InvalidPayloadError")}},lSe=new $L(qz.get(U.LICENSE_MODE));a(uSe,"validateLicenseSignature");a(dSe,"validateLicenseHeader");a(fSe,"valid");a(mSe,"validateLicensePayload");a($z,"validateLicense")});var oR={};Re(oR,{getActiveLicense:()=>zL,getUsageLicenses:()=>e4,getUsageLicensesOp:()=>JL,installUsageLicense:()=>jL,installUsageLicenseOp:()=>WL,isActiveLicense:()=>Xz,isLicensed:()=>QL,loadAndWatchLicensesDir:()=>ESe,recordUsage:()=>Zz});async function WL(e){let t=e.license;try{await jL(t)}catch(r){let n=new Wz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function jL(e){let t=$z(e),{id:r}=t;if(await xe.system.hdb_license.get(r))throw new YL(`A usage license with ${r} already exists`);return No.info?.("Installing usage license:",t),xe.system.hdb_license.put(r,t)}function Xz(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 zL(){let e=jz.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(Xz(n))return n}async function QL(){return await zL()!==void 0}async function Zz(e){Da=No.forComponent("license"),Da.trace?.("Recording usage into license from analytics");let t,r=(await zL())?.id;if(r){Da.trace?.("Found license to record usage into:",r);let n={};It(n,()=>{t=xe.system.hdb_license.update(r,n);for(let s of e)switch(Da.trace?.("Processing analytics record:",s),s.metric){case"db-read":Da.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Da.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Da.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"&&(Da.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Da.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.";Kz||(console.error(n),Kz=!0),Yz===void 0&&(Yz=setInterval(()=>{No.notify(n)},pSe).unref())}}function JL(e){let t={};return e.region&&(t.region=e.region),e4(t)}function e4(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 hSe(e){No.trace?.("Loading usage license from file:",e);let t=await Qz.readFile(e,{encoding:"utf-8"});try{await jL(t)}catch(r){No.error?.("Failed to install usage license from file:",e,r)}}function ESe(){let e=KL.default.join(KL.default.dirname(zz.getConfigFilePath()),"licenses");(0,Jz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",hSe)}var Wz,No,jz,KL,zz,Qz,Jz,YL,Kz,Yz,pSe,Da,TE=ie(()=>{Vz();Wz=b(ge()),No=b(ee());Hn();ec();jz=b(fe());$();Oe();KL=b(require("node:path")),zz=b(At()),Qz=b(require("node:fs/promises")),Jz=require("chokidar"),YL=class extends Error{static{a(this,"ExistingLicenseError")}};a(WL,"installUsageLicenseOp");a(jL,"installUsageLicense");Kz=!1,pSe=6e5;a(Xz,"isActiveLicense");a(zL,"getActiveLicense");a(QL,"isLicensed");a(Zz,"recordUsage");TI(Zz);a(JL,"getUsageLicensesOp");a(e4,"getUsageLicenses");a(hSe,"loadLicenseFile");a(ESe,"loadAndWatchLicensesDir")});var fR={};Re(fR,{deliverSocket:()=>f4,getHttpOptions:()=>TSe,getRequestId:()=>E4,handleApplication:()=>SSe,httpServer:()=>iD,logRequest:()=>bE,proxyRequest:()=>ySe,registerServer:()=>nD,suppressHandleApplicationWarning:()=>gSe});function SSe(e){AE=e.options.getAll(),e.options.on("change",t=>{AE=e.options.getAll()})}function TSe(){return AE}function f4(e,t,r){let n=e?.read?e:new i4.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Uf[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=Uf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(va.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function ySe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=t4.get(s),r){case"connection":i=f4(void 0,t),t4.set(s,i),i.write=(c,l,u)=>(cR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(cR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),cR.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=Mr.default.get(U.HTTP_PORT));let n=Uf[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",s4),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Uf[t]=e;e.on("unhandled",s4)}function sD(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=[],Mr.default.get(U.HTTP_PORT)!=null&&t.push({port:Mr.default.get(U.HTTP_PORT),secure:Mr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Mr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Mr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.usageType==="operations-api"&&Mr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,o4.resolvePath)(Mr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function iD(e,t){let r=[];for(let{port:n,secure:s}of sD(t))r.push(m4(n,s,t)),typeof e=="function"?tD[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,nD(e,n,!1)),lR[n]=uR(tD,n);return r}function m4(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(rR(e,{protocol_name:t?"HTTPS":"HTTP",name:mR()}),!aR[e]){let o=i?"operationsApi_network":"http",c=Mr.default.get(o+"_keepAliveTimeout"),l=Mr.default.get(o+"_timeout"),u=Mr.default.get(o+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Mr.default.get(U.HTTP_MAXHEADERSIZE)},f=Mr.default.get(o+"_mtls"),m=Mr.default.get(o+"_mtls_required"),p;if(t){let R=Mr.default.get("tls");p=Mr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,a4.getTicketKeys)(),SNICallback:(0,c4.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 Sc(R,S);i&&(M.isOperationsServer=!0),AE.logging?.id&&(M.requestId=I=E4());let k=await lR[e](M);if(!k){if(M._nodeResponse.statusCode){bE(R,M._nodeResponse.statusCode,I,performance.now()-y);return}k=p4(M)}if(k.headers?.set||(k.headers=new $s(k.headers)),await QL()?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,aR[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 xs&&(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"),zp(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"),rn(X<400,"success",oe,Ee),rn(1,"response_"+X,oe,Ee),bE(R,X,I,Y),!ae)if(H instanceof ReadableStream&&(H=eD.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=eD.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(_Se(M)),bE(R,X,I,performance.now()-y),M.statusCode?M.statusCode===500?va.default.warn(M):va.default.info(M):va.default.error(M)}a(w,"onError")},"requestHandler"),E=RS(h,(R,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},Mr.default.get(o+"_requestQueueLimit")),_=aR[e]=(t?p?l4.createSecureServer:u4.createServer:dR.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 aR[e]}function uR(e,t){let r=p4;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 p4(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new $s}}function RSe(e,t){iD(e,{requestOnly:!0,...t})}function h4(e,t){for(let{port:r}of sD(t))r4[t?.runFirst?"unshift":"push"]({listener:e,port:r}),rD[r]=uR(r4,r)}function bSe(e,t){let r=[];for(let{port:n,secure:s}of sD(t)){rR(n,{protocol_name:s?"WSS":"WS",name:mR()});let i=m4(n,s,t);yE[n]||(yE[n]=new d4.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),yE[n].on("connection",(o,c)=>{try{let l=new Sc(c);l.isWebSocket=!0;let u=lR[n](l);va.default.debug("Received WS connection, calling listeners",XL),n4[n](o,l,u)}catch(l){va.default.warn("Error in handling WS connection",l)}}),h4((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):yE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),yE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{rD[n]&&rD[n](o,c,l)})),r.push(i),XL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),n4[n]=uR(XL,n),lR[n]=uR(tD,n)}return r}function s4(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
101
101
  `),bE(e,404,0,e.requestId))}function bE(e,t,r,n){let s=AE.logging;if(s){ZL||(ZL=va.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";ZL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+ASe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function ASe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function E4(){return RE||(RE=new BigInt64Array([1n]),RE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",RE.buffer))),Number(Atomics.add(RE,0,1n))}var i4,va,cR,Mr,o4,a4,c4,l4,u4,dR,eD,d4,_Se,yE,aR,lR,tD,AE,gSe,t4,r4,rD,XL,n4,ZL,RE,oD=ie(()=>{i4=require("node:net"),va=b(ee()),cR=require("node:worker_threads"),Mr=b(fe());$();o4=b(At()),a4=b(at()),c4=b(bs()),l4=require("node:http2"),u4=require("node:https"),dR=require("node:http");mh();Qp();cs();Hn();eD=require("node:stream");qr();qL();Bf();WN();d4=require("ws");TE();({errorToString:_Se}=va.default);Ue.http=iD;Ue.request=RSe;Ue.ws=bSe;Ue.upgrade=h4;yE={},aR={},lR={},tD=[],AE={},gSe=!0;a(SSe,"handleApplication");a(TSe,"getHttpOptions");a(f4,"deliverSocket");t4=new Map;a(ySe,"proxyRequest");a(nD,"registerServer");a(sD,"getPorts");a(iD,"httpServer");a(m4,"getHTTPServer");a(uR,"makeCallbackChain");a(p4,"unhandled");a(RSe,"onRequest");Object.defineProperty(dR.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){}});r4=[],rD={};a(h4,"onUpgrade");XL=[],n4={};a(bSe,"onWebSocket");a(s4,"defaultNotFound");a(bE,"logRequest");a(ASe,"headersToString");a(E4,"getRequestId")});var cD=x(NE=>{"use strict";PA();var{isMainThread:aD,parentPort:_4,threadId:pR,workerData:ISe}=require("node:worker_threads"),{createServer:wSe}=require("node:net"),{unlinkSync:NSe,existsSync:CSe}=require("fs"),T4;NE.whenComponentsLoaded=new Promise(e=>{T4=e});var Li=ee(),Co=fe(),Oo=($(),L(Q)),{server:OSe}=(qr(),L(ym)),{createServer:PSe}=require("node:tls"),{restartNumber:LSe,getWorkerIndex:wE}=at(),{createReuseportFd:IE}=(mh(),L(Y$)),{createTLSSelector:DSe}=bs(),{startupLog:vSe}=hR(),{SERVERS:Ff,setPortServerMap:g4,portServer:MSe}=(qL(),L(Gz)),S4=(oD(),L(fR)),USe=fi(),y4=Co.get(Oo.CONFIG_PARAMS.THREADS_DEBUG),xSe=Co.get(Oo.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);OSe.socket=BSe;if(y4){let e;if(aD)e=Co.get(Oo.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Li.info("Could not close debugger",t)}});else{let t=Co.get(Oo.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&wE()>=0&&(e=t+wE())}if(e){let t=Co.get(Oo.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Co.get(Oo.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Li.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&aD)try{require("inspector").open(9229)}catch(e){LSe<=1&&Li.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"&&Li.error("uncaughtException",e)});Co.initSync();NE.globals=USe;NE.listenOnPorts=b4;NE.startServers=R4;function R4(){let e=Co.get(Oo.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=ER().loadRootComponents(!0).then(()=>{_4?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)S4.deliverSocket(i,s,o);else if(n.requestId)S4.proxyRequest(n);else if(n.type===Oo.ITC_EVENT_TYPES.SHUTDOWN){Li.trace("received shutdown request",pR);for(let c in Ff){let l=Ff[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?Li.info(`Closing ${E.length} idle connections`):h&&Li.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
102
102
  Connection: close\r
103
103
  \r
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "harperdb",
3
- "version": "4.7.21",
3
+ "version": "4.7.22",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "harperdb",
9
- "version": "4.7.21",
9
+ "version": "4.7.22",
10
10
  "hasInstallScript": true,
11
11
  "license": "SEE LICENSE IN LICENSE",
12
12
  "dependencies": {
@@ -1143,9 +1143,9 @@
1143
1143
  }
1144
1144
  },
1145
1145
  "node_modules/@cbor-extract/cbor-extract-darwin-arm64": {
1146
- "version": "2.2.0",
1147
- "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.2.0.tgz",
1148
- "integrity": "sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==",
1146
+ "version": "2.2.1",
1147
+ "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.2.1.tgz",
1148
+ "integrity": "sha512-ubDPxTvFufYt2wYpBIbp9AP4uKKm55AVrXJyGkLbpKyk8+01KCKDGeB66JTZCGflSsAPRIluLHWI1P8ntEZShQ==",
1149
1149
  "cpu": [
1150
1150
  "arm64"
1151
1151
  ],
@@ -1156,9 +1156,9 @@
1156
1156
  ]
1157
1157
  },
1158
1158
  "node_modules/@cbor-extract/cbor-extract-darwin-x64": {
1159
- "version": "2.2.0",
1160
- "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.2.0.tgz",
1161
- "integrity": "sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==",
1159
+ "version": "2.2.1",
1160
+ "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.2.1.tgz",
1161
+ "integrity": "sha512-lzJAun76gwY4rgeklyNuPROeo7kYLh0lK+Jji9J7OX3UfSV7EpjDNGKT7wotzGpF0Qm36bOtlCNvE+VsUin1gQ==",
1162
1162
  "cpu": [
1163
1163
  "x64"
1164
1164
  ],
@@ -1169,9 +1169,9 @@
1169
1169
  ]
1170
1170
  },
1171
1171
  "node_modules/@cbor-extract/cbor-extract-linux-arm": {
1172
- "version": "2.2.0",
1173
- "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.2.0.tgz",
1174
- "integrity": "sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==",
1172
+ "version": "2.2.1",
1173
+ "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.2.1.tgz",
1174
+ "integrity": "sha512-J5MjNKc4ecV56jOYDDMp0CfGyqQgoOgTwsEjra7YJdJic1YzGEyPedZStcpS0E1bdEyPOOJOfbFLRpgtFosZ/Q==",
1175
1175
  "cpu": [
1176
1176
  "arm"
1177
1177
  ],
@@ -1182,9 +1182,9 @@
1182
1182
  ]
1183
1183
  },
1184
1184
  "node_modules/@cbor-extract/cbor-extract-linux-arm64": {
1185
- "version": "2.2.0",
1186
- "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.2.0.tgz",
1187
- "integrity": "sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==",
1185
+ "version": "2.2.1",
1186
+ "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.2.1.tgz",
1187
+ "integrity": "sha512-OFdIWOrSCSE8IRVAzHX5Js1TSvmQCcZbsB+wpXlZLFhIFbXlvF8VmXSHtBkK8pLfs9nvfsg3zz3ZIG10EKazHQ==",
1188
1188
  "cpu": [
1189
1189
  "arm64"
1190
1190
  ],
@@ -1195,9 +1195,9 @@
1195
1195
  ]
1196
1196
  },
1197
1197
  "node_modules/@cbor-extract/cbor-extract-linux-x64": {
1198
- "version": "2.2.0",
1199
- "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-x64/-/cbor-extract-linux-x64-2.2.0.tgz",
1200
- "integrity": "sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw==",
1198
+ "version": "2.2.1",
1199
+ "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-x64/-/cbor-extract-linux-x64-2.2.1.tgz",
1200
+ "integrity": "sha512-f7gB4h/CaR66hTAmooJ6uIuCNl4SmBGJAQx+ED9eIJIZtOhkyeeRrBw383cIdHiLbvr/wBVZ31RnyqFLRCmu1g==",
1201
1201
  "cpu": [
1202
1202
  "x64"
1203
1203
  ],
@@ -1208,9 +1208,9 @@
1208
1208
  ]
1209
1209
  },
1210
1210
  "node_modules/@cbor-extract/cbor-extract-win32-x64": {
1211
- "version": "2.2.0",
1212
- "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.2.0.tgz",
1213
- "integrity": "sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==",
1211
+ "version": "2.2.1",
1212
+ "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.2.1.tgz",
1213
+ "integrity": "sha512-diYmdTuTTNjTfmb9A+Xq5ZOtLP6JW2SuGXqV25ZbnXjuhdEO/Vn8tX3QPmKqnPOf7SyFQVpAVwU5w9B53y3P4g==",
1214
1214
  "cpu": [
1215
1215
  "x64"
1216
1216
  ],
@@ -1230,15 +1230,13 @@
1230
1230
  }
1231
1231
  },
1232
1232
  "node_modules/@datadog/pprof": {
1233
- "version": "5.13.4",
1234
- "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-5.13.4.tgz",
1235
- "integrity": "sha512-tX9ntTBh/pGFzZJ/dOkiZrtQ1pLMyX6liGyB5E7MpSQAXcCPj4Fh9yvZtqkKepwQn/0RWayCtZbwM3ikbh+c4w==",
1233
+ "version": "5.13.5",
1234
+ "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-5.13.5.tgz",
1235
+ "integrity": "sha512-W0dvo91ff2EMQI9Vhv8PNM+w1ZWuClm1pBVdLB6y0bMB3+E+wEGg0VD1iNJxsuPbwDt5+yV0u3e4WkqK12Lzlg==",
1236
1236
  "hasInstallScript": true,
1237
1237
  "license": "Apache-2.0",
1238
1238
  "dependencies": {
1239
- "delay": "^5.0.0",
1240
1239
  "node-gyp-build": "<4.0",
1241
- "p-limit": "^3.1.0",
1242
1240
  "pprof-format": "^2.2.1",
1243
1241
  "source-map": "^0.7.4"
1244
1242
  },
@@ -2504,9 +2502,9 @@
2504
2502
  }
2505
2503
  },
2506
2504
  "node_modules/@smithy/util-waiter": {
2507
- "version": "4.2.11",
2508
- "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.11.tgz",
2509
- "integrity": "sha512-x7Rh2azQPs3XxbvCzcttRErKKvLnbZfqRf/gOjw2pb+ZscX88e5UkRPCB67bVnsFHxayvMvmePfKTqsRb+is1A==",
2505
+ "version": "4.2.12",
2506
+ "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.12.tgz",
2507
+ "integrity": "sha512-ek5hyDrzS6mBFsNCEX8LpM+EWSLq6b9FdmPRlkpXXhiJE6aIZehKT9clC6+nFpZAA+i/Yg0xlaPeWGNbf5rzQA==",
2510
2508
  "license": "Apache-2.0",
2511
2509
  "dependencies": {
2512
2510
  "@smithy/abort-controller": "^4.2.11",
@@ -2791,9 +2789,9 @@
2791
2789
  "license": "MIT"
2792
2790
  },
2793
2791
  "node_modules/@types/node": {
2794
- "version": "25.3.5",
2795
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.5.tgz",
2796
- "integrity": "sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==",
2792
+ "version": "25.4.0",
2793
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.4.0.tgz",
2794
+ "integrity": "sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==",
2797
2795
  "license": "MIT",
2798
2796
  "dependencies": {
2799
2797
  "undici-types": "~7.18.0"
@@ -3092,9 +3090,9 @@
3092
3090
  }
3093
3091
  },
3094
3092
  "node_modules/bare-stream": {
3095
- "version": "2.8.0",
3096
- "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.8.0.tgz",
3097
- "integrity": "sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==",
3093
+ "version": "2.8.1",
3094
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.8.1.tgz",
3095
+ "integrity": "sha512-bSeR8RfvbRwDpD7HWZvn8M3uYNDrk7m9DQjYOFkENZlXW8Ju/MPaqUPQq5LqJ3kyjEm07siTaAQ7wBKCU59oHg==",
3098
3096
  "license": "Apache-2.0",
3099
3097
  "dependencies": {
3100
3098
  "streamx": "^2.21.0",
@@ -3363,9 +3361,9 @@
3363
3361
  }
3364
3362
  },
3365
3363
  "node_modules/cbor-extract": {
3366
- "version": "2.2.0",
3367
- "resolved": "https://registry.npmjs.org/cbor-extract/-/cbor-extract-2.2.0.tgz",
3368
- "integrity": "sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==",
3364
+ "version": "2.2.1",
3365
+ "resolved": "https://registry.npmjs.org/cbor-extract/-/cbor-extract-2.2.1.tgz",
3366
+ "integrity": "sha512-Vp8PLcLCC3tgOYIrgAjCa5GpPR2jUciJqNDklUbXRjsl9BlFzQyHoaZc2MjDb6AE47xQ1mID7rGuRD1ZAuE+sQ==",
3369
3367
  "hasInstallScript": true,
3370
3368
  "license": "MIT",
3371
3369
  "optional": true,
@@ -3376,12 +3374,12 @@
3376
3374
  "download-cbor-prebuilds": "bin/download-prebuilds.js"
3377
3375
  },
3378
3376
  "optionalDependencies": {
3379
- "@cbor-extract/cbor-extract-darwin-arm64": "2.2.0",
3380
- "@cbor-extract/cbor-extract-darwin-x64": "2.2.0",
3381
- "@cbor-extract/cbor-extract-linux-arm": "2.2.0",
3382
- "@cbor-extract/cbor-extract-linux-arm64": "2.2.0",
3383
- "@cbor-extract/cbor-extract-linux-x64": "2.2.0",
3384
- "@cbor-extract/cbor-extract-win32-x64": "2.2.0"
3377
+ "@cbor-extract/cbor-extract-darwin-arm64": "2.2.1",
3378
+ "@cbor-extract/cbor-extract-darwin-x64": "2.2.1",
3379
+ "@cbor-extract/cbor-extract-linux-arm": "2.2.1",
3380
+ "@cbor-extract/cbor-extract-linux-arm64": "2.2.1",
3381
+ "@cbor-extract/cbor-extract-linux-x64": "2.2.1",
3382
+ "@cbor-extract/cbor-extract-win32-x64": "2.2.1"
3385
3383
  }
3386
3384
  },
3387
3385
  "node_modules/cbor-x": {
@@ -3731,18 +3729,6 @@
3731
3729
  "url": "https://github.com/sponsors/ljharb"
3732
3730
  }
3733
3731
  },
3734
- "node_modules/delay": {
3735
- "version": "5.0.0",
3736
- "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz",
3737
- "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==",
3738
- "license": "MIT",
3739
- "engines": {
3740
- "node": ">=10"
3741
- },
3742
- "funding": {
3743
- "url": "https://github.com/sponsors/sindresorhus"
3744
- }
3745
- },
3746
3732
  "node_modules/depd": {
3747
3733
  "version": "2.0.0",
3748
3734
  "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -6101,21 +6087,6 @@
6101
6087
  "node": ">=8"
6102
6088
  }
6103
6089
  },
6104
- "node_modules/p-limit": {
6105
- "version": "3.1.0",
6106
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
6107
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
6108
- "license": "MIT",
6109
- "dependencies": {
6110
- "yocto-queue": "^0.1.0"
6111
- },
6112
- "engines": {
6113
- "node": ">=10"
6114
- },
6115
- "funding": {
6116
- "url": "https://github.com/sponsors/sindresorhus"
6117
- }
6118
- },
6119
6090
  "node_modules/package-json-from-dist": {
6120
6091
  "version": "1.0.1",
6121
6092
  "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
@@ -7692,18 +7663,6 @@
7692
7663
  "engines": {
7693
7664
  "node": ">=10"
7694
7665
  }
7695
- },
7696
- "node_modules/yocto-queue": {
7697
- "version": "0.1.0",
7698
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
7699
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
7700
- "license": "MIT",
7701
- "engines": {
7702
- "node": ">=10"
7703
- },
7704
- "funding": {
7705
- "url": "https://github.com/sponsors/sindresorhus"
7706
- }
7707
7666
  }
7708
7667
  }
7709
7668
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harperdb",
3
- "version": "4.7.21",
3
+ "version": "4.7.22",
4
4
  "description": "HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",
5
5
  "keywords": [
6
6
  "database",
@@ -97,7 +97,7 @@ MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
97
97
  `:this.pem=`-----BEGIN PUBLIC KEY-----
98
98
  MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
99
99
  -----END PUBLIC KEY-----
100
- `}getKey(){return(0,oR.createPublicKey)(this.pem)}toString(){return this.pem}},sR=class extends TypeError{static{a(this,"LicenseEncodingError")}},xf=class extends TypeError{static{a(this,"InvalidLicenseError")}},zL=class extends xf{static{a(this,"InvalidLicenseSignatureError")}},_E=class extends xf{static{a(this,"InvalidHeaderError")}},iR=class extends xf{static{a(this,"InvalidPayloadError")}},dSe=new jL(Vz.get(U.LICENSE_MODE));a(fSe,"validateLicenseSignature");a(mSe,"validateLicenseHeader");a(pSe,"valid");a(hSe,"validateLicensePayload");a(Kz,"validateLicense")});var aR={};Re(aR,{getActiveLicense:()=>eD,getUsageLicenses:()=>rJ,getUsageLicensesOp:()=>rD,installUsageLicense:()=>ZL,installUsageLicenseOp:()=>XL,isActiveLicense:()=>eJ,isLicensed:()=>tD,loadAndWatchLicensesDir:()=>gSe,recordUsage:()=>tJ});async function XL(e){let t=e.license;try{await ZL(t)}catch(r){let n=new zz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function ZL(e){let t=Kz(e),{id:r}=t;if(await xe.system.hdb_license.get(r))throw new QL(`A usage license with ${r} already exists`);return Io.info?.("Installing usage license:",t),xe.system.hdb_license.put(r,t)}function eJ(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 eD(){let e=Jz.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(eJ(n))return n}async function tD(){return await eD()!==void 0}async function tJ(e){La=Io.forComponent("license"),La.trace?.("Recording usage into license from analytics");let t,r=(await eD())?.id;if(r){La.trace?.("Found license to record usage into:",r);let n={};It(n,()=>{t=xe.system.hdb_license.update(r,n);for(let s of e)switch(La.trace?.("Processing analytics record:",s),s.metric){case"db-read":La.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":La.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":La.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"&&(La.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:La.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.";Wz||(console.error(n),Wz=!0),jz===void 0&&(jz=setInterval(()=>{Io.notify(n)},ESe).unref())}}function rD(e){let t={};return e.region&&(t.region=e.region),rJ(t)}function rJ(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 _Se(e){Io.trace?.("Loading usage license from file:",e);let t=await Xz.readFile(e,{encoding:"utf-8"});try{await ZL(t)}catch(r){Io.error?.("Failed to install usage license from file:",e,r)}}function gSe(){let e=JL.default.join(JL.default.dirname(Qz.getConfigFilePath()),"licenses");(0,Zz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",_Se)}var zz,Io,Jz,JL,Qz,Xz,Zz,QL,Wz,jz,ESe,La,gE=ie(()=>{Yz();zz=b(ge()),Io=b(ee());Hn();Za();Jz=b(fe());$();Oe();JL=b(require("node:path")),Qz=b(At()),Xz=b(require("node:fs/promises")),Zz=require("chokidar"),QL=class extends Error{static{a(this,"ExistingLicenseError")}};a(XL,"installUsageLicenseOp");a(ZL,"installUsageLicense");Wz=!1,ESe=6e5;a(eJ,"isActiveLicense");a(eD,"getActiveLicense");a(tD,"isLicensed");a(tJ,"recordUsage");AI(tJ);a(rD,"getUsageLicensesOp");a(rJ,"getUsageLicenses");a(_Se,"loadLicenseFile");a(gSe,"loadAndWatchLicensesDir")});var mR={};Re(mR,{deliverSocket:()=>pJ,getHttpOptions:()=>RSe,getRequestId:()=>gJ,handleApplication:()=>ySe,httpServer:()=>uD,logRequest:()=>yE,proxyRequest:()=>bSe,registerServer:()=>cD,suppressHandleApplicationWarning:()=>TSe});function ySe(e){RE=e.options.getAll(),e.options.on("change",t=>{RE=e.options.getAll()})}function RSe(){return RE}function pJ(e,t,r){let n=e?.read?e:new aJ.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Uf[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=Uf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Da.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function bSe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=nJ.get(s),r){case"connection":i=pJ(void 0,t),nJ.set(s,i),i.write=(c,l,u)=>(lR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(lR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),lR.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 cD(e,t,r=!0){t||(t=Mr.default.get(U.HTTP_PORT));let n=Uf[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",oJ),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Uf[t]=e;e.on("unhandled",oJ)}function lD(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=[],Mr.default.get(U.HTTP_PORT)!=null&&t.push({port:Mr.default.get(U.HTTP_PORT),secure:Mr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Mr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Mr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Mr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,cJ.resolvePath)(Mr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function uD(e,t){let r=[];for(let{port:n,secure:s}of lD(t))r.push(hJ(n,s,t)),typeof e=="function"?oD[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,cD(e,n,!1)),uR[n]=dR(oD,n);return r}function hJ(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(nR(e,{protocol_name:t?"HTTPS":"HTTP",name:pR()}),!cR[e]){let o=i?"operationsApi_network":"http",c=Mr.default.get(o+"_keepAliveTimeout"),l=Mr.default.get(o+"_timeout"),u=Mr.default.get(o+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Mr.default.get(U.HTTP_MAXHEADERSIZE)},f=Mr.default.get(o+"_mtls"),m=Mr.default.get(o+"_mtls_required"),p;if(t){let R=Mr.default.get("tls");p=Mr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,lJ.getTicketKeys)(),SNICallback:(0,uJ.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 gc(R,S);i&&(M.isOperationsServer=!0),RE.logging?.id&&(M.requestId=I=gJ());let k=await uR[e](M);if(!k){if(M._nodeResponse.statusCode){yE(R,M._nodeResponse.statusCode,I,performance.now()-y);return}k=EJ(M)}if(k.headers?.set||(k.headers=new $s(k.headers)),await tD()?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,cR[e].emit("unhandled",R,S)}let X=k.status||200;S.statusCode=X;let Q=performance.now(),Y=Q-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 xs&&(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"),zp(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"),rn(X<400,"success",oe,Ee),rn(1,"response_"+X,oe,Ee),yE(R,X,I,Y),!ae)if(H instanceof ReadableStream&&(H=iD.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=iD.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 k=M.headers,X=M.statusCode||500;try{S.writeHead(X,k&&(k[Symbol.iterator]?Array.from(k):k))}catch{}S.end(SSe(M)),yE(R,X,I,performance.now()-y),M.statusCode?M.statusCode===500?Da.default.warn(M):Da.default.info(M):Da.default.error(M)}a(w,"onError")},"requestHandler"),E=RS(h,(R,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},Mr.default.get(o+"_requestQueueLimit")),_=cR[e]=(t?p?dJ.createSecureServer:fJ.createServer:fR.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),cD(_,e)}return cR[e]}function dR(e,t){let r=EJ;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 EJ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new $s}}function ASe(e,t){uD(e,{requestOnly:!0,...t})}function _J(e,t){for(let{port:r}of lD(t))sJ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),aD[r]=dR(sJ,r)}function ISe(e,t){let r=[];for(let{port:n,secure:s}of lD(t)){nR(n,{protocol_name:s?"WSS":"WS",name:pR()});let i=hJ(n,s,t);SE[n]||(SE[n]=new mJ.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),SE[n].on("connection",(o,c)=>{try{let l=new gc(c);l.isWebSocket=!0;let u=uR[n](l);Da.default.debug("Received WS connection, calling listeners",nD),iJ[n](o,l,u)}catch(l){Da.default.warn("Error in handling WS connection",l)}}),_J((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):SE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),SE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{aD[n]&&aD[n](o,c,l)})),r.push(i),nD[t?.runFirst?"unshift":"push"]({listener:e,port:n}),iJ[n]=dR(nD,n),uR[n]=dR(oD,n)}return r}function oJ(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
100
+ `}getKey(){return(0,oR.createPublicKey)(this.pem)}toString(){return this.pem}},sR=class extends TypeError{static{a(this,"LicenseEncodingError")}},xf=class extends TypeError{static{a(this,"InvalidLicenseError")}},zL=class extends xf{static{a(this,"InvalidLicenseSignatureError")}},_E=class extends xf{static{a(this,"InvalidHeaderError")}},iR=class extends xf{static{a(this,"InvalidPayloadError")}},dSe=new jL(Vz.get(U.LICENSE_MODE));a(fSe,"validateLicenseSignature");a(mSe,"validateLicenseHeader");a(pSe,"valid");a(hSe,"validateLicensePayload");a(Kz,"validateLicense")});var aR={};Re(aR,{getActiveLicense:()=>eD,getUsageLicenses:()=>rJ,getUsageLicensesOp:()=>rD,installUsageLicense:()=>ZL,installUsageLicenseOp:()=>XL,isActiveLicense:()=>eJ,isLicensed:()=>tD,loadAndWatchLicensesDir:()=>gSe,recordUsage:()=>tJ});async function XL(e){let t=e.license;try{await ZL(t)}catch(r){let n=new zz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function ZL(e){let t=Kz(e),{id:r}=t;if(await xe.system.hdb_license.get(r))throw new QL(`A usage license with ${r} already exists`);return Io.info?.("Installing usage license:",t),xe.system.hdb_license.put(r,t)}function eJ(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 eD(){let e=Jz.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(eJ(n))return n}async function tD(){return await eD()!==void 0}async function tJ(e){La=Io.forComponent("license"),La.trace?.("Recording usage into license from analytics");let t,r=(await eD())?.id;if(r){La.trace?.("Found license to record usage into:",r);let n={};It(n,()=>{t=xe.system.hdb_license.update(r,n);for(let s of e)switch(La.trace?.("Processing analytics record:",s),s.metric){case"db-read":La.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":La.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":La.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"&&(La.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:La.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.";Wz||(console.error(n),Wz=!0),jz===void 0&&(jz=setInterval(()=>{Io.notify(n)},ESe).unref())}}function rD(e){let t={};return e.region&&(t.region=e.region),rJ(t)}function rJ(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 _Se(e){Io.trace?.("Loading usage license from file:",e);let t=await Xz.readFile(e,{encoding:"utf-8"});try{await ZL(t)}catch(r){Io.error?.("Failed to install usage license from file:",e,r)}}function gSe(){let e=JL.default.join(JL.default.dirname(Qz.getConfigFilePath()),"licenses");(0,Zz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",_Se)}var zz,Io,Jz,JL,Qz,Xz,Zz,QL,Wz,jz,ESe,La,gE=ie(()=>{Yz();zz=b(ge()),Io=b(ee());Hn();Za();Jz=b(fe());$();Oe();JL=b(require("node:path")),Qz=b(At()),Xz=b(require("node:fs/promises")),Zz=require("chokidar"),QL=class extends Error{static{a(this,"ExistingLicenseError")}};a(XL,"installUsageLicenseOp");a(ZL,"installUsageLicense");Wz=!1,ESe=6e5;a(eJ,"isActiveLicense");a(eD,"getActiveLicense");a(tD,"isLicensed");a(tJ,"recordUsage");AI(tJ);a(rD,"getUsageLicensesOp");a(rJ,"getUsageLicenses");a(_Se,"loadLicenseFile");a(gSe,"loadAndWatchLicensesDir")});var mR={};Re(mR,{deliverSocket:()=>pJ,getHttpOptions:()=>RSe,getRequestId:()=>gJ,handleApplication:()=>ySe,httpServer:()=>uD,logRequest:()=>yE,proxyRequest:()=>bSe,registerServer:()=>cD,suppressHandleApplicationWarning:()=>TSe});function ySe(e){RE=e.options.getAll(),e.options.on("change",t=>{RE=e.options.getAll()})}function RSe(){return RE}function pJ(e,t,r){let n=e?.read?e:new aJ.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Uf[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=Uf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Da.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function bSe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=nJ.get(s),r){case"connection":i=pJ(void 0,t),nJ.set(s,i),i.write=(c,l,u)=>(lR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(lR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),lR.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 cD(e,t,r=!0){t||(t=Mr.default.get(U.HTTP_PORT));let n=Uf[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",oJ),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Uf[t]=e;e.on("unhandled",oJ)}function lD(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=[],Mr.default.get(U.HTTP_PORT)!=null&&t.push({port:Mr.default.get(U.HTTP_PORT),secure:Mr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Mr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Mr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.usageType==="operations-api"&&Mr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,cJ.resolvePath)(Mr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function uD(e,t){let r=[];for(let{port:n,secure:s}of lD(t))r.push(hJ(n,s,t)),typeof e=="function"?oD[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,cD(e,n,!1)),uR[n]=dR(oD,n);return r}function hJ(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(nR(e,{protocol_name:t?"HTTPS":"HTTP",name:pR()}),!cR[e]){let o=i?"operationsApi_network":"http",c=Mr.default.get(o+"_keepAliveTimeout"),l=Mr.default.get(o+"_timeout"),u=Mr.default.get(o+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Mr.default.get(U.HTTP_MAXHEADERSIZE)},f=Mr.default.get(o+"_mtls"),m=Mr.default.get(o+"_mtls_required"),p;if(t){let R=Mr.default.get("tls");p=Mr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,lJ.getTicketKeys)(),SNICallback:(0,uJ.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 gc(R,S);i&&(M.isOperationsServer=!0),RE.logging?.id&&(M.requestId=I=gJ());let k=await uR[e](M);if(!k){if(M._nodeResponse.statusCode){yE(R,M._nodeResponse.statusCode,I,performance.now()-y);return}k=EJ(M)}if(k.headers?.set||(k.headers=new $s(k.headers)),await tD()?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,cR[e].emit("unhandled",R,S)}let X=k.status||200;S.statusCode=X;let Q=performance.now(),Y=Q-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 xs&&(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"),zp(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"),rn(X<400,"success",oe,Ee),rn(1,"response_"+X,oe,Ee),yE(R,X,I,Y),!ae)if(H instanceof ReadableStream&&(H=iD.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=iD.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 k=M.headers,X=M.statusCode||500;try{S.writeHead(X,k&&(k[Symbol.iterator]?Array.from(k):k))}catch{}S.end(SSe(M)),yE(R,X,I,performance.now()-y),M.statusCode?M.statusCode===500?Da.default.warn(M):Da.default.info(M):Da.default.error(M)}a(w,"onError")},"requestHandler"),E=RS(h,(R,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},Mr.default.get(o+"_requestQueueLimit")),_=cR[e]=(t?p?dJ.createSecureServer:fJ.createServer:fR.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),cD(_,e)}return cR[e]}function dR(e,t){let r=EJ;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 EJ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new $s}}function ASe(e,t){uD(e,{requestOnly:!0,...t})}function _J(e,t){for(let{port:r}of lD(t))sJ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),aD[r]=dR(sJ,r)}function ISe(e,t){let r=[];for(let{port:n,secure:s}of lD(t)){nR(n,{protocol_name:s?"WSS":"WS",name:pR()});let i=hJ(n,s,t);SE[n]||(SE[n]=new mJ.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),SE[n].on("connection",(o,c)=>{try{let l=new gc(c);l.isWebSocket=!0;let u=uR[n](l);Da.default.debug("Received WS connection, calling listeners",nD),iJ[n](o,l,u)}catch(l){Da.default.warn("Error in handling WS connection",l)}}),_J((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):SE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),SE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{aD[n]&&aD[n](o,c,l)})),r.push(i),nD[t?.runFirst?"unshift":"push"]({listener:e,port:n}),iJ[n]=dR(nD,n),uR[n]=dR(oD,n)}return r}function oJ(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
101
101
  `),yE(e,404,0,e.requestId))}function yE(e,t,r,n){let s=RE.logging;if(s){sD||(sD=Da.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";sD[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+wSe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function wSe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function gJ(){return TE||(TE=new BigInt64Array([1n]),TE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",TE.buffer))),Number(Atomics.add(TE,0,1n))}var aJ,Da,lR,Mr,cJ,lJ,uJ,dJ,fJ,fR,iD,mJ,SSe,SE,cR,uR,oD,RE,TSe,nJ,sJ,aD,nD,iJ,sD,TE,dD=ie(()=>{aJ=require("node:net"),Da=b(ee()),lR=require("node:worker_threads"),Mr=b(fe());$();cJ=b(At()),lJ=b(at()),uJ=b(bs()),dJ=require("node:http2"),fJ=require("node:https"),fR=require("node:http");mh();Jp();ls();Hn();iD=require("node:stream");qr();WL();Bf();QN();mJ=require("ws");gE();({errorToString:SSe}=Da.default);Ue.http=uD;Ue.request=ASe;Ue.ws=ISe;Ue.upgrade=_J;SE={},cR={},uR={},oD=[],RE={},TSe=!0;a(ySe,"handleApplication");a(RSe,"getHttpOptions");a(pJ,"deliverSocket");nJ=new Map;a(bSe,"proxyRequest");a(cD,"registerServer");a(lD,"getPorts");a(uD,"httpServer");a(hJ,"getHTTPServer");a(dR,"makeCallbackChain");a(EJ,"unhandled");a(ASe,"onRequest");Object.defineProperty(fR.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){}});sJ=[],aD={};a(_J,"onUpgrade");nD=[],iJ={};a(ISe,"onWebSocket");a(oJ,"defaultNotFound");a(yE,"logRequest");a(wSe,"headersToString");a(gJ,"getRequestId")});var mD=x(IE=>{"use strict";T_();var{isMainThread:fD,parentPort:SJ,threadId:hR,workerData:NSe}=require("node:worker_threads"),{createServer:CSe}=require("node:net"),{unlinkSync:OSe,existsSync:PSe}=require("fs"),RJ;IE.whenComponentsLoaded=new Promise(e=>{RJ=e});var Di=ee(),wo=fe(),No=($(),P(J)),{server:LSe}=(qr(),P(ym)),{createServer:DSe}=require("node:tls"),{restartNumber:vSe,getWorkerIndex:AE}=at(),{createReuseportFd:bE}=(mh(),P(j$)),{createTLSSelector:MSe}=bs(),{startupLog:USe}=ER(),{SERVERS:Ff,setPortServerMap:TJ,portServer:xSe}=(WL(),P($z)),yJ=(dD(),P(mR)),BSe=fi(),bJ=wo.get(No.CONFIG_PARAMS.THREADS_DEBUG),FSe=wo.get(No.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);LSe.socket=kSe;if(bJ){let e;if(fD)e=wo.get(No.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Di.info("Could not close debugger",t)}});else{let t=wo.get(No.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&AE()>=0&&(e=t+AE())}if(e){let t=wo.get(No.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=wo.get(No.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Di.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&fD)try{require("inspector").open(9229)}catch(e){vSe<=1&&Di.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"&&Di.error("uncaughtException",e)});wo.initSync();IE.globals=BSe;IE.listenOnPorts=IJ;IE.startServers=AJ;function AJ(){let e=wo.get(No.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=_R().loadRootComponents(!0).then(()=>{SJ?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)yJ.deliverSocket(i,s,o);else if(n.requestId)yJ.proxyRequest(n);else if(n.type===No.ITC_EVENT_TYPES.SHUTDOWN){Di.trace("received shutdown request",hR);for(let c in Ff){let l=Ff[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?Di.info(`Closing ${E.length} idle connections`):h&&Di.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
102
102
  Connection: close\r
103
103
  \r