harperdb 4.7.21 → 4.7.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +41 -82
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadServer.js +1 -1
- package/studio/web/assets/{index-cZbhNKPv.js → index-BlG-cpH9.js} +2 -2
- package/studio/web/assets/{index-cZbhNKPv.js.map → index-BlG-cpH9.js.map} +1 -1
- package/studio/web/assets/{index-BMKHXWrK.js → index-BpmqvC1O.js} +5 -5
- package/studio/web/assets/{index-BMKHXWrK.js.map → index-BpmqvC1O.js.map} +1 -1
- package/studio/web/assets/{index-DP5O80Ld.js → index-DFovvBYL.js} +2 -2
- package/studio/web/assets/{index-DP5O80Ld.js.map → index-DFovvBYL.js.map} +1 -1
- package/studio/web/assets/{index.lazy-_WqXCxX6.js → index.lazy-BhReIK4y.js} +2 -2
- package/studio/web/assets/{index.lazy-_WqXCxX6.js.map → index.lazy-BhReIK4y.js.map} +1 -1
- package/studio/web/assets/{profiler-CiZIC7ZI.js → profiler-BhXa8xgR.js} +2 -2
- package/studio/web/assets/{profiler-CiZIC7ZI.js.map → profiler-BhXa8xgR.js.map} +1 -1
- package/studio/web/assets/{react-redux-D8H6oZRQ.js → react-redux-DkN7OdDj.js} +2 -2
- package/studio/web/assets/{react-redux-D8H6oZRQ.js.map → react-redux-DkN7OdDj.js.map} +1 -1
- package/studio/web/assets/{startRecording-oz3NQO5N.js → startRecording-Da15t52a.js} +2 -2
- package/studio/web/assets/{startRecording-oz3NQO5N.js.map → startRecording-Da15t52a.js.map} +1 -1
- package/studio/web/index.html +1 -1
- package/utility/scripts/restartHdb.js +1 -1
|
@@ -130,7 +130,7 @@ MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
|
|
|
130
130
|
MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
|
|
131
131
|
-----END PUBLIC KEY-----
|
|
132
132
|
`}getKey(){return(0,zy.createPublicKey)(this.pem)}toString(){return this.pem}},Wy=class extends TypeError{static{a(this,"LicenseEncodingError")}},Of=class extends TypeError{static{a(this,"InvalidLicenseError")}},YL=class extends Of{static{a(this,"InvalidLicenseSignatureError")}},sE=class extends Of{static{a(this,"InvalidHeaderError")}},jy=class extends Of{static{a(this,"InvalidPayloadError")}},BTe=new KL(l2.get(U.LICENSE_MODE));a(FTe,"validateLicenseSignature");a(kTe,"validateLicenseHeader");a(HTe,"valid");a(GTe,"validateLicensePayload");a(u2,"validateLicense")});var Qy={};Re(Qy,{getActiveLicense:()=>JL,getUsageLicenses:()=>y2,getUsageLicensesOp:()=>ZL,installUsageLicense:()=>QL,installUsageLicenseOp:()=>zL,isActiveLicense:()=>S2,isLicensed:()=>XL,loadAndWatchLicensesDir:()=>VTe,recordUsage:()=>T2});async function zL(e){let t=e.license;try{await QL(t)}catch(r){let n=new p2.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function QL(e){let t=u2(e),{id:r}=t;if(await xe.system.hdb_license.get(r))throw new jL(`A usage license with ${r} already exists`);return Io.info?.("Installing usage license:",t),xe.system.hdb_license.put(r,t)}function S2(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 JL(){let e=h2.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(S2(n))return n}async function XL(){return await JL()!==void 0}async function T2(e){La=Io.forComponent("license"),La.trace?.("Recording usage into license from analytics");let t,r=(await JL())?.id;if(r){La.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(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.";f2||(console.error(n),f2=!0),m2===void 0&&(m2=setInterval(()=>{Io.notify(n)},qTe).unref())}}function ZL(e){let t={};return e.region&&(t.region=e.region),y2(t)}function y2(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 $Te(e){Io.trace?.("Loading usage license from file:",e);let t=await _2.readFile(e,{encoding:"utf-8"});try{await QL(t)}catch(r){Io.error?.("Failed to install usage license from file:",e,r)}}function VTe(){let e=WL.default.join(WL.default.dirname(E2.getConfigFilePath()),"licenses");(0,g2.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",$Te)}var p2,Io,h2,WL,E2,_2,g2,jL,f2,m2,qTe,La,iE=ie(()=>{d2();p2=b(ge()),Io=b(ee());Kn();Qa();h2=b(fe());$();Oe();WL=b(require("node:path")),E2=b(wt()),_2=b(require("node:fs/promises")),g2=require("chokidar"),jL=class extends Error{static{a(this,"ExistingLicenseError")}};a(zL,"installUsageLicenseOp");a(QL,"installUsageLicense");f2=!1,qTe=6e5;a(S2,"isActiveLicense");a(JL,"getActiveLicense");a(XL,"isLicensed");a(T2,"recordUsage");VN(T2);a(ZL,"getUsageLicensesOp");a(y2,"getUsageLicenses");a($Te,"loadLicenseFile");a(VTe,"loadAndWatchLicensesDir")});var nD={};Re(nD,{getFingerprint:()=>tD,getRegistrationInfo:()=>eD,setLicense:()=>rD});function eD(){return{version:R2.packageJson.version,deprecated:!0}}function tD(){return{message:"this-is-deprecated",deprecated:!0}}function rD(){return{deprecated:!0}}var R2,sD=ie(()=>{R2=b(Lt());a(eD,"getRegistrationInfo");a(tD,"getFingerprint");a(rD,"setLicense")});var A2=x((YFe,b2)=>{"use strict";var oE=require("alasql"),Eu=require("recursive-iterator"),Di=ee(),KTe=de(),aE=($(),L(Q)),iD=class{static{a(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,WTe(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>aE.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!aE.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][aE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=YTe(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!aE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new oE.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function YTe(e){return e.filter(t=>t[aE.PERMS_CRUD_ENUM.READ])}a(YTe,"filterReadRestrictedAttrs");function WTe(e,t,r,n,s){jTe(e,t,r,n,s)}a(WTe,"interpretAST");function cE(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(cE,"addSchemaTableToMap");function jTe(e,t,r,n,s){if(!e){Di.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof oE.yy.Insert?XTe(e,t,r):e instanceof oE.yy.Select?zTe(e,t,r,n,s):e instanceof oE.yy.Update?QTe(e,t,r):e instanceof oE.yy.Delete?JTe(e,t,r):Di.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(jTe,"getRecordAttributesAST");function zTe(e,t,r,n,s){if(!e){Di.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(KTe.isEmptyOrZeroLength(i)){Di.error("No schema specified");return}e.from.forEach(c=>{cE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),cE(c.table,t,r,n,s)});let o=new Eu(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Di.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new Eu(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{Di.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Eu(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{Di.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new Eu(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{Di.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}a(zTe,"getSelectAttributes");function QTe(e,t,r){if(!e){Di.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Eu(e.columns),s=e.table.databaseid;cE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&oD(e.table.tableid,s,i.columnid,t,r)}a(QTe,"getUpdateAttributes");function JTe(e,t,r){if(!e){Di.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Eu(e.where),s=e.table.databaseid;cE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&oD(e.table.tableid,s,i.columnid,t,r)}a(JTe,"getDeleteAttributes");function XTe(e,t,r){if(!e){Di.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Eu(e.columns),s=e.into.databaseid;cE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&oD(e.into.tableid,s,i.columnid,t,r)}a(XTe,"getInsertAttributes");function oD(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(oD,"pushAttribute");b2.exports=iD});var eR=x((jFe,G2)=>{"use strict";var aD=ms(),Jy=$n(),Ns=DT(),dE=Ld(),cD=Il(),ZTe=vO(),eye=hK(),fE=(_s(),L(no)),Xy=vp(),vr=ee(),tye=kO(),rye=VT(),nye=fP(),sye=YT(),iye=hP(),oye=EP(),aye=SP(),cye=yP(),lD=JT(),Da=de(),N2=Nf(),Pn=($(),L(Q)),C2=dz(),lye=wh(),O2=(Cd(),L(Wp)),P2=(vy(),L(Xh)),L2=wt(),dr=ML(),D2=Ky(),uye=kL(),Pf=ys(),v2=(rf(),L(tf)),uD=(VL(),L($L)),dD=(Lp(),L(cN)),M2=(iE(),L(Qy)),fD=(sD(),L(nD)),U2=gC(),{handleHDBError:Jn,hdbErrors:x2}=ge(),{HDB_ERROR_MSGS:fn,HTTP_STATUS_CODES:lE}=x2,re=new Map,B2="delete",Fc="insert",Js="read",_u="update",uE="describe",I2=dE.describeSchema.name,w2=dE.describeTable.name,F2={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},dye={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},fye="catchup",mye="handleGetJob",pye="handleGetJobsByStartDate",Zy={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},hye=[Ns.createTable.name,Ns.createAttribute.name,Ns.dropTable.name,Ns.dropAttribute.name],k2={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},se=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};re.set(aD.insert.name,new se(!1,[Fc]));re.set(aD.update.name,new se(!1,[_u]));re.set(aD.upsert.name,new se(!1,[Fc,_u]));re.set(Jy.searchByConditions.name,new se(!1,[Js]));re.set(Jy.searchByHash.name,new se(!1,[Js]));re.set(Jy.searchByValue.name,new se(!1,[Js]));re.set(Jy.search.name,new se(!1,[Js]));re.set(Ns.createSchema.name,new se(!0,[]));re.set(Ns.createTable.name,new se(!0,[]));re.set(Ns.createAttribute.name,new se(!1,[Fc]));re.set(Ns.dropSchema.name,new se(!0,[]));re.set(Ns.dropTable.name,new se(!0,[]));re.set(Ns.dropAttribute.name,new se(!0,[]));re.set(dE.describeSchema.name,new se(!1,[Js]));re.set(dE.describeTable.name,new se(!1,[Js]));re.set(cD.deleteRecord.name,new se(!1,[B2]));re.set(fE.addUser.name,new se(!0,[]));re.set(fE.alterUser.name,new se(!0,[]));re.set(fE.dropUser.name,new se(!0,[]));re.set(fE.listUsersExternal.name,new se(!0,[]));re.set(Xy.listRoles.name,new se(!0,[]));re.set(Xy.addRole.name,new se(!0,[]));re.set(Xy.alterRole.name,new se(!0,[]));re.set(Xy.dropRole.name,new se(!0,[]));re.set(tye.name,new se(!0,[]));re.set(rye.name,new se(!0,[]));re.set(nye.name,new se(!0,[]));re.set(sye.name,new se(!0,[]));re.set(iye.name,new se(!0,[]));re.set(oye.name,new se(!0,[]));re.set(lD.setRoutes.name,new se(!0,[]));re.set(lD.getRoutes.name,new se(!0,[]));re.set(lD.deleteRoutes.name,new se(!0,[]));re.set(L2.setConfiguration.name,new se(!0,[]));re.set(aye.clusterStatus.name,new se(!0,[]));re.set(cye.name,new se(!0,[]));re.set(cD.deleteFilesBefore.name,new se(!0,[]));re.set(cD.deleteAuditLogsBefore.name,new se(!0,[]));re.set(N2.restart.name,new se(!0,[]));re.set(N2.restartService.name,new se(!0,[]));re.set(ZTe.name,new se(!0,[]));re.set(eye.name,new se(!0,[Js]));re.set(Ns.cleanupOrphanBlobs.name,new se(!0,[]));re.set(lye.systemInformation.name,new se(!0,[]));re.set(L2.getConfiguration.name,new se(!0,[]));re.set(D2.readTransactionLog.name,new se(!0,[]));re.set(D2.deleteTransactionLogsBefore.name,new se(!0,[]));re.set(uye.installModules.name,new se(!0,[]));re.set(Pf.createCsr.name,new se(!0,[]));re.set(Pf.signCertificate.name,new se(!0,[]));re.set(Pf.listCertificates.name,new se(!0,[]));re.set(Pf.addCertificate.name,new se(!0,[]));re.set(Pf.removeCertificate.name,new se(!0,[]));re.set(Pf.getKey.name,new se(!0,[]));re.set(v2.addNodeBack.name,new se(!0,[]));re.set(v2.removeNodeBack.name,new se(!0,[]));re.set(uD.getOp.name,new se(!1,[Js]));re.set(uD.listMetricsOp.name,new se(!1,[Js]));re.set(uD.describeMetricOp.name,new se(!1,[Js]));re.set(dD.clear.name,new se(!0,[]));re.set(dD.get.name,new se(!0,[]));re.set(dD.set.name,new se(!0,[]));re.set(M2.installUsageLicenseOp.name,new se(!0,[]));re.set(M2.getUsageLicensesOp.name,new se(!0,[]));re.set(fD.getFingerprint.name,new se(!0,[]));re.set(fD.setLicense.name,new se(!0,[]));re.set(O2.createTokens.name,new se(!1,[]));re.set(O2.refreshOperationToken.name,new se(!1,[]));re.set(P2.login.name,new se(!1,[]));re.set(P2.logout.name,new se(!1,[]));re.set(dr.customFunctionsStatus.name,new se(!0,[]));re.set(dr.getCustomFunctions.name,new se(!0,[]));re.set(dr.getComponents.name,new se(!0,[]));re.set(dr.getComponentFile.name,new se(!0,[]));re.set(dr.setComponentFile.name,new se(!0,[]));re.set(dr.dropComponent.name,new se(!0,[]));re.set(dr.getCustomFunction.name,new se(!0,[]));re.set(dr.setCustomFunction.name,new se(!0,[]));re.set(dr.dropCustomFunction.name,new se(!0,[]));re.set(dr.addComponent.name,new se(!0,[]));re.set(dr.dropCustomFunctionProject.name,new se(!0,[]));re.set(dr.packageComponent.name,new se(!0,[]));re.set(dr.deployComponent.name,new se(!0,[]));re.set(dr.addSSHKey.name,new se(!0,[]));re.set(dr.getSSHKey.name,new se(!0,[]));re.set(dr.updateSSHKey.name,new se(!0,[]));re.set(dr.deleteSSHKey.name,new se(!0,[]));re.set(dr.listSSHKeys.name,new se(!0,[]));re.set(dr.setSSHKnownHosts.name,new se(!0,[]));re.set(dr.getSSHKnownHosts.name,new se(!0,[]));re.set(fD.getRegistrationInfo.name,new se(!1,[]));re.set(fE.userInfo.name,new se(!1,[]));re.set(dE.describeAll.name,new se(!1,[]));re.set(mye,new se(!1,[]));re.set(pye,new se(!0,[]));re.set(fye,new se(!0,[]));re.set(Zy.CSV_DATA_LOAD,new se(!1,[Fc,_u]));re.set(Zy.CSV_URL_LOAD,new se(!1,[Fc,_u]));re.set(Zy.CSV_FILE_LOAD,new se(!1,[Fc,_u]));re.set(Zy.IMPORT_FROM_S3,new se(!1,[Fc,_u]));re.set(k2.EXPORT_TO_S3,new se(!0,[]));re.set(k2.EXPORT_LOCAL,new se(!0,[]));re.set(Pn.VALID_SQL_OPS_ENUM.DELETE,new se(!1,[B2]));re.set(Pn.VALID_SQL_OPS_ENUM.SELECT,new se(!1,[Js]));re.set(Pn.VALID_SQL_OPS_ENUM.INSERT,new se(!1,[Fc]));re.set(Pn.VALID_SQL_OPS_ENUM.UPDATE,new se(!1,[_u]));G2.exports={verifyPerms:_ye,verifyPermsAst:Eye,verifyBulkLoadAttributePerms:Sye};function Eye(e,t,r){if(Da.isEmptyOrZeroLength(e))throw vr.info("verify_perms_ast has an empty user parameter"),Jn(new Error);if(Da.isEmptyOrZeroLength(t))throw vr.info("verify_perms_ast has an empty user parameter"),Jn(new Error);if(Da.isEmptyOrZeroLength(r))throw vr.info("verify_perms_ast has a null operation parameter"),Jn(new Error);try{let n=A2(),s=require("alasql"),i=new U2,o=new n(e),c=o.getSchemas(),l=new Map;if((!c||c.length===0)&&o.affected_attributes&&o.affected_attributes.size>0)throw vr.info("No schemas defined in verifyPermsAst(), will not continue."),Jn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&F2[r])throw Jn(new Error,fn.DROP_SYSTEM,lE.FORBIDDEN);if(u&&!d)return null;let f=C2.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=o.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=o.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=H2(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let _=o.getAttributesBySchemaTableName(h,p[E]),R=pD(t.role.permission,h,p[E]);mD(_,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Jn(n)}}a(Eye,"verifyPermsAst");function _ye(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw vr.info("null required parameter in verifyPerms"),Jn(new Error,fn.DEFAULT_INVALID_REQUEST,lE.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new U2;if(Da.isEmptyOrZeroLength(e.hdb_user?.role)||Da.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return vr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(fn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=o.has(Pn.SYSTEM_SCHEMA_NAME)||s===Pn.SYSTEM_SCHEMA_NAME;if(l&&d&&dye[e.operation]&&(i===Pn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Pn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Pn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&F2[r])throw Jn(new Error,fn.DROP_SYSTEM,lE.FORBIDDEN);if(l&&!d||u===!0&&(r===Ns.createSchema.name||r===Ns.dropSchema.name))return null;if(hye.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=C2.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===I2||r===w2)&&!f.super_user){if(s===Pn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(fn.SCHEMA_PERM_ERROR(s));if(r===I2&&(!f[s]||!f[s][uE]))return c.handleInvalidItem(fn.SCHEMA_NOT_FOUND(s));if(r===w2&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][uE]))return c.handleInvalidItem(fn.TABLE_NOT_FOUND(s,i))}let m=H2(e.hdb_user,r,o,c,n);if(m)return m;if(re.get(r)&&re.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Pn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],_=f[s].tables[i];_[Pn.PERMS_CRUD_ENUM.READ]&&(_.attribute_permissions.length>0?_.attribute_permissions.filter(S=>S[Pn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=E)}let p=gye(e),h=pD(e.hdb_user?.role?.permission,s,i);return mD(p,h,r,i,s,c,n),c.getPermsResponse()}a(_ye,"verifyPerms");function H2(e,t,r,n,s){if(Da.arrayHasEmptyValues([e,t,r]))throw vr.info("hasPermissions has an invalid parameter"),Jn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||re.get(t).requires_su))return null;if(!re.get(t))throw vr.info(`operation ${t} not found.`),Jn(new Error,fn.OP_NOT_FOUND(t),lE.BAD_REQUEST);if(re.get(t)&&re.get(t).requires_su)return vr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(fn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][uE]===!1){n.addInvalidItem(fn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(fn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=o[l].tables[d];if(!f||f[uE]===!1)n.addInvalidItem(fn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=re.get(t).perms;!Da.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],_=f[E];(_==null||_===!1)&&(vr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=fn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw vr.error(p),vr.error(m),Jn(x2.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}a(H2,"hasPermissions");function mD(e,t,r,n,s,i,o){if(!e||!t)throw vr.info("no attributes specified in checkAttributePerms."),Jn(new Error);let c=re.get(r).perms;if(!c||c==="")throw vr.info(`no permissions found for ${r} in checkAttributePerms().`),Jn(new Error);if(Da.isEmptyOrZeroLength(t))return vr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[uE]===!1){i.addInvalidItem(fn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Pn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Js)throw Jn(new Error,fn.SYSTEM_TIMESTAMP_PERMS_ERR,lE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(fn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(mD,"checkAttributePerms");function gye(e){let t=new Set;try{if(e.action)return t;if(e.operation===Pn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){vr.info(r)}return t}a(gye,"getRecordAttributes");function pD(e,t,r){let n=new Map;if(Da.isEmpty(e))return vr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{vr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(pD,"getAttributePermissions");function Sye(e,t,r,n,s,i,o){let c=new Set(i),l=pD(e,n,s);mD(c,l,t,s,n,o,r)}a(Sye,"verifyBulkLoadAttributePerms")});var TD=x((QFe,sQ)=>{"use strict";var tR=ms(),nR=uC(),Tye=require("needle"),vi=($(),L(Q)),Lf=de(),{handleHDBError:rr,hdbErrors:Q2}=ge(),{HTTP_STATUS_CODES:mn,HDB_ERROR_MSGS:Mr,CHECK_LOGS_WRAPPER:Su}=Q2,Df=ee(),hD=require("papaparse");Lf.promisifyPapaParse();var Mi=require("fs-extra"),yye=require("path"),{chain:q2}=require("stream-chain"),$2=require("stream-json/streamers/StreamArray"),V2=require("stream-json/utils/Batch"),K2=require("stream-chain/utils/comp"),{finished:Y2}=require("stream"),Rye=fe(),J2=dC(),bye=fC(),{BulkLoadFileObject:_D,BulkLoadDataObject:Aye}=d$(),gD=gC(),{verifyBulkLoadAttributePerms:X2}=eR(),{databases:Iye}=(Oe(),L(Et)),{coerceType:wye}=(sR(),L(iQ)),W2="No records parsed from csv file.",gu=`${Rye.get("HDB_ROOT")}/tmp`,{schemaRegex:Nye}=Vo(),j2=1024*1024*2,z2=5e3,Cye={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};sQ.exports={csvDataLoad:Oye,csvURLLoad:Pye,csvFileLoad:Lye,importFromS3:Dye};async function Oye(e,t){let r=nR.dataObject(e);if(r)throw rr(r,r.message,mn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=tQ(e.schema,e.table),i=hD.parse(e.data,{header:!0,skipEmptyLines:!0,transform:ED.bind(null,s),dynamicTyping:!1}),o=new gD;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&X2(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw rr(new Error,c,mn.BAD_REQUEST,void 0,void 0,!0);let l=new Aye(e.action,e.schema,e.table,i.data);return n=await J2.callOperationFunctionAsAwait(rQ,l,null),n.message===W2?W2:nQ(n.records,n.number_written)}catch(s){throw Tu(s)}}a(Oye,"csvDataLoad");async function Pye(e){let t=nR.urlObject(e);if(t)throw rr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${gu}/${r}`;try{await vye(e,r)}catch(s){throw Df.error(Mr.DOWNLOAD_FILE_ERR(r)+" - "+s),rr(s,Su(Mr.DOWNLOAD_FILE_ERR(r)))}try{let s=new _D(this.job_operation_function.name,e.action,e.schema,e.table,n,vi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await SD(s);return await rR(n),i}catch(s){throw await rR(n),Tu(s)}}a(Pye,"csvURLLoad");async function Lye(e){let t=nR.fileObject(e);if(t)throw rr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=new _D(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,vi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await SD(r)}catch(n){throw Tu(n)}}a(Lye,"csvFileLoad");async function Dye(e){let t=nR.s3FileObject(e);if(t)throw rr(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=yye.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${gu}/${s}`;let i=new _D(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Mye(s,e);let o=await SD(i);return await rR(r),o}catch(n){throw await rR(r),Tu(n)}}a(Dye,"importFromS3");async function vye(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Tye("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw rr(n,s,n.statusCode,vi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}xye(r,e.csv_url),await Uye(t,r.raw)}a(vye,"downloadCSVFile");async function Mye(e,t){try{let r=`${gu}/${e}`;await Mi.mkdirp(gu),await Mi.writeFile(`${gu}/${e}`,"",{flag:"a+"});let n=await Mi.createWriteStream(r),s=await bye.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){Df.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Df.error(Mr.S3_DOWNLOAD_ERR+" - "+r),rr(r,Su(Mr.S3_DOWNLOAD_ERR))}}a(Mye,"downloadFileFromS3");async function Uye(e,t){try{await Mi.mkdirp(gu),await Mi.writeFile(`${gu}/${e}`,t)}catch(r){throw Df.error(Mr.WRITE_TEMP_FILE_ERR),rr(r,Su(Mr.DEFAULT_BULK_LOAD_ERR))}}a(Uye,"writeFileToTempFolder");async function rR(e){if(e)try{await Mi.access(e),await Mi.unlink(e)}catch{Df.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(rR,"deleteTempFile");function xye(e,t){if(e.statusCode!==Q2.HTTP_STATUS_CODES.OK)throw rr(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,mn.BAD_REQUEST);if(!Cye[e.headers["content-type"]])throw rr(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,mn.BAD_REQUEST);if(!e.raw)throw rr(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,mn.BAD_REQUEST)}a(xye,"validateURLResponse");async function SD(e){try{let t;switch(e.file_type){case vi.VALID_S3_FILE_TYPES.CSV:t=await Bye(e);break;case vi.VALID_S3_FILE_TYPES.JSON:t=await Fye(e);break;default:throw rr(new Error,Mr.DEFAULT_BULK_LOAD_ERR,mn.BAD_REQUEST,vi.LOG_LEVELS.ERROR,Mr.INVALID_FILE_EXT_ERR(e))}return nQ(t.records,t.number_written)}catch(t){throw Tu(t)}}a(SD,"fileLoad");async function Z2(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await tR.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&X2(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=rr(c);r(l)}}a(Z2,"validateChunk");async function eQ(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Lf.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Lf.isEmpty(c)&&!Lf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await J2.callOperationFunctionAsAwait(rQ,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=rr(c,Su(Mr.INSERT_CSV_ERR),mn.INTERNAL_SERVER_ERROR,vi.LOG_LEVELS.ERROR,Mr.INSERT_CSV_ERR+" - "+c);r(l)}}a(eQ,"insertChunk");async function Bye(e){let t={records:0,number_written:0},r=tQ(e.schema,e.table);try{let n=new gD,s=Mi.createReadStream(e.file_path,{highWaterMark:j2});s.setEncoding("utf8"),await hD.parsePromise(s,Z2.bind(null,e,n),ED.bind(null,r));let i=n.getPermsResponse();if(i)throw rr(new Error,i,mn.BAD_REQUEST);return s=Mi.createReadStream(e.file_path,{highWaterMark:j2}),s.setEncoding("utf8"),await hD.parsePromise(s,eQ.bind(null,e,t),ED.bind(null,r)),s.destroy(),t}catch(n){throw rr(n,Su(Mr.PAPA_PARSE_ERR),mn.INTERNAL_SERVER_ERROR,vi.LOG_LEVELS.ERROR,Mr.PAPA_PARSE_ERR+n)}}a(Bye,"callPapaParse");function tQ(e,t){let r=Iye[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>wye(i,s));return n}a(tQ,"createTransformMap");function ED(e,t,r){let n=e.get(r);return n?n(t):Lf.autoCast(t)}a(ED,"typeFunction");async function Fye(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new gD,s=q2([Mi.createReadStream(e.file_path,{encoding:"utf-8"}),$2.withParser(),c=>c.value,new V2({batchSize:z2}),K2(async c=>{await Z2(e,n,r,c)})]);await new Promise((c,l)=>{Y2(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw rr(new Error,i,mn.BAD_REQUEST);let o=q2([Mi.createReadStream(e.file_path,{encoding:"utf-8"}),$2.withParser(),c=>c.value,new V2({batchSize:z2}),K2(async c=>{await eQ(e,t,r,c)})]);return await new Promise((c,l)=>{Y2(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw rr(n,Su(Mr.INSERT_JSON_ERR),mn.INTERNAL_SERVER_ERROR,vi.LOG_LEVELS.ERROR,Mr.INSERT_JSON_ERR+n)}}a(Fye,"insertJson");async function rQ(e){let t={};try{e.data&&e.data.length>0&&kye(e.data[0])?t=await Hye(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Df.info(t.message))}catch(r){throw Tu(r)}return t}a(rQ,"callBulkFileLoad");function kye(e){let t=Object.keys(e);for(let r of t)if(!Nye.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(kye,"validateColumnNames");async function Hye(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=tR.insert;break;case"update":i=tR.update;break;case"upsert":i=tR.upsert;break;default:throw rr(new Error,Mr.INVALID_ACTION_PARAM_ERR(n),mn.BAD_REQUEST,vi.LOG_LEVELS.ERROR,Mr.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)o.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Lf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Tu(o)}}a(Hye,"bulkFileLoad");function nQ(e,t){return`successfully loaded ${t} of ${e} records`}a(nQ,"buildResponseMsg");function Tu(e){return rr(e,Su(Mr.DEFAULT_BULK_LOAD_ERR),mn.INTERNAL_SERVER_ERROR,vi.LOG_LEVELS.ERROR,Mr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Tu,"buildTopLevelErrMsg")});var lQ=x((XFe,cQ)=>{"use strict";var Gye=$n(),qye=Xi(),oQ=ee(),$ye=ms(),Vye=require("clone"),RD=require("alasql"),Kye=Dg(),aQ=require("util"),Yye=aQ.promisify(qye.getTableSchema),Wye=aQ.promisify(Gye.search),jye=($(),L(Q)),yD=de();Kye(RD);cQ.exports={update:Qye};var zye="There was a problem performing this update. Please check the logs and try again.";async function Qye({statement:e,hdb_user:t}){let r=await Yye(e.table.databaseid,e.table.tableid),n=Jye(e.columns);yD.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Vye(s),c=yD.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=RD.parse(l).statements[0],d=await Wye(u),f=Xye(n,d);return Zye(o,f,t)}a(Qye,"update");function Jye(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=RD.compile(`SELECT ${r.expression.toString()} AS [${jye.FUNC_VAL}] FROM ?`)}),t}catch(t){throw oQ.error(t),new Error(zye)}}a(Jye,"createUpdateRecord");function Xye(e,t){return yD.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Xye,"buildUpdateRecords");async function Zye(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await $ye.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){oQ.error(`Error delete new_attributes from update response: ${i}`)}return s}a(Zye,"updateRecords")});var dQ=x((eke,uQ)=>{var eRe=require("alasql"),tRe=$n(),rRe=ee(),nRe=fs(),AD=require("util"),bD=de(),sRe=($(),L(Q)),iRe=Xi(),oRe="record",aRe="successfully deleted",cRe=AD.callbackify(fRe),lRe=AD.promisify(tRe.search),uRe=AD.promisify(iRe.getTableSchema);uQ.exports={convertDelete:cRe};function dRe(e){return`${e.deleted_hashes.length} ${oRe}${e.deleted_hashes.length===1?"":"s"} ${aRe}`}a(dRe,"generateReturnMessage");async function fRe({statement:e,hdb_user:t}){let r=await uRe(e.table.databaseid,e.table.tableid);bD.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=bD.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=eRe.parse(o).statements[0],l={operation:sRe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await lRe(c);let u=await nRe.deleteRecords(l);return bD.isEmptyOrZeroLength(u.message)&&(u.message=dRe(u)),delete u.txn_time,u}catch(u){throw rRe.error(u),u.hdb_code?u.message:u}}a(fRe,"convertDelete")});var pE=x((rke,EQ)=>{"use strict";EQ.exports={evaluateSQL:IRe,processAST:hQ,convertSQLToAST:pQ,checkASTPermissions:mQ};var mRe=ms(),fQ=require("util"),pRe=fQ.callbackify(mRe.insert),hRe=$n().search,ERe=lQ().update,_Re=fQ.callbackify(ERe),gRe=dQ().convertDelete,kc=require("alasql"),SRe=eR(),iR=ee(),TRe=Dg(),yRe=de(),mE=($(),L(Q)),{hdbErrors:RRe,handleHDBError:ID}=ge(),{HTTP_STATUS_CODES:wD}=RRe;TRe(kc);var bRe=403,ARe="There was a problem performing this insert. Please check the logs and try again.",ND=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function IRe(e,t){let r=e.parsed_sql_object;if(!r){r=pQ(e.sql);let n,s=r.ast.statements[0];if(s instanceof kc.yy.Insert?n=s.into.databaseid:s instanceof kc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof kc.yy.Update||s instanceof kc.yy.Delete?n=s.table.databaseid:iR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof kc.yy.Select)&&yRe.isEmptyOrZeroLength(n))return t("No schema specified",null)}hQ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(IRe,"evaluateSQL");function mQ(e,t){let r;try{r=SRe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(mQ,"checkASTPermissions");function pQ(e){let t=new ND;if(!e)throw ID(new Error,"The 'sql' parameter is missing from the request body",wD.BAD_REQUEST);try{let r=e.trim(),n=kc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
133
|
-
`);throw n[1]?ID(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,wD.BAD_REQUEST):ID(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",wD.BAD_REQUEST)}return t}a(pQ,"convertSQLToAST");function hQ(e,t,r){try{let n=wRe;if(!e.bypass_auth&&!t.permissions_checked){let i=mQ(e,t);if(i&&i.length>0)return r(bRe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case mE.VALID_SQL_OPS_ENUM.SELECT:n=hRe,s=t.ast.statements[0];break;case mE.VALID_SQL_OPS_ENUM.INSERT:n=NRe;break;case mE.VALID_SQL_OPS_ENUM.UPDATE:n=_Re;break;case mE.VALID_SQL_OPS_ENUM.DELETE:n=gRe;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(hQ,"processAST");function wRe(e,t){iR.info(e),t("unknown sql statement")}a(wRe,"nullFunction");function NRe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=CRe(i,e.values)}catch(o){return r(o)}pRe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){iR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(NRe,"convertInsert");function CRe(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=kc.compile(`SELECT ${s.toString()} AS [${mE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw iR.error(r),new Error(ARe)}}a(CRe,"createDataObjects")});var PD=x((ske,AQ)=>{"use strict";var OD=$n(),ORe=fC(),{AsyncParser:PRe}=require("json2csv"),oR=require("stream"),Cs=de(),CD=require("fs-extra"),LRe=require("path"),Xs=ee(),{promisify:SQ}=require("util"),hE=de(),{handleHDBError:Ir,hdbErrors:DRe}=ge(),{HDB_ERROR_MSGS:Xn,HTTP_STATUS_CODES:wr}=DRe,{streamAsJSON:vRe}=(MI(),L(wF)),{Upload:MRe}=require("@aws-sdk/lib-storage"),{toCsvStream:URe}=(ea(),L(UF)),_Q=["search_by_value","search_by_hash","sql","search_by_conditions"],gQ=["json","csv"],TQ="json",yQ="csv",xRe="Successfully exported JSON locally.",BRe="Successfully exported CSV locally.",FRe=1e3,kRe=OD.searchByHash,HRe=OD.searchByValue,GRe=SQ(oR.finished);AQ.exports={export_to_s3:KRe,export_local:qRe};async function qRe(e){Xs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=RQ(e);if(!Cs.isEmpty(t))throw Xs.error(t),Ir(new Error,t,wr.BAD_REQUEST,void 0,void 0,!0);if(Cs.isEmpty(e.path))throw Xs.error(Xn.MISSING_VALUE("path")),Ir(new Error,Xn.MISSING_VALUE("path"),wr.BAD_REQUEST,void 0,void 0,!0);let r=(Cs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(LRe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Cs.buildFolderPath(e.path,r);await $Re(e.path);let s=await bQ(e);return await VRe(n,e.format,s)}a(qRe,"export_local");async function $Re(e){if(Xs.trace("in confirmPath"),Cs.isEmptyOrZeroLength(e))throw Ir(new Error,`Invalid path: ${e}`,wr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await CD.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,Xs.error(n),Ir(new Error,n,wr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Xs.error(r),Ir(new Error,r,wr.BAD_REQUEST,void 0,void 0,!0)}return!0}a($Re,"confirmPath");async function VRe(e,t,r){if(Xs.trace("in saveToLocal"),hE.isEmptyOrZeroLength(e))throw Ir(new Error,Xn.INVALID_VALUE("file_path"),wr.BAD_REQUEST,void 0,void 0,!0);if(hE.isEmptyOrZeroLength(t))throw Ir(new Error,Xn.INVALID_VALUE("Source format"),wr.BAD_REQUEST,void 0,void 0,!0);if(hE.isEmpty(r))throw Ir(new Error,Xn.NOT_FOUND("Data"),wr.BAD_REQUEST,void 0,void 0,!0);if(t===TQ){let n=CD.createWriteStream(e);return vRe(r).pipe(n),await GRe(n),{message:xRe,path:e}}else if(t===yQ){let n=CD.createWriteStream(e),s=oR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new PRe(i,c).fromInput(s).toOutput(n).promise(!1),{message:BRe,path:e}}throw Ir(new Error,Xn.INVALID_VALUE("format"),wr.BAD_REQUEST)}a(VRe,"saveToLocal");async function KRe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Ir(new Error,Xn.MISSING_VALUE("S3 object"),wr.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Ir(new Error,Xn.MISSING_VALUE("aws_access_key_id"),wr.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Ir(new Error,Xn.MISSING_VALUE("aws_secret_access_key"),wr.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.bucket))throw Ir(new Error,Xn.MISSING_VALUE("bucket"),wr.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.key))throw Ir(new Error,Xn.MISSING_VALUE("key"),wr.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.region))throw Ir(new Error,Xn.MISSING_VALUE("region"),wr.BAD_REQUEST);let t=RQ(e);if(!Cs.isEmpty(t))throw Ir(new Error,t,wr.BAD_REQUEST);Xs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await bQ(e)}catch(c){throw Xs.error(c),c}let n=await ORe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),s,i=new oR.PassThrough;if(e.format===yQ){s=e.s3.key+".csv";let c=URe(r,r.getColumns?.());c.on("error",l=>{throw l}),c.pipe(i)}else if(e.format===TQ){s=e.s3.key+".json";let c=new oR.Readable;c.pipe(i),c.on("error",d=>{throw d}),c.push("[");let l=r.length,u="";for(let[d,f]of r.entries()){let m=d===l-1?JSON.stringify(f):JSON.stringify(f)+",";u+=m,d!==0&&d%FRe===0&&(c.push(u),u="")}u.length!==0&&c.push(u),c.push("]"),c.push(null)}else throw Ir(new Error,Xn.INVALID_VALUE("format"),wr.BAD_REQUEST);return new MRe({client:n,params:{Bucket:e.s3.bucket,Key:s,Body:i}}).done()}a(KRe,"export_to_s3");function RQ(e){if(Xs.trace("in exportCoreValidation"),Cs.isEmpty(e.format))return"format missing";if(gQ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${gQ.join(", ")}`;let t=e.search_operation.operation;if(Cs.isEmpty(t))return"search_operation.operation missing";if(_Q.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${_Q.join(", ")}`}a(RQ,"exportCoreValidation");async function bQ(e){Xs.trace("in getRecords");let t,r;if(hE.isEmpty(e.search_operation)||hE.isEmptyOrZeroLength(e.search_operation.operation))throw Ir(new Error,Xn.INVALID_VALUE("Search operation"),wr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=HRe;break;case"search_by_hash":t=kRe;break;case"search_by_conditions":t=OD.searchByConditions;break;case"sql":{let n=pE();t=SQ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Xs.error(r),Ir(new Error,r,wr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(bQ,"getRecords")});var wQ=x((oke,IQ)=>{"use strict";var LD=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};IQ.exports=LD});var OQ=x((cke,CQ)=>{"use strict";var YRe=($(),L(Q)),NQ=require("moment"),WRe=require("uuid").v4,DD=class{static{a(this,"JobObject")}constructor(){this.id=WRe(),this.type=void 0,this.start_datetime=NQ().valueOf(),this.created_datetime=NQ().valueOf(),this.end_datetime=void 0,this.status=YRe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};CQ.exports=DD});var MD=x((uke,BQ)=>{"use strict";var jRe=require("uuid").v4,MQ=ms(),UQ=$n(),zRe=Ki(),QRe=Ym(),JRe=wQ(),kt=($(),L(Q)),XRe=OQ(),ZRe=gS(),Ui=ee(),ebe=Im(),vf=de(),{promisify:tbe}=require("util"),yu=require("moment"),aR=uC(),PQ=tw(),{deleteTransactionLogsBeforeValidator:rbe}=BL(),{handleHDBError:LQ,hdbErrors:nbe,ClientError:sbe}=ge(),{HTTP_STATUS_CODES:DQ}=nbe,vQ=UQ.searchByValue,ibe=UQ.searchByHash,obe=MQ.insert,abe=MQ.update,vD;BQ.exports={addJob:ube,updateJob:fbe,handleGetJob:cbe,handleGetJobsByStartDate:lbe,getJobById:xQ};async function cbe(e){if(e.id===void 0)throw new sbe("'id' is required");let t=await xQ(e.id);return vf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(cbe,"handleGetJob");async function lbe(e){try{let t=await dbe(e);if(Ui.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=yu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=yu(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Ui.error(r),new Error(r)}}a(lbe,"handleGetJobsByStartDate");async function ube(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||vf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ui.info(d),t.error=d,t}if(!kt.JOB_TYPE_ENUM[e.operation])return Ui.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case kt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=aR.fileObject(e);break;case kt.OPERATIONS_ENUM.CSV_URL_LOAD:n=aR.urlObject(e);break;case kt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=aR.dataObject(e);break;case kt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=aR.s3FileObject(e);break;case kt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case kt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=PQ(e,"date");break;case kt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=PQ(e,"timestamp");break;case kt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=rbe(e);break;case kt.OPERATIONS_ENUM.RESTART_SERVICE:if(kt.HDB_PROCESS_SERVICES[e.service]===void 0)throw LQ(new Error,"Invalid service",DQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw LQ(n,n.message,DQ.BAD_REQUEST,void 0,void 0,!0);let s=new XRe;s.type=e.operation===kt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?kt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new zRe(kt.SYSTEM_SCHEMA_NAME,kt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await vQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ui.error(f),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=jRe();try{o=await vQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ui.error(f),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ui.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new ebe(kt.SYSTEM_SCHEMA_NAME,kt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await obe(l)}catch(d){return Ui.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Ui.trace(d)}return t}a(ube,"addJob");async function dbe(e){let t=yu(e.from_date,yu.ISO_8601),r=yu(e.to_date,yu.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new JRe(n,e.hdb_user);try{if(!vD){let i=pE();vD=tbe(i.evaluateSQL)}return await vD(s)}catch(i){throw Ui.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(dbe,"getJobsInDateRange");async function xQ(e){if(vf.isEmptyOrZeroLength(e))return vf.errorizeMessage("Invalid job ID specified.");let t=new QRe(kt.SYSTEM_SCHEMA_NAME,kt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await ibe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ui.error(n),vf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(xQ,"getJobById");async function fbe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(vf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===kt.JOB_STATUS_ENUM.COMPLETE||e.status===kt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=yu().valueOf());let t=new ZRe(kt.SYSTEM_SCHEMA_NAME,kt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await abe(t),r}a(fbe,"updateJob")});var KQ=x((fke,VQ)=>{"use strict";var FQ=de(),Ur=($(),L(Q)),mbe=require("moment"),cR=TD(),EE=ee(),kQ=MD(),HQ=PD(),GQ=Il(),qQ=at(),pbe=Ky(),hbe=Nf(),{parentPort:Ebe,isMainThread:$Q}=require("worker_threads"),{onMessageByType:_be}=at(),UD=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function gbe(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(FQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(FQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ur.JOB_TYPE_ENUM.csv_file_load:await wo(e,cR.csvFileLoad);break;case Ur.JOB_TYPE_ENUM.csv_url_load:await wo(e,cR.csvURLLoad);break;case Ur.JOB_TYPE_ENUM.csv_data_load:await wo(e,cR.csvDataLoad);break;case Ur.JOB_TYPE_ENUM.import_from_s3:await wo(e,cR.importFromS3);break;case Ur.JOB_TYPE_ENUM.empty_trash:break;case Ur.JOB_TYPE_ENUM.export_local:await wo(e,HQ.export_local);break;case Ur.JOB_TYPE_ENUM.export_to_s3:await wo(e,HQ.export_to_s3);break;case Ur.JOB_TYPE_ENUM.delete_files_before:case Ur.JOB_TYPE_ENUM.delete_records_before:await wo(e,GQ.deleteFilesBefore);break;case Ur.JOB_TYPE_ENUM.delete_audit_logs_before:await wo(e,GQ.deleteAuditLogsBefore);break;case Ur.JOB_TYPE_ENUM.delete_transaction_logs_before:await wo(e,pbe.deleteTransactionLogsBefore);break;case Ur.JOB_TYPE_ENUM.restart_service:return await wo(e,hbe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(gbe,"parseMessage");async function wo(e,t){try{e.job.status=Ur.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=mbe().valueOf(),await kQ.updateJob(e.job),await Sbe(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):EE.error(`There was an error running ${t.name} job with id ${e.job.id}`),EE.error(n),e.job.message=n,e.job.status=Ur.JOB_STATUS_ENUM.ERROR;try{await kQ.updateJob(e.job)}catch(s){throw EE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(wo,"runJob");async function Sbe(e){EE.trace("launching job thread:",e),$Q?qQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):Ebe.postMessage({type:Ur.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(Sbe,"launchJobThread");$Q&&_be(Ur.ITC_EVENT_TYPES.START_JOB,async e=>{try{qQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(t){EE.error(t)}});VQ.exports={parseMessage:gbe,RunnerMessage:UD}});var WQ=x((pke,YQ)=>{"use strict";var xD=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};YQ.exports=xD});var zQ=x((Eke,jQ)=>{"use strict";var Tbe=de(),BD=fe(),Hc=($(),L(Q)),ybe=Er(),Rbe=Lr(),No=ee(),bbe=WQ(),Abe=sa();BD.initSync();jQ.exports={postOperationHandler:wbe,sendOperationTransaction:_E};async function _E(e,t,r,n){if(e.schema===Hc.SYSTEM_SCHEMA_NAME)return;let s=Ibe(e,t,r);s&&(No.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await Rbe.publishToStream(`${ybe.SUBJECT_PREFIXES.TXN}.${e.schema}`,Abe.createNatsTableStreamName(e.schema,e.table),n,s))}a(_E,"sendOperationTransaction");function Ibe(e,t,r){if(Tbe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Hc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(Ibe,"convertCRUDOperationToTransaction");async function wbe(e,t,r){if(!BD.get(Hc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;No.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=BD.get(Hc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new bbe(t.txn_time,n,s);switch(e.operation){case Hc.OPERATIONS_ENUM.INSERT:try{await _E(e,t.inserted_hashes,i,r)}catch(o){No.error("There was an error calling clustering postOperationHandler for insert."),No.error(o)}break;case Hc.OPERATIONS_ENUM.DELETE:try{await _E(e,t.deleted_hashes,i,r)}catch(o){No.error("There was an error calling clustering postOperationHandler for delete."),No.error(o)}break;case Hc.OPERATIONS_ENUM.UPDATE:try{await _E(e,t.update_hashes,i,r)}catch(o){No.error("There was an error calling clustering postOperationHandler for update."),No.error(o)}break;case Hc.OPERATIONS_ENUM.UPSERT:try{await _E(e,t.upserted_hashes,i,r)}catch(o){No.error("There was an error calling clustering postOperationHandler for upsert."),No.error(o)}break;default:break}return t}a(wbe,"postOperationHandler")});var te,QQ=ie(()=>{te=class{static{a(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var UL={};Re(UL,{chooseOperation:()=>E4,executeJob:()=>Zs,getOperationFunction:()=>_4,operation:()=>YD,processLocalTransaction:()=>h4});function Obe(e){if(!FD){let t=pE();FD=KD.promisify(t.evaluateSQL)}return FD(e)}async function h4(e,t){try{if(e.body.operation!=="read_log"&&(yE.default.log_level===hm.INFO||yE.default.log_level===hm.DEBUG||yE.default.log_level===hm.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;Ln.info(c)}}catch(n){Ln.error(n)}let r=await m4.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Pbe[e.body.operation]&&c4.default.setSchemaDataToGlobal(n=>{n&&Ln.error(n)}),r}function E4(e){let t;try{t=_4(e)}catch(s){throw Ln.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=pE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,o=s.convertSQLToAST(i);if(e.parsed_sql_object=o,!e.bypass_auth){let c=s.checkASTPermissions(e,o);if(c)throw Ln.error(`${JQ.FORBIDDEN} from operation ${e.operation}`),Ln.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,ei.handleHDBError)(new Error,c,ei.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==j.CREATE_AUTHENTICATION_TOKENS&&e.operation!==j.LOGIN&&e.operation!==j.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=a4.default.verifyPerms(i,s);if(o)throw Ln.error(`${JQ.FORBIDDEN} from operation ${e.operation}`),Ln.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,ei.handleHDBError)(new Error,o,ei.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,ei.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function _4(e){if(Ln.trace(`getOperationFunction with operation: ${e.operation}`),XQ.has(e.operation))return XQ.get(e.operation);throw(0,ei.handleHDBError)(new Error,ei.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ei.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function YD(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=E4(e);return h4({body:e},n)}async function Lbe(e){Ln.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[dA]=!0;let o;switch(i.operation){case j.INSERT:o=await bu.default.insert(i);break;case j.UPDATE:o=await bu.default.update(i);break;case j.UPSERT:o=await bu.default.upsert(i);break;case j.DELETE:o=await Uf.default.deleteRecord(i);break;default:Ln.warn("invalid operation in catchup");break}await Nbe.postOperationHandler(i,o,e)}catch(o){Ln.info("Invalid operation in transaction"),Ln.error(o)}}async function Zs(e){(0,f4.transformReq)(e);let t,r;try{if(r=await uR.default.addJob(e),r){t=r.createdJob,Ln.info("addJob result",r);let n=new qD.default.RunnerMessage(t,e);return{message:await qD.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Ln.error(i),(0,ei.handleHDBError)(n,i)}}function Dbe(){let e=new Map;return e.set(j.INSERT,new te(bu.default.insert)),e.set(j.UPDATE,new te(bu.default.update)),e.set(j.UPSERT,new te(bu.default.upsert)),e.set(j.SEARCH_BY_CONDITIONS,new te(Mf.default.searchByConditions)),e.set(j.SEARCH_BY_HASH,new te(Mf.default.searchByHash)),e.set(j.SEARCH_BY_ID,new te(Mf.default.searchByHash)),e.set(j.SEARCH_BY_VALUE,new te(Mf.default.searchByValue)),e.set(j.SEARCH,new te(Cbe)),e.set(j.SQL,new te(Obe)),e.set(j.CSV_DATA_LOAD,new te(Zs,gE.default.csvDataLoad)),e.set(j.CSV_FILE_LOAD,new te(Zs,gE.default.csvFileLoad)),e.set(j.CSV_URL_LOAD,new te(Zs,gE.default.csvURLLoad)),e.set(j.IMPORT_FROM_S3,new te(Zs,gE.default.importFromS3)),e.set(j.CREATE_SCHEMA,new te(xi.default.createSchema)),e.set(j.CREATE_DATABASE,new te(xi.default.createSchema)),e.set(j.CREATE_TABLE,new te(xi.default.createTable)),e.set(j.CREATE_ATTRIBUTE,new te(xi.default.createAttribute)),e.set(j.DROP_SCHEMA,new te(xi.default.dropSchema)),e.set(j.DROP_DATABASE,new te(xi.default.dropSchema)),e.set(j.DROP_TABLE,new te(xi.default.dropTable)),e.set(j.DROP_ATTRIBUTE,new te(xi.default.dropAttribute)),e.set(j.DESCRIBE_SCHEMA,new te(SE.default.describeSchema)),e.set(j.DESCRIBE_DATABASE,new te(SE.default.describeSchema)),e.set(j.DESCRIBE_TABLE,new te(SE.default.describeTable)),e.set(j.DESCRIBE_ALL,new te(SE.default.describeAll)),e.set(j.DELETE,new te(Uf.default.deleteRecord)),e.set(j.ADD_USER,new te(Kw)),e.set(j.ALTER_USER,new te(Yw)),e.set(j.DROP_USER,new te(Ww)),e.set(j.LIST_USERS,new te(zw)),e.set(j.LIST_ROLES,new te(TE.default.listRoles)),e.set(j.ADD_ROLE,new te(TE.default.addRole)),e.set(j.ALTER_ROLE,new te(TE.default.alterRole)),e.set(j.DROP_ROLE,new te(TE.default.dropRole)),e.set(j.USER_INFO,new te(jw)),e.set(j.READ_LOG,new te(e4.default)),e.set(j.ADD_NODE,new te(t4.default)),e.set(j.UPDATE_NODE,new te(kD.default)),e.set(j.SET_NODE_REPLICATION,new te(kD.default)),e.set(j.REMOVE_NODE,new te(r4.default)),e.set(j.CONFIGURE_CLUSTER,new te(n4.default)),e.set(j.PURGE_STREAM,new te(s4.default)),e.set(j.SET_CONFIGURATION,new te($D.default.setConfiguration)),e.set(j.CLUSTER_STATUS,new te(i4.default.clusterStatus)),e.set(j.CLUSTER_NETWORK,new te(o4.default)),e.set(j.CLUSTER_SET_ROUTES,new te(lR.default.setRoutes)),e.set(j.CLUSTER_GET_ROUTES,new te(lR.default.getRoutes)),e.set(j.CLUSTER_DELETE_ROUTES,new te(lR.default.deleteRoutes)),e.set(j.EXPORT_TO_S3,new te(Zs,HD.default.export_to_s3)),e.set(j.CREATE_CSR,new te(Ru.default.createCsr)),e.set(j.SIGN_CERTIFICATE,new te(Ru.default.signCertificate)),e.set(j.LIST_CERTIFICATES,new te(Ru.default.listCertificates)),e.set(j.ADD_CERTIFICATES,new te(Ru.default.addCertificate)),e.set(j.REMOVE_CERTIFICATE,new te(Ru.default.removeCertificate)),e.set(j.GET_KEY,new te(Ru.default.getKey)),e.set(j.ADD_NODE_BACK,new te(oP)),e.set(j.REMOVE_NODE_BACK,new te(aP)),e.set(j.DELETE_FILES_BEFORE,new te(Zs,Uf.default.deleteFilesBefore)),e.set(j.DELETE_RECORDS_BEFORE,new te(Zs,Uf.default.deleteFilesBefore)),e.set(j.EXPORT_LOCAL,new te(Zs,HD.default.export_local)),e.set(j.SEARCH_JOBS_BY_START_DATE,new te(uR.default.handleGetJobsByStartDate)),e.set(j.GET_JOB,new te(uR.default.handleGetJob)),e.set(j.GET_REGISTRATION_INFO,new te(eD)),e.set(j.GET_FINGERPRINT,new te(tD)),e.set(j.SET_LICENSE,new te(rD)),e.set(j.RESTART,new te(GD.default.restart)),e.set(j.RESTART_SERVICE,new te(Zs,GD.default.restartService)),e.set(j.CATCHUP,new te(Lbe)),e.set(j.SYSTEM_INFORMATION,new te(l4.default.systemInformation)),e.set(j.DELETE_AUDIT_LOGS_BEFORE,new te(Zs,Uf.default.deleteAuditLogsBefore)),e.set(j.READ_AUDIT_LOG,new te(ZQ.default)),e.set(j.CREATE_AUTHENTICATION_TOKENS,new te(rC)),e.set(j.REFRESH_OPERATION_TOKEN,new te(nC)),e.set(j.LOGIN,new te(PL)),e.set(j.LOGOUT,new te(LL)),e.set(j.GET_CONFIGURATION,new te($D.default.getConfiguration)),e.set(j.CUSTOM_FUNCTIONS_STATUS,new te(Ct.default.customFunctionsStatus)),e.set(j.GET_CUSTOM_FUNCTIONS,new te(Ct.default.getCustomFunctions)),e.set(j.GET_COMPONENT_FILE,new te(Ct.default.getComponentFile)),e.set(j.GET_COMPONENTS,new te(Ct.default.getComponents)),e.set(j.SET_COMPONENT_FILE,new te(Ct.default.setComponentFile)),e.set(j.DROP_COMPONENT,new te(Ct.default.dropComponent)),e.set(j.GET_CUSTOM_FUNCTION,new te(Ct.default.getCustomFunction)),e.set(j.SET_CUSTOM_FUNCTION,new te(Ct.default.setCustomFunction)),e.set(j.DROP_CUSTOM_FUNCTION,new te(Ct.default.dropCustomFunction)),e.set(j.ADD_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.addComponent)),e.set(j.ADD_COMPONENT,new te(Ct.default.addComponent)),e.set(j.DROP_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.dropCustomFunctionProject)),e.set(j.PACKAGE_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.packageComponent)),e.set(j.PACKAGE_COMPONENT,new te(Ct.default.packageComponent)),e.set(j.DEPLOY_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.deployComponent)),e.set(j.DEPLOY_COMPONENT,new te(Ct.default.deployComponent)),e.set(j.READ_TRANSACTION_LOG,new te(VD.default.readTransactionLog)),e.set(j.DELETE_TRANSACTION_LOGS_BEFORE,new te(Zs,VD.default.deleteTransactionLogsBefore)),e.set(j.INSTALL_NODE_MODULES,new te(u4.default.installModules)),e.set(j.GET_BACKUP,new te(xi.default.getBackup)),e.set(j.CLEANUP_ORPHAN_BLOBS,new te(xi.default.cleanupOrphanBlobs)),e.set(j.ADD_SSH_KEY,new te(Ct.default.addSSHKey)),e.set(j.GET_SSH_KEY,new te(Ct.default.getSSHKey)),e.set(j.UPDATE_SSH_KEY,new te(Ct.default.updateSSHKey)),e.set(j.DELETE_SSH_KEY,new te(Ct.default.deleteSSHKey)),e.set(j.LIST_SSH_KEYS,new te(Ct.default.listSSHKeys)),e.set(j.SET_SSH_KNOWN_HOSTS,new te(Ct.default.setSSHKnownHosts)),e.set(j.GET_SSH_KNOWN_HOSTS,new te(Ct.default.getSSHKnownHosts)),e.set(j.GET_ANALYTICS,new te(HL)),e.set(j.LIST_METRICS,new te(GL)),e.set(j.DESCRIBE_METRIC,new te(qL)),e.set(j.GET_STATUS,new te(oN)),e.set(j.SET_STATUS,new te(aN)),e.set(j.CLEAR_STATUS,new te(iN)),e.set(j.INSTALL_USAGE_LICENSE,new te(zL)),e.set(j.GET_USAGE_LICENSES,new te(ZL)),e}var Mf,gE,xi,SE,Uf,ZQ,TE,Ct,yE,e4,t4,kD,r4,n4,s4,i4,o4,lR,HD,a4,uR,ei,GD,KD,bu,c4,l4,qD,$D,VD,u4,d4,f4,Ru,m4,p4,JQ,Ln,Nbe,Cbe,FD,Pbe,XQ,xL=ie(()=>{Mf=b($n()),gE=b(TD()),xi=b(DT()),SE=b(Ld()),Uf=b(Il()),ZQ=b(vO());_s();TE=b(vp()),Ct=b(ML()),yE=b(ee()),e4=b(kO()),t4=b(VT()),kD=b(fP()),r4=b(YT()),n4=b(hP()),s4=b(EP()),i4=b(SP()),o4=b(yP()),lR=b(JT()),HD=b(PD()),a4=b(eR()),uR=b(MD());$();ei=b(ge()),GD=b(Nf()),KD=b(require("util")),bu=b(ms()),c4=b(Xi()),l4=b(wh()),qD=b(KQ());Cd();vy();$D=b(wt()),VD=b(Ky()),u4=b(kL()),d4=b(fi()),f4=b(de());qr();Ru=b(ys());rf();VL();m4=b(dC()),p4=b(zQ());Lp();iE();sD();QQ();({HTTP_STATUS_CODES:JQ}=ei.hdbErrors),Ln=yE.default.loggerWithTag("operation"),{transactToClusteringUtils:Nbe}=p4.default,Cbe=KD.promisify(Mf.default.search);a(Obe,"evaluateSQL");Pbe={[j.CREATE_ATTRIBUTE]:!0,[j.CREATE_TABLE]:!0,[j.CREATE_SCHEMA]:!0,[j.DROP_ATTRIBUTE]:!0,[j.DROP_TABLE]:!0,[j.DROP_SCHEMA]:!0};a(h4,"processLocalTransaction");XQ=Dbe();Ue.operation=YD;a(E4,"chooseOperation");a(_4,"getOperationFunction");(0,d4._assignPackageExport)("operation",YD);a(YD,"operation");a(Lbe,"catchup");a(Zs,"executeJob");a(Dbe,"initializeOperationFunctionMap")});var mR=x((bke,y4)=>{"use strict";var dR=($(),L(Q)),vbe=de(),xf=ee(),{handleHDBError:WD,hdbErrors:fR}=ge(),{isMainThread:Mbe}=require("worker_threads"),{Readable:Ube}=require("stream"),g4=require("os"),xbe=require("util"),Bbe=r$(),T4=xbe.promisify(Bbe.authorize),S4=(xL(),L(UL)),{createGzip:Fbe,constants:kbe}=require("zlib"),Hbe=[dR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,dR.OPERATIONS_ENUM.LOGIN,dR.OPERATIONS_ENUM.LOGOUT];function Gbe(e){let t=`Found an uncaught exception with message: ${e.message}. ${g4.EOL}Stack: ${e.stack} ${g4.EOL}Terminating ${Mbe?"HDB":"thread"}.`;console.error(t),xf.fatal(t),process.exit(1)}a(Gbe,"handleServerUncaughtException");function qbe(e,t,r){if(xf[e.logLevel||"info"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:fR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(qbe,"serverErrorHandler");function $be(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=WD(new Error,"Invalid JSON.",fR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(vbe.isEmpty(e.body.operation)){let n=WD(new Error,"Request body must include an 'operation' property.",fR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a($be,"reqBodyValidationHandler");function Vbe(e,t,r){let n;!Hbe.includes(e.body.operation)||e.body.operation===dR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?T4(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{i.statusCode=401,xf.debug("Login failed",i),r(i,null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(Vbe,"authHandler");function Kbe(e,t,r){T4(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{xf.warn(n),xf.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(WD(n,s,fR.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(Kbe,"authAndEnsureUserOnRequest");async function Ybe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=S4.chooseOperation(e.body);let s=await S4.processLocalTransaction(e,n);if(s instanceof Ube&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Fbe({level:kbe.Z_BEST_SPEED})))}return s}catch(s){throw xf.error(s),s}}a(Ybe,"handlePostRequest");y4.exports={authHandler:Vbe,authAndEnsureUserOnRequest:Kbe,handlePostRequest:Ybe,handleServerUncaughtException:Gbe,serverErrorHandler:qbe,reqBodyValidationHandler:$be}});var I4=x((Ike,A4)=>{"use strict";var Wbe=require("fastify-plugin"),{handlePostRequest:R4,authHandler:jbe,reqBodyValidationHandler:zbe}=mR();async function Qbe(e){e.decorate("hdbCore",{preValidation:[zbe,jbe],request:a((t,r)=>b4(R4(t,r)),"request"),requestWithoutAuthentication:a((t,r)=>b4(R4(t,r,!0)),"requestWithoutAuthentication")})}a(Qbe,"hdbCore");async function b4(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(b4,"convertAsyncIterators");A4.exports=Wbe(Qbe)});var N4=x((Nke,w4)=>{"use strict";var pR=fe();pR.initSync();var{CONFIG_PARAMS:jD}=($(),L(Q)),Jbe=1024*1024*1024;function Xbe(e){let t=pR.get(jD.HTTP_TIMEOUT),r=pR.get(jD.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Jbe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:pR.get(jD.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(Xbe,"getServerOptions");w4.exports=Xbe});var P4=x((Oke,O4)=>{"use strict";var zD=fe();zD.initSync();var{CONFIG_PARAMS:C4}=($(),L(Q));function Zbe(){let e=zD.get(C4.HTTP_CORSACCESSLIST),t=zD.get(C4.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(Zbe,"getCORSOptions");O4.exports=Zbe});var v4=x((Lke,D4)=>{"use strict";var L4=fe();L4.initSync();var eAe=($(),L(Q));function tAe(){return L4.get(eAe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(tAe,"getHeaderTimeoutConfig");D4.exports=tAe});var JD={};Re(JD,{customFunctionsServer:()=>sAe,ready:()=>Y4,start:()=>nAe});function nAe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){va||(va=K4(t),Ue.http((await va).server));let o=await va,c=(0,QD.dirname)(s),l=(0,QD.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!M4.has(c)){M4.add(c);try{o.register(oAe(c,l))}catch(u){if(u.message==="Root plugin has already booted")Tt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:Y4}}async function sAe(){try{Tt.info("In Custom Functions Fastify server"+process.cwd()),Tt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tt.debug(`Custom Functions server process ${process.pid} starting up.`),await iAe();let e=H4.get(U.HTTP_SECUREPORT)>0,t;try{t=va=await K4(e)}catch(r){throw Tt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Tt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Tt.error(`Custom Functions ${process.pid} Error: ${e}`),Tt.error(e),process.exit(1)}}async function iAe(){try{Tt.info("Custom Functions starting configuration."),await Si(),Tt.info("Custom Functions completed configuration.")}catch(e){Tt.error(e)}}function oAe(e,t){return async function(r){try{Tt.info("Custom Functions starting buildRoutes"),Tt.trace("Loading fastify routes folder "+e),(0,U4.existsSync)(e)&&r.register(k4.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Tt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Tt.error(s.message):s&&Tt.error(s),o()})}catch(n){Tt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function K4(e){Tt.info("Custom Functions starting buildServer.");let t=(0,G4.default)(e),r=(0,x4.default)(t);r.server.headersTimeout=(0,$4.default)(),r.setErrorHandler(V4.serverErrorHandler);let n=(0,q4.default)();return n&&r.register(B4.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){l.sent||l.raw.headersSent||l.raw.writableEnded||r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(F4.default),await r.register(rAe),await r.after(),tp(r),Tt.info("Custom Functions completed buildServer."),r}function Y4(){if(va)return va.then?va.then(e=>e.ready()):va.ready()}var QD,U4,x4,B4,F4,k4,H4,Tt,rAe,G4,q4,$4,V4,va,M4,W4=ie(()=>{QD=require("path"),U4=require("fs"),x4=b(require("fastify")),B4=b(require("@fastify/cors")),F4=b(ZN()),k4=b(require("@fastify/autoload")),H4=b(fe());$();Tt=b(ee()),rAe=b(I4());_s();G4=b(N4()),q4=b(P4()),$4=b(v4()),V4=b(mR());ea();qr();M4=new Set;a(nAe,"start");a(sAe,"customFunctionsServer");a(iAe,"setUp");a(oAe,"buildRouteFolder");a(K4,"buildServer");a(Y4,"ready")});var ZD={};Re(ZD,{handleApplication:()=>aAe,suppressHandleApplicationWarning:()=>cAe});function aAe(e){let t=new Map,r=new Map;e.options.on("change",n=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,Ma.join)(n.absolutePath,"index.html");(0,Bf.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&(r.set((0,Ma.dirname)(n.urlPath),null),r.set((0,Ma.join)((0,Ma.dirname)(n.urlPath),"/"),n.absolutePath));break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Ma.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let o=t.get(n.pathname);if(!o){let d=e.options.get(["index"])??!0;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);if(d&&(o=r.get(n.pathname),o===null))return{status:301,headers:{Location:(0,Ma.join)(n.pathname,"/")}}}if(!o){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(o=t.get(`${n.pathname}.${f}`),o)break}if(o)return{handlesHeaders:!0,body:(0,XD.default)(n,(0,Bf.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(lAe(c),!c)return{status:404,body:"File not found"};let l=(0,Ma.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,Bf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,XD.default)(n,(0,Bf.realpathSync)(l))}},{runFirst:!0})}function lAe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var Bf,Ma,XD,cAe,j4=ie(()=>{Bf=require("node:fs"),Ma=require("node:path"),XD=b(require("send"));a(aAe,"handleApplication");cAe=!0;a(lAe,"validateNotFoundOption")});var ev={};Re(ev,{start:()=>uAe});function uAe({override:e}){return{handleFile:a((t,r,n)=>{hR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,z4.parse)(t))){if(process.env[s]!==void 0)if(hR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)hR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var z4,hR,Q4=ie(()=>{z4=require("dotenv"),hR=b(ee());a(uAe,"start")});var nv={};Re(nv,{DataLoaderError:()=>Os,DataLoaderResult:()=>Ff,EmptyFileError:()=>SR,FileParseError:()=>gR,InvalidPropertyTypeError:()=>TR,MissingRequiredPropertyError:()=>RE,RecordProcessingError:()=>bE,SystemDatabaseError:()=>yR,UnsupportedFileExtensionError:()=>_R,computeRecordHash:()=>rv,handleApplication:()=>mAe,loadDataFile:()=>sJ,suppressHandleApplicationWarning:()=>fAe});function rv(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,X4.createHash)("sha256").update(n).digest("hex")}function nJ(e){return e.system&&e.system[tv]?e.system[tv]:ER||(ER=ze({database:"system",table:tv,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),ER)}async function dAe(e,t,r,n){try{let s=nJ(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return ti.error?.(`Failed to get stored hash: ${s.message}`),null}}async function J4(e,t,r,n,s){try{let i=nJ(s),o=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:o,hash:n})}catch(i){ti.error?.(`Failed to store hash: ${i.message}`)}}function mAe(e){if((0,eJ.getWorkerIndex)()!==0){ti.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(a(function(r){return r.entryType!=="file"||r.eventType==="unlink"?Promise.resolve():sJ(r,yn,xe).then(n=>{ti.debug?.("Data loader processed file: %s: %s",(0,Ua.basename)(r.absolutePath),n.message)})},"handleDataLoaderEntry"))}async function sJ({contents:e,absolutePath:t},r,n){let s=(0,Ua.extname)(t)||"unknown",i;try{if(s===".yaml"||s===".yml")i=(0,Z4.parseDocument)(e.toString()).toJSON();else if(s===".json")i=JSON.parse(e.toString());else throw new _R(t,s)}catch(d){throw d instanceof Os?d:new gR(t,d)}if(!i)throw new SR(t);let{database:o,table:c,records:l}=i;if(!c)throw new RE(t,"table");if(!l)throw new RE(t,"records");if(!Array.isArray(l))throw new TR(t,"records","array");let u=o?`${o}.${c}`:c;if(o?.toLowerCase()==="system")throw new yR(o,c);try{let d;if(o&&n[o]&&n[o][c])ti.debug?.(`Using existing table ${u} from database tables`),d=n[o][c];else if(r&&r[c])ti.debug?.(`Using existing table ${u} from global tables`),d=r[c];else{ti.debug?.(`Table ${u} not found, creating new table`);let _=[];if(l.length>0){let R=l[0];Object.keys(R).map(S=>{let y={name:S,type:typeof R[S]};return S==="id"&&(y.isPrimaryKey=!0),y}).forEach(S=>{_.push(S)})}d=await ze({database:o,table:c,attributes:_})}let f=l.length,m=0,p=0,h=0,E=100;for(let _=0;_<l.length;_+=E){let R=l.slice(_,_+E),S=[];for(let y of R)S.push(async()=>{try{let I=null,w=y.id;w!==void 0&&(I=await d.get(w));let M=rv(y);if(!I){m++;let Y=await d.put(y);return await J4(o,c,w,M,n),Y}let k=await dAe(o,c,w,n);if(!k)return h++,Promise.resolve({inserted:0,updated:0});let X={};for(let Y of Object.keys(y))Y in I&&(X[Y]=I[Y]);return rv(X)!==k?(h++,Promise.resolve({inserted:0,updated:0})):M!==k?(p++,await d.patch(w,y),await J4(o,c,w,M,n),{updated:1}):(h++,Promise.resolve({inserted:0,updated:0}))}catch(I){if(I instanceof Os)ti.error?.(`Record processing error: ${I.message}`);else{let w=new bE(u,I);ti.error?.(`Record processing error: ${w.message}`)}return Promise.resolve({inserted:0,updated:0,error:I.message})}});await Promise.all(S.map(y=>y()))}if(m>0||p>0){let _=`Loaded ${m} new and updated ${p} records in ${u}`;return h>0&&(_+=` (${h} records skipped)`),ti.info?.(_),new Ff(t,o,c,"success",m+p,_)}else if(h>0){let _=`All ${h} records in ${u} already up-to-date`;return ti.info?.(_),new Ff(t,o,c,"skipped",f,_)}else{let _=`No records to process in ${u}`;return ti.info?.(_),new Ff(t,o,c,"success",0,_)}}catch(d){throw d instanceof Os?d:new bE(u,d)}}var Ua,X4,Z4,eJ,xa,tJ,rJ,ti,tv,ER,fAe,Os,_R,gR,SR,RE,TR,yR,bE,Ff,iJ=ie(()=>{Ua=require("node:path"),X4=require("node:crypto"),Z4=require("yaml");Oe();eJ=b(at()),xa=b(En()),tJ=b(ge()),rJ=b(ee()),ti=rJ.default.forComponent("dataLoader"),tv="hdb_dataloader_hash";a(rv,"computeRecordHash");a(nJ,"getHashTrackingTable");a(dAe,"getStoredHash");a(J4,"storeHash");fAe=!0;a(mAe,"handleApplication");a(sJ,"loadDataFile");Os=class extends tJ.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=xa.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},_R=class extends Os{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Ua.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},gR=class extends Os{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Ua.basename)(t)}: ${r.message}`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},SR=class extends Os{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Ua.basename)(t)} is empty or invalid`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},RE=class extends Os{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Ua.basename)(t)} is missing required "${r}" property`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},TR=class extends Os{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Ua.basename)(t)} has invalid "${r}" property, expected ${n}`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},yR=class extends Os{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,xa.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},bE=class extends Os{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,xa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Ff=class{static{a(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=o}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var sv={};Re(sv,{calculateRestHttpURL:()=>_J,hdbServer:()=>_Ae,start:()=>_Ae});async function _Ae(e){try{Bi.default.debug("In Fastify server"+process.cwd()),Bi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Bi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=oJ.default.isMaster,await gAe();let t=e.securePort>0;kf=SAe(t,e.resources),await kf.ready(),e||(e={}),e.usageType="operations-api";try{Ue.http(kf.server,e),kf.server.closeIdleConnections||await kf.listen({port:0,host:"::"})}catch(r){throw kf.close(),Bi.default.error(r),Bi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Bi.default.fatal(t),process.exit(1)}}async function gAe(){return Bi.default.trace("Configuring HarperDB process."),pJ.default.setSchemaDataToGlobal(),Si()}function SAe(e,t){Bi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=RAe(e),n=(0,aJ.default)(r);n.server.headersTimeout=AAe(),n.setErrorHandler(Co.serverErrorHandler);let s=bAe();s&&n.register(cJ.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){d.sent||d.raw.headersSent||d.raw.writableEnded||n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(dJ.default),n.register(lJ.default,{brotliOptions:{params:{[RR.default.constants.BROTLI_PARAM_MODE]:RR.default.constants.BROTLI_MODE_TEXT,[RR.default.constants.BROTLI_PARAM_QUALITY]:2}}}),tp(n),n.get("/health",()=>"HarperDB is running."),n.register(uJ.default,{root:fJ.default.join(mJ.PACKAGE_ROOT,"studio/web")});let i=ri.default.get(_m.LOCAL_STUDIO_ON);return!hJ.default.isEmpty(i)&&i.toString().toLowerCase()==="true"?n.get("/",(o,c)=>c.sendFile("index.html")):n.get("/",(o,c)=>c.sendFile("running.html")),n.get("/api/openapi/rest",{preValidation:[Co.authAndEnsureUserOnRequest]},TAe(t)),n.post("/",{preValidation:[Co.reqBodyValidationHandler,Co.authHandler],config:{isOperation:!0}},yAe),Bi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function TAe(e){let t=ri.default.get(U.HTTP_PORT),r=ri.default.get(U.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?uS(e,_J(t,r,n)):(Bi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new EJ.ServerError("Forbidden",403))}function _J(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return n.hostname.toLowerCase()==="localhost"||n.hostname.match(/^[\d.:]+$/)?t?(n.port=t,n.protocol="https:"):e&&(n.port=e,n.protocol="http:"):(n.port="443",n.protocol="https:"),n.toString()}function yAe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,Co.handlePostRequest)(e,t)}function RAe(e){let t=ri.default.get(Hf.OPERATIONSAPI_NETWORK_TIMEOUT),r=ri.default.get(Hf.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:hAe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:ri.default.get(Hf.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function bAe(){let e=ri.default.get(Hf.OPERATIONSAPI_NETWORK_CORS),t=ri.default.get(Hf.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===EAe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function AAe(){return ri.default.get(Hf.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??pAe}var oJ,RR,ri,Bi,aJ,cJ,lJ,uJ,dJ,fJ,mJ,pJ,hJ,Co,EJ,pAe,hAe,EAe,Hf,kf,gJ=ie(()=>{oJ=b(require("cluster")),RR=b(require("node:zlib")),ri=b(fe());$();Bi=b(ee()),aJ=b(require("fastify")),cJ=b(require("@fastify/cors")),lJ=b(require("@fastify/compress")),uJ=b(require("@fastify/static")),dJ=b(ZN()),fJ=b(require("path")),mJ=b(Lt()),pJ=b(Xi()),hJ=b(de());_s();qr();Co=b(mR());ea();jN();EJ=b(ge());ri.default.initSync();pAe=6e4,hAe=ri.default.get(U.OPERATIONSAPI_NETWORK_MAXREQUESTBODYSIZE)??1024*1024*1024,EAe="TRUE",{CONFIG_PARAMS:Hf}=Q;a(_Ae,"operationsServer");a(gAe,"setUp");a(SAe,"buildServer");a(TAe,"restOpenAPIHandler");a(_J,"calculateRestHttpURL");a(yAe,"handler");a(RAe,"getServerOptions");a(bAe,"getCORSOpts");a(AAe,"getHeaderTimeoutConfig")});var uv={};Re(uv,{disableNATS:()=>wAe,publishToStream:()=>IR,setNATSReplicator:()=>iv,setPublishToStream:()=>NAe,setSubscription:()=>lv,start:()=>IAe});function IAe(){AE.default.get(U.CLUSTERING_ENABLED)&&OAe()}function wAe(e=!0){bJ=e}function NAe(e,t){IR=e,lv=t}function OAe(){if(bJ||process.env._DISABLE_NATS)return;let e=dt(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];iv(s,r,i)}}Yl((r,n)=>{iv(r.tableName,r.databaseName,r),n&&IJ(r)}),!SJ&&(SJ=!0)}function iv(e,t,r){if(t==="system"&&PAe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Vt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){IJ(i)}static subscribe(){let i=new is;return lv(t,e,i),i}static subscribeOnThisThread(i){return i<(AE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??CAe)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new bR(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=AJ;return i}a(n,"getNATSTransaction")}function IJ(e){let t=AE.default.get(U.CLUSTERING_NODENAME);IR(`${av.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,cv.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var TJ,av,cv,yJ,RJ,AE,AR,bJ,IR,lv,CAe,AJ,SJ,PAe,bR,ov,wJ=ie(()=>{Oe();oo();TJ=b(Lr()),av=b(Er()),cv=b(sa());qu();yJ=b(IC()),RJ=b(Ms()),AE=b(fe());$();AR=b(ee());a(IAe,"start");a(wAe,"disableNATS");IR=TJ.publishToStream,lv=yJ.setSubscription;a(NAe,"setPublishToStream");CAe=2;a(OAe,"assignReplicationSource");PAe=["hdb_job","hdb_raw_analytics","hdb_info"];a(iv,"setNATSReplicator");a(IJ,"publishSchema");bR=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=AE.default.get(U.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let o=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(AR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=o)),l.table===f&&l.operation===m?(o.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(IR(`${av.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,cv.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw AR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},ov=class extends bR{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,RJ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};AJ=new ov});async function LJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await dv.get(e,{returnNonexistent:!0});i=new pv(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await dv.get(e);o&&o.delete()}i=new NR(e,t)}return n&&(n.id=e,n.user={username:t?.username},IE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function fv(){return wR++,wR>65500&&(wR=1),wR}function mv(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=ks.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=new qs(i.relativeURL);o.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return At(r,()=>s?t===void 0?c.delete(o,r):c.put(o,e.data,r):c.publish(o,e.data,r))}var CJ,Gc,OJ,PJ,NJ,dv,IE,wR,NR,pv,DJ=ie(()=>{Oe();dc();CJ=b(Ms()),Gc=b(ee());Qa();OJ=b(at()),PJ=b(_L());qr();fS();NJ=100,dv=ze({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),IE=ze({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,OJ.getWorkerIndex)()===0&&(async()=>{await PJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of IE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await mv(r,t,r)}catch{(0,Gc.warn)("Failed to publish will",t)}IE.delete(e.id)}})();a(LJ,"getSession");wR=1;a(fv,"getNextMessageId");NR=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:o,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};o&&(0,Gc.trace)("Resuming subscription from",s,"from",o);let p=ks.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let y=S.split("/"),I;for(let k=0;k<y.length;k++)if(y[k].indexOf("+")>-1)if(y[k]==="+")I=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&I)throw new Error("Filters can not be combined");let w=!0;y[y.length-1]==="#"&&(y.length--,w=!1),I&&(n=a(k=>{let X=k.id;if(!Array.isArray(X))if(X?.indexOf?.("/")>-1)X=X.split("/");else return!1;if(w&&X.length!==y.length)return!1;for(let J=0;J<y.length;J++)if(y[J]!=="+"&&y[J]!==X[J])return!1;return!0},"filter"));let M=y.indexOf("+");m.url="/"+(M>-1?y.slice(0,M):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,_=p.Resource,R=await At(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await _.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let I=(async()=>{for await(let w of y)try{let M;if(w.type&&w.type!=="put"&&w.type!=="delete"&&w.type!=="message"&&w.type!=="patch"||n&&!n(w))continue;r?(w.topic=s,M=this.needsAcknowledge(w)):(w.acknowledge?.(),M=fv());let k=w.id;if(Array.isArray(k)&&(k=_d(k)),k==null&&(k=""),await this.listener(E+"/"+k,w.value,M,t)===!1)break;this.awaitingAcks?.size>NJ?await new Promise(J=>setTimeout(J,this.awaitingAcks.size-NJ)):await new Promise(setImmediate)}catch(M){(0,Gc.warn)(M)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=fv();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return mv(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();At(r,async()=>{try{if(!t){let n=await IE.get(this.sessionId);n?.doesExist()&&await mv(n,n.data,r)}}finally{await IE.delete(this.sessionId)}}).catch(n=>{(0,Gc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(mv,"publish");pv=class extends NR{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=fv(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Gc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,CJ.getNextMonotonicTime)()),(0,Gc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),dv.put(this.sessionRecord)}}});var hv={};Re(hv,{bypassAuth:()=>LAe,start:()=>vAe});function LAe(){FJ=!0}function vAe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new BJ.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);o.events.emit("connection",u),nr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=MJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),o);u.on("message",p),u.on("close",h),u.on("error",E=>{nr.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),nr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await Qd(p,l);if(!E.valid)throw nr.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,Gf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&OR.notify?.({username:d?.username,status:di.SUCCESS,type:ja.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Gf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&OR.error?.({username:h,status:di.FAILURE,type:ja.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else nr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){o.events.emit("error",p,u),nr.error?.(p)}else if(l.required)return nr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&DAe(u.remoteAddress)&&(d=await bp(),nr.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=MJ(u,p=>u.write(p),null,d,o);u.on("data",f),u.on("close",m),u.on("error",p=>{nr.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function MJ(e,t,r,n,s){vJ||(vJ=!0,Hp(f=>{CR>0&&f.push({metric:"mqtt-connections",connections:CR,byThread:!0})}));let i;CR++;let o,c={protocolVersion:4},l=(0,PR.parser)({protocolVersion:5});function u(f){l.parse(f)}a(u,"onMessage");function d(){CR--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),nn(!1,"connection","mqtt","disconnect"),nr.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),nr.info?.(y);return}let m=f.cmd;if(o)o.then&&await o;else if(m!=="connect"){nr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;qe(f.length,"bytes-received",E,R(f),"mqtt");try{switch(o?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Ue.getUser(f.username,f.password.toString(),r),(0,Gf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&OR.notify?.({username:n?.username,status:di.SUCCESS,type:ja.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(Y){return(0,Gf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&OR.error?.({username:f.username,status:di.FAILURE,type:ja.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,Y),nn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),nn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let Y=e.deserialize||(e.deserialize=Zo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?Y(f.will.payload):void 0,delete f.will.payload}o=LJ({user:n,...f}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(Y){return nr.error?.(Y),s.events.emit("auth-failed",f,e,Y),nn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:Y.code||5,returnCode:Y.code||128})}s.events.emit("connected",o,e),nn(!0,"connection","mqtt","connect"),_({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let y=a(async(Y,H,ae,le)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",Y);let oe=Y.indexOf("/",1),Ee=oe>0?Y.slice(0,oe):Y;_({cmd:"publish",topic:Y,payload:await S(H),messageId:ae||Math.floor(Math.random()*1e8),qos:le.qos},Ee);let Se=e._socket??e;return Se.writableNeedDrain?new Promise(Me=>Se.once("drain",Me)):!Se.closed}catch(oe){return nr.error?.(oe),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(y),o.sessionWasPresent&&await o.resume();break;case"subscribe":let I=[];for(let Y of f.subscriptions){let H;try{let ae=await o.addSubscription(Y,Y.qos>=1);H=ae?ae.qos||0:c.protocolVersion<5?128:143}catch(ae){s.events.emit("error",ae,e,Y,o),ae.statusCode?ae.statusCode===500?nr.warn?.(ae):nr.info?.(ae):nr.error?.(ae),H=c.protocolVersion<5?128:ae.statusCode===403?135:ae.statusCode===404?143:128}I.push(H)}await o.committed,_({cmd:"suback",granted:I,messageId:f.messageId});break;case"unsubscribe":{let Y=[];for(let H of f.unsubscriptions)Y.push(o.removeSubscription(H)?0:17);_({cmd:"unsuback",granted:Y,messageId:f.messageId});break}case"pubrel":_({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let w=f.qos===2?"pubrec":"puback",M=e.deserialize||(e.deserialize=Zo(r?.headers.get?.("content-type"))),X=(f.payload?.length||0)>0?M(f.payload):void 0,J;try{J=await o.publish(f,X)}catch(Y){s.events.emit("error",Y,e,f,o),nr.warn?.(Y),f.qos>0&&_({cmd:w,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&_({cmd:w,messageId:f.messageId,reasonCode:J===!1?144:0},f.topic);break;case"pubrec":_({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(f.messageId);break;case"pingreq":_({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),nn(!0,"connection","mqtt","disconnect"),nr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,o),nr.error?.(y),_({cmd:"disconnect"})}function _(y,I){let w=(0,PR.generate)(y,c);t(w),qe(w.length,"bytes-sent",I,R(y),"mqtt")}a(_,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(R,"packetMethodName");function S(y){return Xo(y,r)}a(S,"serialize")}),l.on("error",f=>{nr.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var PR,Gf,UJ,xJ,BJ,OR,nr,FJ,DAe,vJ,CR,kJ=ie(()=>{PR=require("mqtt-packet");DJ();_s();ea();Kn();qr();Gf=b(fe());$();UJ=b(pr()),xJ=b(ee()),BJ=require("events");RT();OR=(0,UJ.loggerWithTag)("auth-event"),nr=(0,xJ.forComponent)("mqtt"),FJ=(0,Gf.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(LAe,"bypassAuth");DAe=a(e=>FJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");a(vAe,"start");CR=0;a(MJ,"onSocket")});function LR(e,t){if(t?.includes(".."))throw new Ev(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var Ev,_v=ie(()=>{Ev=class extends Error{static{a(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};a(LR,"resolveBaseURLPath")});function HJ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(o=>o[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var GJ=ie(()=>{a(HJ,"deriveCommonPatternBase")});function DR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=a((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var gv=ie(()=>{a(DR,"deriveGlobOptions")});var qJ,Sv,wE,$J=ie(()=>{_v();GJ();gv();qJ=require("micromatch"),Sv=class extends Error{static{a(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},wE=class{static{a(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=LR(this.name,this.config.urlPath),this.globOptions=DR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new Sv(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,qJ.scan)(s).base),this.commonPatternBase=HJ(this.patternBases)}}});function VJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Au(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(VJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(VJ(n,t)){t=t.slice(n.length+1);break}}}return(0,KJ.join)(e.baseURLPath,t)}var KJ,Tv=ie(()=>{KJ=require("node:path");a(VJ,"pathStartsWithBase");a(Au,"deriveURLPath")});function YJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var MR,WJ,jJ,yv,zJ,QJ,vR,JJ=ie(()=>{MR=require("node:events");$J();WJ=b(ee()),jJ=b(require("chokidar")),yv=require("node:path"),zJ=require("node:fs/promises");Tv();QJ=require("micromatch"),vR=class extends MR.EventEmitter{static{a(this,"EntryHandler")}#e;#t;#r;#n;#s;ready;constructor(t,r,n,s){super(),this.#e=new wE(t,r,YJ(n)),this.#r=s||WJ.default.loggerWithTag(t),this.#n=new Set,this.#s=!1,this.ready=(0,MR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#i(...[t,r,n]){if(r===""&&(r="/"),!(0,QJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,yv.join)(this.directory,r);switch(t){case"add":case"change":{let i=Au(this.#e,r,"file"),o=(0,zJ.readFile)(s).then(c=>{let l={eventType:t,entryType:"file",contents:c,stats:n,absolutePath:s,urlPath:i};this.emit("all",l),this.emit(t,l)}).finally(()=>{this.#n.delete(o),this.#f()});this.#n.add(o);break}case"unlink":{let i=Au(this.#e,r,"file"),o={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}case"addDir":case"unlinkDir":{let i=Au(this.#e,r,"directory"),o={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}}}#o(t){this.emit("error",t)}#c(){this.#s=!0,this.#n.size>0&&this.#r.debug?.(`Initial scan complete, still waiting for ${this.#n.size} pending file reads`),this.#f()}#f(){this.#s&&this.#n.size===0&&this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,yv.join)(this.#e.directory,r));return this.#t=jJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:a(r=>{let n=r.replace(/\\/g,"/"),s=t.map(i=>i.replace(/\\/g,"/"));return n!==this.#e.directory.replace(/\\/g,"/")&&s.every(i=>!n.startsWith(i))},"ignored")}).on("all",this.#i.bind(this)).on("error",this.#o.bind(this)).on("ready",this.#c.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new wE(this.name,this.directory,YJ(t)),this.#a()}};a(YJ,"castConfig")});var UR,Rv=ie(()=>{UR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var BR,XJ,ZJ,e3,t3,r3,bv,Av,Iv,wv,Nv,Cv,xR,n3=ie(()=>{BR=require("events"),XJ=b(require("yaml")),ZJ=b(require("chokidar")),e3=require("node:fs/promises"),t3=require("util"),r3=b(ee());Rv();bv=require("lodash"),Av=class extends Error{static{a(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},Iv=class extends Error{static{a(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},wv=class extends Error{static{a(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},Nv=class extends Error{static{a(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},Cv=class extends Error{static{a(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},xR=class extends BR.EventEmitter{static{a(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||r3.default.loggerWithTag(t),this.ready=(0,BR.once)(this,"ready"),this.#t=ZJ.default.watch(r,{persistent:!1}).on("add",this.#o.bind(this)).on("change",this.#o.bind(this)).on("error",this.#c.bind(this)).on("unlink",this.#f.bind(this)).on("ready",this.#o.bind(this))}#o(){(0,e3.readFile)(this.#e,"utf-8").then(t=>{this.#n=XJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#d(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#a(),this.emit("remove")):(this.#a(),this.emit("ready"));return}this.emit("error",t)})}#c(t){this.emit("error",new Av(this.#e,t))}#f(t){this.#i.warn?.(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#a(),this.emit("remove")}#a(){this.#n=UR,this.#r=this.#n[this.#s]}#d(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let o=n.concat(s),c=this.#m(o);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(o,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#d(i,c,o):this.#u(o,i);continue}(0,t3.isDeepStrictEqual)(i,c)||this.#u(o,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return(0,bv.cloneDeep)(r)}#u(t,r){if(!this.#r)throw new Iv;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new wv(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new Nv(t,s);n=n[s]}if(n==null||typeof n!="object")throw new Cv(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return(0,bv.cloneDeep)(this.#r)}getRoot(){return this.#n}}});var NE,s3,FR,kR,i3=ie(()=>{NE=require("node:events");Oe();JJ();n3();s3=b(ee());Jg();FR=class extends Error{static{a(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},kR=class extends NE.EventEmitter{static{a(this,"Scope")}#e;#t;#r;#n;#s;#i;#o;#c;options;resources;server;ready;databaseEvents;constructor(t,r,n,s,i,o,c){super(),this.#r=t,this.#n=r,this.#t=n,this.#e=s,this.#o=c||(0,s3.loggerWithTag)(this.#r),this.databaseEvents=Dn,this.resources=i,this.server=o,this.#i=[],this.#c=new Set,this.ready=(0,NE.once)(this,"ready"),this.options=new xR(r,s,this.#o).on("error",this.#a.bind(this)).on("change",this.#m.bind(this)()).on("ready",this.#f.bind(this))}get logger(){return this.#o}get appName(){return this.#r}get pluginName(){return this.#n}get directory(){return this.#t}get configFilePath(){return this.#e}#f(){this.emit("ready")}#a(t){this.emit("error",t)}close(){for(let t of this.#i)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#d(t){let r=new vR(this.#n,this.#t,t,this.#o).on("error",this.#a.bind(this)).on("add",this.#l("add")).on("change",this.#l("change")).on("unlink",this.#l("unlink")).on("addDir",this.#l("addDir")).on("unlinkDir",this.#l("unlinkDir"));return this.#i.push(r),r}#l(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#m(){let t=this;return a(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#s){t.#s=t.#d(i);return}t.#s.update(i);return}this.listenerCount("change")>1||(t.#o.debug?.(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#u(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return{files:t.files,urlPath:t.urlPath}}handleEntry(t,r){let n,s=a((i,o)=>{let c=new Set,l=a(d=>{let f=o(d);if(f instanceof Promise){let m=f.catch(p=>{throw this.#o.error?.("Error in async entry handler:",p),this.#a(p),p}).finally(()=>c.delete(m));c.add(m)}},"wrapped"),u=(0,NE.once)(i,"ready").then(async()=>{c.size>0&&await Promise.all(c),i.emit("initialLoadComplete")});return this.#c.add(u),u.finally(()=>this.#c.delete(u)),l},"wrapHandler");if(t===void 0)if(this.#s)n=this.#s;else{let i=this.#u();if(i)this.#s=this.#d(i),n=this.#s;else{this.emit("error",new FR);return}}else if(typeof t=="function"){if(this.#s)n=this.#s;else{let o=this.#u();if(o)this.#s=this.#d(o),n=this.#s;else{this.emit("error",new FR);return}}let i=s(n,t);n.on("all",i)}else if(n=this.#d(t),r){let i=s(n,r);n.on("all",i)}return n}requestRestart(){this.#o.debug?.(`Restart requested from ${this.#n} scope for ${this.#r}`),fN()}async waitForInitialLoads(){this.#c.size>0&&await Promise.all(this.#c)}}});function Iu(e){return typeof e=="string"&&e.trim()!==""}function Ov(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>Iu(t))}function l3(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function MAe(e){e.config.root&&CE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new xv(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(l3(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let o=(0,OE.join)(e.directory,i);HR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,o,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,o,e.resources))}return s}async function u3(e){let t=!1;if(t=await MAe(e),t)return t;let r=await(0,o3.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,OE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Au(e,n.path,"directory");HR.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=Au(e,n.path,"file"),o=await(0,a3.readFile)(s);HR.isMainThread&&e.module.setupFile?(await e.module.setupFile(o,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(o,i,s,e.resources),t=!0)}else CE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var HR,o3,CE,OE,a3,c3,GR,Fi,Pv,Lv,Dv,vv,Mv,Uv,xv,Bv,Fv,d3=ie(()=>{HR=require("node:worker_threads"),o3=b(require("fast-glob")),CE=b(ee());_v();gv();OE=require("node:path"),a3=require("node:fs/promises");Tv();c3=require("micromatch"),GR=class{static{a(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!Iu(this.config.files)&&!Ov(this.config.files)&&!l3(this.config.files))throw new Pv(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!Ov(this.config.files.source)&&!Iu(this.config.files.source))throw new Lv(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new Dv(this);if(this.config.files.ignore!==void 0&&!Ov(this.config.files.ignore)&&!Iu(this.config.files.ignore))throw new vv(this)}if(this.config.root!==void 0&&!Iu(this.config.root))throw new Uv(this);if(this.config.path!==void 0&&!Iu(this.config.path))throw new Bv(this);if(this.config.path&&(CE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!Iu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new Fv(this);this.globOptions=DR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new Mv(this,r);return r.startsWith("/")&&(CE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,c3.scan)(r).base),this.baseURLPath=LR(this.name,this.config.urlPath)}},Fi=class extends Error{static{a(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,OE.basename)(r.directory)}) ${t}`)}},Pv=class extends Fi{static{a(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},Lv=class extends Fi{static{a(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},Dv=class extends Fi{static{a(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},vv=class extends Fi{static{a(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},Mv=class extends Fi{static{a(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},Uv=class extends Fi{static{a(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},xv=class extends Fi{static{a(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},Bv=class extends Fi{static{a(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},Fv=class extends Fi{static{a(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};a(Iu,"isNonEmptyString");a(Ov,"isArrayOfNonEmptyStrings");a(l3,"isObject");a(MAe,"handleRoots");a(u3,"processResourceExtensionComponent")});var f3={};Re(f3,{SERVERS:()=>qf,portServer:()=>kv,setPortServerMap:()=>qR});function qR(e,t){let r=kv.get(e)??[];kv.set(e,[...r,t])}var qf,kv,Hv=ie(()=>{qf={},kv=new Map;a(qR,"setPortServerMap")});function $R(e,t,r=xAe){let n;return function(...i){return n?n.length*Gv>r?t(...i):new Promise((o,c)=>{n.push({args:i,fn(){try{let l=e(...i);o(l)}catch(l){c(l)}}})}):(n=[],s(performance.now()),e(...i))};function s(i){setImmediate(()=>{let o=performance.now();Gv=(Gv*4+o-i)/5;let c=n.shift();if(c){let{fn:l}=c;l(),s(o)}else n=null})}}var h3,UAe,xAe,m3,BAe,qv,p3,Gv,$v=ie(()=>{h3=b(pr()),UAe=3e3,xAe=2e4,m3=0,BAe=3e4,qv=3e3,p3=performance.now()+qv,Gv=0;a($R,"throttle");setInterval(()=>{let e=performance.now();e-p3-qv>UAe&&m3+BAe<e&&(h3.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),m3=e),p3=e},qv).unref()});var zR={};Re(zR,{deliverSocket:()=>N3,getHttpOptions:()=>GAe,getRequestId:()=>L3,handleApplication:()=>HAe,httpServer:()=>Jv,logRequest:()=>DE,proxyRequest:()=>qAe,registerServer:()=>zv,suppressHandleApplicationWarning:()=>kAe});function HAe(e){vE=e.options.getAll(),e.options.on("change",t=>{vE=e.options.getAll()})}function GAe(){return vE}function N3(e,t,r){let n=e?.read?e:new T3.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=qf[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=qf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Ba.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function qAe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=E3.get(s),r){case"connection":i=N3(void 0,t),E3.set(s,i),i.write=(c,l,u)=>(KR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(KR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),KR.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 zv(e,t,r=!0){t||(t=xr.default.get(U.HTTP_PORT));let n=qf[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",S3),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else qf[t]=e;e.on("unhandled",S3)}function Qv(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],xr.default.get(U.HTTP_PORT)!=null&&t.push({port:xr.default.get(U.HTTP_PORT),secure:xr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),xr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:xr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&xr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,y3.resolvePath)(xr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function Jv(e,t){let r=[];for(let{port:n,secure:s}of Qv(t))r.push(C3(n,s,t)),typeof e=="function"?Wv[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,zv(e,n,!1)),YR[n]=WR(Wv,n);return r}function C3(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(qR(e,{protocol_name:t?"HTTPS":"HTTP",name:QR()}),!VR[e]){let o=i?"operationsApi_network":"http",c=xr.default.get(o+"_keepAliveTimeout"),l=xr.default.get(o+"_timeout"),u=xr.default.get(o+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:xr.default.get(U.HTTP_MAXHEADERSIZE)},f=xr.default.get(o+"_mtls"),m=xr.default.get(o+"_mtls_required"),p;if(t){let R=xr.default.get("tls");p=xr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,R3.getTicketKeys)(),SNICallback:(0,b3.createTLSSelector)(s??"server",f),ciphers:R.ciphers??R[0]?.ciphers})}let h=a(async(R,S)=>{let y=performance.now(),I=0;try{let M=new mc(R,S);i&&(M.isOperationsServer=!0),vE.logging?.id&&(M.requestId=I=L3());let k=await YR[e](M);if(!k){if(M._nodeResponse.statusCode){DE(R,M._nodeResponse.statusCode,I,performance.now()-y);return}k=O3(M)}if(k.headers?.set||(k.headers=new Hs(k.headers)),await XL()?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,VR[e].emit("unhandled",R,S)}let X=k.status||200;S.statusCode=X;let J=performance.now(),Y=J-y,H=k.body,ae,le=!1;if(!k.handlesHeaders){let Se=k.headers||new Hs;H?H.length>=0?(typeof H=="string"?Se.set("Content-Length",Buffer.byteLength(H)):Se.set("Content-Length",H.length),ae=!0):H instanceof Bs&&(H.size?Se.set("Content-Length",H.size):H.on&&(le=!0,H.on("size",et=>{S.headersSent||S.setHeader("Content-Length",et)})),H=H.stream()):(M.method!=="HEAD"&&Se.set("Content-Length","0"),ae=!0);let Me=`hdb;dur=${Y.toFixed(2)}`;if(k.wasCacheMiss&&(Me+=", miss"),Gp(Se,"Server-Timing",Me,!0),!S.headersSent)if(le){if(Se)if(Se[Symbol.iterator])for(let[et,$e]of Se)S.setHeader(et,$e);else for(let et in Se)S.setHeader(et,Se[et])}else S.writeHead(X,Se&&(Se[Symbol.iterator]?Array.from(Se):Se));ae&&S.end(H)}let oe=M.handlerPath,Ee=M.method;if(qe(Y,"duration",oe,Ee,k.wasCacheMiss==null?void 0:k.wasCacheMiss?"cache-miss":"cache-hit"),nn(X<400,"success",oe,Ee),nn(1,"response_"+X,oe,Ee),DE(R,X,I,Y),!ae)if(H instanceof ReadableStream&&(H=Yv.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=Yv.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(FAe(M)),DE(R,X,I,performance.now()-y),M.statusCode?M.statusCode===500?Ba.default.warn(M):Ba.default.info(M):Ba.default.error(M)}a(w,"onError")},"requestHandler"),E=$R(h,(R,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},xr.default.get(o+"_requestQueueLimit")),_=VR[e]=(t?p?A3.createSecureServer:I3.createServer:jR.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),zv(_,e)}return VR[e]}function WR(e,t){let r=O3;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 O3(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hs}}function $Ae(e,t){Jv(e,{requestOnly:!0,...t})}function P3(e,t){for(let{port:r}of Qv(t))_3[t?.runFirst?"unshift":"push"]({listener:e,port:r}),jv[r]=WR(_3,r)}function VAe(e,t){let r=[];for(let{port:n,secure:s}of Qv(t)){qR(n,{protocol_name:s?"WSS":"WS",name:QR()});let i=C3(n,s,t);PE[n]||(PE[n]=new w3.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),PE[n].on("connection",(o,c)=>{try{let l=new mc(c);l.isWebSocket=!0;let u=YR[n](l);Ba.default.debug("Received WS connection, calling listeners",Vv),g3[n](o,l,u)}catch(l){Ba.default.warn("Error in handling WS connection",l)}}),P3((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):PE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),PE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{jv[n]&&jv[n](o,c,l)})),r.push(i),Vv[t?.runFirst?"unshift":"push"]({listener:e,port:n}),g3[n]=WR(Vv,n),YR[n]=WR(Wv,n)}return r}function S3(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
|
|
133
|
+
`);throw n[1]?ID(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,wD.BAD_REQUEST):ID(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",wD.BAD_REQUEST)}return t}a(pQ,"convertSQLToAST");function hQ(e,t,r){try{let n=wRe;if(!e.bypass_auth&&!t.permissions_checked){let i=mQ(e,t);if(i&&i.length>0)return r(bRe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case mE.VALID_SQL_OPS_ENUM.SELECT:n=hRe,s=t.ast.statements[0];break;case mE.VALID_SQL_OPS_ENUM.INSERT:n=NRe;break;case mE.VALID_SQL_OPS_ENUM.UPDATE:n=_Re;break;case mE.VALID_SQL_OPS_ENUM.DELETE:n=gRe;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(hQ,"processAST");function wRe(e,t){iR.info(e),t("unknown sql statement")}a(wRe,"nullFunction");function NRe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=CRe(i,e.values)}catch(o){return r(o)}pRe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){iR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(NRe,"convertInsert");function CRe(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=kc.compile(`SELECT ${s.toString()} AS [${mE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw iR.error(r),new Error(ARe)}}a(CRe,"createDataObjects")});var PD=x((ske,AQ)=>{"use strict";var OD=$n(),ORe=fC(),{AsyncParser:PRe}=require("json2csv"),oR=require("stream"),Cs=de(),CD=require("fs-extra"),LRe=require("path"),Xs=ee(),{promisify:SQ}=require("util"),hE=de(),{handleHDBError:Ir,hdbErrors:DRe}=ge(),{HDB_ERROR_MSGS:Xn,HTTP_STATUS_CODES:wr}=DRe,{streamAsJSON:vRe}=(MI(),L(wF)),{Upload:MRe}=require("@aws-sdk/lib-storage"),{toCsvStream:URe}=(ea(),L(UF)),_Q=["search_by_value","search_by_hash","sql","search_by_conditions"],gQ=["json","csv"],TQ="json",yQ="csv",xRe="Successfully exported JSON locally.",BRe="Successfully exported CSV locally.",FRe=1e3,kRe=OD.searchByHash,HRe=OD.searchByValue,GRe=SQ(oR.finished);AQ.exports={export_to_s3:KRe,export_local:qRe};async function qRe(e){Xs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=RQ(e);if(!Cs.isEmpty(t))throw Xs.error(t),Ir(new Error,t,wr.BAD_REQUEST,void 0,void 0,!0);if(Cs.isEmpty(e.path))throw Xs.error(Xn.MISSING_VALUE("path")),Ir(new Error,Xn.MISSING_VALUE("path"),wr.BAD_REQUEST,void 0,void 0,!0);let r=(Cs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(LRe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Cs.buildFolderPath(e.path,r);await $Re(e.path);let s=await bQ(e);return await VRe(n,e.format,s)}a(qRe,"export_local");async function $Re(e){if(Xs.trace("in confirmPath"),Cs.isEmptyOrZeroLength(e))throw Ir(new Error,`Invalid path: ${e}`,wr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await CD.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,Xs.error(n),Ir(new Error,n,wr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Xs.error(r),Ir(new Error,r,wr.BAD_REQUEST,void 0,void 0,!0)}return!0}a($Re,"confirmPath");async function VRe(e,t,r){if(Xs.trace("in saveToLocal"),hE.isEmptyOrZeroLength(e))throw Ir(new Error,Xn.INVALID_VALUE("file_path"),wr.BAD_REQUEST,void 0,void 0,!0);if(hE.isEmptyOrZeroLength(t))throw Ir(new Error,Xn.INVALID_VALUE("Source format"),wr.BAD_REQUEST,void 0,void 0,!0);if(hE.isEmpty(r))throw Ir(new Error,Xn.NOT_FOUND("Data"),wr.BAD_REQUEST,void 0,void 0,!0);if(t===TQ){let n=CD.createWriteStream(e);return vRe(r).pipe(n),await GRe(n),{message:xRe,path:e}}else if(t===yQ){let n=CD.createWriteStream(e),s=oR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new PRe(i,c).fromInput(s).toOutput(n).promise(!1),{message:BRe,path:e}}throw Ir(new Error,Xn.INVALID_VALUE("format"),wr.BAD_REQUEST)}a(VRe,"saveToLocal");async function KRe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Ir(new Error,Xn.MISSING_VALUE("S3 object"),wr.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Ir(new Error,Xn.MISSING_VALUE("aws_access_key_id"),wr.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Ir(new Error,Xn.MISSING_VALUE("aws_secret_access_key"),wr.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.bucket))throw Ir(new Error,Xn.MISSING_VALUE("bucket"),wr.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.key))throw Ir(new Error,Xn.MISSING_VALUE("key"),wr.BAD_REQUEST);if(Cs.isEmptyOrZeroLength(e.s3.region))throw Ir(new Error,Xn.MISSING_VALUE("region"),wr.BAD_REQUEST);let t=RQ(e);if(!Cs.isEmpty(t))throw Ir(new Error,t,wr.BAD_REQUEST);Xs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await bQ(e)}catch(c){throw Xs.error(c),c}let n=await ORe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),s,i=new oR.PassThrough;if(e.format===yQ){s=e.s3.key+".csv";let c=URe(r,r.getColumns?.());c.on("error",l=>{throw l}),c.pipe(i)}else if(e.format===TQ){s=e.s3.key+".json";let c=new oR.Readable;c.pipe(i),c.on("error",d=>{throw d}),c.push("[");let l=r.length,u="";for(let[d,f]of r.entries()){let m=d===l-1?JSON.stringify(f):JSON.stringify(f)+",";u+=m,d!==0&&d%FRe===0&&(c.push(u),u="")}u.length!==0&&c.push(u),c.push("]"),c.push(null)}else throw Ir(new Error,Xn.INVALID_VALUE("format"),wr.BAD_REQUEST);return new MRe({client:n,params:{Bucket:e.s3.bucket,Key:s,Body:i}}).done()}a(KRe,"export_to_s3");function RQ(e){if(Xs.trace("in exportCoreValidation"),Cs.isEmpty(e.format))return"format missing";if(gQ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${gQ.join(", ")}`;let t=e.search_operation.operation;if(Cs.isEmpty(t))return"search_operation.operation missing";if(_Q.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${_Q.join(", ")}`}a(RQ,"exportCoreValidation");async function bQ(e){Xs.trace("in getRecords");let t,r;if(hE.isEmpty(e.search_operation)||hE.isEmptyOrZeroLength(e.search_operation.operation))throw Ir(new Error,Xn.INVALID_VALUE("Search operation"),wr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=HRe;break;case"search_by_hash":t=kRe;break;case"search_by_conditions":t=OD.searchByConditions;break;case"sql":{let n=pE();t=SQ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Xs.error(r),Ir(new Error,r,wr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(bQ,"getRecords")});var wQ=x((oke,IQ)=>{"use strict";var LD=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};IQ.exports=LD});var OQ=x((cke,CQ)=>{"use strict";var YRe=($(),L(Q)),NQ=require("moment"),WRe=require("uuid").v4,DD=class{static{a(this,"JobObject")}constructor(){this.id=WRe(),this.type=void 0,this.start_datetime=NQ().valueOf(),this.created_datetime=NQ().valueOf(),this.end_datetime=void 0,this.status=YRe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};CQ.exports=DD});var MD=x((uke,BQ)=>{"use strict";var jRe=require("uuid").v4,MQ=ms(),UQ=$n(),zRe=Ki(),QRe=Ym(),JRe=wQ(),kt=($(),L(Q)),XRe=OQ(),ZRe=gS(),Ui=ee(),ebe=Im(),vf=de(),{promisify:tbe}=require("util"),yu=require("moment"),aR=uC(),PQ=tw(),{deleteTransactionLogsBeforeValidator:rbe}=BL(),{handleHDBError:LQ,hdbErrors:nbe,ClientError:sbe}=ge(),{HTTP_STATUS_CODES:DQ}=nbe,vQ=UQ.searchByValue,ibe=UQ.searchByHash,obe=MQ.insert,abe=MQ.update,vD;BQ.exports={addJob:ube,updateJob:fbe,handleGetJob:cbe,handleGetJobsByStartDate:lbe,getJobById:xQ};async function cbe(e){if(e.id===void 0)throw new sbe("'id' is required");let t=await xQ(e.id);return vf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(cbe,"handleGetJob");async function lbe(e){try{let t=await dbe(e);if(Ui.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=yu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=yu(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Ui.error(r),new Error(r)}}a(lbe,"handleGetJobsByStartDate");async function ube(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||vf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ui.info(d),t.error=d,t}if(!kt.JOB_TYPE_ENUM[e.operation])return Ui.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case kt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=aR.fileObject(e);break;case kt.OPERATIONS_ENUM.CSV_URL_LOAD:n=aR.urlObject(e);break;case kt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=aR.dataObject(e);break;case kt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=aR.s3FileObject(e);break;case kt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case kt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=PQ(e,"date");break;case kt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=PQ(e,"timestamp");break;case kt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=rbe(e);break;case kt.OPERATIONS_ENUM.RESTART_SERVICE:if(kt.HDB_PROCESS_SERVICES[e.service]===void 0)throw LQ(new Error,"Invalid service",DQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw LQ(n,n.message,DQ.BAD_REQUEST,void 0,void 0,!0);let s=new XRe;s.type=e.operation===kt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?kt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new zRe(kt.SYSTEM_SCHEMA_NAME,kt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await vQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ui.error(f),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=jRe();try{o=await vQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ui.error(f),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ui.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new ebe(kt.SYSTEM_SCHEMA_NAME,kt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await obe(l)}catch(d){return Ui.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Ui.trace(d)}return t}a(ube,"addJob");async function dbe(e){let t=yu(e.from_date,yu.ISO_8601),r=yu(e.to_date,yu.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new JRe(n,e.hdb_user);try{if(!vD){let i=pE();vD=tbe(i.evaluateSQL)}return await vD(s)}catch(i){throw Ui.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(dbe,"getJobsInDateRange");async function xQ(e){if(vf.isEmptyOrZeroLength(e))return vf.errorizeMessage("Invalid job ID specified.");let t=new QRe(kt.SYSTEM_SCHEMA_NAME,kt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await ibe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ui.error(n),vf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(xQ,"getJobById");async function fbe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(vf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===kt.JOB_STATUS_ENUM.COMPLETE||e.status===kt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=yu().valueOf());let t=new ZRe(kt.SYSTEM_SCHEMA_NAME,kt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await abe(t),r}a(fbe,"updateJob")});var KQ=x((fke,VQ)=>{"use strict";var FQ=de(),Ur=($(),L(Q)),mbe=require("moment"),cR=TD(),EE=ee(),kQ=MD(),HQ=PD(),GQ=Il(),qQ=at(),pbe=Ky(),hbe=Nf(),{parentPort:Ebe,isMainThread:$Q}=require("worker_threads"),{onMessageByType:_be}=at(),UD=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function gbe(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(FQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(FQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ur.JOB_TYPE_ENUM.csv_file_load:await wo(e,cR.csvFileLoad);break;case Ur.JOB_TYPE_ENUM.csv_url_load:await wo(e,cR.csvURLLoad);break;case Ur.JOB_TYPE_ENUM.csv_data_load:await wo(e,cR.csvDataLoad);break;case Ur.JOB_TYPE_ENUM.import_from_s3:await wo(e,cR.importFromS3);break;case Ur.JOB_TYPE_ENUM.empty_trash:break;case Ur.JOB_TYPE_ENUM.export_local:await wo(e,HQ.export_local);break;case Ur.JOB_TYPE_ENUM.export_to_s3:await wo(e,HQ.export_to_s3);break;case Ur.JOB_TYPE_ENUM.delete_files_before:case Ur.JOB_TYPE_ENUM.delete_records_before:await wo(e,GQ.deleteFilesBefore);break;case Ur.JOB_TYPE_ENUM.delete_audit_logs_before:await wo(e,GQ.deleteAuditLogsBefore);break;case Ur.JOB_TYPE_ENUM.delete_transaction_logs_before:await wo(e,pbe.deleteTransactionLogsBefore);break;case Ur.JOB_TYPE_ENUM.restart_service:return await wo(e,hbe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(gbe,"parseMessage");async function wo(e,t){try{e.job.status=Ur.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=mbe().valueOf(),await kQ.updateJob(e.job),await Sbe(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):EE.error(`There was an error running ${t.name} job with id ${e.job.id}`),EE.error(n),e.job.message=n,e.job.status=Ur.JOB_STATUS_ENUM.ERROR;try{await kQ.updateJob(e.job)}catch(s){throw EE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(wo,"runJob");async function Sbe(e){EE.trace("launching job thread:",e),$Q?qQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):Ebe.postMessage({type:Ur.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(Sbe,"launchJobThread");$Q&&_be(Ur.ITC_EVENT_TYPES.START_JOB,async e=>{try{qQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(t){EE.error(t)}});VQ.exports={parseMessage:gbe,RunnerMessage:UD}});var WQ=x((pke,YQ)=>{"use strict";var xD=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};YQ.exports=xD});var zQ=x((Eke,jQ)=>{"use strict";var Tbe=de(),BD=fe(),Hc=($(),L(Q)),ybe=Er(),Rbe=Lr(),No=ee(),bbe=WQ(),Abe=sa();BD.initSync();jQ.exports={postOperationHandler:wbe,sendOperationTransaction:_E};async function _E(e,t,r,n){if(e.schema===Hc.SYSTEM_SCHEMA_NAME)return;let s=Ibe(e,t,r);s&&(No.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await Rbe.publishToStream(`${ybe.SUBJECT_PREFIXES.TXN}.${e.schema}`,Abe.createNatsTableStreamName(e.schema,e.table),n,s))}a(_E,"sendOperationTransaction");function Ibe(e,t,r){if(Tbe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Hc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(Ibe,"convertCRUDOperationToTransaction");async function wbe(e,t,r){if(!BD.get(Hc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;No.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=BD.get(Hc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new bbe(t.txn_time,n,s);switch(e.operation){case Hc.OPERATIONS_ENUM.INSERT:try{await _E(e,t.inserted_hashes,i,r)}catch(o){No.error("There was an error calling clustering postOperationHandler for insert."),No.error(o)}break;case Hc.OPERATIONS_ENUM.DELETE:try{await _E(e,t.deleted_hashes,i,r)}catch(o){No.error("There was an error calling clustering postOperationHandler for delete."),No.error(o)}break;case Hc.OPERATIONS_ENUM.UPDATE:try{await _E(e,t.update_hashes,i,r)}catch(o){No.error("There was an error calling clustering postOperationHandler for update."),No.error(o)}break;case Hc.OPERATIONS_ENUM.UPSERT:try{await _E(e,t.upserted_hashes,i,r)}catch(o){No.error("There was an error calling clustering postOperationHandler for upsert."),No.error(o)}break;default:break}return t}a(wbe,"postOperationHandler")});var te,QQ=ie(()=>{te=class{static{a(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var UL={};Re(UL,{chooseOperation:()=>E4,executeJob:()=>Zs,getOperationFunction:()=>_4,operation:()=>YD,processLocalTransaction:()=>h4});function Obe(e){if(!FD){let t=pE();FD=KD.promisify(t.evaluateSQL)}return FD(e)}async function h4(e,t){try{if(e.body.operation!=="read_log"&&(yE.default.log_level===hm.INFO||yE.default.log_level===hm.DEBUG||yE.default.log_level===hm.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;Ln.info(c)}}catch(n){Ln.error(n)}let r=await m4.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Pbe[e.body.operation]&&c4.default.setSchemaDataToGlobal(n=>{n&&Ln.error(n)}),r}function E4(e){let t;try{t=_4(e)}catch(s){throw Ln.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=pE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,o=s.convertSQLToAST(i);if(e.parsed_sql_object=o,!e.bypass_auth){let c=s.checkASTPermissions(e,o);if(c)throw Ln.error(`${JQ.FORBIDDEN} from operation ${e.operation}`),Ln.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,ei.handleHDBError)(new Error,c,ei.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==j.CREATE_AUTHENTICATION_TOKENS&&e.operation!==j.LOGIN&&e.operation!==j.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=a4.default.verifyPerms(i,s);if(o)throw Ln.error(`${JQ.FORBIDDEN} from operation ${e.operation}`),Ln.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,ei.handleHDBError)(new Error,o,ei.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,ei.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function _4(e){if(Ln.trace(`getOperationFunction with operation: ${e.operation}`),XQ.has(e.operation))return XQ.get(e.operation);throw(0,ei.handleHDBError)(new Error,ei.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ei.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function YD(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=E4(e);return h4({body:e},n)}async function Lbe(e){Ln.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[dA]=!0;let o;switch(i.operation){case j.INSERT:o=await bu.default.insert(i);break;case j.UPDATE:o=await bu.default.update(i);break;case j.UPSERT:o=await bu.default.upsert(i);break;case j.DELETE:o=await Uf.default.deleteRecord(i);break;default:Ln.warn("invalid operation in catchup");break}await Nbe.postOperationHandler(i,o,e)}catch(o){Ln.info("Invalid operation in transaction"),Ln.error(o)}}async function Zs(e){(0,f4.transformReq)(e);let t,r;try{if(r=await uR.default.addJob(e),r){t=r.createdJob,Ln.info("addJob result",r);let n=new qD.default.RunnerMessage(t,e);return{message:await qD.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Ln.error(i),(0,ei.handleHDBError)(n,i)}}function Dbe(){let e=new Map;return e.set(j.INSERT,new te(bu.default.insert)),e.set(j.UPDATE,new te(bu.default.update)),e.set(j.UPSERT,new te(bu.default.upsert)),e.set(j.SEARCH_BY_CONDITIONS,new te(Mf.default.searchByConditions)),e.set(j.SEARCH_BY_HASH,new te(Mf.default.searchByHash)),e.set(j.SEARCH_BY_ID,new te(Mf.default.searchByHash)),e.set(j.SEARCH_BY_VALUE,new te(Mf.default.searchByValue)),e.set(j.SEARCH,new te(Cbe)),e.set(j.SQL,new te(Obe)),e.set(j.CSV_DATA_LOAD,new te(Zs,gE.default.csvDataLoad)),e.set(j.CSV_FILE_LOAD,new te(Zs,gE.default.csvFileLoad)),e.set(j.CSV_URL_LOAD,new te(Zs,gE.default.csvURLLoad)),e.set(j.IMPORT_FROM_S3,new te(Zs,gE.default.importFromS3)),e.set(j.CREATE_SCHEMA,new te(xi.default.createSchema)),e.set(j.CREATE_DATABASE,new te(xi.default.createSchema)),e.set(j.CREATE_TABLE,new te(xi.default.createTable)),e.set(j.CREATE_ATTRIBUTE,new te(xi.default.createAttribute)),e.set(j.DROP_SCHEMA,new te(xi.default.dropSchema)),e.set(j.DROP_DATABASE,new te(xi.default.dropSchema)),e.set(j.DROP_TABLE,new te(xi.default.dropTable)),e.set(j.DROP_ATTRIBUTE,new te(xi.default.dropAttribute)),e.set(j.DESCRIBE_SCHEMA,new te(SE.default.describeSchema)),e.set(j.DESCRIBE_DATABASE,new te(SE.default.describeSchema)),e.set(j.DESCRIBE_TABLE,new te(SE.default.describeTable)),e.set(j.DESCRIBE_ALL,new te(SE.default.describeAll)),e.set(j.DELETE,new te(Uf.default.deleteRecord)),e.set(j.ADD_USER,new te(Kw)),e.set(j.ALTER_USER,new te(Yw)),e.set(j.DROP_USER,new te(Ww)),e.set(j.LIST_USERS,new te(zw)),e.set(j.LIST_ROLES,new te(TE.default.listRoles)),e.set(j.ADD_ROLE,new te(TE.default.addRole)),e.set(j.ALTER_ROLE,new te(TE.default.alterRole)),e.set(j.DROP_ROLE,new te(TE.default.dropRole)),e.set(j.USER_INFO,new te(jw)),e.set(j.READ_LOG,new te(e4.default)),e.set(j.ADD_NODE,new te(t4.default)),e.set(j.UPDATE_NODE,new te(kD.default)),e.set(j.SET_NODE_REPLICATION,new te(kD.default)),e.set(j.REMOVE_NODE,new te(r4.default)),e.set(j.CONFIGURE_CLUSTER,new te(n4.default)),e.set(j.PURGE_STREAM,new te(s4.default)),e.set(j.SET_CONFIGURATION,new te($D.default.setConfiguration)),e.set(j.CLUSTER_STATUS,new te(i4.default.clusterStatus)),e.set(j.CLUSTER_NETWORK,new te(o4.default)),e.set(j.CLUSTER_SET_ROUTES,new te(lR.default.setRoutes)),e.set(j.CLUSTER_GET_ROUTES,new te(lR.default.getRoutes)),e.set(j.CLUSTER_DELETE_ROUTES,new te(lR.default.deleteRoutes)),e.set(j.EXPORT_TO_S3,new te(Zs,HD.default.export_to_s3)),e.set(j.CREATE_CSR,new te(Ru.default.createCsr)),e.set(j.SIGN_CERTIFICATE,new te(Ru.default.signCertificate)),e.set(j.LIST_CERTIFICATES,new te(Ru.default.listCertificates)),e.set(j.ADD_CERTIFICATES,new te(Ru.default.addCertificate)),e.set(j.REMOVE_CERTIFICATE,new te(Ru.default.removeCertificate)),e.set(j.GET_KEY,new te(Ru.default.getKey)),e.set(j.ADD_NODE_BACK,new te(oP)),e.set(j.REMOVE_NODE_BACK,new te(aP)),e.set(j.DELETE_FILES_BEFORE,new te(Zs,Uf.default.deleteFilesBefore)),e.set(j.DELETE_RECORDS_BEFORE,new te(Zs,Uf.default.deleteFilesBefore)),e.set(j.EXPORT_LOCAL,new te(Zs,HD.default.export_local)),e.set(j.SEARCH_JOBS_BY_START_DATE,new te(uR.default.handleGetJobsByStartDate)),e.set(j.GET_JOB,new te(uR.default.handleGetJob)),e.set(j.GET_REGISTRATION_INFO,new te(eD)),e.set(j.GET_FINGERPRINT,new te(tD)),e.set(j.SET_LICENSE,new te(rD)),e.set(j.RESTART,new te(GD.default.restart)),e.set(j.RESTART_SERVICE,new te(Zs,GD.default.restartService)),e.set(j.CATCHUP,new te(Lbe)),e.set(j.SYSTEM_INFORMATION,new te(l4.default.systemInformation)),e.set(j.DELETE_AUDIT_LOGS_BEFORE,new te(Zs,Uf.default.deleteAuditLogsBefore)),e.set(j.READ_AUDIT_LOG,new te(ZQ.default)),e.set(j.CREATE_AUTHENTICATION_TOKENS,new te(rC)),e.set(j.REFRESH_OPERATION_TOKEN,new te(nC)),e.set(j.LOGIN,new te(PL)),e.set(j.LOGOUT,new te(LL)),e.set(j.GET_CONFIGURATION,new te($D.default.getConfiguration)),e.set(j.CUSTOM_FUNCTIONS_STATUS,new te(Ct.default.customFunctionsStatus)),e.set(j.GET_CUSTOM_FUNCTIONS,new te(Ct.default.getCustomFunctions)),e.set(j.GET_COMPONENT_FILE,new te(Ct.default.getComponentFile)),e.set(j.GET_COMPONENTS,new te(Ct.default.getComponents)),e.set(j.SET_COMPONENT_FILE,new te(Ct.default.setComponentFile)),e.set(j.DROP_COMPONENT,new te(Ct.default.dropComponent)),e.set(j.GET_CUSTOM_FUNCTION,new te(Ct.default.getCustomFunction)),e.set(j.SET_CUSTOM_FUNCTION,new te(Ct.default.setCustomFunction)),e.set(j.DROP_CUSTOM_FUNCTION,new te(Ct.default.dropCustomFunction)),e.set(j.ADD_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.addComponent)),e.set(j.ADD_COMPONENT,new te(Ct.default.addComponent)),e.set(j.DROP_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.dropCustomFunctionProject)),e.set(j.PACKAGE_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.packageComponent)),e.set(j.PACKAGE_COMPONENT,new te(Ct.default.packageComponent)),e.set(j.DEPLOY_CUSTOM_FUNCTION_PROJECT,new te(Ct.default.deployComponent)),e.set(j.DEPLOY_COMPONENT,new te(Ct.default.deployComponent)),e.set(j.READ_TRANSACTION_LOG,new te(VD.default.readTransactionLog)),e.set(j.DELETE_TRANSACTION_LOGS_BEFORE,new te(Zs,VD.default.deleteTransactionLogsBefore)),e.set(j.INSTALL_NODE_MODULES,new te(u4.default.installModules)),e.set(j.GET_BACKUP,new te(xi.default.getBackup)),e.set(j.CLEANUP_ORPHAN_BLOBS,new te(xi.default.cleanupOrphanBlobs)),e.set(j.ADD_SSH_KEY,new te(Ct.default.addSSHKey)),e.set(j.GET_SSH_KEY,new te(Ct.default.getSSHKey)),e.set(j.UPDATE_SSH_KEY,new te(Ct.default.updateSSHKey)),e.set(j.DELETE_SSH_KEY,new te(Ct.default.deleteSSHKey)),e.set(j.LIST_SSH_KEYS,new te(Ct.default.listSSHKeys)),e.set(j.SET_SSH_KNOWN_HOSTS,new te(Ct.default.setSSHKnownHosts)),e.set(j.GET_SSH_KNOWN_HOSTS,new te(Ct.default.getSSHKnownHosts)),e.set(j.GET_ANALYTICS,new te(HL)),e.set(j.LIST_METRICS,new te(GL)),e.set(j.DESCRIBE_METRIC,new te(qL)),e.set(j.GET_STATUS,new te(oN)),e.set(j.SET_STATUS,new te(aN)),e.set(j.CLEAR_STATUS,new te(iN)),e.set(j.INSTALL_USAGE_LICENSE,new te(zL)),e.set(j.GET_USAGE_LICENSES,new te(ZL)),e}var Mf,gE,xi,SE,Uf,ZQ,TE,Ct,yE,e4,t4,kD,r4,n4,s4,i4,o4,lR,HD,a4,uR,ei,GD,KD,bu,c4,l4,qD,$D,VD,u4,d4,f4,Ru,m4,p4,JQ,Ln,Nbe,Cbe,FD,Pbe,XQ,xL=ie(()=>{Mf=b($n()),gE=b(TD()),xi=b(DT()),SE=b(Ld()),Uf=b(Il()),ZQ=b(vO());_s();TE=b(vp()),Ct=b(ML()),yE=b(ee()),e4=b(kO()),t4=b(VT()),kD=b(fP()),r4=b(YT()),n4=b(hP()),s4=b(EP()),i4=b(SP()),o4=b(yP()),lR=b(JT()),HD=b(PD()),a4=b(eR()),uR=b(MD());$();ei=b(ge()),GD=b(Nf()),KD=b(require("util")),bu=b(ms()),c4=b(Xi()),l4=b(wh()),qD=b(KQ());Cd();vy();$D=b(wt()),VD=b(Ky()),u4=b(kL()),d4=b(fi()),f4=b(de());qr();Ru=b(ys());rf();VL();m4=b(dC()),p4=b(zQ());Lp();iE();sD();QQ();({HTTP_STATUS_CODES:JQ}=ei.hdbErrors),Ln=yE.default.loggerWithTag("operation"),{transactToClusteringUtils:Nbe}=p4.default,Cbe=KD.promisify(Mf.default.search);a(Obe,"evaluateSQL");Pbe={[j.CREATE_ATTRIBUTE]:!0,[j.CREATE_TABLE]:!0,[j.CREATE_SCHEMA]:!0,[j.DROP_ATTRIBUTE]:!0,[j.DROP_TABLE]:!0,[j.DROP_SCHEMA]:!0};a(h4,"processLocalTransaction");XQ=Dbe();Ue.operation=YD;a(E4,"chooseOperation");a(_4,"getOperationFunction");(0,d4._assignPackageExport)("operation",YD);a(YD,"operation");a(Lbe,"catchup");a(Zs,"executeJob");a(Dbe,"initializeOperationFunctionMap")});var mR=x((bke,y4)=>{"use strict";var dR=($(),L(Q)),vbe=de(),xf=ee(),{handleHDBError:WD,hdbErrors:fR}=ge(),{isMainThread:Mbe}=require("worker_threads"),{Readable:Ube}=require("stream"),g4=require("os"),xbe=require("util"),Bbe=r$(),T4=xbe.promisify(Bbe.authorize),S4=(xL(),L(UL)),{createGzip:Fbe,constants:kbe}=require("zlib"),Hbe=[dR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,dR.OPERATIONS_ENUM.LOGIN,dR.OPERATIONS_ENUM.LOGOUT];function Gbe(e){let t=`Found an uncaught exception with message: ${e.message}. ${g4.EOL}Stack: ${e.stack} ${g4.EOL}Terminating ${Mbe?"HDB":"thread"}.`;console.error(t),xf.fatal(t),process.exit(1)}a(Gbe,"handleServerUncaughtException");function qbe(e,t,r){if(xf[e.logLevel||"info"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:fR.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(qbe,"serverErrorHandler");function $be(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=WD(new Error,"Invalid JSON.",fR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(vbe.isEmpty(e.body.operation)){let n=WD(new Error,"Request body must include an 'operation' property.",fR.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a($be,"reqBodyValidationHandler");function Vbe(e,t,r){let n;!Hbe.includes(e.body.operation)||e.body.operation===dR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?T4(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{i.statusCode=401,xf.debug("Login failed",i),r(i,null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(Vbe,"authHandler");function Kbe(e,t,r){T4(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{xf.warn(n),xf.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(WD(n,s,fR.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(Kbe,"authAndEnsureUserOnRequest");async function Ybe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=S4.chooseOperation(e.body);let s=await S4.processLocalTransaction(e,n);if(s instanceof Ube&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Fbe({level:kbe.Z_BEST_SPEED})))}return s}catch(s){throw xf.error(s),s}}a(Ybe,"handlePostRequest");y4.exports={authHandler:Vbe,authAndEnsureUserOnRequest:Kbe,handlePostRequest:Ybe,handleServerUncaughtException:Gbe,serverErrorHandler:qbe,reqBodyValidationHandler:$be}});var I4=x((Ike,A4)=>{"use strict";var Wbe=require("fastify-plugin"),{handlePostRequest:R4,authHandler:jbe,reqBodyValidationHandler:zbe}=mR();async function Qbe(e){e.decorate("hdbCore",{preValidation:[zbe,jbe],request:a((t,r)=>b4(R4(t,r)),"request"),requestWithoutAuthentication:a((t,r)=>b4(R4(t,r,!0)),"requestWithoutAuthentication")})}a(Qbe,"hdbCore");async function b4(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(b4,"convertAsyncIterators");A4.exports=Wbe(Qbe)});var N4=x((Nke,w4)=>{"use strict";var pR=fe();pR.initSync();var{CONFIG_PARAMS:jD}=($(),L(Q)),Jbe=1024*1024*1024;function Xbe(e){let t=pR.get(jD.HTTP_TIMEOUT),r=pR.get(jD.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Jbe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:pR.get(jD.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(Xbe,"getServerOptions");w4.exports=Xbe});var P4=x((Oke,O4)=>{"use strict";var zD=fe();zD.initSync();var{CONFIG_PARAMS:C4}=($(),L(Q));function Zbe(){let e=zD.get(C4.HTTP_CORSACCESSLIST),t=zD.get(C4.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(Zbe,"getCORSOptions");O4.exports=Zbe});var v4=x((Lke,D4)=>{"use strict";var L4=fe();L4.initSync();var eAe=($(),L(Q));function tAe(){return L4.get(eAe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(tAe,"getHeaderTimeoutConfig");D4.exports=tAe});var JD={};Re(JD,{customFunctionsServer:()=>sAe,ready:()=>Y4,start:()=>nAe});function nAe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){va||(va=K4(t),Ue.http((await va).server));let o=await va,c=(0,QD.dirname)(s),l=(0,QD.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!M4.has(c)){M4.add(c);try{o.register(oAe(c,l))}catch(u){if(u.message==="Root plugin has already booted")Tt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:Y4}}async function sAe(){try{Tt.info("In Custom Functions Fastify server"+process.cwd()),Tt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tt.debug(`Custom Functions server process ${process.pid} starting up.`),await iAe();let e=H4.get(U.HTTP_SECUREPORT)>0,t;try{t=va=await K4(e)}catch(r){throw Tt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Tt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Tt.error(`Custom Functions ${process.pid} Error: ${e}`),Tt.error(e),process.exit(1)}}async function iAe(){try{Tt.info("Custom Functions starting configuration."),await Si(),Tt.info("Custom Functions completed configuration.")}catch(e){Tt.error(e)}}function oAe(e,t){return async function(r){try{Tt.info("Custom Functions starting buildRoutes"),Tt.trace("Loading fastify routes folder "+e),(0,U4.existsSync)(e)&&r.register(k4.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Tt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Tt.error(s.message):s&&Tt.error(s),o()})}catch(n){Tt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function K4(e){Tt.info("Custom Functions starting buildServer.");let t=(0,G4.default)(e),r=(0,x4.default)(t);r.server.headersTimeout=(0,$4.default)(),r.setErrorHandler(V4.serverErrorHandler);let n=(0,q4.default)();return n&&r.register(B4.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){l.sent||l.raw.headersSent||l.raw.writableEnded||r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(F4.default),await r.register(rAe),await r.after(),tp(r),Tt.info("Custom Functions completed buildServer."),r}function Y4(){if(va)return va.then?va.then(e=>e.ready()):va.ready()}var QD,U4,x4,B4,F4,k4,H4,Tt,rAe,G4,q4,$4,V4,va,M4,W4=ie(()=>{QD=require("path"),U4=require("fs"),x4=b(require("fastify")),B4=b(require("@fastify/cors")),F4=b(ZN()),k4=b(require("@fastify/autoload")),H4=b(fe());$();Tt=b(ee()),rAe=b(I4());_s();G4=b(N4()),q4=b(P4()),$4=b(v4()),V4=b(mR());ea();qr();M4=new Set;a(nAe,"start");a(sAe,"customFunctionsServer");a(iAe,"setUp");a(oAe,"buildRouteFolder");a(K4,"buildServer");a(Y4,"ready")});var ZD={};Re(ZD,{handleApplication:()=>aAe,suppressHandleApplicationWarning:()=>cAe});function aAe(e){let t=new Map,r=new Map;e.options.on("change",n=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,Ma.join)(n.absolutePath,"index.html");(0,Bf.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&(r.set((0,Ma.dirname)(n.urlPath),null),r.set((0,Ma.join)((0,Ma.dirname)(n.urlPath),"/"),n.absolutePath));break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Ma.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let o=t.get(n.pathname);if(!o){let d=e.options.get(["index"])??!0;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);if(d&&(o=r.get(n.pathname),o===null))return{status:301,headers:{Location:(0,Ma.join)(n.pathname,"/")}}}if(!o){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(o=t.get(`${n.pathname}.${f}`),o)break}if(o)return{handlesHeaders:!0,body:(0,XD.default)(n,(0,Bf.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(lAe(c),!c)return{status:404,body:"File not found"};let l=(0,Ma.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,Bf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,XD.default)(n,(0,Bf.realpathSync)(l))}},{runFirst:!0})}function lAe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var Bf,Ma,XD,cAe,j4=ie(()=>{Bf=require("node:fs"),Ma=require("node:path"),XD=b(require("send"));a(aAe,"handleApplication");cAe=!0;a(lAe,"validateNotFoundOption")});var ev={};Re(ev,{start:()=>uAe});function uAe({override:e}){return{handleFile:a((t,r,n)=>{hR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,z4.parse)(t))){if(process.env[s]!==void 0)if(hR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)hR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var z4,hR,Q4=ie(()=>{z4=require("dotenv"),hR=b(ee());a(uAe,"start")});var nv={};Re(nv,{DataLoaderError:()=>Os,DataLoaderResult:()=>Ff,EmptyFileError:()=>SR,FileParseError:()=>gR,InvalidPropertyTypeError:()=>TR,MissingRequiredPropertyError:()=>RE,RecordProcessingError:()=>bE,SystemDatabaseError:()=>yR,UnsupportedFileExtensionError:()=>_R,computeRecordHash:()=>rv,handleApplication:()=>mAe,loadDataFile:()=>sJ,suppressHandleApplicationWarning:()=>fAe});function rv(e){let t=Object.keys(e).sort(),r={};for(let s of t)r[s]=e[s];let n=JSON.stringify(r);return(0,X4.createHash)("sha256").update(n).digest("hex")}function nJ(e){return e.system&&e.system[tv]?e.system[tv]:ER||(ER=ze({database:"system",table:tv,attributes:[{name:"id",type:"string",isPrimaryKey:!0},{name:"hash",type:"string"}]}),ER)}async function dAe(e,t,r,n){try{let s=nJ(n),i=e?`${e}:${t}:${r}`:`${t}:${r}`;return(await s.get(i))?.hash||null}catch(s){return ti.error?.(`Failed to get stored hash: ${s.message}`),null}}async function J4(e,t,r,n,s){try{let i=nJ(s),o=e?`${e}:${t}:${r}`:`${t}:${r}`;await i.put({id:o,hash:n})}catch(i){ti.error?.(`Failed to store hash: ${i.message}`)}}function mAe(e){if((0,eJ.getWorkerIndex)()!==0){ti.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(a(function(r){return r.entryType!=="file"||r.eventType==="unlink"?Promise.resolve():sJ(r,yn,xe).then(n=>{ti.debug?.("Data loader processed file: %s: %s",(0,Ua.basename)(r.absolutePath),n.message)})},"handleDataLoaderEntry"))}async function sJ({contents:e,absolutePath:t},r,n){let s=(0,Ua.extname)(t)||"unknown",i;try{if(s===".yaml"||s===".yml")i=(0,Z4.parseDocument)(e.toString()).toJSON();else if(s===".json")i=JSON.parse(e.toString());else throw new _R(t,s)}catch(d){throw d instanceof Os?d:new gR(t,d)}if(!i)throw new SR(t);let{database:o,table:c,records:l}=i;if(!c)throw new RE(t,"table");if(!l)throw new RE(t,"records");if(!Array.isArray(l))throw new TR(t,"records","array");let u=o?`${o}.${c}`:c;if(o?.toLowerCase()==="system")throw new yR(o,c);try{let d;if(o&&n[o]&&n[o][c])ti.debug?.(`Using existing table ${u} from database tables`),d=n[o][c];else if(r&&r[c])ti.debug?.(`Using existing table ${u} from global tables`),d=r[c];else{ti.debug?.(`Table ${u} not found, creating new table`);let _=[];if(l.length>0){let R=l[0];Object.keys(R).map(S=>{let y={name:S,type:typeof R[S]};return S==="id"&&(y.isPrimaryKey=!0),y}).forEach(S=>{_.push(S)})}d=await ze({database:o,table:c,attributes:_})}let f=l.length,m=0,p=0,h=0,E=100;for(let _=0;_<l.length;_+=E){let R=l.slice(_,_+E),S=[];for(let y of R)S.push(async()=>{try{let I=null,w=y.id;w!==void 0&&(I=await d.get(w));let M=rv(y);if(!I){m++;let Y=await d.put(y);return await J4(o,c,w,M,n),Y}let k=await dAe(o,c,w,n);if(!k)return h++,Promise.resolve({inserted:0,updated:0});let X={};for(let Y of Object.keys(y))Y in I&&(X[Y]=I[Y]);return rv(X)!==k?(h++,Promise.resolve({inserted:0,updated:0})):M!==k?(p++,await d.patch(w,y),await J4(o,c,w,M,n),{updated:1}):(h++,Promise.resolve({inserted:0,updated:0}))}catch(I){if(I instanceof Os)ti.error?.(`Record processing error: ${I.message}`);else{let w=new bE(u,I);ti.error?.(`Record processing error: ${w.message}`)}return Promise.resolve({inserted:0,updated:0,error:I.message})}});await Promise.all(S.map(y=>y()))}if(m>0||p>0){let _=`Loaded ${m} new and updated ${p} records in ${u}`;return h>0&&(_+=` (${h} records skipped)`),ti.info?.(_),new Ff(t,o,c,"success",m+p,_)}else if(h>0){let _=`All ${h} records in ${u} already up-to-date`;return ti.info?.(_),new Ff(t,o,c,"skipped",f,_)}else{let _=`No records to process in ${u}`;return ti.info?.(_),new Ff(t,o,c,"success",0,_)}}catch(d){throw d instanceof Os?d:new bE(u,d)}}var Ua,X4,Z4,eJ,xa,tJ,rJ,ti,tv,ER,fAe,Os,_R,gR,SR,RE,TR,yR,bE,Ff,iJ=ie(()=>{Ua=require("node:path"),X4=require("node:crypto"),Z4=require("yaml");Oe();eJ=b(at()),xa=b(En()),tJ=b(ge()),rJ=b(ee()),ti=rJ.default.forComponent("dataLoader"),tv="hdb_dataloader_hash";a(rv,"computeRecordHash");a(nJ,"getHashTrackingTable");a(dAe,"getStoredHash");a(J4,"storeHash");fAe=!0;a(mAe,"handleApplication");a(sJ,"loadDataFile");Os=class extends tJ.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=xa.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},_R=class extends Os{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Ua.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},gR=class extends Os{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Ua.basename)(t)}: ${r.message}`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},SR=class extends Os{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Ua.basename)(t)} is empty or invalid`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},RE=class extends Os{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Ua.basename)(t)} is missing required "${r}" property`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},TR=class extends Os{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Ua.basename)(t)} has invalid "${r}" property, expected ${n}`,xa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},yR=class extends Os{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,xa.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},bE=class extends Os{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,xa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Ff=class{static{a(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=o}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var sv={};Re(sv,{calculateRestHttpURL:()=>_J,hdbServer:()=>_Ae,start:()=>_Ae});async function _Ae(e){try{Bi.default.debug("In Fastify server"+process.cwd()),Bi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Bi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=oJ.default.isMaster,await gAe();let t=e.securePort>0;kf=SAe(t,e.resources),await kf.ready(),e||(e={}),e.usageType="operations-api";try{Ue.http(kf.server,e),kf.server.closeIdleConnections||await kf.listen({port:0,host:"::"})}catch(r){throw kf.close(),Bi.default.error(r),Bi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Bi.default.fatal(t),process.exit(1)}}async function gAe(){return Bi.default.trace("Configuring HarperDB process."),pJ.default.setSchemaDataToGlobal(),Si()}function SAe(e,t){Bi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=RAe(e),n=(0,aJ.default)(r);n.server.headersTimeout=AAe(),n.setErrorHandler(Co.serverErrorHandler);let s=bAe();s&&n.register(cJ.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){d.sent||d.raw.headersSent||d.raw.writableEnded||n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(dJ.default),n.register(lJ.default,{brotliOptions:{params:{[RR.default.constants.BROTLI_PARAM_MODE]:RR.default.constants.BROTLI_MODE_TEXT,[RR.default.constants.BROTLI_PARAM_QUALITY]:2}}}),tp(n),n.get("/health",()=>"HarperDB is running."),n.register(uJ.default,{root:fJ.default.join(mJ.PACKAGE_ROOT,"studio/web")});let i=ri.default.get(_m.LOCAL_STUDIO_ON);return!hJ.default.isEmpty(i)&&i.toString().toLowerCase()==="true"?n.get("/",(o,c)=>c.sendFile("index.html")):n.get("/",(o,c)=>c.sendFile("running.html")),n.get("/api/openapi/rest",{preValidation:[Co.authAndEnsureUserOnRequest]},TAe(t)),n.post("/",{preValidation:[Co.reqBodyValidationHandler,Co.authHandler],config:{isOperation:!0}},yAe),Bi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function TAe(e){let t=ri.default.get(U.HTTP_PORT),r=ri.default.get(U.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?uS(e,_J(t,r,n)):(Bi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new EJ.ServerError("Forbidden",403))}function _J(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return n.hostname.toLowerCase()==="localhost"||n.hostname.match(/^[\d.:]+$/)?t?(n.port=t,n.protocol="https:"):e&&(n.port=e,n.protocol="http:"):(n.port="443",n.protocol="https:"),n.toString()}function yAe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,Co.handlePostRequest)(e,t)}function RAe(e){let t=ri.default.get(Hf.OPERATIONSAPI_NETWORK_TIMEOUT),r=ri.default.get(Hf.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:hAe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:ri.default.get(Hf.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function bAe(){let e=ri.default.get(Hf.OPERATIONSAPI_NETWORK_CORS),t=ri.default.get(Hf.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===EAe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function AAe(){return ri.default.get(Hf.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??pAe}var oJ,RR,ri,Bi,aJ,cJ,lJ,uJ,dJ,fJ,mJ,pJ,hJ,Co,EJ,pAe,hAe,EAe,Hf,kf,gJ=ie(()=>{oJ=b(require("cluster")),RR=b(require("node:zlib")),ri=b(fe());$();Bi=b(ee()),aJ=b(require("fastify")),cJ=b(require("@fastify/cors")),lJ=b(require("@fastify/compress")),uJ=b(require("@fastify/static")),dJ=b(ZN()),fJ=b(require("path")),mJ=b(Lt()),pJ=b(Xi()),hJ=b(de());_s();qr();Co=b(mR());ea();jN();EJ=b(ge());ri.default.initSync();pAe=6e4,hAe=ri.default.get(U.OPERATIONSAPI_NETWORK_MAXREQUESTBODYSIZE)??1024*1024*1024,EAe="TRUE",{CONFIG_PARAMS:Hf}=Q;a(_Ae,"operationsServer");a(gAe,"setUp");a(SAe,"buildServer");a(TAe,"restOpenAPIHandler");a(_J,"calculateRestHttpURL");a(yAe,"handler");a(RAe,"getServerOptions");a(bAe,"getCORSOpts");a(AAe,"getHeaderTimeoutConfig")});var uv={};Re(uv,{disableNATS:()=>wAe,publishToStream:()=>IR,setNATSReplicator:()=>iv,setPublishToStream:()=>NAe,setSubscription:()=>lv,start:()=>IAe});function IAe(){AE.default.get(U.CLUSTERING_ENABLED)&&OAe()}function wAe(e=!0){bJ=e}function NAe(e,t){IR=e,lv=t}function OAe(){if(bJ||process.env._DISABLE_NATS)return;let e=dt(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];iv(s,r,i)}}Yl((r,n)=>{iv(r.tableName,r.databaseName,r),n&&IJ(r)}),!SJ&&(SJ=!0)}function iv(e,t,r){if(t==="system"&&PAe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Vt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){IJ(i)}static subscribe(){let i=new is;return lv(t,e,i),i}static subscribeOnThisThread(i){return i<(AE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??CAe)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new bR(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=AJ;return i}a(n,"getNATSTransaction")}function IJ(e){let t=AE.default.get(U.CLUSTERING_NODENAME);IR(`${av.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,cv.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var TJ,av,cv,yJ,RJ,AE,AR,bJ,IR,lv,CAe,AJ,SJ,PAe,bR,ov,wJ=ie(()=>{Oe();oo();TJ=b(Lr()),av=b(Er()),cv=b(sa());qu();yJ=b(IC()),RJ=b(Ms()),AE=b(fe());$();AR=b(ee());a(IAe,"start");a(wAe,"disableNATS");IR=TJ.publishToStream,lv=yJ.setSubscription;a(NAe,"setPublishToStream");CAe=2;a(OAe,"assignReplicationSource");PAe=["hdb_job","hdb_raw_analytics","hdb_info"];a(iv,"setNATSReplicator");a(IJ,"publishSchema");bR=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=AE.default.get(U.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let o=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(AR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=o)),l.table===f&&l.operation===m?(o.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(IR(`${av.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,cv.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw AR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},ov=class extends bR{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,RJ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};AJ=new ov});async function LJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await dv.get(e,{returnNonexistent:!0});i=new pv(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await dv.get(e);o&&o.delete()}i=new NR(e,t)}return n&&(n.id=e,n.user={username:t?.username},IE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function fv(){return wR++,wR>65500&&(wR=1),wR}function mv(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=ks.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=new qs(i.relativeURL);o.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return At(r,()=>s?t===void 0?c.delete(o,r):c.put(o,e.data,r):c.publish(o,e.data,r))}var CJ,Gc,OJ,PJ,NJ,dv,IE,wR,NR,pv,DJ=ie(()=>{Oe();dc();CJ=b(Ms()),Gc=b(ee());Qa();OJ=b(at()),PJ=b(_L());qr();fS();NJ=100,dv=ze({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),IE=ze({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,OJ.getWorkerIndex)()===0&&(async()=>{await PJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of IE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await mv(r,t,r)}catch{(0,Gc.warn)("Failed to publish will",t)}IE.delete(e.id)}})();a(LJ,"getSession");wR=1;a(fv,"getNextMessageId");NR=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:o,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};o&&(0,Gc.trace)("Resuming subscription from",s,"from",o);let p=ks.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let y=S.split("/"),I;for(let k=0;k<y.length;k++)if(y[k].indexOf("+")>-1)if(y[k]==="+")I=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&I)throw new Error("Filters can not be combined");let w=!0;y[y.length-1]==="#"&&(y.length--,w=!1),I&&(n=a(k=>{let X=k.id;if(!Array.isArray(X))if(X?.indexOf?.("/")>-1)X=X.split("/");else return!1;if(w&&X.length!==y.length)return!1;for(let J=0;J<y.length;J++)if(y[J]!=="+"&&y[J]!==X[J])return!1;return!0},"filter"));let M=y.indexOf("+");m.url="/"+(M>-1?y.slice(0,M):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,_=p.Resource,R=await At(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await _.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let I=(async()=>{for await(let w of y)try{let M;if(w.type&&w.type!=="put"&&w.type!=="delete"&&w.type!=="message"&&w.type!=="patch"||n&&!n(w))continue;r?(w.topic=s,M=this.needsAcknowledge(w)):(w.acknowledge?.(),M=fv());let k=w.id;if(Array.isArray(k)&&(k=_d(k)),k==null&&(k=""),await this.listener(E+"/"+k,w.value,M,t)===!1)break;this.awaitingAcks?.size>NJ?await new Promise(J=>setTimeout(J,this.awaitingAcks.size-NJ)):await new Promise(setImmediate)}catch(M){(0,Gc.warn)(M)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=fv();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return mv(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();At(r,async()=>{try{if(!t){let n=await IE.get(this.sessionId);n?.doesExist()&&await mv(n,n.data,r)}}finally{await IE.delete(this.sessionId)}}).catch(n=>{(0,Gc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(mv,"publish");pv=class extends NR{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=fv(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Gc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,CJ.getNextMonotonicTime)()),(0,Gc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),dv.put(this.sessionRecord)}}});var hv={};Re(hv,{bypassAuth:()=>LAe,start:()=>vAe});function LAe(){FJ=!0}function vAe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new BJ.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);o.events.emit("connection",u),nr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=MJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),o);u.on("message",p),u.on("close",h),u.on("error",E=>{nr.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),nr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await Qd(p,l);if(!E.valid)throw nr.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,Gf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&OR.notify?.({username:d?.username,status:di.SUCCESS,type:ja.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,Gf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&OR.error?.({username:h,status:di.FAILURE,type:ja.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else nr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){o.events.emit("error",p,u),nr.error?.(p)}else if(l.required)return nr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&DAe(u.remoteAddress)&&(d=await bp(),nr.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=MJ(u,p=>u.write(p),null,d,o);u.on("data",f),u.on("close",m),u.on("error",p=>{nr.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function MJ(e,t,r,n,s){vJ||(vJ=!0,Hp(f=>{CR>0&&f.push({metric:"mqtt-connections",connections:CR,byThread:!0})}));let i;CR++;let o,c={protocolVersion:4},l=(0,PR.parser)({protocolVersion:5});function u(f){l.parse(f)}a(u,"onMessage");function d(){CR--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),nn(!1,"connection","mqtt","disconnect"),nr.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),nr.info?.(y);return}let m=f.cmd;if(o)o.then&&await o;else if(m!=="connect"){nr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;qe(f.length,"bytes-received",E,R(f),"mqtt");try{switch(o?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Ue.getUser(f.username,f.password.toString(),r),(0,Gf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&OR.notify?.({username:n?.username,status:di.SUCCESS,type:ja.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(Y){return(0,Gf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&OR.error?.({username:f.username,status:di.FAILURE,type:ja.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,Y),nn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),nn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let Y=e.deserialize||(e.deserialize=Zo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?Y(f.will.payload):void 0,delete f.will.payload}o=LJ({user:n,...f}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(Y){return nr.error?.(Y),s.events.emit("auth-failed",f,e,Y),nn(!1,"connection","mqtt","connect"),_({cmd:"connack",reasonCode:Y.code||5,returnCode:Y.code||128})}s.events.emit("connected",o,e),nn(!0,"connection","mqtt","connect"),_({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let y=a(async(Y,H,ae,le)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",Y);let oe=Y.indexOf("/",1),Ee=oe>0?Y.slice(0,oe):Y;_({cmd:"publish",topic:Y,payload:await S(H),messageId:ae||Math.floor(Math.random()*1e8),qos:le.qos},Ee);let Se=e._socket??e;return Se.writableNeedDrain?new Promise(Me=>Se.once("drain",Me)):!Se.closed}catch(oe){return nr.error?.(oe),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(y),o.sessionWasPresent&&await o.resume();break;case"subscribe":let I=[];for(let Y of f.subscriptions){let H;try{let ae=await o.addSubscription(Y,Y.qos>=1);H=ae?ae.qos||0:c.protocolVersion<5?128:143}catch(ae){s.events.emit("error",ae,e,Y,o),ae.statusCode?ae.statusCode===500?nr.warn?.(ae):nr.info?.(ae):nr.error?.(ae),H=c.protocolVersion<5?128:ae.statusCode===403?135:ae.statusCode===404?143:128}I.push(H)}await o.committed,_({cmd:"suback",granted:I,messageId:f.messageId});break;case"unsubscribe":{let Y=[];for(let H of f.unsubscriptions)Y.push(o.removeSubscription(H)?0:17);_({cmd:"unsuback",granted:Y,messageId:f.messageId});break}case"pubrel":_({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let w=f.qos===2?"pubrec":"puback",M=e.deserialize||(e.deserialize=Zo(r?.headers.get?.("content-type"))),X=(f.payload?.length||0)>0?M(f.payload):void 0,J;try{J=await o.publish(f,X)}catch(Y){s.events.emit("error",Y,e,f,o),nr.warn?.(Y),f.qos>0&&_({cmd:w,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&_({cmd:w,messageId:f.messageId,reasonCode:J===!1?144:0},f.topic);break;case"pubrec":_({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(f.messageId);break;case"pingreq":_({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),nn(!0,"connection","mqtt","disconnect"),nr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,o),nr.error?.(y),_({cmd:"disconnect"})}function _(y,I){let w=(0,PR.generate)(y,c);t(w),qe(w.length,"bytes-sent",I,R(y),"mqtt")}a(_,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(R,"packetMethodName");function S(y){return Xo(y,r)}a(S,"serialize")}),l.on("error",f=>{nr.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var PR,Gf,UJ,xJ,BJ,OR,nr,FJ,DAe,vJ,CR,kJ=ie(()=>{PR=require("mqtt-packet");DJ();_s();ea();Kn();qr();Gf=b(fe());$();UJ=b(pr()),xJ=b(ee()),BJ=require("events");RT();OR=(0,UJ.loggerWithTag)("auth-event"),nr=(0,xJ.forComponent)("mqtt"),FJ=(0,Gf.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(LAe,"bypassAuth");DAe=a(e=>FJ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");a(vAe,"start");CR=0;a(MJ,"onSocket")});function LR(e,t){if(t?.includes(".."))throw new Ev(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var Ev,_v=ie(()=>{Ev=class extends Error{static{a(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};a(LR,"resolveBaseURLPath")});function HJ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(o=>o[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var GJ=ie(()=>{a(HJ,"deriveCommonPatternBase")});function DR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=a((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var gv=ie(()=>{a(DR,"deriveGlobOptions")});var qJ,Sv,wE,$J=ie(()=>{_v();GJ();gv();qJ=require("micromatch"),Sv=class extends Error{static{a(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},wE=class{static{a(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=LR(this.name,this.config.urlPath),this.globOptions=DR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new Sv(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,qJ.scan)(s).base),this.commonPatternBase=HJ(this.patternBases)}}});function VJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Au(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(VJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(VJ(n,t)){t=t.slice(n.length+1);break}}}return(0,KJ.join)(e.baseURLPath,t)}var KJ,Tv=ie(()=>{KJ=require("node:path");a(VJ,"pathStartsWithBase");a(Au,"deriveURLPath")});function YJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var MR,WJ,jJ,yv,zJ,QJ,vR,JJ=ie(()=>{MR=require("node:events");$J();WJ=b(ee()),jJ=b(require("chokidar")),yv=require("node:path"),zJ=require("node:fs/promises");Tv();QJ=require("micromatch"),vR=class extends MR.EventEmitter{static{a(this,"EntryHandler")}#e;#t;#r;#n;#s;ready;constructor(t,r,n,s){super(),this.#e=new wE(t,r,YJ(n)),this.#r=s||WJ.default.loggerWithTag(t),this.#n=new Set,this.#s=!1,this.ready=(0,MR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#i(...[t,r,n]){if(r===""&&(r="/"),!(0,QJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,yv.join)(this.directory,r);switch(t){case"add":case"change":{let i=Au(this.#e,r,"file"),o=(0,zJ.readFile)(s).then(c=>{let l={eventType:t,entryType:"file",contents:c,stats:n,absolutePath:s,urlPath:i};this.emit("all",l),this.emit(t,l)}).finally(()=>{this.#n.delete(o),this.#f()});this.#n.add(o);break}case"unlink":{let i=Au(this.#e,r,"file"),o={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}case"addDir":case"unlinkDir":{let i=Au(this.#e,r,"directory"),o={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}}}#o(t){this.emit("error",t)}#c(){this.#s=!0,this.#n.size>0&&this.#r.debug?.(`Initial scan complete, still waiting for ${this.#n.size} pending file reads`),this.#f()}#f(){this.#s&&this.#n.size===0&&this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,yv.join)(this.#e.directory,r));return this.#t=jJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:a(r=>{let n=r.replace(/\\/g,"/"),s=t.map(i=>i.replace(/\\/g,"/"));return n!==this.#e.directory.replace(/\\/g,"/")&&s.every(i=>!n.startsWith(i))},"ignored")}).on("all",this.#i.bind(this)).on("error",this.#o.bind(this)).on("ready",this.#c.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new wE(this.name,this.directory,YJ(t)),this.#a()}};a(YJ,"castConfig")});var UR,Rv=ie(()=>{UR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var BR,XJ,ZJ,e3,t3,r3,bv,Av,Iv,wv,Nv,Cv,xR,n3=ie(()=>{BR=require("events"),XJ=b(require("yaml")),ZJ=b(require("chokidar")),e3=require("node:fs/promises"),t3=require("util"),r3=b(ee());Rv();bv=require("lodash"),Av=class extends Error{static{a(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},Iv=class extends Error{static{a(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},wv=class extends Error{static{a(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},Nv=class extends Error{static{a(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},Cv=class extends Error{static{a(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},xR=class extends BR.EventEmitter{static{a(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||r3.default.loggerWithTag(t),this.ready=(0,BR.once)(this,"ready"),this.#t=ZJ.default.watch(r,{persistent:!1}).on("add",this.#o.bind(this)).on("change",this.#o.bind(this)).on("error",this.#c.bind(this)).on("unlink",this.#f.bind(this)).on("ready",this.#o.bind(this))}#o(){(0,e3.readFile)(this.#e,"utf-8").then(t=>{this.#n=XJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#d(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#a(),this.emit("remove")):(this.#a(),this.emit("ready"));return}this.emit("error",t)})}#c(t){this.emit("error",new Av(this.#e,t))}#f(t){this.#i.warn?.(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#a(),this.emit("remove")}#a(){this.#n=UR,this.#r=this.#n[this.#s]}#d(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let o=n.concat(s),c=this.#m(o);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(o,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#d(i,c,o):this.#u(o,i);continue}(0,t3.isDeepStrictEqual)(i,c)||this.#u(o,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return(0,bv.cloneDeep)(r)}#u(t,r){if(!this.#r)throw new Iv;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new wv(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new Nv(t,s);n=n[s]}if(n==null||typeof n!="object")throw new Cv(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return(0,bv.cloneDeep)(this.#r)}getRoot(){return this.#n}}});var NE,s3,FR,kR,i3=ie(()=>{NE=require("node:events");Oe();JJ();n3();s3=b(ee());Jg();FR=class extends Error{static{a(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},kR=class extends NE.EventEmitter{static{a(this,"Scope")}#e;#t;#r;#n;#s;#i;#o;#c;options;resources;server;ready;databaseEvents;constructor(t,r,n,s,i,o,c){super(),this.#r=t,this.#n=r,this.#t=n,this.#e=s,this.#o=c||(0,s3.loggerWithTag)(this.#r),this.databaseEvents=Dn,this.resources=i,this.server=o,this.#i=[],this.#c=new Set,this.ready=(0,NE.once)(this,"ready"),this.options=new xR(r,s,this.#o).on("error",this.#a.bind(this)).on("change",this.#m.bind(this)()).on("ready",this.#f.bind(this))}get logger(){return this.#o}get appName(){return this.#r}get pluginName(){return this.#n}get directory(){return this.#t}get configFilePath(){return this.#e}#f(){this.emit("ready")}#a(t){this.emit("error",t)}close(){for(let t of this.#i)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#d(t){let r=new vR(this.#n,this.#t,t,this.#o).on("error",this.#a.bind(this)).on("add",this.#l("add")).on("change",this.#l("change")).on("unlink",this.#l("unlink")).on("addDir",this.#l("addDir")).on("unlinkDir",this.#l("unlinkDir"));return this.#i.push(r),r}#l(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#m(){let t=this;return a(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#s){t.#s=t.#d(i);return}t.#s.update(i);return}this.listenerCount("change")>1||(t.#o.debug?.(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#u(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return{files:t.files,urlPath:t.urlPath}}handleEntry(t,r){let n,s=a((i,o)=>{let c=new Set,l=a(d=>{let f=o(d);if(f instanceof Promise){let m=f.catch(p=>{throw this.#o.error?.("Error in async entry handler:",p),this.#a(p),p}).finally(()=>c.delete(m));c.add(m)}},"wrapped"),u=(0,NE.once)(i,"ready").then(async()=>{c.size>0&&await Promise.all(c),i.emit("initialLoadComplete")});return this.#c.add(u),u.finally(()=>this.#c.delete(u)),l},"wrapHandler");if(t===void 0)if(this.#s)n=this.#s;else{let i=this.#u();if(i)this.#s=this.#d(i),n=this.#s;else{this.emit("error",new FR);return}}else if(typeof t=="function"){if(this.#s)n=this.#s;else{let o=this.#u();if(o)this.#s=this.#d(o),n=this.#s;else{this.emit("error",new FR);return}}let i=s(n,t);n.on("all",i)}else if(n=this.#d(t),r){let i=s(n,r);n.on("all",i)}return n}requestRestart(){this.#o.debug?.(`Restart requested from ${this.#n} scope for ${this.#r}`),fN()}async waitForInitialLoads(){this.#c.size>0&&await Promise.all(this.#c)}}});function Iu(e){return typeof e=="string"&&e.trim()!==""}function Ov(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>Iu(t))}function l3(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function MAe(e){e.config.root&&CE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new xv(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(l3(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let o=(0,OE.join)(e.directory,i);HR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,o,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,o,e.resources))}return s}async function u3(e){let t=!1;if(t=await MAe(e),t)return t;let r=await(0,o3.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,OE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Au(e,n.path,"directory");HR.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=Au(e,n.path,"file"),o=await(0,a3.readFile)(s);HR.isMainThread&&e.module.setupFile?(await e.module.setupFile(o,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(o,i,s,e.resources),t=!0)}else CE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var HR,o3,CE,OE,a3,c3,GR,Fi,Pv,Lv,Dv,vv,Mv,Uv,xv,Bv,Fv,d3=ie(()=>{HR=require("node:worker_threads"),o3=b(require("fast-glob")),CE=b(ee());_v();gv();OE=require("node:path"),a3=require("node:fs/promises");Tv();c3=require("micromatch"),GR=class{static{a(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!Iu(this.config.files)&&!Ov(this.config.files)&&!l3(this.config.files))throw new Pv(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!Ov(this.config.files.source)&&!Iu(this.config.files.source))throw new Lv(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new Dv(this);if(this.config.files.ignore!==void 0&&!Ov(this.config.files.ignore)&&!Iu(this.config.files.ignore))throw new vv(this)}if(this.config.root!==void 0&&!Iu(this.config.root))throw new Uv(this);if(this.config.path!==void 0&&!Iu(this.config.path))throw new Bv(this);if(this.config.path&&(CE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!Iu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new Fv(this);this.globOptions=DR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new Mv(this,r);return r.startsWith("/")&&(CE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,c3.scan)(r).base),this.baseURLPath=LR(this.name,this.config.urlPath)}},Fi=class extends Error{static{a(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,OE.basename)(r.directory)}) ${t}`)}},Pv=class extends Fi{static{a(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},Lv=class extends Fi{static{a(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},Dv=class extends Fi{static{a(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},vv=class extends Fi{static{a(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},Mv=class extends Fi{static{a(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},Uv=class extends Fi{static{a(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},xv=class extends Fi{static{a(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},Bv=class extends Fi{static{a(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},Fv=class extends Fi{static{a(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};a(Iu,"isNonEmptyString");a(Ov,"isArrayOfNonEmptyStrings");a(l3,"isObject");a(MAe,"handleRoots");a(u3,"processResourceExtensionComponent")});var f3={};Re(f3,{SERVERS:()=>qf,portServer:()=>kv,setPortServerMap:()=>qR});function qR(e,t){let r=kv.get(e)??[];kv.set(e,[...r,t])}var qf,kv,Hv=ie(()=>{qf={},kv=new Map;a(qR,"setPortServerMap")});function $R(e,t,r=xAe){let n;return function(...i){return n?n.length*Gv>r?t(...i):new Promise((o,c)=>{n.push({args:i,fn(){try{let l=e(...i);o(l)}catch(l){c(l)}}})}):(n=[],s(performance.now()),e(...i))};function s(i){setImmediate(()=>{let o=performance.now();Gv=(Gv*4+o-i)/5;let c=n.shift();if(c){let{fn:l}=c;l(),s(o)}else n=null})}}var h3,UAe,xAe,m3,BAe,qv,p3,Gv,$v=ie(()=>{h3=b(pr()),UAe=3e3,xAe=2e4,m3=0,BAe=3e4,qv=3e3,p3=performance.now()+qv,Gv=0;a($R,"throttle");setInterval(()=>{let e=performance.now();e-p3-qv>UAe&&m3+BAe<e&&(h3.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),m3=e),p3=e},qv).unref()});var zR={};Re(zR,{deliverSocket:()=>N3,getHttpOptions:()=>GAe,getRequestId:()=>L3,handleApplication:()=>HAe,httpServer:()=>Jv,logRequest:()=>DE,proxyRequest:()=>qAe,registerServer:()=>zv,suppressHandleApplicationWarning:()=>kAe});function HAe(e){vE=e.options.getAll(),e.options.on("change",t=>{vE=e.options.getAll()})}function GAe(){return vE}function N3(e,t,r){let n=e?.read?e:new T3.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=qf[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=qf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Ba.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function qAe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=E3.get(s),r){case"connection":i=N3(void 0,t),E3.set(s,i),i.write=(c,l,u)=>(KR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(KR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),KR.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 zv(e,t,r=!0){t||(t=xr.default.get(U.HTTP_PORT));let n=qf[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",S3),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else qf[t]=e;e.on("unhandled",S3)}function Qv(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],xr.default.get(U.HTTP_PORT)!=null&&t.push({port:xr.default.get(U.HTTP_PORT),secure:xr.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),xr.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:xr.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.usageType==="operations-api"&&xr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,y3.resolvePath)(xr.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function Jv(e,t){let r=[];for(let{port:n,secure:s}of Qv(t))r.push(C3(n,s,t)),typeof e=="function"?Wv[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,zv(e,n,!1)),YR[n]=WR(Wv,n);return r}function C3(e,t,r){let{mtls:n,usageType:s}=r||{},i=s==="operations-api";if(qR(e,{protocol_name:t?"HTTPS":"HTTP",name:QR()}),!VR[e]){let o=i?"operationsApi_network":"http",c=xr.default.get(o+"_keepAliveTimeout"),l=xr.default.get(o+"_timeout"),u=xr.default.get(o+"_headersTimeout"),d={keepAliveTimeout:c,headersTimeout:u,requestTimeout:l,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:xr.default.get(U.HTTP_MAXHEADERSIZE)},f=xr.default.get(o+"_mtls"),m=xr.default.get(o+"_mtls_required"),p;if(t){let R=xr.default.get("tls");p=xr.default.get(o+"_http2"),Object.assign(d,{allowHTTP1:!0,rejectUnauthorized:!!m,requestCert:!!(f||n),ticketKeys:(0,R3.getTicketKeys)(),SNICallback:(0,b3.createTLSSelector)(s??"server",f),ciphers:R.ciphers??R[0]?.ciphers})}let h=a(async(R,S)=>{let y=performance.now(),I=0;try{let M=new mc(R,S);i&&(M.isOperationsServer=!0),vE.logging?.id&&(M.requestId=I=L3());let k=await YR[e](M);if(!k){if(M._nodeResponse.statusCode){DE(R,M._nodeResponse.statusCode,I,performance.now()-y);return}k=O3(M)}if(k.headers?.set||(k.headers=new Hs(k.headers)),await XL()?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,VR[e].emit("unhandled",R,S)}let X=k.status||200;S.statusCode=X;let J=performance.now(),Y=J-y,H=k.body,ae,le=!1;if(!k.handlesHeaders){let Se=k.headers||new Hs;H?H.length>=0?(typeof H=="string"?Se.set("Content-Length",Buffer.byteLength(H)):Se.set("Content-Length",H.length),ae=!0):H instanceof Bs&&(H.size?Se.set("Content-Length",H.size):H.on&&(le=!0,H.on("size",et=>{S.headersSent||S.setHeader("Content-Length",et)})),H=H.stream()):(M.method!=="HEAD"&&Se.set("Content-Length","0"),ae=!0);let Me=`hdb;dur=${Y.toFixed(2)}`;if(k.wasCacheMiss&&(Me+=", miss"),Gp(Se,"Server-Timing",Me,!0),!S.headersSent)if(le){if(Se)if(Se[Symbol.iterator])for(let[et,$e]of Se)S.setHeader(et,$e);else for(let et in Se)S.setHeader(et,Se[et])}else S.writeHead(X,Se&&(Se[Symbol.iterator]?Array.from(Se):Se));ae&&S.end(H)}let oe=M.handlerPath,Ee=M.method;if(qe(Y,"duration",oe,Ee,k.wasCacheMiss==null?void 0:k.wasCacheMiss?"cache-miss":"cache-hit"),nn(X<400,"success",oe,Ee),nn(1,"response_"+X,oe,Ee),DE(R,X,I,Y),!ae)if(H instanceof ReadableStream&&(H=Yv.Readable.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=Yv.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(FAe(M)),DE(R,X,I,performance.now()-y),M.statusCode?M.statusCode===500?Ba.default.warn(M):Ba.default.info(M):Ba.default.error(M)}a(w,"onError")},"requestHandler"),E=$R(h,(R,S)=>{S.statusCode=503,S.end("Service unavailable, exceeded request queue limit"),qe(!0,"service-unavailable",e)},xr.default.get(o+"_requestQueueLimit")),_=VR[e]=(t?p?A3.createSecureServer:I3.createServer:jR.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),zv(_,e)}return VR[e]}function WR(e,t){let r=O3;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 O3(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hs}}function $Ae(e,t){Jv(e,{requestOnly:!0,...t})}function P3(e,t){for(let{port:r}of Qv(t))_3[t?.runFirst?"unshift":"push"]({listener:e,port:r}),jv[r]=WR(_3,r)}function VAe(e,t){let r=[];for(let{port:n,secure:s}of Qv(t)){qR(n,{protocol_name:s?"WSS":"WS",name:QR()});let i=C3(n,s,t);PE[n]||(PE[n]=new w3.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),PE[n].on("connection",(o,c)=>{try{let l=new mc(c);l.isWebSocket=!0;let u=YR[n](l);Ba.default.debug("Received WS connection, calling listeners",Vv),g3[n](o,l,u)}catch(l){Ba.default.warn("Error in handling WS connection",l)}}),P3((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):PE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),PE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{jv[n]&&jv[n](o,c,l)})),r.push(i),Vv[t?.runFirst?"unshift":"push"]({listener:e,port:n}),g3[n]=WR(Vv,n),YR[n]=WR(Wv,n)}return r}function S3(e,t){t.headersSent||t.writableEnded||(t.writeHead(404),t.end(`Not found
|
|
134
134
|
`),DE(e,404,0,e.requestId))}function DE(e,t,r,n){let s=vE.logging;if(s){Kv||(Kv=Ba.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";Kv[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+KAe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function KAe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function L3(){return LE||(LE=new BigInt64Array([1n]),LE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",LE.buffer))),Number(Atomics.add(LE,0,1n))}var T3,Ba,KR,xr,y3,R3,b3,A3,I3,jR,Yv,w3,FAe,PE,VR,YR,Wv,vE,kAe,E3,_3,jv,Vv,g3,Kv,LE,Xv=ie(()=>{T3=require("node:net"),Ba=b(ee()),KR=require("node:worker_threads"),xr=b(fe());$();y3=b(wt()),R3=b(at()),b3=b(ys()),A3=require("node:http2"),I3=require("node:https"),jR=require("node:http");$p();qp();us();Kn();Yv=require("node:stream");qr();Hv();Cf();$v();w3=require("ws");iE();({errorToString:FAe}=Ba.default);Ue.http=Jv;Ue.request=$Ae;Ue.ws=VAe;Ue.upgrade=P3;PE={},VR={},YR={},Wv=[],vE={},kAe=!0;a(HAe,"handleApplication");a(GAe,"getHttpOptions");a(N3,"deliverSocket");E3=new Map;a(qAe,"proxyRequest");a(zv,"registerServer");a(Qv,"getPorts");a(Jv,"httpServer");a(C3,"getHTTPServer");a(WR,"makeCallbackChain");a(O3,"unhandled");a($Ae,"onRequest");Object.defineProperty(jR.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){}});_3=[],jv={};a(P3,"onUpgrade");Vv=[],g3={};a(VAe,"onWebSocket");a(S3,"defaultNotFound");a(DE,"logRequest");a(KAe,"headersToString");a(L3,"getRequestId")});var tE={};Re(tE,{TRUSTED_RESOURCE_LOADERS:()=>x3,getComponentName:()=>QR,loadComponent:()=>eb,loadComponentDirectories:()=>U3,setErrorReporter:()=>YAe});function U3(e,t){t&&(eM=t),e&&(sM=e);let r=[];if((0,Qt.existsSync)(Zv)){let s=(0,Qt.readdirSync)(Zv,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,zr.join)(Zv,o);r.push(eb(c,eM,iA,!1,void 0,!1,o))}}let n=process.env.RUN_HDB_APP;return n&&r.push(eb(n,eM,n,!1,void 0,!!process.env.DEV_MODE,n)),Promise.all(r).then(()=>{M3=!0})}function YAe(e){XR=e}function WAe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{oa.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(oa.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,zr.join)(e,"node_modules");(0,Qt.existsSync)(s)||(0,Qt.mkdirSync)(s);let i=(0,zr.join)(s,"harperdb");if((0,Qt.existsSync)(i)){if((0,Qt.realpathSync)(i)===(0,Qt.realpathSync)(nM.PACKAGE_ROOT))return t();(0,Qt.rmSync)(i,{recursive:!0,force:!0})}(0,Qt.symlinkSync)(nM.PACKAGE_ROOT,i,"dir"),t()}finally{oa.primaryStore.unlock(e,0)}})}function B3(e,t){return e.ready.then(async()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.pluginName}. Expected a number, received: ${typeof r}`);let n,s;if(!oa.primaryStore.attemptLock(e.pluginName,0,()=>{clearTimeout(s),n(B3(e,t))}))return new Promise((o,c)=>{n=o,s=setTimeout(()=>{c(new Error(`Timeout waiting for lock on ${e.pluginName}`))},r+5e3)});let i;try{await Promise.race([Promise.resolve(t.handleApplication(e)).then(async()=>{await e.waitForInitialLoads()}),new Promise((o,c)=>i=setTimeout(()=>c(new Error(`handleApplication timed out after ${r}ms for ${e.pluginName} on behalf of ${e.appName}`)),r))])}finally{oa.primaryStore.unlock(e.pluginName,0),clearTimeout(i)}})}async function eb(e,t,r,n,s,i,o){let c=(0,Qt.realpathSync)(e);if(JR.has(c))return JR.get(c);JR.set(c,!0),s&&(sM=s);try{let l,u=(0,zr.join)(e,"harperdb-config.yaml");if((0,Qt.existsSync)(u)?l=n?(0,tb.getConfigObj)():(0,rM.parseDocument)((0,Qt.readFileSync)(u,"utf8")).toJSON():!n&&(0,Qt.existsSync)(u=(0,zr.join)(e,"config.yaml"))?l=(0,rM.parseDocument)((0,Qt.readFileSync)(u,"utf8")).toJSON():l=UR,!n)try{await WAe(e)}catch(p){Fa.default.error("Error symlinking harperdb module",p),p.code=="EPERM"&&process.platform==="win32"&&Fa.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let d=ZR,f={};for(let p in l){let h=n?p:`${(0,zr.basename)(e)}.${p}`;ZR=p;let E=l[p];if(!E)continue;so.loading(h);let _,R=E.package;try{if(R){let M=null;if(n)M=(0,zr.join)(e,"components",p);else{let k=e;for(M=(0,zr.join)(k,"node_modules",p);!(0,Qt.existsSync)(M);){if(k=(0,zr.dirname)(k),k.length<(0,v3.getHdbBasePath)().length){M=null;break}M=(0,zr.join)(k,"node_modules",p)}}if(M)process.env.HARPER_SAFE_MODE||(_=await eb(M,t,r,!1,void 0,!1,o||p),f[p]=!0);else throw new Error(`Unable to find package ${p}:${R}`)}else _=x3[p];if(!_){so.loaded(h,`Application component '${h}' processed`);continue}let S=a(M=>(M.origin=r,ze(M)),"ensureTable"),y=E.network||(E.port||E.securePort)&&E,I=y?.securePort||y?.https&&y.port,w=!y?.https&&y?.port;if("handleApplication"in _&&("start"in _||"startOnMainThread"in _||"handleFile"in _||"handleDirectory"in _||"setupFile"in _||"setupDirectory"in _)){let M=new Error(`Plugin ${p} is exporting old extension APIs. Remove them.`);throw so.failed(h,M,`Component '${h}' failed to load`),M}if(t.isWorker&&_.handleApplication){_.suppressHandleApplicationWarning!==!0&&Fa.default.warn(`Plugin ${p} is using the experimental handleApplication API`);let M=new kR(o||"harper",p,e,u,t,Ue);await B3(M,_),so.loaded(h,`Component '${h}' loaded successfully`);continue}if(tM.isMainThread&&(_=await _.startOnMainThread?.({server:Ue,ensureTable:S,port:w,securePort:I,resources:t,...E})||_,n&&y))for(let M of[w,I])try{if(+M&&!D3.includes(M)){let k=iM.get(U.HTTP_SESSIONAFFINITY);k&&Fa.default.warn("Session affinity is not recommended and may cause memory leaks"),(k||!dS)&&(D3.push(M),pL(M,k))}}catch(k){console.error("Error listening on socket",M,k,p)}if(t.isWorker&&(_=await _.start?.({server:Ue,ensureTable:S,port:w,securePort:I,resources:t,...E})||_),sM.set(_,!0),(_.handleFile||_.handleDirectory||_.setupFile||_.setupDirectory)&&E.files!=null){let M=new GR({config:E,name:p,directory:e,module:_,resources:t});f[p]=await u3(M)}so.loaded(h,`Component '${h}' loaded successfully`)}catch(S){S.message=`Could not load component '${p}' for application '${(0,zr.basename)(e)}' due to: ${S.message}`,XR?.(S),((0,ME.getWorkerIndex)()===0?console:Fa.default).error(S),t.set(E.path||"/",new Ll(S),null,!0),so.failed(h,S,`Could not load component '${h}'`)}}if(ZR=d,tM.isMainThread&&!M3&&i&&(0,ME.watchDir)(e,async()=>U3()),l.extensionModule||l.pluginModule){let p=await rS((0,zr.join)(e,l.extensionModule||l.pluginModule));return JR.set(c,p),p}let m=Object.values(f);if(m.length>0&&m.every(p=>!p)&&t.isWorker){let p=`${e} did not load any modules, resources, or files, is this a valid component?`;XR?.(new Error(p)),((0,ME.getWorkerIndex)()===0?console:Fa.default).error(p),so.failed((0,zr.basename)(e),p)}for(let[p,h]of Object.entries(f))h||Fa.default.warn(`Component ${p} from (${(0,zr.basename)(e)}) did not load any functionality.`)}catch(l){console.error(`Could not load application directory ${e}`,l),l.message=`Could not load application due to ${l.message}`,XR?.(l),t.set("",new Ll(l))}}var Qt,zr,tM,rM,iM,nM,Fa,ME,v3,tb,Zv,sM,M3,eM,x3,D3,JR,XR,ZR,QR,Cf=ie(()=>{Qt=require("node:fs"),zr=require("node:path"),tM=require("node:worker_threads"),rM=require("yaml"),iM=b(fe()),nM=b(Lt());$();fG();RG();xG();$G();VG();Gq();W4();j4();Q4();Fa=b(ee());iJ();ME=b(at());CN();qr();Oe();EL();v3=b(fe());gJ();vy();wJ();Ss();kJ();tb=b(wt());$p();mN();i3();d3();Xv();Lp();Ip();Rv();Zv=(0,tb.resolvePath)(iM.get(U.COMPONENTSROOT)),sM=new Map;a(U3,"loadComponentDirectories");x3={REST:pS,rest:pS,graphql:TN,graphqlSchema:_N,roles:NN,jsResource:ON,fastifyRoutes:JD,login:LN,static:ZD,operationsApi:sv,customFunctions:{},http:zR,clustering:uv,replication:da,authentication:Xh,mqtt:hv,loadEnv:ev,logging:Fa.default,dataLoader:nv},D3=[],JR=new Map;a(YAe,"setErrorReporter");QR=a(()=>ZR,"getComponentName");a(WAe,"symlinkHarperModule");a(B3,"sequentiallyHandleApplication");a(eb,"loadComponent")});var wy=x((PGe,F3)=>{var{isMainThread:oM}=require("worker_threads"),{getTables:jAe}=(Oe(),L(Et)),{loadComponentDirectories:zAe,loadComponent:QAe}=(Cf(),L(tE)),{resetResources:JAe}=(dc(),L(pN)),XAe=wt(),{dirname:ZAe}=require("path"),{getConnection:eIe}=Lr(),tIe=fe(),{CONFIG_PARAMS:rIe}=($(),L(Q)),{loadCertificates:nIe}=ys(),{installApplications:sIe}=(Gy(),L(Hy)),{loadAndWatchLicensesDir:iIe}=(iE(),L(Qy)),aM=new Map;async function oIe(e=!1){!oM&&tIe.get(rIe.CLUSTERING_ENABLED)&&eIe();try{oM&&!process.env.HARPER_SAFE_MODE&&await sIe()}catch(n){console.error(n)}let t=JAe();jAe(),t.isWorker=e,oM&&iIe(),await nIe(),await QAe(ZAe(XAe.getConfigFilePath()),t,"hdb",!0,aM,!1),process.env.HARPER_SAFE_MODE||await zAe(aM,t);let r=[];for(let[n]of aM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(oIe,"loadRootComponents");F3.exports.loadRootComponents=oIe});var at=x((DGe,Hi)=>{"use strict";nA();var{Worker:aIe,MessageChannel:cIe,parentPort:Oo,isMainThread:fM,threadId:lIe,workerData:Po}=require("worker_threads"),{PACKAGE_ROOT:uIe}=Lt(),{join:dIe,isAbsolute:fIe,extname:mIe}=require("path"),{server:q3}=(qr(),L(Om)),{totalmem:k3}=require("os"),{setHeapSnapshotNearHeapLimit:pIe}=require("v8"),qc=($(),L(Q)),sb=fe(),ki=ee(),{randomBytes:hIe}=require("crypto"),{_assignPackageExport:EIe}=fi(),_Ie=require("chokidar"),H3=1024*1024,ka=[],ni=[],gIe=50,mM=1e4,SIe="restart",$3="request_thread_info",V3="resource_report",K3="thread_info",Y3="added-port",TIe="ack",cM;EIe("threads",ni);Hi.exports={startWorker:lM,restartWorkers:hM,shutdownWorkers:X3,shutdownWorkersNow:IIe,workers:ka,setMonitorListener:vIe,onMessageFromWorkers:wIe,onMessageByType:e6,broadcast:CIe,broadcastWithAcknowledgement:PIe,setChildListenerByType:AIe,getWorkerIndex:W3,getWorkerCount:j3,getTicketKeys:Q3,setMainIsWorker:RIe,setTerminateTimeout:yIe,restartNumber:Po?.restartNumber||1};ni.onMessageByType=e6;ni.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ni.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Hi.exports.whenThreadsStarted=new Promise(e=>{Hi.exports.threadsHaveStarted=e});sb.get(qc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&pIe(1);var pM;function yIe(e){mM=e}a(yIe,"setTerminateTimeout");function W3(){return Po?Po.workerIndex:pM?0:void 0}a(W3,"getWorkerIndex");function j3(){return Po?Po.workerCount:pM?1:void 0}a(j3,"getWorkerCount");function RIe(e){pM=e,Hi.exports.threadsHaveStarted()}a(RIe,"setMainIsWorker");var z3=1,rb;function Q3(){return rb||(rb=fM?hIe(48):Po.ticketKeys,rb)}a(Q3,"getTicketKeys");Object.defineProperty(q3,"workerIndex",{get(){return W3()}});Object.defineProperty(q3,"workerCount",{get(){return j3()}});var J3={[$3](e,t){LIe(t)},[V3](e,t){DIe(t,e)}};function lM(e,t={}){let r=process.constrainedMemory?.()||k3();r=Math.min(r,k3(),2e4*H3);let n=sb.get(qc.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/H3/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of ni){let d=new cIe;d.existingPort=u,i.push(d),o.push(d.port2)}mIe(e)||(e+=".js");let c=["--enable-source-maps","--expose-internals"];sb.get(qc.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new aIe(fIe(e)?e:dIe(uIe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:z3=t.threadCount,name:t.name,restartNumber:Hi.exports.restartNumber,ticketKeys:Q3()},transferList:o,...t});for(let{port1:u,existingPort:d}of i)d.postMessage({type:Y3,port:u,threadId:l.threadId},[u]);return ib(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>lM(e,t),l.on("error",u=>{ki.error(`Worker index ${t.workerIndex} error:`,u)}),l.on("exit",u=>{ka.splice(ka.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<gIe?(t.unexpectedRestarts=l.unexpectedRestarts+1,lM(e,t)):ki.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",u=>{J3[u.type]?.(u,l)}),ka.push(l),UIe(),t.onStarted&&t.onStarted(l),l.name=t.name,l}a(lM,"startWorker");var bIe=[qc.THREAD_TYPES.HTTP];async function hM(e=null,t=Math.max(Math.floor(z3/8),1),r=!0){if(fM){try{process.chdir(process.cwd())}catch(c){ki.error("Unable to reestablish current working directory",c)}let{resetRestartNeeded:n}=(Jg(),L(aG));if(n(),r){let{loadRootComponents:c}=wy();await c()}Hi.exports.restartNumber++,t<1&&(t=t*ka.length);let s=[],i=[];for(let c of ka.slice(0)){if(e&&c.name!==e||c.wasShutdown)continue;ki.trace("sending shutdown request to ",c.threadId),c.postMessage({restartNumber:Hi.exports.restartNumber,type:qc.ITC_EVENT_TYPES.SHUTDOWN}),c.wasShutdown=!0,c.emit("shutdown",{});let l=bIe.indexOf(c.name)>-1,u=new Promise(d=>{let f=setTimeout(()=>{ki.warn("Thread did not voluntarily terminate, terminating from the outside",c.threadId),c.terminate()},mM*2).unref();c.on("exit",()=>{clearTimeout(f),s.splice(s.indexOf(u)),!l&&r&&c.startCopy(),d()})});if(s.push(u),l&&r){let d=c.startCopy(),f=new Promise(m=>{let p=a(h=>{h.type===qc.ITC_EVENT_TYPES.CHILD_STARTED&&(ki.trace("Worker has started",d.threadId),m(),i.splice(i.indexOf(f)),d.off("message",p))},"startListener");ki.trace("Waiting for worker to start",d.threadId),d.on("message",p)});i.push(f),s.length>=t&&await Promise.race(s),i.length>=t&&await Promise.race(i)}}await Promise.all(s),await Promise.all(i);let{restartService:o}=Nf();r&&(e==="http"||!e)&&sb.get(qc.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await o({service:"clustering"})}else Oo.postMessage({type:SIe,workerType:e})}a(hM,"restartWorkers");function AIe(e,t){J3[e]=t}a(AIe,"setChildListenerByType");function X3(e){return hM(e,1/0,!1)}a(X3,"shutdownWorkers");function IIe(e){return X3(e),Promise.all(ka.map(t=>t.terminate()))}a(IIe,"shutdownWorkersNow");var Z3=[];function wIe(e){Z3.push(e)}a(wIe,"onMessageFromWorkers");var uM=new Map;function e6(e,t){let r=uM.get(e);r||uM.set(e,r=[]),r.push(t)}a(e6,"onMessageByType");var NIe=10;async function CIe(e,t){let r=0;for(let n of ni)try{n.postMessage(e),r++>NIe&&(r=0,await new Promise(setImmediate))}catch(s){ki.error("Unable to send message to worker",s)}t&&r6(e,null)}a(CIe,"broadcast");var nb=new Map,OIe=1;function PIe(e){return new Promise(t=>{let r=0;for(let n of ni)try{let s=OIe++,i=a(()=>{nb.delete(s),--r===0&&t(),n!==Oo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,nb.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of nb)o.port===n&&o()})),n.postMessage(e),r++}catch(s){ki.error("Unable to send message to worker",s)}r===0&&t()})}a(PIe,"broadcastWithAcknowledgement");function LIe(e){e.postMessage({type:K3,workers:t6()})}a(LIe,"sendThreadInfo");function t6(){let e=Date.now();return ka.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(t6,"getChildWorkerInfo");function DIe(e,t){e.resources=t,e.resources.updated=Date.now()}a(DIe,"recordResourceReport");var dM;function vIe(e){dM=e}a(vIe,"setMonitorListener");var MIe=1e3,G3=!1;function UIe(){G3||(G3=!0,setInterval(()=>{for(let e of ka){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}dM&&dM()},MIe).unref())}a(UIe,"startMonitoring");var xIe=1e3;if(Oo&&Po?.addPorts){ib(Oo);for(let e=0,t=Po.addPorts.length;e<t;e++){let r=Po.addPorts[e];r.threadId=Po.addThreadIds[e],ib(r)}setInterval(()=>{let e=process.memoryUsage();Oo.postMessage({type:V3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},xIe).unref(),cM=a(()=>new Promise(e=>{Oo.on("message",t),Oo.postMessage({type:$3});function t(r){r.type===K3&&(Oo.off("message",t),e(r.workers))}a(t,"receiveThreadInfo")}),"getThreadInfo")}else cM=t6;Hi.exports.getThreadInfo=cM;function ib(e,t){ni.push(e),e.on("message",r=>{if(r.type===Y3)r.port.threadId=r.threadId,ib(r.port);else if(r.type===TIe){let n=nb.get(r.id);n&&n()}else r6(r,e)}).on("close",()=>{ni.splice(ni.indexOf(e),1)}).on("exit",()=>{ni.splice(ni.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(ib,"addPort");function r6(e,t){for(let n of Z3)n(e,t);let r=uM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){ki.error(s)}}a(r6,"notifyMessageListeners");if(fM){let e,t,r=new Set,n=["node_modules",".git"],s=a(async(i,o)=>{o&&(e=o),_Ie.watch(i,{persistent:!1,ignored:a(c=>n.some(l=>c.includes(l)),"ignored")}).on("change",c=>{r.add(c),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await hM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)})},"watchDir");Hi.exports.watchDir=s,process.env.WATCH_DIR&&s(process.env.WATCH_DIR)}else Oo.on("message",async e=>{let{type:t}=e;t===qc.ITC_EVENT_TYPES.SHUTDOWN&&(Hi.exports.restartNumber=e.restartNumber,Oo.unref(),setTimeout(()=>{ki.warn("Thread did not voluntarily terminate",lIe),process.exit(0)},mM).unref())})});var a6={};Re(a6,{onStorageReclamation:()=>UE,runReclamationHandlers:()=>SM,setAvailableSpaceRatioGetter:()=>FIe});function UE(e,t,r){(r||(0,ab.getWorkerIndex)()===(0,ab.getWorkerCount)()-1)&&(ob.has(e)||ob.set(e,[]),ob.get(e).push({priority:0,handler:t}),gM||(gM=setTimeout(SM,s6).unref()))}async function SM(){for(let[e,t]of ob)try{let r=await o6(e),n=BIe/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(_M.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){_M.default.error?.("Error running storage reclamation handlers",r)}gM=setTimeout(SM,s6).unref()}function FIe(e){o6=e??i6}var EM,ab,_M,cb,n6,ob,BIe,s6,gM,i6,o6,lb=ie(()=>{EM=require("node:fs/promises"),ab=b(at()),_M=b(pr());$();cb=b(fe()),n6=b(de());cb.default.initSync();ob=new Map,BIe=cb.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,s6=(0,n6.convertToMS)(cb.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;a(UE,"onStorageReclamation");i6=a(async e=>{if(EM.statfs){let t=await(0,EM.statfs)(e);return t.bavail/t.blocks}else return new Promise(t=>{import("hdd-space").then(r=>{r.default(n=>{for(let s of n.parts)if(e.startsWith(s.place))return t(s.free/s.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),o6=i6;a(SM,"runReclamationHandlers");a(FIe,"setAvailableSpaceRatioGetter")});var pF={};Re(pF,{ACTION_32_BIT:()=>pb,ACTION_64_BIT:()=>qIe,AUDIT_STORE_OPTIONS:()=>kh,Decoder:()=>Kl,HAS_BLOBS:()=>Zr,HAS_CURRENT_RESIDENCY_ID:()=>$l,HAS_EXPIRATION_EXTENDED_TYPE:()=>HE,HAS_ORIGINATING_OPERATION:()=>kE,HAS_PREVIOUS_RESIDENCY_ID:()=>Vl,REMOTE_SEQUENCE_UPDATE:()=>cT,createAuditEntry:()=>ql,getLastRemoved:()=>HIe,openAuditStore:()=>fb,readAuditEntry:()=>It,removeAuditEntry:()=>mb,setAuditRetention:()=>GIe,transactionKeyEncoder:()=>E6});function fb(e){let t=e.auditStore=e.openDB(TM.AUDIT_STORE_NAME,{create:!1,...kh});t||(t=e.auditStore=e.openDB(TM.AUDIT_STORE_NAME,kh),l6(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=RM;UE(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-yM/(1+i*i)})){try{m=mb(t,h,E)}catch(_){$f.warn("Error removing audit entry",_)}if(p=h,await new Promise(setImmediate),++f>=kIe){o=10;break}}await m}finally{f===0?o=Math.min(o<<1,yM/10):(l6(t,p),o>100&&(o=o>>1)),d(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,BE.getWorkerIndex)()===(0,BE.getWorkerCount)()-1&&c(),(0,BE.getWorkerIndex)()===0&&!c6)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(c6=!0,$f.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function mb(e,t,r){let n=$Ie(r),s;if(n&Zr){s=It(r);let i=e.tableStores[s.tableId];if(i){let o=s.type==="message"?null:i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&ra(()=>rc(s.getValue(i)),i.rootStore)}}if((n&15)===bM){s=s||It(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function l6(e,t){AM[0]=t,e.put(Symbol.for("last-removed"),_6)}function HIe(e){let t=e.get(Symbol.for("last-removed"));if(t)return _6.set(t),AM[0]}function GIe(e,t=RM){yM=e,RM=t}function ql(e,t,r,n,s,i,o,c,l,u,d,f,m){let p=g6[o];if(!p)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?$c.setFloat64(0,n):si.set(IM),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),_(r),$c.setFloat64(h,e),h+=8,l&$l&&R(u),l&Vl&&R(d),l&HE&&($c.setFloat64(h,f),h+=8),l&kE&&R(S6[m]),i?_(i):si[h++]=0,l?$c.setUint32(n?8:0,p|l|3221225472):si[n?8:0]=p;let E=si.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function _(S){let y=h;h+=1,h=(0,wu.writeKey)(S,si,h);let I=h-y-1;I>127?I>16383?($f.error("Key or username was too large for audit entry",S),h=y+1,si[y]=0):(si.copyWithin(y+2,y+1,h),$c.setUint16(y,I|32768),h++):si[y]=I}function R(S){S<128?si[h++]=S:S<16384?($c.setUint16(h,S|32768),h+=2):S<1056964608?($c.setUint32(h,S|3221225472),h+=4):(si[h]=255,$c.setUint32(h+1,S),h+=5)}}function $Ie(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Kl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function It(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Kl(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&$l&&(m=n.readInt()),i&Vl&&(p=n.readInt()),i&HE&&(h=n.readFloat64()),i&kE){let y=n.readInt();E=S6[y]}l=n.readInt();let _=n.position,R=n.position+=l,S;return{type:g6[i&7],tableId:c,nodeId:o,get recordId(){return(0,wu.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>_?(0,wu.readKey)(e,_,R):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(y,I,w){if(i&ub||i&xE&&!I)return S||(S=ra(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&xE&&w)return OI(y.getEntry(this.recordId),w,y)},getBinaryValue(){return i&(ub|xE)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return $f.error("Reading audit entry error",n,e),{}}}var wu,db,TM,BE,h6,$f,si,$c,E6,kh,yM,kIe,AM,_6,RM,c6,ub,xE,u6,bM,d6,f6,m6,p6,pb,qIe,cT,$l,Vl,kE,HE,Zr,g6,S6,Kl,Wi=ie(()=>{wu=require("ordered-binary"),db=b(fe()),TM=b(Cr());$();BE=b(at()),h6=b(de());il();$f=b(ee());ug();us();lb();(0,db.initSync)();si=Buffer.alloc(2816),$c=new DataView(si.buffer,si.byteOffset,2816),E6={writeKey(e,t,r){return e===FE?(t.set(FE,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,wu.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,wu.readKey)(e,t,r)}},kh={encoding:"binary",keyEncoder:E6},yM=(0,h6.convertToMS)((0,db.get)(U.LOGGING_AUDITRETENTION))||86400*3,kIe=1e3,AM=new Float64Array(1),_6=new Uint8Array(AM.buffer),RM=1e4,c6=!1;a(fb,"openAuditStore");a(mb,"removeAuditEntry");a(l6,"updateLastRemoved");a(HIe,"getLastRemoved");a(GIe,"setAuditRetention");ub=16,xE=32,u6=1,bM=2,d6=3,f6=4,m6=5,p6=6,pb=14,qIe=15,cT=11,$l=512,Vl=1024,kE=2048,HE=4096,Zr=8192,g6={put:u6|ub,[u6]:"put",delete:bM,[bM]:"delete",message:d6|ub,[d6]:"message",invalidate:f6|xE,[f6]:"invalidate",patch:m6|xE,[m6]:"patch",relocate:p6,[p6]:"relocate"},S6={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(ql,"createAuditEntry");a($Ie,"readAction");a(It,"readAuditEntry");Kl=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});var _x={};Re(_x,{ENTRY:()=>KIe,HAS_EXPIRATION:()=>gb,HAS_RESIDENCY_ID:()=>PM,HAS_STRUCTURE_UPDATE:()=>fT,LAST_TIMESTAMP_PLACEHOLDER:()=>FE,LOCAL_TIMESTAMP:()=>VIe,METADATA:()=>Yd,NEW_TIMESTAMP_PLACEHOLDER:()=>y6,NO_TIMESTAMP:()=>Eb,PENDING_LOCAL_TIME:()=>LM,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>IM,RecordEncoder:()=>OM,TIMESTAMP_ASSIGN_LAST:()=>WIe,TIMESTAMP_ASSIGN_NEW:()=>R6,TIMESTAMP_ASSIGN_PREVIOUS:()=>b6,TIMESTAMP_PLACEHOLDER:()=>hb,TIMESTAMP_RECORD_PREVIOUS:()=>wM,entryMap:()=>Vc,handleLocalTimeForGets:()=>Sb,lastMetadata:()=>lt,recordUpdater:()=>DM,removeEntry:()=>Ou});function zIe(){return qE[0]=qE[0]^64,YIe.getFloat64(0)}function Sb(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++,lt=null;let l=r.call(this,o,c);if(l){if(lt&&(l.metadataFlags=lt[Yd],l.localTime=lt.localTime,l.residencyId=lt.residencyId,l.size=lt.size,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l.value){if(l.value.constructor===Object){let u=l.value;l.value=new this.encoder.structPrototype.constructor,Object.assign(l.value,u)}Vc.set(l.value,l)}l.key=o}return l};let n=e.get;e.get=function(o,c){lt=null;let l=n.call(this,o,c);return lt&&l&&(Vc.set(l,lt),lt=null),l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>{if(lt&&(l.metadataFlags=lt[Yd],l.localTime=lt.localTime,l.residencyId=lt.residencyId,l.size=lt.size,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l.value&&l.value.constructor===Object){let u=l.value;l.value=new this.encoder.structPrototype.constructor;for(let d in u)l.value[d]=u[d]}return l})};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Cu.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Cu.length;u++){let d=Cu[u].deref();(!d||d.isDone||d.isCommitted)&&Cu.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function DM(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",f,m){l==null?Nu=Eb:f?Nu=i?.localTime?wM|b6:Eb:Nu=l?i?.localTime?wM|16384:R6|16384:Eb;let p=u?.expiresAt;if(p>=0&&(c|=gb),GE=c,NM=p,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Nu>0},E,_=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(CM=S,GE|=PM,_|=$l),R!==S&&(_|=Vl,R||(R=0)),c&gb&&(_|=HE),u?.originatingOperation&&(_|=kE),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&Zr&&(!i.localTime||!r.getBinaryFast(i.localTime))&&rc(i.value);let y;if(s!==void 0&&(y=Sg(()=>e.put(n,s,h),n,e.rootStore),_l&&(_|=Zr)),l){let I=u?.user?.username;if(m&&(Sg(()=>e.encoder.encode(m),n,e.rootStore),_l&&(_|=Zr)),e.encoder.hasStructureUpdate&&(_|=fT,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let w=i?.localTime,M=r.get(w);if(M){let k=It(M).previousLocalTime;return y=r.put(w,ql(o,t,n,k,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,Vf,_,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?y6:FE,ql(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,Vf,_,S,R,p,u?.originatingOperation),{instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&jIe.has(d)&&qe(Vf?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function Ou(e,t,r){if(t)return t.value&&t.metadataFlags&Zr&&!e.auditStore?.getBinaryFast(t.localTime)&&rc(t.value),e.remove(t.key,r)}var T6,_b,hb,FE,IM,y6,VIe,Yd,KIe,qE,YIe,Eb,R6,WIe,b6,wM,gb,PM,LM,fT,jIe,Vc,Vf,Nu,GE,NM,CM,lt,OM,Cu,il=ie(()=>{T6=require("msgpackr");Wi();_b=b(ee());us();us();Kn();hb=new Uint8Array([1,1,1,1,4,64,0,0]),FE=new Uint8Array([1,1,1,1,1,0,0,0]),IM=new Uint8Array([1,1,1,1,3,64,0,0]),y6=new Uint8Array([1,1,1,1,0,64,0,0]),VIe=Symbol("local-timestamp"),Yd=Symbol("metadata"),KIe=Symbol("entry"),qE=new Uint8Array(8),YIe=new DataView(qE.buffer,0,8),Eb=0,R6=0,WIe=1,b6=3,wM=4,gb=16,PM=32,LM=1,fT=256,jIe=new Set(["put","patch","delete","message","publish"]),Vc=new WeakMap,Nu=0,GE=-1,NM=-1,CM=0,lt=null,OM=class extends T6.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{a(this,"RecordObject")}getUpdatedTime(){return Vc.get(this)?.version}getExpiresAt(){return Vc.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,o){if(Nu||GE>=0){let c=0,l=Nu;l&&(c+=8,Nu=0);let u=GE,d=NM,f=CM;u>=0&&(c+=4,GE=-1,d>=0&&(c+=8,NM=-1),f&&(c+=4,CM=0));let m=n.call(this,i,o|2048|c);Vf=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(hb[4]=l,hb[5]=l>>8,m.set(hb,p),p+=8),_l&&(u|=Zr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|pb<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Vf=n.call(this,i,o),Vf};let s=this.saveStructures;this.saveStructures=function(i,o){let c=s.call(this,i,o);return this.hasStructureUpdate=!0,c}}decode(t,r){lt=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(qE,0,c),c+=8;else for(let m=0;m<8;m++)qE[m]=t[c++];l=zIe(),i=t[c]}let u,d;i<32&&(i===pb?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&gb&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&PM&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=ra(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return lt={localTime:l,[Yd]:o,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:ra(()=>super.decode(t,r),this.rootStore)}catch(c){return _b.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(zIe,"getTimestamp");a(Sb,"handleLocalTimeForGets");Cu=[];setInterval(()=>{for(let e=0;e<Cu.length;e++){let t=Cu[e].deref();!t||t.isDone||t.isCommitted?Cu.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(_b.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):_b.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(DM,"recordUpdater");a(Ou,"removeEntry")});function UM(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?o(f,m):f}function u(f){return f.conditions?UM(f.conditions,f.operator,r,n,s,i,o,c):jf(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}a(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,p);return S?(I,w)=>y.some(M=>M(I,w)):(I,w)=>y.every(M=>M(I,w))}let _=(h.attribute||h[0])===r.primaryKey,R=VE(h,r,i,c,_,p);return m&&E<f.length-1&&p&&(p=swe(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}a(d,"mapConditionsToFilters")}function jf(e,t,r,n,s,i,o){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new pn.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let I=c[0],w=Do(n.attributes,I);if(w.relationship){if(c.length<2)throw new pn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let M=w.definition?.tableClass||w.elements?.definition?.tableClass,k=new Map,X=jf({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,M,s,k);if(w.relationship.to){i[c[0]]=k;let J=!!Do(M.attributes,w.relationship.to)?.elements;X=ewe(X,w,M.primaryStore,J,k)}if(w.relationship.from){let J=a(Y=>(Y?.key!==void 0&&(Y=Y.key),jf({attribute:w.relationship.from,value:Y},t,r,n,s,k)),"searchEntry");w.elements?(i[c[0]]=k,X=twe(X,w,M.primaryStore,k,J)):X=X.flatMap(J)}return X}else if(c.length===1)c=c[0];else throw new pn.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let _;switch(xM[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=Lo.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,_=!0;break;default:throw new pn.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>ii.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,ii.MAX_SEARCH_KEY_LENGTH)+ii.OVERFLOW_MARKER,E=!1,R=VE(e,n,null,i,d)),typeof p=="string"&&p.length>ii.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,ii.MAX_SEARCH_KEY_LENGTH)+ii.OVERFLOW_MARKER,h=!0,R=R??VE(e,n,null,i,d)),r){let I=m;m=p,p=I,I=!E,E=!h,h=I}if(!f||f.isIndexing||_||l===null&&!f.indexNulls){if(s===!1&&!f)throw new pn.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new pn.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new pn.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new pn.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??VE(e,n,null,i,d),!R)throw new pn.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let I=f.getRange(S).map(R?function({key:w,value:M}){return this?.isSync?M&&R(M)?w:Kc.SKIP:new Promise((k,X)=>setImmediate(()=>{try{k(M&&R(M)?w:Kc.SKIP)}catch(J){X(J)}}))}:w=>w.value==null&&!(w.metadataFlags&(Zn|Pu))?Kc.SKIP:(o?._freezeRecords&&Object.freeze(w.value),y(w),w));return I.hasEntries=!0,I}else return f?f.customIndex?f.customIndex.search(e,o).map(I=>{if(typeof I=="object"&&I){let{key:w,...M}=I,k=n.primaryStore.getEntry(w);return y(k),o?._freezeRecords&&Object.freeze(k?.value),{...M,...k}}return I}):f.getRange(S).map(R?function({key:I,value:w}){let M;return typeof I=="string"&&I.length>ii.MAX_SEARCH_KEY_LENGTH?M=n.primaryStore.get(w):M={[c]:I},this.isSync?R(M)?w:Kc.SKIP:new Promise((k,X)=>setImmediate(()=>{try{k(R(M)?w:Kc.SKIP)}catch(J){X(J)}}))}:({value:I})=>I):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function(I){let{key:w,value:M}=I;return this.isSync?(y(I),M&&R(M)?w:Kc.SKIP):new Promise((k,X)=>setImmediate(()=>{try{y(I),k(M&&R(M)?w:Kc.SKIP)}catch(J){X(J)}}))});function y(I){(n.databaseName!=="system"||n.name==="hdb_analytics")&&I?.value&&qe(I.size??1,"db-read",n.name,null)}a(y,"recordRead")}function Do(e,t){if(Array.isArray(t))if(t.length>1){let r=Do(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Do(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function ewe(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function twe(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function VE(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=Do(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=VE({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let _,R=a((y,I)=>{let w,M;return E?E.returnDirect?(w=E(y,r,I),M=lt):(M=E(y,r,I,!0),Array.isArray(M)?(w=M.map(k=>k.value),M=null):w=M?.value):w=y[d],{subObject:w,subEntry:M}},"getSubObject"),S=a((y,I)=>{if(E&&h.idFilter){if(!_)if(h.idFilter.idSet?.size===1){for(let J of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:J};_=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else _=u(E.from??t.primaryKey,h.idFilter,!1,!0);let X=_(y);return _.idFilter&&(S.idFilter=_.idFilter),X}let{subObject:w,subEntry:M}=R(y,I);return w?Array.isArray(w)?(!n?.[d]&&n&&(n[d]={fromRecord(X){let J=R(X).subObject;return Array.isArray(J)?J.filter(h).map(Y=>Y[m.primaryKey]):J}}),w.some(h)):h(w,M):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),xM[o]||o){case ii.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Lo.compareKeys)(d,l[0])>=0&&(0,Lo.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Lo.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Lo.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Lo.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Lo.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Lo.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new pn.ClientError(`Unknown query comparator "${o}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&yb(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,_=3;function R(S){let y=S[d],I;if(typeof y!="object"||!y||p?I=f(y):Array.isArray(y)?I=y.some(f):y instanceof Date&&(I=f(y.getTime())),m&&(_++,!I&&!R.idFilter&&++E/_*i>h)){let w=jf(e,r.transaction.getReadTxn(),!1,t),M;R.to?M=w.flatMap(X=>t.primaryStore.get(X)[R.to]):M=w.map(zf);let k=new Set(M);R.idFilter=X=>k.has(zf(X)),R.idFilter.idSet=k}return I}return a(R,"recordFilter"),s&&(R.idFilter=f),R}a(u,"attributeComparator")}function yb(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Ha(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=xM[n]||n,n===ii.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Do(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=yb(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Ha(e.indices[i.relationship.from])/(Ha(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Ha(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=XIe*Ha(e.primaryStore)+1;else if(n==="between")r.estimated_count=JIe*Ha(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=Ha(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=QIe*Ha(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function hS(e,t){if(e)if(Ga=e,Kf.lastIndex=0,rwe.test(e))try{if(t&&(t.conditions=[]),Gi=t??new Wf,$E(Gi,""),Qr!==Ga.length&&sr("Unable to parse query, unexpected end of query"),Gi.parseErrorMessage&&(Gi.parseError=new vM(t.parseErrorMessage),!t))throw Gi.parseError;return Gi}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Qr} in '${Ga}'`,Gi.parseErrorMessage&&(r.message+=", "+Gi.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function sr(e){let t=`${e} at position ${Qr}`;Gi.parseErrorMessage=Gi.parseErrorMessage?Gi.parseErrorMessage+", "+t:t}function $E(e,t){let r=Kf,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Ga);){Qr=r.lastIndex;let[,d,f]=n;o?(d&&sr(`expected operator, but encountered '${d}'`),o=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:sr(`invalid FIQL operator ${d}`),l=A6):(l=decodeURIComponent,i="equals",d||sr("attribute must be specified before equality comparator"),s=Yf(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=ZIe[f],l=MM[i]?A6:decodeURIComponent,d||sr(`attribute must be specified before comparator ${f}`),s=Yf(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&sr(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),sr(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||sr("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&I6(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else Tb(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?sr("conditions/comparisons are not allowed in a property list"):e.push(Yf(d)),s=void 0;break;case"(":Kf.lastIndex=Qr;let p=$E(d?[]:new Wf,")");switch(d){case"":Tb(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:sr("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":sr("group by is not implemented yet");case"sort":e.sort=w6(p);break;default:sr(`unknown query function call ${d}`)}Ga[Qr]===","?r.lastIndex=++Qr:o=!0,s=null;break;case"{":e.conditions&&sr("property sets are not allowed in a queries"),d||sr("property sets must have a defined parent property name"),Kf.lastIndex=Qr,m=$E([],"}"),m.name=d,e.push(m),Ga[Qr]===","?r.lastIndex=++Qr:o=!0;break;case"[":if(Kf.lastIndex=Qr,d?(m=$E(new Wf,"]"),m.name=d):m=$E(e.conditions?new Wf:[],"]"),e.conditions)if(Tb(e,u),Ga[Qr]==="="){l=decodeURIComponent,i="equals",s=Yf(d),r.lastIndex=++Qr;break}else e.conditions.push(m),s=null;else e.push(m);Ga[Qr]===","?r.lastIndex=++Qr:o=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&I6(h,d),Tb(e,u),e.conditions.push(h)}else d&&sr("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Yf(d));return e}else sr(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:sr(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?nwe:Kf,r.lastIndex=Qr),Qr===Ga.length)return e}t&&sr(`expected '${t}', but encountered end of string`)}function Tb(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&sr("Can not mix operators within a condition grouping"):e.operator=t)}function Yf(e){return e.indexOf(".")>-1?e.split(".").map(Yf):decodeURIComponent(e)}function A6(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new pn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function I6(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new pn.ClientError("wildcard can only be used at the end of a string")}function w6(e){let t=N6(e[0]);return e.length>1&&(t.next=w6(e.slice(1))),t}function N6(e){if(Array.isArray(e)){let t=N6(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}sr(`Unknown sort type ${e}`)}function zf(e){return Array.isArray(e)?e.join("\0"):e}function Ha(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function swe(e,t,r){return t*r/Ha(e)}var pn,ii,Lo,Kc,QIe,JIe,XIe,ZIe,MM,xM,vM,rwe,Kf,nwe,Qr,Gi,Ga,Wf,ES=ie(()=>{pn=b(ge()),ii=b(Cr()),Lo=require("ordered-binary"),Kc=require("lmdb");sR();il();Kn();QIe=.3,JIe=.1,XIe=.05,ZIe={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},MM={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(UM,"executeConditions");a(jf,"searchByIndex");a(Do,"findAttribute");a(ewe,"joinTo");a(twe,"joinFrom");xM={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(VE,"filterByType");a(yb,"estimateCondition");vM=class extends pn.Violation{static{a(this,"SyntaxViolation")}},rwe=/[()[\]|!<>.]|(=\w*=)/,Kf=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,nwe=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(hS,"parseQuery");a(sr,"recordError");a($E,"parseBlock");a(Tb,"assignOperator");a(Yf,"decodeProperty");a(A6,"typedDecoding");a(I6,"wildcardDecoding");a(w6,"toSortObject");a(N6,"toSortEntry");Wf=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};a(zf,"flattenKey");a(Ha,"estimatedEntryCount");a(swe,"intersectionEstimate")});function C6(e,t){if(Lu=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(Lu=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new FM;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Lu=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return Lu=!0,null;e[e.length-1]==="/"&&(Lu=!0)}return t.coerceId(decodeURIComponent(e))}function es(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r){if(o)d=i,o=o.getContext?.()||o;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i.getContext?.()||i):i?.transaction instanceof $o?o=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Qf.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?o?(d=i,o=o.getContext?.()||o):o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let _=this.parsePath(c,o,l);_?.id!==void 0?(_.query&&(l?l=Object.assign(_.query,l):l=_.query),u=_.isCollection,c=_.id):c=_,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new qs,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new qs,l.id=c,c==null&&(t.method==="get"&&D6.default.warn?.(`Using an argument with a value of ${c} for ${t.method}, is deprecated`,new Error("Invalid id")),u=!0);l||(l=new qs,l.id=c),u&&(l.isCollection=!0);let f;o||(o=KE.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=a(E=>KE.run(o,()=>h(E)),"runAction")),o?.transaction){let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)}else return At(o,()=>{o.transaction.startedFrom={resourceName:this.name,method:t.method};let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)},f);function h(E){if(o.authorize&&(o.authorize=!1,m!==!1)){let _=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,d,o):E.allowUpdate(o.user,d,o):t.type==="create"?E.allowCreate(o.user,d,o):E.allowDelete(o.user,l,o);if(_?.then)return _.then(R=>{if(!R)throw new Qf.AccessViolation(o.user);return typeof d?.then=="function"?d.then(S=>e(E,l,o,S)):e(E,l,o,d)});if(!_)throw new Qf.AccessViolation(o.user)}return typeof d?.then=="function"?d.then(_=>e(E,l,o,_)):e(E,l,o,d)}a(h,"authorizeActionOnResource")}}function Ps(e,t){let r=new Qf.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function BM(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function YE(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):BM(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(BM(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(BM(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&o&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=YE(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var O6,P6,Qf,L6,D6,KE,iwe,Vt,Lu,FM,oo=ie(()=>{O6=require("crypto");Cm();qu();P6=b(fi()),Qf=b(ge());Qa();ES();L6=require("async_hooks");fS();D6=b(pr()),KE=new L6.AsyncLocalStorage,iwe={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Vt=class{static{a(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=es(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=YE(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0,method:"get"});static put=es(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let o of s){let c=t.constructor,l=o[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(o,n))):i.push(u.put(o,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Ps(t,"put")},{hasContent:!0,type:"update",method:"put"});static patch=es(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Ps(t,"patch")},{hasContent:!0,type:"update",method:"patch"});static delete=es(function(t,r,n,s){return t.delete?t.delete(r):Ps(t,"delete")},{hasContent:!1,type:"delete",method:"delete"});static getNewId(){return(0,O6.randomUUID)()}static create(t,r,n){let s;return this.loadAsInstance===!1?typeof t=="object"&&t&&!n?(n=r,r=t,s=new qs,s.isCollection=!0):s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n?n.getContext&&(n=n.getContext()):n=KE.getStore()??{},At(n,async()=>{n.transaction.startedFrom??={resourceName:this.name,method:"create"};let i=new this(s,n),o=i.create?await i.create(s,r):Ps(i,"create");return n.newLocation=s??o?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?o:i})}static invalidate=es(function(t,r,n,s){return t.invalidate?t.invalidate(r):Ps(t,"delete")},{hasContent:!1,type:"update",method:"invalidate"});static post=es(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create",method:"post"});static update=es(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update",method:"update"});static connect=es(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Ps(t,"connect")},{hasContent:!0,type:"read",method:"connect"});static subscribe=es(function(t,r,n,s){return t.subscribe?t.subscribe(r):Ps(t,"subscribe")},{type:"read",method:"subscribe"});static publish=es(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):Ps(t,"publish")},{hasContent:!0,type:"create",method:"publish"});static search=es(function(t,r,n){let s=t.search?t.search(r):Ps(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let o=YE(i,t.constructor);return s.map(o)}return s},{type:"read",method:"search"});static query=es(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Ps(t,"search")},{hasContent:!0,type:"read",method:"query"});static copy=es(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Ps(t,"copy")},{hasContent:!0,type:"create",method:"copy"});static move=es(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Ps(t,"move")},{hasContent:!0,type:"delete",method:"move"});async post(t,r){if(this.constructor.loadAsInstance===!1){if(t.isCollection&&this.create)return r=await this.create(t,r),r?.[this.constructor.primaryKey]}else if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Ps(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return hS(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&iwe[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:C6(t,this),isCollection:Lu}}let i=C6(t,this);return Lu?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#r=!0),s}subscribe(t){return new is}connect(t,r){let n=this.constructor.loadAsInstance===!1?t:r;return n?.subscribe!==!1?this.subscribe?.(n):new is}allowRead(t,r,n){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r,n){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}getCurrentUser(){return this.getContext()?.user}};(0,P6._assignPackageExport)("Resource",Vt);a(C6,"pathToId");FM=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(es,"transactional");a(Ps,"missingMethod");a(BM,"selectFromObject");a(YE,"transformForSelect")});var iQ={};Re(iQ,{EVICTED:()=>Pu,INVALIDATED:()=>Zn,coerceType:()=>bb,makeTable:()=>Ib});function Ib(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:_,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=DM(i,n,l),I,w,M={},k=Promise.resolve(),X,J,Y;for(let z of S)(z.assignCreatedTime||z.name==="__createdtime__")&&(X=z),(z.assignUpdatedTime||z.name==="__updatedtime__")&&(J=z),z.expiresAt&&(Y=z),z.isPrimaryKey&&(M=z);let H,ae=[],le=[],oe=1,Ee=2,Se={},Me={},et=864e5,$e=0,ns,Ot,Pt,Ka=!1,Jc,Gt,vs,Ya=Jf.get(U.REPLICATION_DATABASES);if(Array.isArray(Ya)){for(let z of Ya)if(z.name===c&&z.replicateTo>=0){vs=z.replicateTo;break}}let u_=i.getRange({start:!1,end:!1}).constructor,am=10,d_=6;_&&xu(),UE(i.env.path,z=>{if(w)return Nr(z)});class cm extends Sl{static{a(this,"Updatable")}getUpdatedTime(){return Vc.get(this.getRecord())?.version}getExpiresAt(){return Vc.get(this.getRecord())?.expiresAt}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.set(g,new ap(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(g,T){return this.addTo(g,-T)}}class Be extends Vt{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=_;static databasePath=o;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=X;static updatedTimeProperty=J;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(g,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)g.intermediateSource=!0,this.sources.unshift(g);else{if(this.sources.some(D=>!D.intermediateSource)){if(this.sources.some(D=>D.name===g.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(g)}w=w||g.get&&(!g.get.reliesOnPrototype||g.prototype.get),I=I||g.load;let A=a(D=>{let F=this.sources;if(F=F.filter(W=>W.intermediateSource&&W[D]&&(!W[D].reliesOnPrototype||W.prototype[D])),F.length>0)if(F.length===1){let W=F[0];return(v,q,O)=>{if(v?.source!==W)return W[D](q,O,v)}}else return(W,v,q)=>{let O=[];for(let G of F){if(W?.source===G)break;O.push(G[D](v,q,W))}return Promise.all(O)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1];N.intermediateSource&&(N={});let C=a(D=>{if(N[D]&&(!N[D].reliesOnPrototype||N.prototype[D]))return(F,W,v)=>{if(!F?.source)return N[D](W,v,F)}},"getApplyToCanonicalSource");Se={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish")},Me={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish"),invalidate:A("invalidate")};let B=N.shouldRevalidateEvents;return(async()=>{let D=!1,F,W=a(async(v,q)=>{let O=v.value,G=v.table?xe[c][v.table]:Be;if(c===Em&&(v.table===Fu.ROLE_TABLE_NAME||v.table===Fu.USER_TABLE_NAME)&&(D=!0),v.id===void 0&&(v.id=O[G.primaryKey],v.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(v));v.source=g;let V={residencyId:tl(v.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:v.nodeId,async:!0},P=v.id,me=await G.getResource(P,q,V);switch(v.finished&&await v.finished,v.type){case"put":return B?me._writeInvalidate(P,O,V):me._writeUpdate(P,O,!0,V);case"patch":return B?me._writeInvalidate(P,O,V):me._writeUpdate(P,O,!1,V);case"delete":return me._writeDelete(P,V);case"publish":case"message":return me._writePublish(P,O,V);case"invalidate":return me._writeInvalidate(P,O,V);case"relocate":return me._writeRelocate(P,V);default:ke.default.error?.("Unknown operation",v.type,v.id)}},"writeUpdate");try{let v=g.subscribe;v&&R==null&&(R=!0);let q={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},O=g.subscribeOnThisThread?g.subscribeOnThisThread((0,Du.getWorkerIndex)(),q):(0,Du.getWorkerIndex)()===0,G=v&&O&&await g.subscribe?.(q);if(G){let V;for await(let P of G)try{if(!(P.type==="transaction"?P.writes[0]:P)){ke.default.error?.("Bad subscription event",P);continue}if(P.source=g,P.type==="end_txn"){V?.resolve();let he;if(P.localTime&&F!==P.localTime&&P.remoteNodeIds?.length>0&&(he=a(()=>{let K=[Symbol.for("seq"),P.remoteNodeIds[0]],Z=d.get(K),ue=Z?.nodes;ue||(ue=[]);for(let Pe of P.remoteNodeIds.slice(1)){let Je=ue.find(mt=>mt.id===Pe);ue=ue.filter(mt=>mt.id!==Pe||mt===Je),Je||(Je={id:Pe,seqId:0},ue.push(Je)),Je.seqId=Math.max(Z?.seqId??1,P.localTime),Pe===V?.nodeId&&(Je.lastTxnTime=P.timestamp)}let pe=Math.max(Z?.seqId??1,P.localTime);ke.default.trace?.("Received txn",c,pe,new Date(pe),P.localTime,new Date(P.localTime),P.remoteNodeIds),d.put(K,{seqId:pe,nodes:ue})},"updateRecordedSequenceId"),F=P.localTime),P.onCommit){let K=V?V.committed.then(P.onCommit):P.onCommit();he&&(K?.then?K.then(he):he())}else he&&he();continue}if(V)if(P.beginTxn)V.resolve();else{V.writePromises.push(W(P,V));continue}!P.timestamp&&P.version&&(P.timestamp=P.version);let ne=At(P,()=>{if(P.type==="transaction"){let he=[];for(let K of P.writes)try{he.push(W(K,P))}catch(Z){throw Z.message+=" writing "+JSON.stringify(K)+" of event "+JSON.stringify(P),Z}return Promise.all(he)}else if(P.type==="define_schema"){let he=this.attributes.slice(0),K=!1;for(let Z of P.attributes)he.find(ue=>ue.name===Z.name)||(he.push(Z),K=!0);K&&(ze({table:s,database:c,attributes:he,origin:"cluster"}),jE.signalSchemaChange(new zE.SchemaEventMsg(process.pid,j.CREATE_TABLE,c,s)))}else return P.beginTxn?(V=P,V.writePromises=[W(P,P)],new Promise(he=>{V.resolve=()=>he(Promise.all(V.writePromises))})):W(P,P)});V&&(V.committed=ne),D&&ne&&!ne?.waitingForUserChange&&(ne.then(()=>jE.signalUserChange(new zE.UserEventMsg(process.pid))),ne.waitingForUserChange=!0),P.onCommit&&(ne?ne.then(P.onCommit):P.onCommit())}catch(me){ke.default.error?.("error in subscription handler",me)}}}catch(v){ke.default.error?.(v)}})(),this}static get isCaching(){return w}static get shouldRevalidateEvents(){return this.prototype.get!==Be.prototype.get}static getResource(g,T,A){let N=super.getResource(g,T,A);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),g!=null&&this.loadAsInstance!==!1){Fo(g);try{if(N.getRecord?.())return N;if(typeof g=="object"&&g&&!Array.isArray(g))throw new Error(`Invalid id ${JSON.stringify(g)}`);let C=!A?.async||i.cache?.get?.(g),B=yt(T),D=B.getReadTxn();if(D?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Zc(g,T,{transaction:D,ensureLoaded:A?.ensureLoaded,type:A?.type},C,F=>{if(F?Be._updateResource(N,F):N.#e=null,T.onlyIfCached){if(!N.doesExist())throw new ft.ServerError("Entry is not cached",504)}else if(A?.ensureLoaded){let W=Ho(g,F,T,N);if(W)return B?.disregardReadTxn(),N.#i=!0,T.loadedFromSource=!0,oi(W,v=>(Be._updateResource(N,v),N))}return N})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(g)),C}}return N}static _updateResource(g,T){g.#n=T,g.#e=T?.value??null,g.#r=T?.version}ensureLoaded(){let g=Ho(this.getId(),this.#n,this.getContext());if(g)return this.#i=!0,this.getContext().loadedFromSource=!0,oi(g,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let g=M?.type;if(g==="String"||g==="ID")return super.getNewId();if(!Gt){let C=i.getEntry(Symbol.for("id_allocation")),B=C?.value,D;if(B&&B.nodeName===server.hostname&&(!_we(i)||B.pid===process.pid)){let F=B.start,W=B.end;D=F;for(let v of i.getKeys({start:W,end:F,limit:1,reverse:!0}))D=v}else B=N(C?.version??null),D=B.start;Gt=new BigInt64Array([BigInt(D)+1n]),Gt=new BigInt64Array(i.getUserSharedBuffer("id",Gt.buffer)),Gt.maxSafeId=B.end}let T=Number(Atomics.add(Gt,0,1n)),A=g==="Int"?512:1048576;if(T+A>=Gt.maxSafeId){let C=a(B=>{Gt.maxSafeId=T+(g==="Int"?1023:4194303);let D=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,F=B?void 0:i.useReadTransaction(),W=Number(Gt[0]);for(let O of i.getKeys({start:W+1,end:D,limit:1,transaction:F}))D=O;F?.done();let{value:v,version:q}=i.getEntry(Symbol.for("id_allocation"));if(Gt.maxSafeId<D){if(v.end>Gt.maxSafeId-100)return;ke.default.info?.("New id allocation",T,Gt.maxSafeId,q),i.put(Symbol.for("id_allocation"),{start:v.start,end:Gt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),q)}else{ke.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Gt.maxSafeId}, but id of ${D} detected`);let O=N(q);O.alreadyUpdated||Atomics.store(Gt,0,BigInt(O.start+1)),Gt.maxSafeId=O.end}},"updateEnd");T+A===Gt.maxSafeId?setImmediate(C):T+100>=Gt.maxSafeId&&(ke.default.warn?.(`Synchronous id allocation required on table ${s}${g=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>C(!0)))}return T;function N(C){let B=(g==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=B/4,F,W,v=!1,q,O;do{q=Math.floor(Math.random()*B),O={start:q,end:q+(g==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},F=0;for(let G of i.getKeys({start:q,limit:1,reverse:!0}))F=G;W=B;for(let G of i.getKeys({start:q+1,end:B,limit:1}))W=G;D*=.875,D<1e3&&!v&&(v=!0,ke.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${g==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,q,F,W,D))}while(!(D<W-q&&(D<q-F||F===0)));return i.transactionSync(()=>{let G=i.getEntry(Symbol.for("id_allocation"));return(G?.version??null)==C?(ke.default.info?.("Allocated new id range",O),i.put(Symbol.for("id_allocation"),O,Date.now()),O):(ke.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...G.value})})}}static setTTLExpiration(g){if(typeof g=="number")h=g*1e3,E||(E=0);else if(g&&typeof g=="object")h=g.expiration*1e3,E=(g.eviction||0)*1e3,et=g.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");et=et||(h+E)/4,Nr()}static getResidencyRecord(g){return d.get([Symbol.for("residency_by_id"),g])}static setResidency(g){Be.getResidency=g&&((T,A)=>{try{return g(T,A)}catch(N){throw N.message+=` in residency function for table ${s}`,N}})}static setResidencyById(g){Be.getResidencyById=g&&(T=>{try{return g(T)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static getResidency(g,T){if(Be.getResidencyById)return Be.getResidencyById(g[t]);let A=vs;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(A=T.replicateTo)}if(A>=0&&server.nodes){let N=[server.hostname];if(T.previousResidency)N.push(...T.previousResidency.slice(0,A));else{let C=server.nodes.map(F=>F.name),B=Math.floor(C.length*Math.random());N.push(...C.slice(B,B+A));let D=B+A-C.length;D>0&&N.push(...C.slice(0,D))}return N}}static enableAuditing(){_||(_=!0,xu(),Be.audit=!0)}static coerceId(g){return g===""?null:bb(g,M)}static async dropTable(){delete xe[c][s];for(let g of i.getRange({versions:!0,snapshot:!1,lazy:!0}))g.metadataFlags&Zr&&g.value&&rc(g.value);if(c===o){for(let g of S)d.remove(Be.tableName+"/"+g.name),r[g.name]?.drop();d.remove(Be.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),HM.default.unlinkSync(i.env.path);jE.signalSchemaChange(new zE.SchemaEventMsg(process.pid,j.DROP_TABLE,c,s))}get(g){let T=this.constructor;if(typeof g=="string"&&T.loadAsInstance!==!1)return this.getProperty(g);if(Uu(g))return this.search(g);if(g&&g.id===void 0&&!g.toString()){let A={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Be.getRecordCount().then(N=>(A.recordCount=N.recordCount,A.estimatedRecordRange=N.estimatedRange,A)):A}if(g!==void 0&&T.loadAsInstance===!1){let A=this.getContext(),N=yt(A),C=N.getReadTxn();if(C?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let B=ci(g);Fo(B);let D=!0;return g.checkPermission&&(D=this.allowRead(A.user,g,A)),oi(oi(D,F=>{if(!F)throw new ft.AccessViolation(A.user);let W=!0;return Zc(B,A,{transaction:C,ensureLoaded:W},!1,v=>{if(A.onlyIfCached){if(!v?.value)throw new ft.ServerError("Entry is not cached",504)}else if(W){let q=Ho(B,v,A);if(q)return N?.disregardReadTxn(),A.loadedFromSource=!0,q.then(O=>O?.value)}return v?.value})}),F=>{let W=g?.select;return W&&F!=null?YE(W,this.constructor)(F):F})}if(g?.property)return this.getProperty(g.property);if(this.doesExist()||g?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(g,T,A){let N=ko(g,T);if(N?.read){if(N.isSuperUser)return!0;let C=N.attribute_permissions,B=T?.select;if(C?.length>0||Ka&&B){if(T||(T={}),B){let D=Array.isArray(B)?B:[B],F=C?.length>0&&kM(C,"read");T.select=D.map(W=>{let v=W.name||W;if(!F||F[v]){let q=Pt[v]?.definition?.tableClass;if(q){if(W.name||(W={name:W}),!W.checkPermission&&T.checkPermission&&(W.checkPermission=T.checkPermission),!q.prototype.allowRead.call(null,g,W,A))return!1;if(!W.select)return W.name}return W}}).filter(Boolean)}else T.select=C.filter(D=>D.read&&!Pt[D.attribute_name]).map(D=>D.attribute_name);return!0}else return!0}}allowUpdate(g,T,A){let N=ko(g);if(N?.update){let C=N.attribute_permissions;if(C?.length>0){let B=kM(C,"update");for(let D in T)if(!B[D])return!1;for(let D of C){let F=D.attribute_name;!D.update&&!(F in T)&&(T[F]=this.getProperty(F))}}return Wa(this.getContext())}}allowCreate(g,T,A){if(this.isCollection){let N=ko(g);if(N?.insert){let C=N.attribute_permissions;if(C?.length>0){let B=kM(C,"insert");for(let D in T)if(!B[D])return!1;return Wa(this.getContext())}else return Wa(this.getContext())}}else return this.allowUpdate(g,T,A)}allowDelete(g,T,A){return!!ko(g,T)?.delete&&Wa(A)}update(g,T){let A,N=typeof T=="boolean"||T===void 0&&(g==null||typeof g=="object"&&!(g instanceof URLSearchParams)),C=!1;N?(C=T,T=g,A=this.getId()):A=ci(g);let B=this.getContext();if(!yt(B))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(C)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(N){let F=this.#t;F&&(T=Object.assign(F,T)),this.#t=T}else{let F=!0;if(g==null)throw new TypeError("Can not put a record without a target");return g.checkPermission&&(F=this.allowUpdate(B.user,T,B)),oi(F,W=>{if(!W)throw new ft.AccessViolation(B.user);return oi(i.get(ci(g)),v=>{let q=new cm(v);return q._setChanges(T),this._writeUpdate(A,q.getChanges(),!1),q})})}return this._writeUpdate(A,this.#t,C),this}addTo(g,T){if(typeof T=="number"||typeof T=="bigint")this.#s===M6?this.set(g,(+this.getProperty(g)||0)+T):(this.#s||this.update(),this.set(g,new ap(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(g,T){if(typeof T=="number")return this.addTo(g,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(g){this.#t=g}setRecord(g){this.#e=g}invalidate(g){let T=!0,A=this.getContext();return g?.checkPermission&&(T=this.allowDelete(A.user,g,A)),oi(T,N=>{if(!N)throw new ft.AccessViolation(A.user);this._writeInvalidate(g?ci(g):this.getId())})}_writeInvalidate(g,T,A){let N=this.getContext();Fo(g),yt(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#n,before:Se.invalidate?.bind(this,N,g),beforeIntermediate:rl(T,Me.invalidate?.bind(this,N,g)),commit:a((B,D)=>{if(!(Go(B,D,A?.nodeId)<=0)){T??=null;for(let F in r)T||(T={}),T[F]===void 0&&(T[F]=this.getProperty(F));ke.default.trace?.(`Invalidating entry in ${s} id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,T,D,B,Zn,_,{user:N?.user,residencyId:A?.residencyId,nodeId:A?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(g,T){let A=this.getContext();Fo(g),yt(this.getContext()).addWrite({key:g,store:i,invalidated:!0,entry:this.#n,before:Se.relocate?.bind(this,A,g),beforeIntermediate:Me.relocate?.bind(this,A,g),commit:a((C,B)=>{if(Go(C,B,T?.nodeId)<=0)return;let D=Be.getResidencyRecord(T.residencyId),F=0,W=null,v=B?.value;if(D&&!D.includes(server.hostname)){for(let q in r)W||(W={}),W[q]=v[q];F=Zn}else W=v;ke.default.trace?.(`Relocating entry id: ${g}, timestamp: ${new Date(C).toISOString()}`),y(g,W,B,C,F,_,{user:A.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(g,T){if(this.getResidencyById)return!1;let A={previousResidency:this.getResidencyRecord(g.residencyId),isRelocation:!0},N=el(this.getResidency(T.value,A)),C;if(N){if(!N.includes(server.hostname))return!1;C=tl(N)}let B=0;return ke.default.debug?.("Performing a relocate of an entry",g.key,T.value,N),y(g.key,T.value,g,g.version,B,!0,{residencyId:C,expiresAt:T.expiresAt},"relocate",!1,null),!0}static evict(g,T,A){let N;if(!((w||_)&&(!T||(N=i.getEntry(g),!N||!T)||N.version!==A))){if(w){if(i.hasLock(g,N.version))return;let C;for(let B in r)C||(C={}),C[B]=T[B];if(C)return y(g,C,N,A,Pu,null,null,null,!0)}return i.ifVersion(g,A,()=>{Xc(g,T,null)}),Ou(i,N??i.getEntry(g),A)}}lock(){throw new Error("Not yet implemented")}static operation(g,T){return g.table||=s,g.schema||=c,global.operation(g,T)}put(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!0);else{let A=!0;if(g==null)throw new TypeError("Can not put a record without a target");let N=this.getContext();return g.checkPermission&&(A=this.allowUpdate(N.user,T,N)),oi(A,C=>{if(!C)throw new ft.AccessViolation(N.user);if(Array.isArray(T))for(let B of T){let D=B[t];this._writeUpdate(D,B,!0)}else{let B=ci(g);this._writeUpdate(B,T,!0)}})}}create(g,T){let A=!0,N=this.getContext();if(!T&&!(g instanceof URLSearchParams)&&(T=g,g=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return g?.checkPermission&&(A=this.allowCreate(N.user,T,N)),oi(A,C=>{if(!C)throw new ft.AccessViolation(N.user);let B=ci(g)??T[t];if(B===void 0)B=this.constructor.getNewId(),T[t]=B;else if(i.get(B))throw new ft.ClientError("Record already exists",409);return this._writeUpdate(B,T,!0),T})}patch(g,T){if(T===void 0||T instanceof URLSearchParams)this.update(g,!1);else{let A=this.update(g,T);if(A?.then)return A.then(()=>{})}}_writeUpdate(g,T,A,N){let C=this.getContext(),B=yt(C);Fo(g);let D=this.#n??i.getEntry(g);this.#s=A?M6:mwe;let F=a(v=>A?v.put?()=>v.put(C,g,T):null:v.patch?()=>v.patch(C,g,T):v.put?()=>v.put(C,g,Tl(this)):null,"writeToSources"),W={key:g,store:i,entry:D,nodeName:C?.nodeName,validate:a(v=>{T||(T=this.#t),A||T&&Rg(this.#t===T?this:T)?C?.source||(B.checkOverloaded(),this.validate(T,!A),J&&(T[J.name]=J.type==="Date"?new Date(v):J.type==="String"?new Date(v).toISOString():v),A&&(t&&T[t]!==g&&(T[t]=g),X&&(D?.value?T[X.name]=D?.value[X.name]:T[X.name]=X.type==="Date"?new Date(v):X.type==="String"?new Date(v).toISOString():v),T=Tl(T))):B.removeWrite(W)},"validate"),before:F(Se),beforeIntermediate:rl(T,F(Me)),commit:a((v,q,O)=>{if(O){if(C&&q?.version>(C.lastModified||0)&&(C.lastModified=q.version),this.#n=q,q?.value&&q.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");A||(this.#e=q?.value??null)}this.#t=void 0,this.#r=v;let G=q?.value,V;this.#s=0;let P=!1,me=Go(v,q,N?.nodeId),ne,he=A?"put":"patch",K;N?.residencyId!=null&&(K=N.residencyId);let Z=C?.expiresAt??(h?h+Date.now():-1);if(me<=0){if(_){let Pe=q.localTime,Je=q.version;ke.default.trace?.("Applying CRDT update to record with id: ",g,"txn time",new Date(v),"applying later update from:",new Date(Je),"local recorded time",new Date(Pe));let mt=[];for(;Pe>v||Je>=v&&Pe>0;){let ye=l.get(Pe);if(!ye)break;let Te=It(ye);if(Je=Te.version,Je>=v){if(Je===v){if(me=Go(v,{version:Je,localTime:Pe},N?.nodeId),me===0)return pe(!1);if(me>0){Pe=Te.previousLocalTime;continue}}if(Te.type==="patch")mt.push(Te),ne=T;else if(Te.type==="put"||Te.type==="delete")return pe(!1)}Pe=Te.previousLocalTime}Pe||ke.default.debug?.("No further audit history, applying incremental updates based on available history",g,"existing version preserved",q),mt.sort((ye,Te)=>ye.version-Te.version);for(let ye of mt){let Te=ye.getValue(i);if(ke.default.debug?.("Rebuilding update with future patch:",new Date(ye.version),Te,ye),V=lg(V??T,Te,A),!V)return pe(!1)}}else{if(A)return pe(!1);V=lg(V??T,G,A),ke.default.debug?.("Rebuilding update without audit:",V)}ke.default.trace?.("Rebuilt record to save:",V," is full update:",A)}let ue;if(A&&!V?ue=T:this.constructor.loadAsInstance===!1?ue=Tl(G,V??T):(this.#e=G,ue=Tl(this,V??T)),this.#e=ue,ue&&ue.getRecord)throw new Error("Can not assign a record to a record, check for circular references");if(K==null){D?.residencyId&&(C.previousResidency=Be.getResidencyRecord(D.residencyId));let Pe=el(Be.getResidency(ue,C));if(Pe&&!Pe.includes(server.hostname))if(ne??=ue,P=!0,Be.getResidencyById)ue=void 0;else{ue=null;for(let Je in r)ue||(ue={}),ue[Je]=ne[Je]}K=tl(Pe)}A||(ne=T),ke.default.trace?.(`Saving record with id: ${g}, timestamp: ${new Date(v).toISOString()}${Z?", expires at: "+new Date(Z).toISOString():""}${q?", replaces entry from: "+new Date(q.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ue).slice(0,100)}catch{return""}})()),Xc(g,G,ue),pe(!0),C.expiresAt&&Nr();function pe(Pe){y(g,Pe?ue:void 0,Pe?q:{...q,value:void 0},v,P?Zn:0,_,{omitLocalRecord:P,user:C?.user,residencyId:K,expiresAt:Z,nodeId:N?.nodeId,originatingOperation:C?.originatingOperation,tableToTrack:c==="system"?null:s},he,!1,Pe?ne:ne??T)}a(pe,"writeCommit")},"commit")};B.addWrite(W)}async delete(g){if(Uu(g)){g.select=["$id"];for await(let T of this.search(g))this._writeDelete(T.$id);return!0}if(g){let T=!0,A=this.getContext();return g.checkPermission&&(T=this.allowDelete(A.user,g,A)),oi(T,N=>{if(!N)throw new ft.AccessViolation(A.user);let C=ci(g);return this._writeDelete(C),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(g,T){let A=yt(this.getContext());Fo(g);let N=this.getContext();return A.addWrite({key:g,store:i,entry:this.#n,nodeName:N?.nodeName,before:Se.delete?.bind(this,N,g),beforeIntermediate:Me.delete?.bind(this,N,g),commit:a((C,B,D)=>{let F=B?.value;D&&(N&&B?.version>(N.lastModified||0)&&(N.lastModified=B.version),Be._updateResource(this,B)),!(Go(C,B,T?.nodeId)<=0)&&(Xc(g,F),ke.default.trace?.(`Deleting record with id: ${g}, txn timestamp: ${new Date(C).toISOString()}`),_||R?(y(g,null,B,C,0,_,{user:N?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),_||Nr()):Ou(i,B))},"commit")}),!0}search(g){let T=this.getContext(),A=yt(T);if(!g)throw new Error("No query provided");if(g.parseError)throw g.parseError;if(g.checkPermission&&!this.allowRead(T.user,g,T))throw new ft.AccessViolation(T.user);T&&(T.lastModified=lwe);let N=g.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(g)?g:g[Symbol.iterator]?Array.from(g):[];let C=g.id??this.getId();C&&(N=[{attribute:null,comparator:Array.isArray(C)?"prefix":"starts_with",value:C}].concat(N));let B,D={};function F(Z,ue){switch(ue){case"and":case void 0:if(Z.length<1)throw new Error('An "and" operator requires at least one condition');break;case"or":if(Z.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ue)}for(let pe of Z){if(pe.conditions){pe.conditions=F(pe.conditions,pe.operator);continue}let Pe=pe[0]??pe.attribute,Je=Pe==null?M:Do(S,Pe);if(Je)(Je.type||MM[pe.comparator])&&(pe[1]===void 0?pe.value=v(pe.value,Je):pe[1]=v(pe[1],Je));else if(Pe!=null&&!g.allowConditionsOnDynamicAttributes)throw(0,ft.handleHDBError)(new Error,`${Pe} is not a defined attribute`,404);if(pe.chainedConditions)if(pe.chainedConditions.length===1&&(!pe.operator||pe.operator=="and")){let mt=pe.chainedConditions[0],ye,Te;if(mt.comparator==="gt"||mt.comparator==="greater_than"||mt.comparator==="ge"||mt.comparator==="greater_than_equal"?(ye=pe,Te=mt):(ye=mt,Te=pe),ye.comparator!=="lt"&&ye.comparator!=="less_than"&&ye.comparator!=="le"&&ye.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Rt=Te.comparator==="ge"||Te.comparator==="greater_than_equal",_t=ye.comparator==="le"||ye.comparator==="less_than_equal";pe.comparator=(Rt?"ge":"gt")+(_t?"le":"lt"),pe.value=[Te.value,ye.value]}else throw new Error("Multiple chained conditions are not currently supported")}return Z}a(F,"prepareConditions");function W(Z,ue){if(g.enforceExecutionOrder)return Z;for(let pe of Z)pe.conditions&&(pe.conditions=W(pe.conditions,pe.operator));return Z.length>1&&ue!=="or"?owe(Z,yb(Be)):Z}a(W,"orderConditions");function v(Z,ue){return Array.isArray(Z)?Z.map(pe=>bb(pe,ue)):bb(Z,ue)}a(v,"coerceTypedValues");let q=g.operator;(N.length>0||q)&&(N=F(N,q));let O=typeof g.sort=="object"&&g.sort,G;if(O&&q!=="or"){let Z=O.attribute;if(Z==null)throw new ft.ClientError("Sort requires an attribute");if(B=N.find(ue=>zf(ue.attribute)===zf(Z)),!B){let ue=Do(S,Z);if(!ue)throw(0,ft.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not a defined attribute`,404);if(ue.indexed)B={...O,comparator:"sort"},N.push(B);else if(N.length===0&&!g.allowFullScan)throw(0,ft.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not indexed and not combined with any other conditions`,404)}B&&(B.descending=!!O.descending)}N=W(N,q),O&&(B&&N[0]===B?O.next&&(G={dbOrderedAttribute:O.attribute,attribute:O.next.attribute,descending:O.next.descending,next:O.next.next}):(B&&N.splice(N.indexOf(B),1),G=O));let V=g.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),g.explain)return{conditions:N,operator:q,postOrdering:G,selectApplied:!!V};let P=A.useReadTxn(),me=UM(N,q,Be,P,g,T,(Z,ue)=>lm(Z,V,T,P,ue),D),ne=g.ensureLoaded!==!1,he=Be.transformEntryForSelect(V,T,P,D,ne,!0),K=Be.transformToOrderedSelect(me,V,G,T,P,he);return(g.offset||g.limit!==void 0)&&(K=K.slice(g.offset,g.limit!==void 0?(g.offset||0)+g.limit:void 0)),K.onDone=()=>{K.onDone=null,A.doneReadTxn()},K.selectApplied=!0,K.getColumns=()=>{if(V){let Z=[];for(let ue of V)ue==="*"?Z.push(...S.map(pe=>pe.name)):Z.push(ue.name||ue);return Z}return S.filter(Z=>!Z.computed&&!Z.relationship).map(Z=>Z.name)},K}static transformToOrderedSelect(g,T,A,N,C,B){let D=new u_;if(A){g=lm(g,T,N,C,null);let F;D.iterate=function(){let v,q=g[Symbol.asyncIterator]?g[Symbol.asyncIterator]():g[Symbol.iterator](),O,G=A.dbOrderedAttribute,V,P,me=!0;function ne(K){let Z=K.next&&ne(K.next),ue=K.descending;return N.sort=K,(pe,Pe)=>{let Je=Mn(pe,K.attribute,N),mt=Mn(Pe,K.attribute,N),ye=ue?(0,vu.compareKeys)(mt,Je):(0,vu.compareKeys)(Je,mt);return ye===0?Z?.(pe,Pe)||0:ye}}a(ne,"createComparator");let he=ne(A);return{async next(){let K;if(v)if(K=v.next(),K.done){if(O)return D.onDone&&D.onDone(),K}else return{value:await B.call(this,K.value)};F=[],V&&F.push(V);do if(K=await q.next(),K.done){if(O=!0,F.length)break;return D.onDone&&D.onDone(),K}else{let Z=K.value;if(Z?.then&&(Z=await Z),G){let ue=Mn(Z,G,N);if(me)me=!1,P=ue;else if(ue!==P){P=ue,V=Z;break}}F.push(Z)}while(!0);return A.isGrouped,F.sort(he),v=F[Symbol.iterator](),K=v.next(),K.done?(D.onDone&&D.onDone(),K):{value:await B.call(this,K.value)}},return(){return D.onDone&&D.onDone(),q.return()},throw(){return D.onDone&&D.onDone(),q.throw()}}};let W=a(v=>{if(typeof T=="object"&&Array.isArray(v.attribute))for(let q=0;q<T.length;q++){let O=T[q],G;if(O.name===v.attribute[0]){for(G=O.sort||(O.sort={});G.next;)G=G.next;G.attribute=v.attribute.slice(1),G.descending=v.descending}else O===v.attribute[0]&&(T[q]=G={name:O,sort:{attribute:v.attribute.slice(1),descending:v.descending}})}v.next&&W(v.next)},"applySortingOnSelect");W(A)}else D.iterate=(g[Symbol.asyncIterator]||g[Symbol.iterator]).bind(g),D=D.map(function(F){try{let W=B.call(this,F);return typeof W?.catch=="function"?W.catch(v=>{throw v.partialObject={[t]:F.key},v}):W}catch(W){throw W.partialObject={[t]:F.key},W}});return D}static transformEntryForSelect(g,T,A,N,C,B){let D;C&&w&&!(typeof g=="string"?[g]:g)?.every(v=>{let q;return typeof v=="object"?q=v.name:q=v,r[q]||q===t})&&(D=!0);let F,W=a(function(v){let q;if(T?.transaction?.stale&&(T.transaction.stale=!1),v!=null){if(q=v.deref?v.deref():v.value,!q&&(v.key===void 0||v.deref)||v.metadataFlags&Zn){if(v.metadataFlags&Zn&&T.replicateFrom===!1&&B&&v.residencyId)return Wc.SKIP;if(v=Zc(v.key??v,T,{transaction:A,lazy:g?.length<4,ensureLoaded:C},this?.isSync,O=>O),v?.then)return v.then(W.bind(this));q=v?.value}if(D&&v?.metadataFlags&(Zn|Pu)||v?.expiresAt!=null&&v?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:v.key,message:"This entry has expired"};let O=Ho(v.key??v,v,T);if(O?.then)return O.then(W)}}if(q==null)return B?Wc.SKIP:q;if(g&&!(g[0]==="*"&&g.length===1)){let O,G=a((P,me)=>{let ne;typeof P=="object"?ne=P.name:ne=P;let he=Pt?.[ne],K;if(he){let Z=N?.[ne];if(Z)if(Z.hasMappings){let pe=he.from?q[he.from]:zf(v.key);K=Z.get(pe),K||(K=[])}else K=Z.fromRecord?.(q);else K=he(q,T,v,!0);let ue=a(pe=>{if(he.directReturn)return me(pe,ne);if(pe&&typeof pe=="object"){let Pe=he.definition?.tableClass||Be;F||(F={});let Je=F[ne]||(F[ne]=Pe.transformEntryForSelect(ne===P?null:P.select||(Array.isArray(P)?P:null),T,A,Z,C));if(Array.isArray(pe)){let mt=[],ye=Pe.transformToOrderedSelect(pe,P.select,typeof P.sort=="object"&&P.sort,T,A,Je)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Te=a(_t=>{for(;!_t.done;){if(_t?.then)return _t.then(Te);mt.push(_t.value),_t=ye.next()}me(mt,ne)},"nextValue"),Rt=Te(ye.next());Rt&&(O||(O=[]),O.push(Rt));return}else if(pe=Je.call(this,pe),pe?.then){O||(O=[]),O.push(pe.then(mt=>me(mt,ne)));return}}me(pe,ne)},"handleResolvedValue");K?.then?(O||(O=[]),O.push(K.then(ue))):ue(K);return}else K=q[ne],K&&typeof K=="object"&&ne!==P&&(K=Be.transformEntryForSelect(P.select||P,T,A,null)({value:K}));me(K,ne)},"selectAttribute"),V;if(typeof g=="string")G(g,P=>{V=P});else if(Array.isArray(g))if(g.asArray)V=[],g.forEach((P,me)=>{P==="*"?g[me]=q:G(P,ne=>V[me]=ne)});else{V={};let P=g.forceNulls;for(let me of g)if(me==="*")for(let ne in q)V[ne]=q[ne];else G(me,(ne,he)=>{ne===void 0&&P&&(ne=null),V[he]=ne})}else throw new ft.ClientError("Invalid select"+g);return O?Promise.all(O).then(()=>V):V}return q},"transform");return W}async subscribe(g){if(!l)throw new Error("Can not subscribe to a table without an audit log");_||ze({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),g||(g={});let T=!g.rawEvents,A=[],N=HC(Be,this.getId()??null,function(D,F,W,v){try{let q=F.getValue?.(i,T),O=F.type;if(!q&&O==="patch"&&T){let V=i.getEntry(D);V?.version===F.version?q=V.value:q=F.getValue?.(i,!0,W),O="put"}let G={id:D,localTime:W,value:q,version:F.version,type:O,beginTxn:v};A?A.push(G):(c!=="system"&&qe(F.size??1,"db-message",s,null),this.send(G))}catch(q){ke.default.error?.(q)}},g.startTime||0,g),C=(async()=>{this.isCollection&&(N.includeDescendants=!0,g.onlyChildren&&(N.onlyChildren=!0)),g.supportsTransactions&&(N.supportsTransactions=!0);let D=this.getId(),F=g.previousCount;F>1e3&&(F=1e3);let W=g.startTime;if(this.isCollection){if(W){if(F)throw new ft.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:q}of l.getRange({start:W,exclusiveStart:!0,snapshot:!1})){let O=It(q);if(O.tableId!==n)continue;let G=O.recordId;if(D==null||F6(D,G)){let V=O.getValue(i,T,v);if(B({id:G,localTime:v,value:V,version:O.version,type:O.type,size:O.size}),N.queue?.length>x6&&await N.waitForDrain()===!1)return}N.startTime=v}}else if(F){let v=[];for(let{key:q,value:O}of l.getRange({start:"z",end:!1,reverse:!0}))try{let G=It(O);if(G.tableId!==n)continue;let V=G.recordId;if(D==null||F6(D,V)){let P=G.getValue(i,T,q);if(v.push({id:V,localTime:q,value:P,version:G.version,type:G.type}),--F<=0)break}}catch(G){ke.default.error("Error getting history entry",q,G)}for(let q=v.length;q>0;)B(v[--q]);v[0]&&(N.startTime=v[0].localTime)}else if(!g.omitCurrent){for(let{key:v,value:q,version:O,localTime:G,size:V}of i.getRange({start:D??!1,end:D==null?void 0:[D,vu.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(q&&(B({id:v,localTime:G,value:q,version:O,type:"put",size:V}),N.queue?.length>x6&&await N.waitForDrain()===!1))return}}else{F&&!W&&(W=0);let v=this.#n?.localTime;if(v===LM&&(i.cache?.delete(D),this.#n=i.getEntry(D),ke.default.trace?.("re-retrieved record",v,this.#n?.localTime),v=this.#n?.localTime),ke.default.trace?.("Subscription from",W,"from",D,v),W<v){let q=[],O=v;do{let G=l.get(O);if(G){g.omitCurrent=!0;let V=It(G),P=V.getValue(i,T,O);T&&(V.type="put"),q.push({id:D,value:P,localTime:O,...V}),O=V.previousLocalTime}else break;F&&F--}while(O>W&&F!==0);for(let G=q.length;G>0;)B(q[--G]);N.startTime=v}!g.omitCurrent&&this.doesExist()&&B({id:D,localTime:v,value:this.#e,version:this.#r,type:"put"})}for(let v of A)B(v);A=null})();function B(D){c!=="system"&&qe(D.size??1,"db-message",s,null),N.send(D)}return a(B,"send"),g.listener&&N.on("data",g.listener),N}static subscribeOnThisThread(g,T){return g===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(g,T,A){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),g,T);else{let N=!0,C=this.getContext();return g.checkPermission&&(N=this.allowCreate(C.user,T,C)),oi(N,B=>{if(!B)throw new ft.AccessViolation(C.user);let D=ci(g);this._writePublish(D,T,A)})}}_writePublish(g,T,A){let N=yt(this.getContext());g??=null,g!==null&&Fo(g);let C=this.getContext();N.addWrite({key:g,store:i,entry:this.#n,nodeName:C?.nodeName,validate:a(()=>{C?.source||(N.checkOverloaded(),this.validate(T))},"validate"),before:Se.publish?.bind(this,C,g,T),beforeIntermediate:rl(T,Me.publish?.bind(this,C,g,T)),commit:a((B,D,F)=>{D===void 0&&R&&!_&&Nr(),ke.default.trace?.(`Publishing message to id: ${g}, timestamp: ${new Date(B).toISOString()}`),y(g,D?.value??null,D,D?.version||B,0,!0,{user:C?.user,residencyId:A?.residencyId,expiresAt:C?.expiresAt,nodeId:A?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(g,T){let A,N=a((C,B,D)=>{if(B.type&&C!=null)if(T&&C.__op__&&(C=C.value),B.properties){typeof C!="object"&&(A||(A=[])).push(`Value ${ai(C)} in property ${D} must be an object${B.type?" ("+B.type+")":""}`);let F=B.properties;for(let W=0,v=F.length;W<v;W++){let q=F[W];if(q.relationship||q.computed){g.hasOwnProperty(q.name)&&(A||(A=[])).push(`Computed property ${D}.${q.name} may not be directly assigned a value`);continue}let O=N(C[q.name],q,D+"."+q.name);O&&(C[q.name]=O)}if(B.sealed&&C!=null&&typeof C=="object")for(let W in C)F.find(v=>v.name===W)||(A||(A=[])).push(`Property ${W} is not allowed within object in property ${D}`)}else switch(B.type){case"Int":(typeof C!="number"||C>>0!==C)&&(A||(A=[])).push(`Value ${ai(C)} in property ${D} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof C!="number"||!(Math.floor(C)===C&&Math.abs(C)<=9007199254740992))&&(A||(A=[])).push(`Value ${ai(C)} in property ${D} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof C!="number"&&(A||(A=[])).push(`Value ${ai(C)} in property ${D} must be a number`);break;case"ID":typeof C=="string"||C?.length>0&&C.every?.(F=>typeof F=="string")||(A||(A=[])).push(`Value ${ai(C)} in property ${D} must be a string, or an array of strings`);break;case"String":typeof C!="string"&&(A||(A=[])).push(`Value ${ai(C)} in property ${D} must be a string`);break;case"Boolean":typeof C!="boolean"&&(A||(A=[])).push(`Value ${ai(C)} in property ${D} must be a boolean`);break;case"Date":if(!(C instanceof Date)){if(typeof C=="string"||typeof C=="number")return new Date(C);(A||(A=[])).push(`Value ${ai(C)} in property ${D} must be a Date`)}break;case"BigInt":if(typeof C!="bigint"){if(typeof C=="string"||typeof C=="number")return BigInt(C);(A||(A=[])).push(`Value ${ai(C)} in property ${D} must be a bigint`)}break;case"Bytes":if(!(C instanceof Uint8Array)){if(typeof C=="string")return Buffer.from(C);(A||(A=[])).push(`Value ${ai(C)} in property ${D} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(C instanceof Bs)){if(typeof C=="string"&&(C=Buffer.from(C)),C instanceof Buffer)return createBlob(C,{type:"text/plain"});(A||(A=[])).push(`Value ${ai(C)} in property ${D} must be a Blob`)}break;case"array":if(Array.isArray(C)){if(B.elements)for(let F=0,W=C.length;F<W;F++){let v=C[F],q=N(v,B.elements,D+"[*]");q&&(C[F]=q)}}else(A||(A=[])).push(`Value ${ai(C)} in property ${D} must be an Array`);break}B.nullable===!1&&C==null&&(A||(A=[])).push(`Property ${D} is required (and not does not allow null values)`)},"validateValue");for(let C=0,B=S.length;C<B;C++){let D=S[C];if(D.relationship||D.computed){Object.hasOwn(g,D.name)&&(A||(A=[])).push(`Computed property ${D.name} may not be directly assigned a value`);continue}if(!T||D.name in g){let F=N(g[D.name],D,D.name);F!==void 0&&(g[D.name]=F)}}if(f)for(let C in g)S.find(B=>B.name===C)||(A||(A=[])).push(`Property ${C} is not allowed`);if(A)throw new ft.ClientError(A.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return w?!!this.#i:void 0}static async addAttributes(g){let T=S.slice(0);for(let A of g){if(!A.name)throw new ft.ClientError("Attribute name is required");if(A.name.match(/[`/]/))throw new ft.ClientError("Attribute names cannot include backticks or forward slashes");awe(A.name),T.push(A)}return ze({table:s,database:c,schemaDefined:u,attributes:T}),Be.indexingOperation}static async removeAttributes(g){let T=S.filter(A=>!g.includes(A.name));return ze({table:s,database:c,schemaDefined:u,attributes:T}),Be.indexingOperation}static getSize(){let g=i.getStats();return(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getAuditSize(){let g=l?.getStats();return g&&(g.treeBranchPageCount+g.treeLeafPageCount+g.overflowPages)*g.pageSize}static getStorageStats(){let g=i.env.path,T=HM.default.statfsSync?.(g)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(g){let T=i.getStats().entryCount,A=1e3/2,N=performance.now(),C=Math.floor(T/2),B=g?.exactCount,D=0,F=0,W;for(let{value:v}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(v!=null&&D++,F++,await Yc(),!B&&F<C&&performance.now()-N>A){W=F;break}if(W){let v=D;D=0;for(let{value:K}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:W,snapshot:!1}))K!=null&&D++,await Yc();let q=W*2,O=(D+v)/q,G=Math.pow((D-v+1)/W/2,2)+O*(1-O)/q,V=Math.max(Math.sqrt(G)*T,1),P=Math.round(O*T),me=Math.max(P-1.96*V,D+v),ne=Math.min(P+1.96*V,T),he=Math.pow(10,Math.round(Math.log10(V)));return he>P&&(he=he/10),D=Math.round(P/he)*he,{recordCount:D,estimatedRange:[Math.round(me),Math.round(ne)]}}return{recordCount:D}}static updatedAttributes(){Pt=this.propertyResolvers={$id:a((g,T,A)=>({value:A.key}),"$id"),$updatedtime:a((g,T,A)=>A.version,"$updatedtime"),$updatedTime:a((g,T,A)=>A.version,"$updatedTime"),$expiresAt:a((g,T,A)=>A.expiresAt,"$expiresAt"),$record:a((g,T,A)=>A?{value:g}:g,"$record"),$distance:a((g,T,A)=>A&&(A.distance??T?.vectorDistances?.get(A)),"$distance")};for(let g of this.attributes){g.isPrimaryKey&&(M=g),g.resolve=null;let T=g.relationship,A=g.computed;if(T)if(g.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),A&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Ka=!0,T.to)g.elements?.definition?(Pt[g.name]=g.resolve=(N,C,B,D)=>{let F=N[T.from?T.from:t],W=g.elements.definition.tableClass;return D?jf({attribute:T.to,value:F},yt(C).getReadTxn(),!1,W,!1).map(v=>v&&v.key!==void 0?v:W.primaryStore.getEntry(v,{transaction:yt(C).getReadTxn()})).asArray:W.search([{attribute:T.to,value:F}],C).asArray},g.set=()=>{},g.resolve.definition=g.elements.definition,g.resolve.to=T.to,T.from&&(g.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${g.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let N=g.definition||g.elements?.definition;N?(Pt[g.name]=g.resolve=(C,B,D,F)=>{let W=C[T.from];if(W===void 0)return;if(g.elements){let q,O=W?.map(G=>{let V=N.tableClass.primaryStore[F?"getEntry":"get"](G,{transaction:yt(B).getReadTxn()});return V?.then&&(q=!0),Be.loadAsInstance===!1&&Object.freeze(F?V?.value:V),V});return T.filterMissing?q?Promise.all(O).then(G=>G.filter(k6)):O.filter(k6):q?Promise.all(O):O}let v=N.tableClass.primaryStore[F?"getEntry":"get"](W,{transaction:yt(B).getReadTxn()});return Be.loadAsInstance===!1&&Object.freeze(F?v?.value:v),v},g.set=(C,B)=>{if(Array.isArray(B)){let D=B.map(F=>F.getId?.()||F[N.tableClass.primaryKey]);C[T.from]=D}else{let D=B.getId?.()||B[N.tableClass.primaryKey];C[T.from]=D}},g.resolve.definition=g.definition||g.elements?.definition,g.resolve.from=T.from):console.error(`The relationship property "${g.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${g.name}" in table "${s}" must use either "from" or "to" arguments`);else if(A)typeof A.from=="function"&&this.setComputedAttribute(g.name,A.from),Pt[g.name]=g.resolve=(N,C,B)=>{let D=typeof A.from=="string"?N[A.from]:N,F=this.userResolvers[g.name];if(F)return F(D,C,B);ke.default.warn(`Computed attribute "${g.name}" does not have a function assigned to it. Please use setComputedAttribute('${g.name}', resolver) to assign a resolver function.`),this.userResolvers[g.name]=()=>{}},g.resolve.directReturn=!0;else if(r[g.name]?.customIndex?.propertyResolver){let N=r[g.name].customIndex;Pt[g.name]=(C,B,D)=>{let F=C[g.name];return N.propertyResolver(F,B,D)},Pt[g.name].directReturn=!0}}cp(this,this),cp(cm,this,!0);for(let g of S){let T=g.name;g.resolve&&(Object.defineProperty(i.encoder.structPrototype,T,{get(){return g.resolve(this,KE.getStore())},set(A){return g.set(this,A)},configurable:!0,enumerable:g.enumerable}),g.enumerable&&!i.encoder.structPrototype.toJSON&&Object.defineProperty(i.encoder.structPrototype,"toJSON",{configurable:!0,value(){let A={};for(let N in this)A[N]=this[N];return A}}))}}static setComputedAttribute(g,T){let A=Do(S,g);if(!A){console.error(`The attribute "${g}" does not exist in the table "${s}"`);return}if(!A.computed){console.error(`The attribute "${g}" is not defined as computed in the table "${s}"`);return}this.userResolvers[g]=T}static async deleteHistory(g=0,T=!1){let A;for(let{key:N,value:C}of l.getRange({start:0,end:g}))await Yc(),It(C).tableId===n&&(A=mb(l,N,C));if(T)for(let N of i.getRange({start:0,versions:!0})){let{value:C,localTime:B}=N;await Yc(),C===null&&B<g&&(A=Ou(i,N))}await A}static async*getHistory(g=0,T=1/0){for(let{key:A,value:N}of l.getRange({start:g||1,end:T})){await Yc();let C=It(N);C.tableId===n&&(yield{id:C.recordId,localTime:A,version:C.version,type:C.type,value:C.getValue(i,!0,A),user:C.user,operation:C.originatingOperation})}}static async getHistoryOfRecord(g){let T=[];if(g==null)throw new Error("An id is required");let A=i.getEntry(g);if(!A)return T;let N=A.localTime;if(!N)throw new Error("The entry does not have a local audit time");let C=0;do{await Yc();let B=l.get(N);if(B){let D=It(B);T.push({id:D.recordId,localTime:N,version:D.version,type:D.type,value:D.getValue(i,!0,N),user:D.user}),N=D.previousLocalTime}else break}while(C<1e3&&N);return T.reverse()}static cleanup(){H?.remove()}}let f_=$R(async(z,g,T)=>{for(let A of Be.sources)if(A.get&&(!A.get.reliesOnPrototype||A.prototype.get)){if(A.available?.(T)===!1)continue;g.source=A;let N=await A.get(z,g);if(N)return N}},()=>{throw new ft.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});return Be.updatedAttributes(),h&&Be.setTTLExpiration(h/1e3),Y&&dm(),Be;function Xc(z,g,T){let A;for(let N in r){let C=r[N],B=C.isIndexing,D=Pt[N],F=T&&(D?D(T):T[N]),W=g&&(D?D(g):g[N]);if(F===W&&!B)continue;if(C.customIndex){C.customIndex.index(z,F,W);continue}A=!0;let v=C.indexNulls,q=(0,WE.getIndexedValues)(F,v),O=(0,WE.getIndexedValues)(W,v);if(O?.length>0){let G=new Set(O);if(q=q?q.filter(V=>{if(G.has(V))G.delete(V);else return!0}):[],O=Array.from(G),(O.length>0||q.length>0)&&v6){let V=O.concat(q).map(P=>({key:P,value:z}));C.prefetch(V,B6)}for(let V=0,P=O.length;V<P;V++)C.remove(O[V],z)}else q?.length>0&&v6&&C.prefetch(q.map(G=>({key:G,value:z})),B6);if(q)for(let G=0,V=q.length;G<V;G++)C.put(q[G],z)}return A}a(Xc,"updateIndices");function Fo(z){switch(typeof z){case"number":return!0;case"string":if(z.length<659)return!0;if(z.length>U6)throw new Error("Primary key size is too large: "+z.length);break;case"object":if(z===null)throw new Error("Invalid primary key of null");break;case"bigint":if(z<2n**64n&&z>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof z)}if((0,vu.writeKey)(z,pwe,0)>U6)throw new Error("Primary key size is too large: "+z.length);return!0}a(Fo,"checkValidId");function ci(z){return typeof z=="object"&&z?z.id:z}a(ci,"requestTargetToId");function Uu(z){return typeof z=="object"&&z&&z.isCollection}a(Uu,"isSearchTarget");function Zc(z,g,T,A,N){if(Be.getResidencyById&&T.ensureLoaded&&g?.replicateFrom!==!1){let B=el(Be.getResidencyById(z));if(B&&!B.includes(server.hostname)&&I)return I({key:z,residency:B}).then(N)}let C=a(()=>{if(g?.transaction?.stale&&(g.transaction.stale=!1),T.transaction?.isDone)return N(null,z);let B=i.getEntry(z,T);return c!=="system"&&(T.type==="read"||!T.type)&&(q6.default.trace?.("Recording db-read action for",`${c}.${s}`),qe(B?.size??1,"db-read",s,null)),g?._freezeRecords&&Object.freeze(B?.value),B?.residencyId&&B.metadataFlags&Zn&&I&&T.ensureLoaded&&g?.replicateFrom!==!1?I(B).then(D=>N(D,z),D=>(ke.default.error?.("Error loading remote record",z,B,T,D),N(null,z))):(B&&g&&(B?.version>(g.lastModified||0)&&(g.lastModified=B.version),B?.localTime&&!g.lastRefreshed&&(g.lastRefreshed=B.localTime)),N(B,z))},"whenPrefetched");return A?C():oe>0?(oe--,C()):new Promise((B,D)=>{oe===0?(oe--,i.prefetch([z],()=>{F(),W()})):(ae.push(z),le.push(W),ae.length>d_&&(oe--,F()));function F(){if(ae.length>0){let v=le;i.prefetch(ae,()=>{oe===-1?F():oe++;for(let q of v)q()}),ae=[],le=[],Ee>2&&Ee--}else oe=Ee,Ee<am&&Ee++}a(F,"prefetch");function W(){try{B(C())}catch(v){D(v)}}a(W,"load")})}a(Zc,"loadLocalRecord");function ko(z,g){let T=g?.checkPermission;if(typeof T!="object"){if(!z?.role)return;T=z.role.permission}if(T.super_user)return hwe;let A=T[c],N,C=A?.tables;if(C)return C[s];if(c==="data"&&(N=T[s])&&!N.tables)return N}a(ko,"getTablePermissions");function Ho(z,g,T,A){if(w){let N=!1;if(T.noCache?N=!0:(g?(!g.value||g.metadataFlags&(Zn|Pu)||g.expiresAt!=null&&g.expiresAt<Date.now())&&(N=!0):N=!0,nn(!N,"cache-hit",s)),N){let C=um(z,g,T).then(B=>(B?.value&&B?.value.getRecord?.()&&ke.default.error?.("Can not assign a record that is already a resource"),T&&(B?.version>(T.lastModified||0)&&(T.lastModified=B.version),T.lastRefreshed=Date.now()),B));if(T?.onlyIfCached||g?.value&&A?.allowStaleWhileRevalidate?.(g,z)){if(C.catch(B=>ke.default.warn?.(B)),T?.onlyIfCached&&!A.doesExist())throw new ft.ServerError("Entry is not cached",504);return}else return C}}else if(g?.value&&g.expiresAt!=null&&g.expiresAt<Date.now())return Be.evict(g.key,g.value,g.version),g.value=null,{then(N){return N(g)}}}a(Ho,"ensureLoadedFromSource");function yt(z){let g=z?.transaction;if(g){if(!g.lmdbDb)return g.lmdbDb=i,g;do{if(g.lmdbDb?.path===i.path)return g;let T=g.next;if(!T)return g=g.next=new $o,g.lmdbDb=i,g;g=T}while(!0)}else return new M_}a(yt,"txnForContext");function Mn(z,g,T){if(!z)return;let A=(z.deref?z.deref():z.value)??i.getEntry(z.key)?.value;if(typeof g=="object"){let C=Pt,B=A;for(let D=0,F=g.length;D<F;D++){let W=g[D],v=C?.[W];B=v&&B?v(B,T,z):B?.[W],z=null,C=v?.definition?.tableClass?.propertyResolvers}return B}let N=Pt[g];return N?N(A,T,z):A[g]}a(Mn,"getAttributeValue");function lm(z,g,T,A,N){let C=N?.length,B={transaction:A,lazy:C>0||typeof g=="string"||g?.length<4,alwaysPrefetch:!0},D;function F(W,v){let q=W?.value;if(!q)return Wc.SKIP;for(let O=0;O<C;O++)if(!D?.includes(O)&&!N[O](q,W))return Wc.SKIP;return v!==void 0&&(W.key=v),W}if(a(F,"processEntry"),C>0||!z.hasEntries){let W=z.map(v=>{if(D=null,typeof v=="object"&&v?.key!==void 0)return C>0?F(v):v;if(v==null)return Wc.SKIP;for(let q=0;q<C;q++){let G=N[q].idFilter;if(G){if(!G(v))return Wc.SKIP;D||(D=[]),D.push(q)}}return Zc(v,T,B,!1,F)});return Array.isArray(z)&&(W=W.filter(v=>v!==Wc.SKIP)),W.hasEntries=!0,W}return z}a(lm,"transformToEntries");function Go(z,g,T=server.replication?.getThisNodeId(l)){if(z<=g?.version){if(g?.version===z&&T!==void 0){let A=server.replication?.exportIdMapping(l),N=g.localTime,C=N&&l.get(N);if(C){let B,D,F=It(C);for(let W in A)A[W]===T&&(B=W),A[W]===F.nodeId&&(D=W);if(B>D)return 1;if(B===D)return 0}}return-1}return 1}a(Go,"precedesExistingVersion");async function um(z,g,T){let A=g?.metadataFlags,N=g?.version,C,B;if(!i.attemptLock(z,N,()=>{clearTimeout(B);let v=i.getEntry(z);!v||!v.value||v.metadataFlags&(Zn|Pu)?C(um(z,i.getEntry(z),T)):C(v)}))return new Promise(v=>{C=v,B=setTimeout(()=>{i.unlock(z,N)},fwe)});let D=g?.value,F={requestContext:T,replacingRecord:D,replacingEntry:g,replacingVersion:N,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},W=T?.responseHeaders;return new Promise((v,q)=>{let O;oi(At(F,async G=>{let V=performance.now(),P,me,ne;try{P=await f_(z,F,g),ne=A&Zn;let K=F.lastModified||ne&&N;K||(K=(0,WE.getNextMonotonicTime)()),me=ne||K>N||!D;let Z=performance.now()-V;if(qe(Z,"cache-resolution",s,null,"success"),W&&Gp(W,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),G.timestamp=K,h&&F.expiresAt==null&&(F.expiresAt=Date.now()+h),P){if(typeof P!="object")throw new Error("Only objects can be cached and stored in tables");if(P.status>0&&P.headers)if(P.status>=300)if(P.status===304)P=D,K=N;else throw new ft.ServerError(P.body||"Error from source",P.status);else P=P.body;typeof P.toJSON=="function"&&(P=P.toJSON()),t&&P[t]!==z&&(P[t]=z)}O=!0,v({key:z,version:K,value:P})}catch(K){K.message+=` while resolving record ${z} for ${s}`,D&&((K.code==="ECONNRESET"||K.code==="ECONNREFUSED"||K.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(K.statusCode===500||K.statusCode===502||K.statusCode===503||K.statusCode===504))?(v({key:z,version:N,value:D}),ke.default.trace?.(K.message,"(returned stale record)")):q(K);let Z=performance.now()-V;qe(Z,"cache-resolution",s,null,"fail"),W&&Gp(W,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),F.transaction.abort();return}if(T?.noCacheStore||F.noCacheStore){F.transaction.abort();return}yt(F).addWrite({key:z,store:i,entry:g,nodeName:"source",before:rl(P),commit:a((K,Z)=>{if(Z?.version===N)if(Xc(z,D,P),P){Me.put?.(F,z,P),Z&&(T.previousResidency=Be.getResidencyRecord(Z.residencyId));let ue,pe=!1,Pe,Je=el(Be.getResidency(P,T));if(Je){if(!Je.includes(server.hostname))if(ue=P,pe=!0,Be.getResidencyById)P=void 0;else{P=null;for(let mt in r)P||(P={}),P[mt]=ue[mt]}Pe=tl(Je)}ke.default.trace?.(`Writing resolved record from source with id: ${z}, timestamp: ${new Date(K).toISOString()}`),y(z,P,Z,K,pe?Zn:0,_&&(me||pe)||null,{user:F?.user,expiresAt:F.expiresAt,residencyId:Pe,tableToTrack:s},"put",!!ne,ue)}else Z&&(Me.delete?.(F,z),ke.default.trace?.(`Deleting resolved record from source with id: ${z}, timestamp: ${new Date(K).toISOString()}`),_||R?y(z,null,Z,K,0,_&&me||null,{user:F?.user,tableToTrack:s},"delete",!!ne):Ou(i,Z,N))},"commit")})}),()=>{i.unlock(z,N)},G=>{i.unlock(z,N),O&&ke.default.error?.("Error committing cache update",G)})})}a(um,"getFromSource");function Wa(z){if(!z||z.user?.role?.permission?.super_user)return!0;if(z.replicateTo)throw new ft.ClientError("Can not specify replication parameters without super user permissions",403);if(z.replicatedConfirmation)throw new ft.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Wa,"checkContextPermissions");function Nr(z){let g=!1;if(z&&(z-$e>1&&(g=!0),$e=z),!(et===ns&&!g)&&(ns=et,(0,Du.getWorkerIndex)()===(0,Du.getWorkerCount)()-1))return Ot&&clearTimeout(Ot),et?new Promise(T=>{let A=new Date;A.setMonth(0),A.setDate(1),A.setHours(0),A.setMinutes(0),A.setSeconds(0);let N=et/(1+$e),C=g?Date.now():Math.ceil((Date.now()-A.getTime())/N)*N+A.getTime(),B=a(D=>{ke.default.trace?.(`Scheduled next cleanup scan at ${new Date(D)}`),Ot=setTimeout(()=>k=k.then(async()=>{if(B(Math.max(D+et,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ot);return}let F=50,W=new Array(F),v=0,q=Math.pow($e,8)*(Jf.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),O=E/Math.pow(Math.max($e,1),4);ke.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${q}, adjusted eviction ${O}ms`);function G(V,P,me,ne){let he=V+O-Date.now();if(he<0)return!0;if($e){let K=i.lastSize;return me&Zr&&El(ne,Z=>{Z.size&&(K+=Z.size)}),ke.default.trace?.(`shouldEvict adjusted ${he} ${K}, ${he*(V-P)/K} < ${q}`),he*(V-P)/K<q}return!1}a(G,"shouldEvict");try{let V=0;for(let P of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:me,value:ne,version:he,expiresAt:K,metadataFlags:Z}=P,ue;ne===null&&!_&&he+dwe<Date.now()?ue=Ou(i,P,he):K!=null&&G(K,he,Z,ne)&&(ue=Be.evict(me,ne,he),V++),ue&&(await W[v],W[v]=ue.catch(pe=>{ke.default.error?.("Cleanup error",pe)}),++v>=F&&(v=0)),await Yc()}ke.default.debug?.(`Finished cleanup scan for ${s}, evicted ${V} entries`)}catch(V){ke.default.warn?.(`Error in cleanup scan for ${s}:`,V)}T(void 0),$e=0}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");B(C)}):void 0}a(Nr,"scheduleCleanup");function xu(){H=l?.addDeleteRemovalCallback(n,i,(z,g)=>{i.remove(z,g)})}a(xu,"addDeleteRemoval");function dm(){(0,Du.getWorkerIndex)()===0&&setInterval(async()=>{if(!Jc){Jc=!0;try{let z=Y.name,g=r[z];if(!g)throw new Error(`expiresAt attribute ${Y} must be indexed`);for(let T of g.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let A of g.getValues(T)){let N=i.getEntry(A);N?.value?N.value[z]<Date.now()&&Be.evict(A,N.value,N.version):i.ifVersion(A,N?.version,()=>g.remove(T,A))}await Yc()}}catch(z){ke.default.error?.("Error in evicting old records",z)}finally{Jc=!1}}},uwe).unref()}a(dm,"runRecordExpirationEviction");function el(z){if(z!=null){if(Array.isArray(z))return z;if(typeof z=="number"){if(z>=65536)throw new Error(`Shard id ${z} must be below 65536`);let g=server.shards?.get?.(z);if(g)return ke.default.trace?.(`Shard ${z} mapped to ${g.map(T=>T.name).join(", ")}`),g.map(T=>T.name);throw new Error(`Shard ${z} is not defined`)}throw new Error(`Shard or residency list ${z} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(el,"residencyFromFunction");function tl(z){if(z){let g=z.join(","),T=d.get([Symbol.for("residency_by_set"),g]);return T||(d.put([Symbol.for("residency_by_set"),g],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],z),T)}}a(tl,"getResidencyId");function rl(z,g){let T=YI(z,i.rootStore);if(T){let A=g;return A?async()=>{await A(),await T()}:()=>T()}return g}a(rl,"preCommitBlobsForRecordBefore")}function kM(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function B6(){}function bb(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return Rb(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Rb(+e);case"Float":return e==="null"?null:Rb(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return(0,Ab.autoCastBooleanStrict)(e);case"Date":if(isNaN(e)){if(e==="null")return null;Ewe.test(e)||(e+="Z");let n=new Date(e);return Rb(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Ab.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Rb(e){if(isNaN(e))throw new SyntaxError;return e}function F6(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function oi(e,t,r){return e?.then?e.then(t,r):t(e)}function k6(e){return e!=null}function ai(e){try{return JSON.stringify(e)}catch{return e}}function _we(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Wc,WE,H6,G6,Jf,ft,jE,zE,ke,vu,Du,Ab,HM,q6,owe,awe,cwe,lwe,uwe,dwe,v6,fwe,M6,mwe,Zn,Pu,pwe,U6,x6,hwe,Ewe,Yc,sR=ie(()=>{$();Wc=require("lmdb"),WE=b(Ms()),H6=b(require("lodash")),G6=b(wm());oo();Cm();Jf=b(fe());GC();ft=b(ge()),jE=b(Wo()),zE=b(cs());Oe();ES();ke=b(pr());jI();Qa();vu=require("ordered-binary"),Du=b(at());Wi();Ab=b(de());il();Kn();ug();qp();HM=b(require("node:fs"));us();lb();q6=b(ee());$v();({sortBy:owe}=H6.default),{validateAttribute:awe}=G6.default,cwe=new Uint8Array(9);cwe[8]=192;lwe=1/0,uwe=6e4,dwe=864e5;Jf.initSync();v6=Jf.get(U.STORAGE_PREFETCHWRITES),fwe=1e4,M6=1,mwe=2,Zn=1,Pu=8,pwe=Buffer.allocUnsafeSlow(8192),U6=1978,x6=100,hwe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0};a(Ib,"makeTable");a(kM,"attributesAsObject");a(B6,"noop");Ewe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(bb,"coerceType");a(Rb,"rejectNaN");a(F6,"isDescendantId");Yc=a(()=>new Promise(setImmediate),"rest");a(oi,"when");a(k6,"exists");a(ai,"stringify");a(_we,"hasOtherProcesses")});function wb(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,o=t[s]||0,c=i-o;r+=c*c}return r}function Nb(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let o=0;o<i;o++){let c=e[o]||0,l=t[o]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var $6=ie(()=>{a(wb,"euclideanDistance");a(Nb,"cosineDistance")});var V6,K6,Zf,vo,Xf,gwe,Swe,Cb,Y6=ie(()=>{$6();V6=require("msgpackr"),K6=b(pr()),Zf=b(ge()),vo=(0,K6.loggerWithTag)("HNSW"),Xf=Symbol.for("entryPoint"),gwe=Symbol.for("key"),Swe=10,Cb=class{static{a(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=V6.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?wb:Nb,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[gwe,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let o=new Map,c,l=this.indexStore.get(Xf);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f==null){let E=Math.floor(-Math.log(Math.random())*this.mL),_={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)_[R]=[];if(this.indexStore.put(i,_),typeof i!="number")throw new Error("Invalid nodeId: "+i);vo.debug?.("setting entry point to",i),this.indexStore.put(Xf,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Swe),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);vo.debug?.("setting entry point to",i),this.indexStore.put(Xf,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let _=this.searchLayer(r,l,f,this.efConstruction,E);_=_.slice(0,this.M<<1),_.length===0&&E===0&&vo.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<_.length;S++){let{id:y,distance:I,node:w}=_[S];if(y===i)continue;let M=[];if(this.optimizeRouting){let J=!1,Y=w[E],H=1+this.optimizeRouting*(1+.5*S/this.M);for(let ae=0;ae<Y?.length;ae++){let{id:le,distance:oe}=Y[ae],Ee=1+this.optimizeRouting*(1+.5*ae/this.M);for(let Se=0;Se<R.length;Se++){let{id:Me,distance:et}=R[Se];if(Me===le){I*H>et+oe?J=!0:oe*Ee>I+et&&(M.push({fromId:Me,toId:y}),M.push({fromId:y,toId:Me}));break}}if(J)break}if(J)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:I});for(let{fromId:J,toId:Y}of M){let H=d(J);H||(H=d(J,this.indexStore.get(J)));for(let ae=0;ae<H[E].length;ae++)if(H[E][ae].id===Y){Object.isFrozen(H[E])&&(H[E]=H[E].slice()),H[E].splice(ae,1);break}}let k=c[E],X=k?.find(({id:J})=>J===y);if(X){let J=k?.indexOf(X);k.copied||(k=[...k],k.copied=!0,c[E]=k),k.splice(J,1)}else this.addConnection(y,d(y,w),i,E,I,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m]?.[0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(Xf);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);vo.debug?.("setting entry point to",l),this.indexStore.put(Xf,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));if(h)for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:_})=>_!==i),h[E]?.length===0&&(vo.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=o.get(f);return!p&&m&&(p={...m},o.set(f,p)),p}a(d,"updateNode");for(let[f,m]of o)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(Xf);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,o=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=o(t,h.vector);if(E<f||u.length<s){let _={id:p,distance:E,node:h};l.push(_),u.push(_)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let o=0;switch(i){case"lt":case"le":o=r;case"sort":break;default:throw new Zf.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Zf.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=Nb;else if(s==="euclidean")c=wb;else{if(s)throw new Zf.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Zf.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Zf.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return o&&(d=d.filter(f=>f.distance<o)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let o=this.indexStore.get(i);if(!o){vo.info?.("could not find neighbor node",o);continue}o[n]?.find(({id:l})=>l==t)||vo.info?.("asymmetry detected",o[n])}n++}}addConnection(t,r,n,s,i,o){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){vo.debug?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=o(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=o(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&vo.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?vo.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let o=s.shift(),c=this.indexStore.get(o);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let o=this.distance;s.type&&(o=s.distance==="euclidean"?wb:Nb);let c=o(s.target,t);return i.set(n,c),c}return t}}});var GM,W6=ie(()=>{Y6();GM={HNSW:Cb}});var Et={};Re(Et,{NON_REPLICATING_SYSTEM_TABLES:()=>Ob,database:()=>sd,databaseEnvs:()=>qa,databaseEventsEmitter:()=>Dn,databases:()=>xe,dropDatabase:()=>ZI,dropTableMeta:()=>Iwe,getDatabases:()=>dt,getDefaultCompression:()=>ay,getTables:()=>ywe,onRemovedDB:()=>hh,onRemovedTable:()=>wwe,onUpdatedTable:()=>Yl,readMetaDb:()=>QE,resetDatabases:()=>mf,table:()=>ze,tables:()=>yn});function ZE(e,t){let r=Mb.OpenDBIObject??Mb.default.OpenDBIObject;return new r(e,t)}function ywe(){return vb||dt(),yn||{}}function dt(){if(vb)return xe;vb=!0,rm=new Map;let e=(0,ir.getHdbBasePath)()&&(0,Jt.join)((0,ir.getHdbBasePath)(),sl),t=(0,ir.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,ir.get)(U.STORAGE_PATH)||e&&((0,Ls.existsSync)(e)?e:(0,Jt.join)((0,ir.getHdbBasePath)(),T_)),!!e){if((0,Ls.existsSync)(e))for(let r of(0,Ls.readdirSync)(e,{withFileTypes:!0})){let n=(0,Jt.basename)(r.name,".mdb");r.isFile()&&(0,Jt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&QE((0,Jt.join)(e,r.name),null,n)}if((0,Ls.existsSync)((0,tm.getBaseSchemaPath)())){for(let r of(0,Ls.readdirSync)((0,tm.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Jt.join)((0,tm.getBaseSchemaPath)(),r.name),s=(0,Jt.join)((0,tm.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Ls.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Jt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Jt.join)(s,i.name);QE((0,Jt.join)(n,i.name),(0,Jt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Ls.existsSync)(s))for(let o of(0,Ls.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Jt.extname)(o.name).toLowerCase()===".mdb"&&QE((0,Jt.join)(s,o.name),(0,Jt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,Jt.join)(c.path,(0,Jt.basename)(o+".mdb"));(0,Ls.existsSync)(l)&&QE(l,o,r,null,!0)}}for(let r in xe){let n=rm.get(r);if(n){let s=xe[r];r.includes("delete")&&Br.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Br.trace(`delete table class ${i}`),delete s[i])}else if(delete xe[r],r==="data"){for(let s in yn)delete yn[s];delete yn[Ub]}}if((0,ir.get)(U.ANALYTICS_REPLICATE)===!1?Ob.includes("hdb_analytics")||Ob.push("hdb_analytics"):(xe.system?.hdb_analytics?.enableAuditing(),xe.system?.hdb_analytics_hostname?.enableAuditing()),xe.system)for(let r of Ob)xe.system[r]&&(xe.system[r].replicate=!1);return rm=null,xe}}function mf(){vb=!1;for(let[,e]of qa)e.needsDeletion=!0;dt();for(let[e,t]of qa)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),qa.delete(e);let r=xe[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete xe[t.databaseName],Dn.emit("dropDatabase",t.databaseName);break}}return xe}function QE(e,t,r=VM,n,s){let i=new qM.default(e,!1);try{let o=qa.get(e);o?o.needsDeletion=!1:(o=(0,nm.open)(i),qa.set(e,o));let c=new ZE(!1),l=o.dbisDb||(o.dbisDb=o.openDB(Pb.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,Ls.existsSync)(n)&&(i.path=n,u=(0,nm.open)(i),u.isLegacy=!0):u=fb(o));let d=Z6(r),f=d[Ub],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,_]=p.toString().split("/");_===""?_=h.name:_||(_=E,E=t,h.name||(h.name=_,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(_==null||h.is_hash_attribute)&&(R.primary=h),_!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:_}=h;if(!_){for(let oe of E)if(oe.is_hash_attribute||oe.isPrimaryKey){_=oe;break}if(!_){Br.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],I,w,M=typeof _.audit=="boolean"?_.audit:(0,ir.get)(U.LOGGING_AUDITLOG),k=_.trackDeletes,X=_.expiration,J=_.eviction,Y=_.sealed,H=_.splitSegments,ae=_.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{I=_.tableId,I?I>=(l.get(em)||0)&&(l.putSync(em,I+1),Br.info(`Updating next table id (it was out of sync) to ${I+1} for ${p}`)):(_.tableId=I=l.get(em),I||(I=1),Br.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(em,I+1),l.putSync(_.key,_));let oe=new ZE(!_.is_hash_attribute,_.is_hash_attribute);if(oe.compression=_.compression,oe.compression){let Ee=(0,ir.get)(U.STORAGE_COMPRESSION_THRESHOLD)||X6;oe.compression.threshold=Ee}w=Sb(o.openDB(_.key,oe),o),o.databaseName=r,w.tableId=I}let le;for(let oe of E){oe.attribute=oe.name;try{if(!oe.is_hash_attribute&&(oe.indexed||oe.attribute&&!oe.name)){if(!S[oe.name]){let Se=tX(oe.key,o,oe);S[oe.name]=Se,S[oe.name].indexNulls=oe.indexNulls}let Ee=y.find(Se=>Se.name===oe.name);Ee?y.splice(y.indexOf(Ee),1,oe):y.push(oe),le=!0}}catch(Ee){Br.error("Error trying to update attribute",oe,y,S,Ee)}}for(let oe of y)if(!E.find(Se=>Se.name===oe.name)){if(oe.is_hash_attribute){Br.error("Unable to remove existing primary key attribute",oe);continue}oe.indexed&&(y.splice(y.indexOf(oe),1),le=!0)}R?le&&(R.schemaVersion++,R.updatedAttributes()):(R=eX(d,p,Ib({primaryStore:w,auditStore:u,audit:M,sealed:Y,splitSegments:H,replicate:ae,expirationMS:X&&X*1e3,evictionMS:J&&J*1e3,trackDeletes:k,tableName:p,tableId:I,primaryKey:_.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:_.schemaDefined,dbisDB:l})),R.schemaVersion=1,Dn.emit("updateTable",R))}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Z6(e){let t=xe[e];if(t||(e==="data"?t=xe[e]=yn:e==="system"?Object.defineProperty(xe,"system",{value:t=Object.create(null),configurable:!0}):t=xe[e]=Object.create(null)),rm&&!rm.has(e)){let r=new Set;t[Ub]=r,rm.set(e,r)}return t}function eX(e,t,r){return e[t]=r,r}function sd({database:e,table:t}){e||(e=VM),dt(),Z6(e);let r=(0,Jt.join)((0,ir.getHdbBasePath)(),sl),n=(0,ir.get)(U.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let s=t&&n[e]?.tables?.[t]?.path;r=s||n[e]?.path||process.env.STORAGE_PATH||(0,ir.get)(U.STORAGE_PATH)||((0,Ls.existsSync)(r)?r:(0,Jt.join)((0,ir.getHdbBasePath)(),T_));let i=(0,Jt.join)(r,(s?t:e)+".mdb"),o=qa.get(i);if(!o||o.status==="closed"){let c=new qM.default(i,!1);o=(0,nm.open)(c),qa.set(i,o)}return o.auditStore||(o.auditStore=fb(o)),o}async function ZI(e){if(!xe[e])throw new Error("Schema does not exist");let t=xe[e],r;for(let n in t)r=t[n].primaryStore.rootStore,qa.delete(r.path),r.status==="open"&&(await r.close(),await JE.remove(r.path)),Dn.emit("dropTable",n,e);if(r||(r=sd({database:e,table:null}),r.status==="open"&&(await r.close(),await JE.remove(r.path))),e==="data"){for(let n in yn)delete yn[n];delete yn[Ub]}delete xe[e],Dn.emit("dropDatabase",e),await KI(r)}function tX(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&GM[r.indexed.type]?.useObjectStore,s=new ZE(!n,n),i=t.openDB(e,s);if(r.indexed.type){let o=GM[r.indexed.type];o?i.customIndex=new o(i,r.indexed):Br.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function ze(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=VM);let h=sd({database:r,table:t}),E=xe[r];Br.trace(`Defining ${t} in ${r}`);let _=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let I=new ZE(!1);for(let H of o)H.attribute&&!H.name?(H.name=H.attribute,H.indexed=!0):H.attribute=H.name,H.expiresAt&&(H.indexed=!0);let w,M;if(_){if(R=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=_.splitSegments),_.attributes.splice(0,_.attributes.length,...o)}else{let H=h.auditStore;S=o.find(Ee=>Ee.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=ay(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,ir.get)(U.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Br.trace(`${t} table loading, opening primary store`);let ae=new ZE(!1,!0);ae.compression=S.compression;let le=t+"/";if(y=h.dbisDb=h.openDB(Pb.INTERNAL_DBIS_NAME,I),Y(),y.get(le))return M&&M(),mf(),ze(e);let oe=Sb(h.openDB(le,ae),h);h.databaseName=r,oe.tableId=y.get(em),Br.trace(`Assigning new table id ${oe.tableId} for ${t}`),oe.tableId||(oe.tableId=1),y.put(em,oe.tableId+1),S.tableId=oe.tableId,_=eX(E,t,Ib({primaryStore:oe,auditStore:H,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:oe.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:m,dbisDB:y})),_.schemaVersion=1,w=!0,y.put(le,S)}let k=_.indices;y=y||(h.dbisDb=h.openDB(Pb.INTERNAL_DBIS_NAME,I)),_.dbisDB=y;let X=[];for(let{key:H,value:ae}of y.getRange({start:!0})){let[le,oe]=H.toString().split("/");if(oe===""&&(oe=ae.name),oe){if(le!==t)continue}else continue;let Ee=o.find(Me=>Me.name===oe),Se=!Ee?.indexed&&ae.indexed&&!ae.isPrimaryKey;if((!Ee||Se)&&(Y(),w=!0,Ee||y.remove(H),Se)){let Me=_.indices[le];Me&&X.push(Me)}}let J=[];try{for(let H of o||[]){if((H.relationship||H.computed)&&(w=!0,H.relationship))continue;let ae=t+"/"+(H.name||"");Object.defineProperty(H,"key",{value:ae,configurable:!0});let le=y.get(ae);if(H.isPrimaryKey){if(le=le||y.get(ae=t+"/")||{},c!==void 0&&c!==_.audit||l!==void 0&&l!==_.sealed||d!==void 0&&d!==_.replicate||(+n||void 0)!==(+le.expiration||void 0)||(+s||void 0)!==(+le.eviction||void 0)||H.type!==le.type){let Ee={...le};typeof c=="boolean"&&(c&&_.enableAuditing(c),Ee.audit=c),n&&(Ee.expiration=+n),s&&(Ee.eviction=+s),l!==void 0&&(Ee.sealed=l),d!==void 0&&(Ee.replicate=d),H.type&&(Ee.type=H.type),w=!0,Y(),y.put(ae,Ee)}continue}le?.attribute&&!le.name&&(le.indexed=!0);let oe=!le||le.type!==H.type||JSON.stringify(le.indexed)!==JSON.stringify(H.indexed)||le.nullable!==H.nullable||le.version!==H.version||le.enumerable!==H.enumerable||JSON.stringify(le.properties)!==JSON.stringify(H.properties)||JSON.stringify(le.elements)!==JSON.stringify(H.elements);if(H.indexed){let Ee=tX(ae,h,H);(oe||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<XE.workerData?.restartNumber)&&(w=!0,Y(),le=y.get(ae),(oe||le.indexingPID&&le.indexingPID!==process.pid||le.restartNumber<XE.workerData?.restartNumber)&&(w=!0,H.indexNulls===void 0&&(H.indexNulls=!0),_.primaryStore.getStats().entryCount>0&&(H.lastIndexedKey=le?.lastIndexedKey??void 0,H.indexingPID=process.pid,Ee.isIndexing=!0,Object.defineProperty(H,"dbi",{value:Ee}),J.push(H))),y.put(ae,H)),le?.indexNulls&&H.indexNulls===void 0&&(H.indexNulls=!0),Ee.indexNulls=H.indexNulls,k[H.name]=Ee}else oe&&(w=!0,Y(),y.put(ae,H))}}finally{M&&M()}return w&&(_.schemaVersion++,_.updatedAttributes()),Br.trace(`${t} table loading, running index`),J.length>0||X.length>0?_.indexingOperation=Awe(_,J,X):w&&Lb.signalSchemaChange(new Db.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=p,w&&Dn.emit("updateTable",_,p!=="cluster"),(n||s||i)&&_.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Br.trace(`${t} table loaded`),_;function Y(){M||h.transactionSync(()=>({then(H){M=H}}))}a(Y,"startTxn")}async function Awe(e,t,r){try{Br.info(`Indexing ${e.tableName} attributes`,t),await Lb.signalSchemaChange(new Db.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let l of r)n=l.drop();let s,i={},o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l;for(let d of t)(0,nm.compareKeys)(d.lastIndexedKey,l)<0&&(l=d.lastIndexedKey),d.lastIndexedKey==null&&d.dbi.clearAsync();let u=0;for(let{key:d,value:f,version:m}of e.primaryStore.getRange({start:l,lazy:c<4,versions:!0,snapshot:!1}))if(f){if(u++,n=e.primaryStore.ifVersion(d,m,()=>{for(let p=0;p<c;p++){let h=t[p],E=h.name,_=h.dbi;try{let R=h.resolve,S=f&&(R?R(f):f[E]);if(_.customIndex){_.customIndex.index(d,S);continue}let y=(0,z6.getIndexedValues)(S,_.indexNulls);if(y)for(let I=0,w=y.length;I<w;I++)_.put(y[I],d)}catch(R){i[E]||(i[E]=!0,Br.error(`Error indexing attribute ${E}`,R))}}}),n.then(()=>u--,p=>{u--,Br.error(p)}),XE.workerData&&XE.workerData.restartNumber!==J6.restartNumber&&(s=!0),++o%100===0||s){for(let p of t)p.lastIndexedKey=d,e.dbisDB.put(p.key,p);if(s)return}u>Rwe?await n:u>bwe&&await new Promise(p=>setImmediate(p))}for(let d of t)delete d.lastIndexedKey,delete d.indexingPID,d.dbi.isIndexing=!1,n=e.dbisDB.put(d.key,d)}await n,await Lb.signalSchemaChange(new Db.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Br.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Br.error("Error in indexing",n)}}function Iwe({table:e,database:t}){let r=sd({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Dn.emit("dropTable",e,t),Promise.all(n)}function Yl(e){return Dn.on("updateTable",e),{remove(){Dn.off("updateTable",e)}}}function wwe(e){return Dn.on("dropTable",e),{remove(){Dn.off("dropTable",e)}}}function hh(e){return Dn.on("dropDatabase",e),{remove(){Dn.off("dropDatabase",e)}}}function ay(){let e=(0,ir.get)(U.STORAGE_COMPRESSION),t=(0,ir.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,ir.get)(U.STORAGE_COMPRESSION_THRESHOLD)||X6,n={startingOffset:32};return t&&(n.dictionary=JE.readFileSync(t)),r&&(n.threshold=r),e&&n}var j6,ir,Pb,nm,Jt,Ls,tm,qM,JE,$M,z6,Lb,Db,XE,Q6,J6,Mb,Twe,Br,VM,Ub,X6,Ob,Dn,yn,xe,em,vb,qa,rm,Rwe,bwe,Oe=ie(()=>{j6=require("node:events"),ir=b(fe()),Pb=b(Cr()),nm=require("lmdb"),Jt=require("path"),Ls=require("fs"),tm=b(er());sR();qM=b(vm());$();JE=b(require("fs-extra")),$M=b(fi()),z6=b(Ms()),Lb=b(Wo()),Db=b(cs()),XE=require("worker_threads"),Q6=b(ee()),J6=b(at());Wi();il();us();W6();Mb=b(Dm()),{forComponent:Twe}=Q6.default;a(ZE,"OpenDBIObject");Br=Twe("storage"),VM="data",Ub=Symbol("defined-tables"),X6=((0,ir.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,ir.initSync)();Ob=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],Dn=new j6.EventEmitter,yn=Object.create(null),xe=Object.create(null);(0,$M._assignPackageExport)("databases",xe);(0,$M._assignPackageExport)("tables",yn);em=Symbol.for("next-table-id"),qa=new Map;a(ywe,"getTables");a(dt,"getDatabases");a(mf,"resetDatabases");a(QE,"readMetaDb");a(Z6,"ensureDB");a(eX,"setTable");a(sd,"database");a(ZI,"dropDatabase");a(tX,"openIndex");a(ze,"table");Rwe=1e3,bwe=10;a(Awe,"runIndexing");a(Iwe,"dropTableMeta");a(Yl,"onUpdatedTable");a(wwe,"onRemovedTable");a(hh,"onRemovedDB");a(ay,"getDefaultCompression")});var de=x(Ne=>{"use strict";var jc=require("path"),oX=require("fs-extra"),ts=ee(),rX=require("fs-extra"),xb=require("os"),Nwe=require("net"),Cwe=require("recursive-iterator"),Fr=($(),L(Q)),{PACKAGE_ROOT:Owe}=Lt(),nX=require("papaparse"),Bb=require("moment"),{inspect:Pwe}=require("util"),sX=require("is-number"),Lwe=require("minimist"),Dwe=require("https"),vwe=require("http"),Mwe=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,Uwe=require("util").promisify(setTimeout),xwe="",Bwe=4,iX={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ne.isEmpty=Ds;Ne.isEmptyOrZeroLength=Mo;Ne.arrayHasEmptyValues=Hwe;Ne.arrayHasEmptyOrZeroLengthValues=Gwe;Ne.buildFolderPath=qwe;Ne.isBoolean=aX;Ne.errorizeMessage=Fwe;Ne.stripFileExtension=Vwe;Ne.autoCast=Kwe;Ne.autoCastJSON=cX;Ne.autoCastJSONDeep=YM;Ne.removeDir=Ywe;Ne.compareVersions=Wwe;Ne.isCompatibleDataVersion=jwe;Ne.escapeRawValue=zwe;Ne.unescapeValue=Qwe;Ne.stringifyProps=Jwe;Ne.timeoutPromise=Zwe;Ne.isClusterOperation=tNe;Ne.getClusterUser=nNe;Ne.checkGlobalSchemaTable=rNe;Ne.getHomeDir=uX;Ne.getPropsFilePath=Xwe;Ne.promisifyPapaParse=sNe;Ne.removeBOM=dX;Ne.createEventPromise=iNe;Ne.checkSchemaTableExist=oNe;Ne.checkSchemaExists=fX;Ne.checkTableExists=mX;Ne.getStartOfTomorrowInSeconds=aNe;Ne.getLimitKey=cNe;Ne.isObject=$we;Ne.isNotEmptyAndHasValue=kwe;Ne.autoCasterIsNumberCheck=lX;Ne.backtickASTSchemaItems=lNe;Ne.isPortTaken=eNe;Ne.createForkArgs=uNe;Ne.autoCastBoolean=dNe;Ne.autoCastBooleanStrict=fNe;Ne.asyncSetTimeout=Uwe;Ne.getTableHashAttribute=mNe;Ne.doesSchemaExist=pNe;Ne.doesTableExist=hNe;Ne.stringifyObj=ENe;Ne.ms_to_time=_Ne;Ne.changeExtension=gNe;Ne.getEnvCliRootPath=WM;Ne.noBootFile=SNe;Ne.httpRequest=TNe;Ne.transformReq=yNe;Ne.convertToMS=RNe;Ne.PACKAGE_ROOT=Owe;function Fwe(e){return e instanceof Error?e:new Error(e)}a(Fwe,"errorizeMessage");function Ds(e){return e==null}a(Ds,"isEmpty");function kwe(e){return!Ds(e)&&(e||e===0||e===""||aX(e))}a(kwe,"isNotEmptyAndHasValue");function Mo(e){return Ds(e)||e.length===0||e.size===0}a(Mo,"isEmptyOrZeroLength");function Hwe(e){if(Ds(e))return!0;for(let t=0;t<e.length;t++)if(Ds(e[t]))return!0;return!1}a(Hwe,"arrayHasEmptyValues");function Gwe(e){if(Mo(e))return!0;for(let t=0;t<e.length;t++)if(Mo(e[t]))return!0;return!1}a(Gwe,"arrayHasEmptyOrZeroLengthValues");function qwe(...e){try{return e.join(jc.sep)}catch{console.error(e)}}a(qwe,"buildFolderPath");function aX(e){return Ds(e)?!1:e===!0||e===!1}a(aX,"isBoolean");function $we(e){return Ds(e)?!1:typeof e=="object"}a($we,"isObject");function Vwe(e){return Mo(e)?xwe:e.slice(0,-Bwe)}a(Vwe,"stripFileExtension");function Kwe(e){return Ds(e)||e===""||typeof e!="string"?e:iX[e]!==void 0?iX[e]:lX(e)===!0?Number(e):Mwe.test(e)?new Date(e):e}a(Kwe,"autoCast");function cX(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(cX,"autoCastJSON");function YM(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=YM(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=YM(r);n!==r&&(e[t]=n)}return e}else return cX(e)}a(YM,"autoCastJSONDeep");function lX(e){if(e.startsWith("0.")&&sX(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&sX(e))}a(lX,"autoCasterIsNumberCheck");async function Ywe(e){if(Mo(e))throw new Error(`Directory path: ${e} does not exist`);try{await rX.emptyDir(e),await rX.remove(e)}catch(t){throw ts.error(`Error removing files in ${e} -- ${t}`),t}}a(Ywe,"removeDir");function Wwe(e,t){if(Mo(e)){ts.info("Invalid current version sent as parameter.");return}if(Mo(t)){ts.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(Wwe,"compareVersions");function jwe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(jwe,"isCompatibleDataVersion");function zwe(e){if(Ds(e))return e;let t=String(e);return t==="."?Fr.UNICODE_PERIOD:t===".."?Fr.UNICODE_PERIOD+Fr.UNICODE_PERIOD:t.replace(Fr.FORWARD_SLASH_REGEX,Fr.UNICODE_FORWARD_SLASH)}a(zwe,"escapeRawValue");function Qwe(e){if(Ds(e))return e;let t=String(e);return t===Fr.UNICODE_PERIOD?".":t===Fr.UNICODE_PERIOD+Fr.UNICODE_PERIOD?"..":String(e).replace(Fr.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Qwe,"unescapeValue");function Jwe(e,t){if(Ds(e))return ts.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+xb.EOL}!Mo(n)&&n[0]===";"?r+=" "+n+s+xb.EOL:Mo(n)||(r+=n+"="+s+xb.EOL)}catch{ts.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Jwe,"stringifyProps");function uX(){let e;try{e=xb.homedir()}catch{e=process.env.HOME}return e}a(uX,"getHomeDir");function Xwe(){let e=jc.join(uX(),Fr.HDB_HOME_DIR_NAME,Fr.BOOT_PROPS_FILE_NAME);return oX.existsSync(e)||(e=jc.join(__dirname,"../","hdb_boot_properties.file")),e}a(Xwe,"getPropsFilePath");function Zwe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(Zwe,"timeoutPromise");async function eNe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Nwe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(eNe,"isPortTaken");function tNe(e){try{return Fr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ts.error(`Error checking operation against cluster ops ${t}`)}return!1}a(tNe,"isClusterOperation");function rNe(e,t){let r=(Oe(),L(Et)).getDatabases();if(!r[e])return Fb.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Fb.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(rNe,"checkGlobalSchemaTable");function nNe(e,t){if(Ds(t)){ts.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ds(e)||Mo(e)){ts.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){ts.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){ts.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(nNe,"getClusterUser");function sNe(){nX.parsePromise=function(e,t,r){return new Promise(function(n,s){nX.parse(e,{header:!0,transformHeader:dX,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(sNe,"promisifyPapaParse");function dX(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(dX,"removeBOM");function iNe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;ts.info(`Got cluster status event response: ${Pwe(s)}`);try{i.cancel()}catch{ts.error("Error trying to cancel timeout.")}n(s)})})}a(iNe,"createEventPromise");function oNe(e,t){let r=fX(e);if(r)return r;let n=mX(e,t);if(n)return n}a(oNe,"checkSchemaTableExist");function fX(e){let{getDatabases:t}=(Oe(),L(Et));if(!t()[e])return Fb.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(fX,"checkSchemaExists");function mX(e,t){let{getDatabases:r}=(Oe(),L(Et));if(!r()[e][t])return Fb.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(mX,"checkTableExists");function aNe(){let e=Bb().utc().add(1,"d").startOf("d").unix(),t=Bb().utc().unix();return e-t}a(aNe,"getStartOfTomorrowInSeconds");function cNe(){return Bb().utc().format("DD-MM-YYYY")}a(cNe,"getLimitKey");function lNe(e){try{let t=new Cwe(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){ts.error("Got an error back ticking items."),ts.error(t)}}a(lNe,"backtickASTSchemaItems");function uNe(e){return[e]}a(uNe,"createForkArgs");function dNe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(dNe,"autoCastBoolean");function fNe(e){if(typeof e=="string"){let t=e.toLowerCase();if(t==="true")return!0;if(t==="false")return!1}return e}a(fNe,"autoCastBooleanStrict");function mNe(e,t){let{getDatabases:r}=(Oe(),L(Et)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(mNe,"getTableHashAttribute");function pNe(e){let{getDatabases:t}=(Oe(),L(Et));return t()[e]!==void 0}a(pNe,"doesSchemaExist");function hNe(e,t){let{getDatabases:r}=(Oe(),L(Et));return r()[e]?.[t]!==void 0}a(hNe,"doesTableExist");function ENe(e){try{return JSON.stringify(e)}catch{return e}}a(ENe,"stringifyObj");function _Ne(e){let t=Bb.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(_Ne,"ms_to_time");function gNe(e,t){let r=jc.basename(e,jc.extname(e));return jc.join(jc.dirname(e),r+t)}a(gNe,"changeExtension");function WM(){if(process.env[Fr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Fr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Lwe(process.argv);if(e[Fr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Fr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(WM,"getEnvCliRootPath");var KM;function SNe(){if(KM)return KM;let e=WM();if(WM()&&oX.pathExistsSync(jc.join(e,Fr.HDB_CONFIG_FILE)))return KM=!0,!0}a(SNe,"noBootFile");function TNe(e,t){let r;return e.protocol==="http:"?r=vwe:r=Dwe,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(TNe,"httpRequest");function yNe(e){if(!e.schema&&!e.database){e.schema=Fr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(yNe,"transformReq");function RNe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(RNe,"convertToMS");var Fb=En()});var fe=x((_X,gX)=>{"use strict";var jM=require("fs-extra"),Mu=require("path"),pX=require("os"),bNe=require("properties-reader"),t_=ee(),e_=de(),Ge=($(),L(Q)),kb=wt(),ANe="Error initializing environment manager",Hb="BOOT_PROPS_FILE_PATH",hX=!1,INe={[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},$a={};Object.assign(_X,gX.exports={BOOT_PROPS_FILE_PATH:Hb,getHdbBasePath:wNe,setHdbBasePath:NNe,get:EX,initSync:ONe,setProperty:st,initTestEnvironment:PNe});function wNe(){return $a[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(wNe,"getHdbBasePath");function NNe(e){$a[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(NNe,"setHdbBasePath");function EX(e){let t=kb.getConfigValue(e);return t===void 0?$a[e]:t}a(EX,"get");function st(e,t){INe[e]&&($a[e]=t),kb.updateConfigObject(e,t)}a(st,"setProperty");function CNe(){let e;try{e=e_.getPropsFilePath(),jM.accessSync(e,jM.constants.F_OK|jM.constants.R_OK),hX=!0;let t=bNe(e);return $a[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ge.HDB_SETTINGS_NAMES.INSTALL_USER),$a[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),$a[Hb]=e,!0}catch{return t_.trace(`Environment manager found no properties file at ${e}`),!1}}a(CNe,"doesPropFileExist");function ONe(e=!1){try{(hX||CNe()||e_.noBootFile()||e)&&(kb.initConfig(e),$a[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=kb.getConfigValue(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){t_.error(ANe),t_.error(t),console.error(t),process.exit(1)}}a(ONe,"initSync");function PNe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Mu.join(__dirname,"../../","unitTests");$a[Hb]=Mu.join(l,"hdb_boot_properties.file"),st(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Mu.join(l,"settings.test")),st(Ge.HDB_SETTINGS_NAMES.INSTALL_USER,pX.userInfo()?pX.userInfo().username:void 0),st(Ge.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),st(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Mu.join(l,"envDir","log")),st(Ge.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),st(Ge.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),st(Ge.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),st(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Mu.join(l,"envDir")),st(Ge.CONFIG_PARAMS.STORAGE_PATH,Mu.join(l,"envDir")),s&&(st(Ge.CONFIG_PARAMS.HTTP_SECUREPORT,EX(Ge.CONFIG_PARAMS.HTTP_PORT)),st(Ge.CONFIG_PARAMS.HTTP_PORT,null)),st(Ge.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),st(Ge.CONFIG_PARAMS.HTTP_PORT,9926),st(Ge.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),st(Ge.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),st(Ge.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,e_.isEmpty(i)?!1:i),st(Ge.CONFIG_PARAMS.HTTP_CORS,e_.isEmpty(i)?!1:i),st(Ge.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),st(Ge.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),st(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),st(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),st(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Mu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),st(Ge.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,e_.isEmpty(c)?!1:c),o&&(st("CORS_ACCESSLIST",o),st(Ge.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(st(Ge.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),st(Ge.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(st(Ge.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),st(Ge.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(st(Ge.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),st(Ge.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Hb}. Please check your boot props and settings files`;t_.fatal(r),t_.error(t)}}a(PNe,"initTestEnvironment")});var AX=x((kqe,bX)=>{"use strict";var{promises:sm,createReadStream:LNe,createWriteStream:DNe}=require("fs"),{createGzip:vNe}=require("zlib"),{promisify:MNe}=require("util"),{pipeline:UNe}=require("stream"),xNe=MNe(UNe),QM=require("path"),RX=fe();RX.initSync();var Gb=ee(),{CONFIG_PARAMS:BNe}=($(),L(Q)),{convertToMS:SX}=de(),{onStorageReclamation:FNe}=(lb(),L(a6)),kNe=6e4,HNe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",GNe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",zM,TX;bX.exports=qNe;function qNe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:o}){if(s===!1)return;let c=0;if(FNe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(HNe);if(!i)throw new Error(GNe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=SX(r));let d;return zM=Date.now(),Gb.trace("Log rotate enabled, maxSize:",t,"interval:",r),TX=setInterval(async()=>{if(l){let f;f=await sm.stat(e.path),f.size>=l&&(d=await yX(e.path,i))}if(u&&Date.now()-zM>=u&&(d=await yX(e.path,i),zM=Date.now()),n||c){let f=SX(n??"1M")/(1+c);c=0;let m=await sm.readdir(i);for(let p of m)try{let h=await sm.stat(QM.join(i,p));Date.now()-h.mtimeMs>f&&await sm.unlink(QM.join(i,p))}catch(h){Gb.error("Error trying to remove log",p,h)}}},o??kNe).unref(),{end(){clearInterval(TX)},getLastRotatedLogPath(){return d}}}a(qNe,"logRotator");async function yX(e,t){let r=RX.get(BNe.LOGGING_ROTATION_COMPRESS),n=QM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await sm.rename(e,n),r&&(e=n,n+=".gz",await xNe(LNe(e),vNe(),DNe(n)),await sm.unlink(e)),Gb.closeLogFile(),Gb.notify(`hdb.log rotated, old log moved to ${n}`),n}a(yX,"moveLogFile")});var OX={};Re(OX,{RootConfigWatcher:()=>JM});var IX,wX,NX,qb,CX,JM,PX=ie(()=>{IX=b(require("chokidar")),wX=require("node:fs/promises"),NX=b(wt()),qb=require("node:stream"),CX=require("yaml"),JM=class extends qb.EventEmitter{static{a(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,NX.getConfigFilePath)(),this.ready=(0,qb.once)(this,"ready"),this.#t=IX.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,wX.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,CX.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var ee=x(($qe,Qb)=>{"use strict";var Va=require("fs-extra"),{workerData:$Ne,threadId:VNe,isMainThread:xX}=require("worker_threads"),s_=require("path"),BX=require("yaml"),FX=require("properties-reader"),Jr=($(),L(Q)),LX=ku(),KNe=require("os"),{PACKAGE_ROOT:kX}=Lt(),{_assignPackageExport:YNe}=fi(),{Console:WNe}=require("console"),ZM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),DX=new Map,{join:zc}=s_,vX=1e4,fr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},jNe={STDOUT:"stdOut",STDERR:"stdErr"},zNe=zc(kX,"config/yaml/",Jr.HDB_DEFAULT_CONFIG_FILE),QNe=1e4,i_,o_,$b,HX,Uo,eU,XM,Kb,Ht,rs,Yb,Wb,im,n_,r_;function Vb(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=s_.dirname(n)):t.root?n=zc(t.root,eU):(n=Ht.path,t.root||(t.root=s_.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=fr[t.level]??Ht?.level??fr.info,GX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Ht.path===e.path&&r)}a(Vb,"updateLogger");function GX(e){let t=e.conditional??(e.conditional={});t.notify=fr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=fr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=fr.error>=e.level?e.error.bind(e):void 0,t.warn=fr.warn>=e.level?e.warn.bind(e):void 0,t.info=fr.info>=e.level?e.info.bind(e):void 0,t.debug=fr.debug>=e.level?e.debug.bind(e):void 0,t.trace=fr.trace>=e.level?e.trace.bind(e):void 0}a(GX,"updateConditional");async function tU(){r_||(r_=new ECe,await r_.ready,r_.on("change",tU));let e=r_.config,t=e.logging??{};Vb(Ht,t),Kb=Ht.path,i_=t.console??!1,t.external&&Vb(rs,t.external);for(let r in e){let n=e[r];n.logging?Vb(Ht.forComponent(r),n.logging,r):Ht.hasComponent(r)&&Vb(Ht.forComponent(r),t,r)}}a(tU,"updateLogSettings");var rU=class extends WNe{static{a(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){vn="trace",this.level<=fr.trace&&super.info(...t),vn="info"}debug(...t){vn="debug",this.level<=fr.debug&&super.info(...t),vn="info"}info(...t){vn="info",this.level<=fr.info&&super.info(...t),vn="info"}warn(...t){vn="warn",this.level<=fr.warn&&super.warn(...t),vn="info"}error(...t){vn="error",this.level<=fr.error&&super.error(...t),vn="info"}fatal(...t){im=!0;try{vn="fatal",this.level<=fr.fatal&&super.error(...t),vn="info"}finally{im=!1}}notify(...t){im=!0;try{vn="notify",this.level<=fr.notify&&super.info(...t),vn="info"}finally{im=!1}}withTag(t){return $X(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};n_===void 0&&qX();Qb.exports={notify:iCe,fatal:oCe,error:sU,warn:aCe,info:rCe,debug:sCe,trace:nCe,logLevel:Uo,loggerWithTag:$X,suppressLogging:eCe,initLogSettings:qX,logCustomLevel:cCe,closeLogFile:VX,createLogger:zb,logsAtLevel:XNe,getLogFilePath:a(()=>Kb,"getLogFilePath"),forComponent:a(e=>Ht.forComponent(e),"forComponent"),setMainLogger:pCe,setLogLevel:uCe,OUTPUTS:jNe,AuthAuditLog:hCe,start:tU,startOnMainThread:tU,errorToString:mCe,disableStdio:JNe};function JNe(){ZM=a(function(){},"nativeStdWrite")}a(JNe,"disableStdio");Qb.exports.externalLogger={notify(...e){rs.notify(...e)},fatal(...e){rs.fatal(...e)},error(...e){rs.error(...e)},warn(...e){rs.warn(...e)},info(...e){rs.info(...e)},debug(...e){rs.debug(...e)},trace(...e){rs.trace(...e)},withTag(e){return rs.withTag(e)},loggerWithTag(e){return rs.withTag(e)}};YNe("logger",Qb.exports.externalLogger);function XNe(e){return fr[Uo]<=fr[e]}a(XNe,"logsAtLevel");function qX(e=!1){try{if(n_===void 0||e){VX();let t=lCe(),r=LX(["ROOTPATH"]);try{n_=FX(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Va.pathExistsSync(zc(r.ROOTPATH,Jr.HDB_CONFIG_FILE)))throw s}let n;if({level:Uo,configLogPath:XM,toFile:o_,logConsole:i_,colorMode:HX,rotation:n,toStream:$b}=dCe(r.ROOTPATH?zc(r.ROOTPATH,Jr.HDB_CONFIG_FILE):n_.get("settings_path")),eU=Jr.LOG_NAMES.HDB,Kb=zc(XM,eU),Ht=zb({path:Kb,level:Uo,stdStreams:$b,rotation:n}),rs=Ht.forComponent("external"),rs.tag=null,xX)try{require("segfault-handler").registerHandler(zc(XM,"crash.log"))}catch{}}}catch(t){if(n_=void 0,t.code===Jr.NODE_ERROR_CODES.ENOENT||t.code===Jr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=LX(Object.keys(Jr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=Jr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let o=r[s];if(i===Jr.CONFIG_PARAMS.LOGGING_LEVEL){Uo=o;continue}i===Jr.CONFIG_PARAMS.LOGGING_CONSOLE&&(i_=i)}let{defaultLevel:n}=fCe();o_=!1,$b=!0,Uo=Uo===void 0?n:Uo,Ht=zb({level:Uo}),rs=Ht.forComponent("external"),rs.tag=null;return}throw sU("Error initializing log settings"),sU(t),t}process.env.DEV_MODE&&($b=!0),ZNe()}a(qX,"initLogSettings");var Qc=!0;function ZNe(){o_&&(process.stdout.write=function(e){return typeof e=="string"&&Qc&&i_&&(e=e.toString(),e[e.length-1]===`
|
|
135
135
|
`&&(e=e.slice(0,-1)),Wb(e)),ZM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Qc&&i_&&(e[e.length-1]===`
|
|
136
136
|
`&&(e=e.slice(0,-1)),Wb(e)),ZM.apply(process.stderr,arguments)})}a(ZNe,"stdioLogging");function $X(e,t,r=Ht){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=fr[i]?function(...o){jb=e;try{return s.call(r,...o)}finally{jb=void 0}}:null}a(n,"logWithTag")}a($X,"loggerWithTag");function eCe(e){try{Qc=!1,e()}finally{Qc=!0}}a(eCe,"suppressLogging");var tCe=$Ne?.name?.replace(/ /g,"-")||"main",vn="info",nU,jb;function zb({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:o}){t||(t="info");let c=fr[t],l;function u(p){if(o_)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),Qc=!1;try{process.stdout.write(p)}finally{Qc=!0}}else f(p);else r&&process.stdout.write(p)}a(u,"logStdOut");function d(p){if(o_){if(f(p),r){Qc=!1;try{process.stderr.write(p)}finally{Qc=!0}}}else r&&process.stderr.write(p)}a(d,"logStdErr");let f=e&&UX(e,n,s);function m(p){return{write(h){let E=[vn];E.unshift(nU||tCe+"/"+VNe),jb&&E.push(jb),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(a(m,"logPrepend"),s&&(Wb=f),l=new rU({stdout:m(i??u),stderr:m(i??d),colorMode:r&&HX||!1},c),GX(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=UX(e,l.rotation,s),s&&(Wb=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!o){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=zb({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}a(zb,"createLogger");var MX=100;function UX(e,t,r){let n=DX.get(e),s,i,o,c,l=0;return n||(n=u,n.closeLogFile=f,n.path=e,DX.set(e,n)),xX&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let p=AX();try{n.rotator=p({logger:n,...t})}catch(h){n("Error initializing log rotator",h)}},100)),n;function u(p){let h=`${new Date().toISOString()} ${p}${p.endsWith(`
|