harperdb 4.3.35 → 4.3.36

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/bin/lite.js CHANGED
@@ -7,7 +7,7 @@ Caused by:`));else if(typeof _=="object")try{n+=JSON.stringify(_)}catch{n+="Obje
7
7
  `),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
8
8
  `)},H2="certificate.pem",x2="privateKey.pem",G2="ca.pem";RC.exports={CERTIFICATE_VALUES:B2,CERTIFICATE_PEM_NAME:H2,PRIVATEKEY_PEM_NAME:x2,CA_PEM_NAME:G2}});var jp=g((I_e,wC)=>{"use strict";var NC=require("fs-extra"),ae=require("joi"),F2=require("os"),{boolean:ye,string:tr,number:Ze,array:bd}=ae.types(),{totalmem:OC}=require("os"),eo=require("path"),q2=K(),yd=J(),N_e=AC(),bC=P(),k2=ot(),yC="log",V2="components",$2="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Y2="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",K2="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",W2="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Q2="rootPath config parameter is undefined",z2="clustering.enabled config parameter is undefined",to=Ze.min(0).required(),Nd=bd.items({host:tr.required(),port:to}).empty(null),ss,IC=!1;wC.exports={configValidator:J2,routesValidator:rJ,route_constraints:Nd};function J2(e,t=!1){if(IC=t,ss=e.rootPath,yd.isEmpty(ss))throw Q2;let r=ye.required(),n=Ze.min(0).max(1e3).empty(null).default(tJ),s=tr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(al),i=tr.optional().empty(null),o=tr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ae.string().empty(null).default(al),l=ae.custom(j2).empty(null).default(al),_=e.clustering?.enabled;if(yd.isEmpty(_))throw z2;let u=ae.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=ae.object({enabled:r,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:to,routes:Nd}).required()}).required(),leafNodes:ae.object({network:ae.object({port:to}).required()}).required(),network:ae.object({port:to}).required()}).required(),leafServer:ae.object({network:ae.object({port:to,routes:Nd}).required(),streams:ae.object({maxAge:Ze.min(120).allow(null).optional(),maxBytes:Ze.min(1).allow(null).optional(),maxMsgs:Ze.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ae.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required(),verify:ye.optional()}),user:tr.optional().empty(null)}).required():d=ae.object({enabled:r,tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),ae.object({authentication:ae.object({authorizeLocal:ye,cacheTTL:Ze.required(),enableSessions:ye}),analytics:ae.object({aggregatePeriod:Ze}),componentsRoot:s.optional(),clustering:d,localStudio:ae.object({enabled:r}).required(),logging:ae.object({auditAuthEvents:ae.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:ae.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ae.object({enabled:ye.optional(),compress:ye.optional(),interval:tr.custom(eJ).optional().empty(null),maxSize:tr.custom(Z2).optional().empty(null),path:tr.optional().empty(null).default(al)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:ae.object({network:ae.object({cors:ye.optional(),corsAccessList:bd.optional(),headersTimeout:Ze.min(1).optional(),keepAliveTimeout:Ze.min(1).optional(),port:Ze.optional().empty(null),domainSocket:ae.optional().empty("hdb/operations-server").default(al),securePort:Ze.optional().empty(null),timeout:Ze.min(1).optional()}).optional(),tls:ae.alternatives([ae.array().items(u),u])}).required(),rootPath:tr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:to,securePort:to,mtls:ae.alternatives([ye.optional(),ae.object({user:tr.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:ae.object({compressionThreshold:Ze.optional(),cors:ye.optional(),corsAccessList:bd.optional(),headersTimeout:Ze.min(1).optional(),port:Ze.min(0).optional().empty(null),securePort:Ze.min(0).optional().empty(null),maxHeaderSize:Ze.optional(),mtls:ae.alternatives([ye.optional(),ae.object({user:tr.optional(),certificateAuthority:i,required:ye.optional()})]),threadRange:ae.alternatives([bd.optional(),tr.optional()])}).required(),threads:ae.alternatives(n.optional(),ae.object({count:n.optional(),debug:ae.alternatives(ye.optional(),ae.object({startingPort:Ze.min(1).optional(),host:tr.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:Ze.min(0).optional()})),storage:ae.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:ae.alternatives([ye.optional(),ae.object({dictionary:tr.optional(),threshold:Ze.optional()})]),compactOnStart:ye.optional(),compactOnStartKeepBackup:ye.optional(),noReadAhead:ye.optional(),path:l,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:Ze.optional(),maxFreeSpaceToRetain:Ze.optional()}).required(),ignoreScripts:ye.optional(),tls:ae.alternatives([ae.array().items(u),u])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(J2,"configValidator");function X2(e){return IC||NC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(X2,"doesPathExist");function j2(e,t){ae.assert(e,tr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=X2(e);if(r)return t.message(r)}a(j2,"validatePath");function Z2(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message($2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(K2):e}a(Z2,"validateRotationMaxSize");function eJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Y2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(W2):e}a(eJ,"validateRotationInterval");function tJ(e,t){let r=t.state.path.join("."),n=F2.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||OC();return i=Math.round(Math.min(i,OC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),q2.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(tJ,"setDefaultThreads");function al(e,t){let r=t.state.path.join(".");if(!yd.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(yd.isEmpty(ss))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return eo.join(ss,V2);case"logging.root":return eo.join(ss,yC);case"clustering.leafServer.streams.path":return eo.join(ss,"clustering","leaf");case"storage.path":let n=eo.join(ss,bC.LEGACY_DATABASES_DIR_NAME);return NC.existsSync(n)?n:eo.join(ss,bC.DATABASES_DIR_NAME);case"logging.rotation.path":return eo.join(ss,yC);case"operationsApi.network.domainSocket":return r==null?null:eo.join(ss,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(al,"setDefaultRoot");function rJ(e){let t=ae.object({routes:Nd});return k2.validateBySchema({routes:e},t)}a(rJ,"routesValidator")});var Rr=g((D_e,HC)=>{"use strict";var Wr=P(),Ht=J(),Nt=K(),{configValidator:nJ,routesValidator:CC}=jp(),gr=require("fs-extra"),sJ=require("yaml"),Bn=require("path"),iJ=require("is-number"),LC=require("properties-reader"),oJ=require("lodash"),{handleHDBError:aJ}=se(),{HTTP_STATUS_CODES:cJ,HDB_ERROR_MSGS:Id}=vr(),C_e=require("minimist"),{server:lJ}=(ur(),ie(vi)),{DATABASES_PARAM_CONFIG:cl,CONFIG_PARAMS:Kr,CONFIG_PARAM_MAP:Hn}=Wr,uJ="Unable to get config value because config is uninitialized",_J="Config successfully initialized",dJ="Error backing up config file",fJ="Empty parameter sent to getConfigValue",MC=Bn.join(Wr.PACKAGE_ROOT,"config","yaml",Wr.HDB_DEFAULT_CONFIG_FILE),EJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",DC={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},wd,It,Cd;HC.exports={createConfigFile:hJ,getDefaultConfig:mJ,getConfigValue:UC,initConfig:eS,flattenConfig:ca,updateConfigValue:vC,updateConfigObject:SJ,getConfiguration:RJ,setConfiguration:AJ,readConfigFile:rS,getClusteringRoutes:OJ,initOldConfig:BC,getConfigFromFile:bJ,getConfigFilePath:ro,addConfig:yJ,deleteConfigFromFile:NJ,getConfigObj:IJ};function hJ(e,t=!1){let r=di(MC);wd=ca(r.toJSON());let n;for(let c in e){let l=Hn[c.toLowerCase()];if(l===Kr.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let _=l.split("_"),u=Zp(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Nt.error(d)}}}n&&PC(r,n),tS(r,t);let s=r.toJSON();It=ca(s);let i=r.getIn(["rootPath"]),o=Bn.join(i,Wr.HDB_CONFIG_FILE);gr.createFileSync(o),gr.writeFileSync(o,String(r)),Nt.trace(`Config file written to ${o}`)}a(hJ,"createConfigFile");function PC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ht.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(cl.TABLES))for(let i in n[s][cl.TABLES])for(let o in n[s][cl.TABLES][i]){let c=n[s][cl.TABLES][i][o],l=[Kr.DATABASES,s,cl.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[Kr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Nt.error("Error parsing schemas CLI/env config arguments",n)}}a(PC,"setSchemasConfig");function mJ(e){if(wd===void 0){let r=di(MC);wd=ca(r.toJSON())}let t=Hn[e.toLowerCase()];if(t!==void 0)return wd[t.toLowerCase()]}a(mJ,"getDefaultConfig");function UC(e){if(e==null){Nt.error(fJ);return}if(It===void 0){Nt.trace(uJ);return}let t=Hn[e.toLowerCase()];if(t!==void 0)return It[t.toLowerCase()]}a(UC,"getConfigValue");function ro(e=Ht.getPropsFilePath()){let t=Ht.getEnvCliRootPath();return t?Bn.join(t,Wr.HDB_CONFIG_FILE):LC(e).get(Wr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ro,"getConfigFilePath");function eS(e=!1){if(It===void 0||e){let t;if(!Ht.noBootFile()){t=Ht.getPropsFilePath();try{gr.accessSync(t,gr.constants.F_OK|gr.constants.R_OK)}catch(i){throw Nt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ro(t),n;if(r.includes("config/settings.js"))try{BC(r);return}catch(i){if(i.code!==Wr.NODE_ERROR_CODES.ENOENT)throw i}try{n=di(r)}catch(i){if(i.code===Wr.NODE_ERROR_CODES.ENOENT){Nt.trace(`HarperDB config file not found at ${r}.
9
9
  This can occur during early stages of install where the config file has not yet been created`);return}else throw Nt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}pJ(n,r),tS(n);let s=n.toJSON();if(lJ.config=s,It=ca(s),It.logging_rotation_rotate)for(let i in DC)It[i]&&Nt.error(`Config ${DC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Nt.trace(_J)}}a(eS,"initConfig");function pJ(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Bn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Bn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Bn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(Nt.trace("Updating config file with missing config params"),gr.writeFileSync(t,String(e)))}a(pJ,"checkForUpdatedConfig");function tS(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=nJ(r,t);if(n.error)throw Id.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(tS,"validateConfig");function SJ(e,t){It===void 0&&(It={});let r=Hn[e.toLowerCase()];if(r===void 0){Nt.trace(`Unable to update config object because config param '${e}' does not exist`);return}It[r.toLowerCase()]=t}a(SJ,"updateConfigObject");function vC(e,t,r=void 0,n=!1,s=!1,i=!1){It===void 0&&eS();let o=UC(Hn.hdb_root),c=Bn.join(o,Wr.HDB_CONFIG_FILE),l=di(c),_;if(r===void 0&&e.toLowerCase()===Kr.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=Hn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=Zp(E,t);l.setIn([...f],h)}else for(let E in r){let f=Hn[E.toLowerCase()];if(f===Kr.HTTP_SECUREPORT&&r[E]===It[Kr.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===Kr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===It[Kr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===Kr.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),p=Wr.LEGACY_CONFIG_PARAMS[E.toUpperCase()];p&&p.startsWith("customFunctions")&&l.hasIn(p.split("_"))&&(f=p,h=p.split("_"));let S=Zp(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(T){Nt.error(T)}}}_&&PC(l,_),tS(l);let u=l.getIn(["rootPath"]),d=Bn.join(u,Wr.HDB_CONFIG_FILE);n===!0&&TJ(c,u),gr.writeFileSync(d,String(l)),s&&(It=ca(l.toJSON())),Nt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(vC,"updateConfigValue");function TJ(e,t){try{let r=Bn.join(t,"backup",`${Wr.HDB_CONFIG_FILE}.bak`);gr.copySync(e,r),Nt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Nt.error(dJ),Nt.error(r)}}a(TJ,"backupConfigFile");var gJ=["databases"];function ca(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Cd=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!gJ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Kr[l.toUpperCase()]&&Hn[l]&&(s[Hn[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(ca,"flattenConfig");function Zp(e,t){if(e===Kr.CLUSTERING_NODENAME||e===Kr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(iJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ht.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Ht.autoCast(t)}a(Zp,"castConfigValue");function RJ(){let e=Ht.getPropsFilePath(),t=ro(e);return di(t).toJSON()}a(RJ,"getConfiguration");async function AJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return vC(void 0,void 0,s,!0),EJ}catch(i){throw typeof i=="string"||i instanceof String?aJ(i,i,cJ.BAD_REQUEST,void 0,void 0,!0):i}}a(AJ,"setConfiguration");function rS(){let e=Ht.getPropsFilePath();try{gr.accessSync(e,gr.constants.F_OK|gr.constants.R_OK)}catch(n){if(!Ht.noBootFile())throw Nt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ro(e);return di(t).toJSON()}a(rS,"readConfigFile");function di(e){return sJ.parseDocument(gr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(di,"parseYamlDoc");function OJ(){let e=rS(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ht.isEmptyOrZeroLength(t)?[]:t;let r=CC(t);if(r)throw Id.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ht.isEmptyOrZeroLength(n)?[]:n;let s=CC(n);if(s)throw Id.CONFIG_VALIDATION(s.message);if(!Ht.isEmptyOrZeroLength(n)&&!Ht.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Ht.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Id.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(OJ,"getClusteringRoutes");function BC(e){let t=LC(e);It={};for(let r in Hn){let n=t.get(r.toUpperCase());if(Ht.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Hn[r].toLowerCase();s===Kr.LOGGING_ROOT?It[s]=Bn.dirname(n):It[s]=n}return It}a(BC,"initOldConfig");function bJ(e){let t=rS();return oJ.get(t,e.replaceAll("_","."))}a(bJ,"getConfigFromFile");async function yJ(e,t){let r=di(ro());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await gr.writeFile(ro(),String(r))}a(yJ,"addConfig");function NJ(e){let t=ro(Ht.getPropsFilePath()),r=di(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Bn.join(n,Wr.HDB_CONFIG_FILE);gr.writeFileSync(s,String(r))}a(NJ,"deleteConfigFromFile");function IJ(){return Cd||(eS(),Cd)}a(IJ,"getConfigObj")});var GC=g((M_e,xC)=>{"use strict";var Dd=P(),Ld=class{static{a(this,"BaseLicense")}constructor(t=0,r=Dd.RAM_ALLOCATION_ENUM.DEFAULT,n=Dd.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},nS=class extends Ld{static{a(this,"ExtendedLicense")}constructor(t=0,r=Dd.RAM_ALLOCATION_ENUM.DEFAULT,n=Dd.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};xC.exports={BaseLicense:Ld,ExtendedLicense:nS}});var no=g((U_e,YC)=>{"use strict";var ua=require("fs-extra"),qC=Od(),kC=require("crypto"),wJ=require("moment"),CJ=require("uuid").v4,rr=K(),iS=require("path"),DJ=J(),fi=P(),{totalmem:FC}=require("os"),LJ=GC().ExtendedLicense,la="invalid license key format",MJ="061183",PJ="mofi25",UJ="aes-256-cbc",vJ=16,BJ=32,VC=ne();VC.initSync();var sS;YC.exports={validateLicense:$C,generateFingerPrint:xJ,licenseSearch:cS,getLicense:qJ,checkMemoryLimit:kJ};function oS(){return iS.join(VC.getHdbBasePath(),fi.LICENSE_KEY_DIR_NAME,fi.LICENSE_FILE_NAME)}a(oS,"getLicenseDirPath");function HJ(){let e=oS();return iS.join(e,fi.LICENSE_FILE_NAME)}a(HJ,"getLicenseFilePath");function aS(){let e=oS();return iS.join(e,fi.REG_KEY_FILE_NAME)}a(aS,"getFingerPrintFilePath");async function xJ(){let e=aS();try{return await ua.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await GJ();throw rr.error(`Error writing fingerprint file to ${e}`),rr.error(t),new Error("There was an error generating the fingerprint")}}a(xJ,"generateFingerPrint");async function GJ(){let e=CJ(),t=qC.hash(e),r=aS();try{await ua.mkdirp(oS()),await ua.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw rr.error(`Error writing fingerprint file to ${r}`),rr.error(n),new Error("There was an error generating the fingerprint")}return t}a(GJ,"writeFingerprint");function $C(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:fi.RAM_ALLOCATION_ENUM.DEFAULT,version:fi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return rr.error("empty license key passed to validate."),r;let n=aS(),s=!1;try{s=ua.statSync(n)}catch(i){rr.error(i)}if(s){let i;try{i=ua.readFileSync(n,"utf8")}catch{rr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(PJ),c=o[1];c=Buffer.concat([Buffer.from(c)],vJ);let l=Buffer.concat([Buffer.from(i)],BJ),_=kC.createDecipheriv(UJ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let f=FJ(o[0],i);if(f)u=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(la),rr.error(la),new Error(la)}let d;if(isNaN(u))try{d=JSON.parse(u),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(la),rr.error(la),new Error(la)}else r.exp_date=u;r.exp_date<wJ().valueOf()&&(r.valid_date=!1),qC.validate(o[1],`${MJ}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||rr.error("Invalid licence"),r}a($C,"validateLicense");function FJ(e,t){try{let r=kC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{rr.warn("Check old license failed")}}a(FJ,"checkOldLicense");function cS(){let e=new LJ,t=[];try{t=ua.readFileSync(HJ(),"utf-8").split(fi.NEW_LINE)}catch(r){r.code==="ENOENT"?rr.info("no license file found"):rr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(DJ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=$C(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){rr.error("There was an error parsing the license string."),rr.error(s),e.ram_allocation=fi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return sS=e,e}a(cS,"licenseSearch");async function qJ(){return sS||await cS(),sS}a(qJ,"getLicense");function kJ(){let e=cS().ram_allocation,t=process.constrainedMemory?.()||FC();if(t=Math.round(Math.min(t,FC())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(kJ,"checkMemoryLimit")});var En=g((G_e,aD)=>{"use strict";var zC="username is required",JC="nothing to update, must supply active, role or password to update",XC="password cannot be an empty string",jC="If role is specified, it cannot be empty.",ZC="active must be true or false";aD.exports={addUser:XJ,alterUser:jJ,dropUser:e4,getSuperUser:s4,userInfo:t4,listUsers:Pd,listUsersExternal:r4,setUsersToGlobal:da,findAndValidateUser:iD,getClusterUser:i4,USERNAME_REQUIRED:zC,ALTERUSER_NOTHING_TO_UPDATE:JC,EMPTY_PASSWORD:XC,EMPTY_ROLE:jC,ACTIVE_BOOLEAN:ZC};var eD=fn(),VJ=Zi(),_S=Od(),tD=SC(),rD=Yr(),dS=ys(),Qr=J(),nD=require("validate.js"),Oe=K(),{promisify:$J}=require("util"),fS=Cs(),KC=P(),WC=at(),YJ=Rr(),B_e=ne(),H_e=no(),KJ=ki(),{table:x_e}=(Ae(),ie(ke)),{handleHDBError:is,hdb_errors:WJ}=se(),{HTTP_STATUS_CODES:os,AUTHENTICATION_ERROR_MSGS:lS,HDB_ERROR_MSGS:_a}=WJ,{UserEventMsg:ES}=Ln(),uS=require("lodash"),{server:hS}=(ur(),ie(vi)),QJ=K();hS.getUser=(e,t)=>iD(e,t,t!=null);var sD={username:!0,active:!0,role:!0,password:!0},QC=new Map,Md=rD.searchByValue,zJ=rD.searchByHash,JJ=$J(VJ.delete);async function XJ(e){let t=nD.cleanAttributes(e,sD),r=tD.addUserValidation(t);if(r)throw is(new Error,r.message,os.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await Md(n),s=s&&Array.from(s)}catch(l){throw Oe.error("There was an error searching for a role in add user"),Oe.error(l),l}if(!s||s.length<1)throw is(new Error,_a.ROLE_NAME_NOT_FOUND(t.role),os.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw is(new Error,_a.DUP_ROLES_FOUND(t.role),os.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=fS.encrypt(t.password)),t.password=_S.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await eD.insert(i)}catch(l){throw Oe.error("There was an error searching for a user."),Oe.error(l),l}Oe.debug(o);try{await da()}catch(l){throw Oe.error("Got an error setting users to global"),Oe.error(l),l}if(o.skipped_hashes.length===1)throw is(new Error,_a.USER_ALREADY_EXISTS(t.username),os.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],dS.signalUserChange(new ES(process.pid)),`${c.username} successfully added`}a(XJ,"addUser");async function jJ(e){let t=nD.cleanAttributes(e,sD);if(Qr.isEmptyOrZeroLength(t.username))throw new Error(zC);if(Qr.isEmptyOrZeroLength(t.password)&&Qr.isEmptyOrZeroLength(t.role)&&Qr.isEmptyOrZeroLength(t.active))throw new Error(JC);if(!Qr.isEmpty(t.password)&&Qr.isEmptyOrZeroLength(t.password.trim()))throw new Error(XC);if(!Qr.isEmpty(t.active)&&!Qr.isBoolean(t.active))throw new Error(ZC);let r=ZJ(t.username);if(!Qr.isEmpty(t.password)&&!Qr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=fS.encrypt(t.password)),t.password=_S.hash(t.password)),t.role==="")throw new Error(jC);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Md(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=_a.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),is(new Error,c,os.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=_a.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),is(new Error,c,os.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await eD.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await da()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return dS.signalUserChange(new ES(process.pid)),s}a(jJ,"alterUser");function ZJ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(ZJ,"isClusterUser");async function e4(e){try{let t=tD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Qr.isEmpty(global.hdb_users.get(e.username)))throw is(new Error,_a.USER_NOT_EXIST(e.username),os.NOT_FOUND,void 0,void 0,!0);let n;try{n=await JJ(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await da()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return dS.signalUserChange(new ES(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(e4,"dropUser");async function t4(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=uS.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await zJ(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(t4,"userInfo");async function r4(){let e;try{e=await Pd()}catch(t){throw Oe.error("Got an error listing users."),Oe.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(r4,"listUsersExternal");async function Pd(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Md(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.error(o),o}let r={};for(let o of t)r[o.id]=uS.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await Md(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=uS.cloneDeep(o),o.role=r[o.role],n4(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),Qr.errorizeMessage(e)}return null}a(Pd,"listUsers");function n4(e){try{if(!e){Oe.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(KJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(n4,"appendSystemTablesToRole");async function da(){try{let e=await Pd();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(da,"setUsersToGlobal");async function iD(e,t,r=!0){global.hdb_users||await da();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw is(new Error,lS.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw is(new Error,lS.USER_INACTIVE,os.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(QC.get(t)===n.password)return s;if(_S.validate(n.password,t))QC.set(t,n.password);else throw is(new Error,lS.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0)}return s}a(iD,"findAndValidateUser");async function s4(){global.hdb_users||await da();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(s4,"getSuperUser");async function i4(){let e=await Pd(),t=YJ.getConfigFromFile(KC.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Qr.isEmpty(r)&&r?.role?.role===KC.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=fS.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+WC.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+WC.SERVER_SUFFIX.ADMIN,r}a(i4,"getClusterUser");var oD=[];hS.invalidateUser=function(e){for(let t of oD)try{t(e)}catch(r){QJ.error("Error invalidating user",r)}};hS.onInvalidatedUser=function(e){oD.push(e)}});var ul=g((V_e,_D)=>{"use strict";var so=K(),zr=P(),o4=my(),q_e=li(),k_e=ci(),a4=En(),{validateEvent:cD}=Ln(),ll=Un(),c4=require("process"),{resetDatabases:l4}=(Ae(),ie(ke)),u4={[zr.ITC_EVENT_TYPES.SCHEMA]:_4,[zr.ITC_EVENT_TYPES.USER]:uD};async function _4(e){let t=cD(e);if(t){so.error(t);return}so.trace("ITC schemaHandler received schema event:",e),await o4(e.message),await d4(e.message)}a(_4,"schemaHandler");async function d4(e){try{ll.resetReadTxn(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ll.resetReadTxn(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ll.resetReadTxn(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=l4();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){so.error(t)}}a(d4,"syncSchemaMetadata");var lD=[];async function uD(e){try{try{ll.resetReadTxn(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ll.resetReadTxn(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){so.warn(r)}let t=cD(e);if(t){so.error(t);return}so.trace(`ITC userHandler ${zr.HDB_ITC_CLIENT_PREFIX}${c4.pid} received user event:`,e),await a4.setUsersToGlobal();for(let r of lD)r()}catch(t){so.error(t)}}a(uD,"userHandler");uD.addListener=function(e){lD.push(e)};_D.exports=u4});var Ln=g((z_e,fD)=>{"use strict";var Y_e=K(),mS=J(),f4=P(),{ITC_ERRORS:_l}=vr(),{parentPort:K_e,threadId:E4,isMainThread:h4,workerData:W_e}=require("worker_threads"),{onMessageFromWorkers:m4,broadcast:Q_e,broadcastWithAcknowledgement:p4}=it();fD.exports={sendItcEvent:S4,validateEvent:dD,SchemaEventMsg:T4,UserEventMsg:g4};var Ud;m4(async(e,t)=>{Ud=Ud||ul(),dD(e),Ud[e.type]&&await Ud[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function S4(e){return!h4&&e.message&&(e.message.originator=E4),p4(e)}a(S4,"sendItcEvent");function dD(e){if(typeof e!="object")return _l.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||mS.isEmpty(e.type))return _l.MISSING_TYPE;if(!e.hasOwnProperty("message")||mS.isEmpty(e.message))return _l.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||mS.isEmpty(e.message.originator))return _l.MISSING_ORIGIN;if(f4.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return _l.INVALID_EVENT(e.type)}a(dD,"validateEvent");function T4(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(T4,"SchemaEventMsg");function g4(e){this.originator=e}a(g4,"UserEventMsg")});var ys=g((j_e,pD)=>{"use strict";var ED=P(),X_e=J(),vd=K(),hD=jb(),fa,{sendItcEvent:mD}=Ln();function R4(e){try{vd.trace("signalSchemaChange called with message:",e),fa=fa||ul();let t=new hD(ED.ITC_EVENT_TYPES.SCHEMA,e);return fa.schema(t),mD(t)}catch(t){vd.error(t)}}a(R4,"signalSchemaChange");function A4(e){try{vd.trace("signalUserChange called with message:",e),fa=fa||ul();let t=new hD(ED.ITC_EVENT_TYPES.USER,e);return fa.user(t),mD(t)}catch(t){vd.error(t)}}a(A4,"signalUserChange");pD.exports={signalSchemaChange:R4,signalUserChange:A4}});var ml={};qe(ml,{addAnalyticsListener:()=>hl,recordAction:()=>nr,recordActionBinary:()=>Jr,setAnalyticsEnabled:()=>O4});function O4(e){ND=e}function nr(e,t,r,n,s){if(!ND)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=xd.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},xd.set(i,o)}Bd||b4()}function Jr(e,t,r,n,s){nr(!!e,t,r,n,s)}function hl(e){CD.push(e)}function b4(){Bd=performance.now(),setTimeout(async()=>{let e=performance.now()-Bd;Bd=0;let t=[],r={time:Date.now(),period:e,threadId:io.threadId,metrics:t};for(let[s,i]of xd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of DD){let E=Math.floor(c*d),f=o[E-1];if(E>l){let h=E-l;if(f===u){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:f,count:h}:f),u=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await LD()}let n=process.memoryUsage();t.push({metric:"memory",threadId:io.threadId,byThread:!0,...n});for(let s of CD)s(t);xd=new Map,io.parentPort?io.parentPort.postMessage({type:wD,report:r}):UD({report:r})},ID).unref()}async function y4(e,t=6e4){let r=TS(),n=MD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,dl.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,dl.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;u=p;let{metrics:T,threadId:A}=S;for(let b of T||[]){let{path:I,method:B,type:U,metric:q,count:M,total:Q,distribution:z,threads:j,...oe}=b;M||(M=1);let le=q+(I?"-"+I:"");B!==void 0&&(le+="-"+B),U!==void 0&&(le+="-"+U);let ue=c.get(le);if(ue){if(ue.threads){let Ne=ue.threads[A];if(Ne)ue=Ne;else{ue.threads[A]=Object.assign({},oe);continue}}ue.count||(ue.count=1);let Be=ue.count;for(let Ne in oe){let He=oe[Ne];typeof He=="number"&&(ue[Ne]=(ue[Ne]*Be+He*M)/(Be+M))}ue.count+=M,Q>=0&&(ue.total+=Q,ue.ratio=ue.total/ue.count)}else ue=Object.assign({period:t},b),delete ue.distribution,c.set(le,ue),ue.byThread&&(ue.threads=[],ue.threads[A]=Object.assign({},oe),_.push(ue));if(z){z=z.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Be=l.get(le);Be?Be.push(...z):l.set(le,z)}}await LD()}for(let p of _){let{path:S,method:T,type:A,metric:b,count:I,total:B,distribution:U,threads:q,...M}=p;q=q.filter(Q=>Q);for(let Q in M){if(typeof p[Q]!="number")continue;let z=0;for(let j of q){let oe=j[Q];typeof oe=="number"&&(z+=oe)}p[Q]=z}p.count=q.length,delete p.threads,delete p.byThread}for(let[p,S]of l){let T=c.get(p);S.sort((Ne,He)=>Ne.value>He.value?1:-1);let A=T.count-1,b=[],I=0,B=0,U;for(let Ne of DD){let He=A*Ne;for(;I<He;)U=S[B++],I+=U.count,B===1&&I--;let zu=S[B>1?B-2:0];U||(U=S[0]),b.push(U.value-(U.value-zu.value)*(I-He)/U.count)}let[q,M,Q,z,j,oe,le,ue,Be]=b;Object.assign(T,{p1:q,p10:M,p25:Q,median:z,p75:j,p90:oe,p95:le,p99:ue,p999:Be})}let d;for(let[p,S]of c)S.id=(0,Hd.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let p=(0,Hd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:f-SD,active:h-TD,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}SD=f,TD=h}async function gD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function TS(){return RD||(RD=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function MD(){return AD||(AD=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function w4(){PD=!0;let e=(0,El.get)(SS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await y4(ID,e),await gD(TS(),N4),await gD(MD(),I4)},Math.min(e/2,2147483647)).unref()}function UD(e,t){let r=e.report;r.threadId=t?.threadId||io.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(OD+=n.mean*n.count);r.totalBytesProcessed=OD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(bD.get(t))}),bD.set(t,t.performance.eventLoopUtilization())),r.id=(0,Hd.getNextMonotonicTime)(),TS().primaryStore.put(r.id,r),PD||w4(),C4&&(vD=L4(r))}async function L4(e){if(await vD,!Ei){let r=(0,fl.dirname)((0,dl.getLogFilePath)());try{Ei=await(0,pS.open)((0,fl.join)(r,"analytics.log"),"r+")}catch{Ei=await(0,pS.open)((0,fl.join)(r,"analytics.log"),"w+")}}let t=(await Ei.stat()).size;if(t>D4){let r=Buffer.alloc(t);await Ei.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Ei.write(r,{position:0}),await Ei.truncate(r.length),t=r.length}await Ei.write(JSON.stringify(e)+`
10
- `,t)}var io,yD,dl,fl,pS,Hd,El,SS,xd,ND,Bd,ID,wD,CD,DD,SD,TD,LD,N4,I4,RD,AD,PD,OD,bD,C4,vD,Ei,D4,Ds=Re(()=>{io=require("worker_threads"),yD=x(it());Ae();dl=x(K()),fl=require("path"),pS=require("fs/promises"),Hd=x(Br()),El=x(ne()),SS=x(P());ur();(0,El.initSync)();xd=new Map,ND=(0,El.get)(SS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(O4,"setAnalyticsEnabled");a(nr,"recordAction");st.recordAnalytics=nr;a(Jr,"recordActionBinary");Bd=0,ID=1e3,wD="analytics-report",CD=[];a(hl,"addAnalyticsListener");DD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(b4,"sendAnalytics");a(y4,"aggregation");SD=0,TD=0,LD=a(()=>new Promise(setImmediate),"rest");a(gD,"cleanup");N4=36e5,I4=31536e6;a(TS,"getRawAnalyticsTable");a(MD,"getAnalyticsTable");(0,yD.setChildListenerByType)(wD,UD);a(w4,"startScheduledTasks");OD=0,bD=new Map,C4=!1;a(UD,"recordAnalytics");D4=1e6;a(L4,"logAnalytics")});var BD={};qe(BD,{Headers:()=>hi,appendHeader:()=>Gd});function Gd(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var hi,pl=Re(()=>{hi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Gd,"appendHeader")});var OS={};qe(OS,{coerceType:()=>Fd,makeTable:()=>Vd,setServerUtilities:()=>F4,updateResource:()=>qd});function Vd(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]);let T=Xh(i,n,l),A=0,b,I,B={},U=Promise.resolve(),q,M,Q;for(let Y of S)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(q=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(M=Y),Y.expiresAt&&(Q=Y),Y.isPrimaryKey&&(B=Y);let z,j=[],oe=[],le=1,ue=2,Be={},Ne={},He=864e5,zu,Ju,Qs,JA=!1,Th,gh,QG=i.getRange({start:!1,end:!1}).constructor,zG=10,JG=6;h&&ZA();class Ye extends Yt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=q;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=u;static schemaDefined=_;static sourcedFrom(m,R){R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),I=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let D=a(L=>{let y=this.sources.slice(0,-1);if(y=y.filter(v=>v[L]&&(!v[L].reliesOnPrototype||v.prototype[L])),y.length>0)if(y.length===1){let v=y[0];return(F,C,G)=>{if(F?.source!==v)return v[L](C,G,F)}}else return(v,F,C)=>{let G=[];for(let H of y){if(v?.source===H)break;G.push(H[L](F,C,v))}return Promise.all(G)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],N=a(L=>{if(O[L]&&(!O[L].reliesOnPrototype||O.prototype[L]))return(y,v,F)=>{if(!y?.source)return O[L](v,F,y)}},"getApplyToCanonicalSource");return Be={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},Ne={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let L=!1,y=a(async(v,F)=>{let C=v.value,G=v.table?ct[c][v.table]:Ye;if(c===Gn.SYSTEM_SCHEMA_NAME&&(v.table===Gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||v.table===Gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),v.id===void 0&&(v.id=C[G.primaryKey],v.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(v));v.source=m;let H=await G.getResource(v.id,F,Ea);switch(v.type){case"put":return H._writeUpdate(C,!0,Ea);case"patch":return H._writeUpdate(C,!1,Ea);case"delete":return H._writeDelete(Ea);case"publish":return H._writePublish(C,Ea);case"invalidate":return H.invalidate(Ea);default:et.error("Unknown operation",v.type,v.id)}},"writeUpdate");try{let v=m.subscribe;v&&p==null&&(p=!0);let F=m.subscribeOnThisThread?m.subscribeOnThisThread((0,ao.getWorkerIndex)()):(0,ao.getWorkerIndex)()===0,C=v&&F&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let H of C)try{if(!(H.type==="transaction"?H.writes[0]:H)){et.error("Bad subscription event",H);continue}if(H.source=m,G)if(H.beginTxn)G.resolve();else{y(H,G);continue}if(H.type==="end_txn")continue;let _e=je(H,()=>{if(H.type==="transaction"){let re=[];for(let Ue of H.writes)try{re.push(y(Ue,H))}catch(ce){throw ce.message+=" writing "+JSON.stringify(Ue)+" of event "+JSON.stringify(H),ce}return Promise.all(re)}else if(H.type==="define_schema"){let re=this.attributes.slice(0),Ue;for(let ce of H.attributes)re.find(De=>De.name===ce.name)||(re.push(ce),Ue=!0);Ue&&(Et({table:s,database:c,attributes:re,origin:"cluster"}),bl.signalSchemaChange(new yl.SchemaEventMsg(process.pid,Gn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return H.beginTxn?(G=H,y(H,H),new Promise(re=>{G.resolve=re})):y(H,H)});L&&(await _e,bl.signalUserChange(new yl.UserEventMsg(process.pid))),H.onCommit&&(_e?.then?_e.then(H.onCommit):H.onCommit())}catch(Z){et.error("error in subscription handler",Z)}}}catch(v){et.error(v)}})(),this}static get isCaching(){return I}static getResource(m,R,D){let O=super.getResource(m,R,D);if(m!=null){cc(m);try{if(O.hasOwnProperty(fe))return O;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!D?.async||i.cache?.get(m),L=bn(R),y=L.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Rh(m,R,{transaction:y},N,v=>{if(v?qd(O,v):O[fe]=null,R.onlyIfCached&&R.noCacheStore){if(!O.doesExist())throw new Or.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let F=Ah(m,v,R,O);if(F)return L?.disregardReadTxn(),O[gS]=!0,AS(F,C=>(qd(O,C),O))}return O})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return O}ensureLoaded(){let m=Ah(this[Me],this[Ar],this[be]);if(m)return this[gS]=!0,AS(m,R=>{this[Ar]=R,this[fe]=R.value,this[Al]=R.version})}static setTTLExpiration(m){if(typeof m=="number")E=m*1e3,f||(f=0);else if(m&&typeof m=="object")E=m.expiration*1e3,f=(m.eviction||0)*1e3,He=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");He=He||(E+f)/4,Zu()}static enableAuditing(m=!0){h=m,m&&ZA(),Ye.audit=m}static coerceId(m){return m===""?null:Fd(m,B)}static async dropTable(){if(delete ct[c][s],c===o){for(let m of S)u.remove(Ye.tableName+"/"+m.name),r[m.name]?.drop();u.remove(Ye.tableName+"/"),i.drop(),await u.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));bl.signalSchemaChange(new yl.SchemaEventMsg(process.pid,Gn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[wn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let R=Ye.getRecordCount();return{recordCount:R.recordCount,estimatedRecordRange:R.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(m,R){let D=ju(m);if(D?.read){if(D.isSuperUser)return!0;let O=D.attribute_permissions,N=R?.select;if(O?.length>0||JA&&N){if(R||(R={}),N){let L=O?.length>0&&RS(O,"read");R.select=N.map(y=>{let v=y.name||y;if(!L||L[v]){let F=Qs[v]?.definition?.tableClass;if(F){if(y.name||(y={name:y}),!F.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else R.select=O.filter(L=>L.read&&!Qs[L.attribute_name]).map(L=>L.attribute_name);return R}else return!0}}allowUpdate(m,R){let D=ju(m);if(D?.update){let O=D.attribute_permissions;if(O?.length>0){let N=RS(O,"update");for(let L in R)if(!N[L])return!1;for(let L of O){let y=L.attribute_name;!L.update&&!(y in R)&&(R[y]=this.getProperty(y))}}return!0}}allowCreate(m,R){if(this[wn]){let D=ju(m);if(D?.insert){let O=D.attribute_permissions;if(O?.length>0){let N=RS(O,"insert");for(let L in R)if(!N[L])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return ju(m)?.delete}update(m,R){if(!bn(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let O;return typeof m=="object"&&m&&(R?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[fe]={},this[Tt]=m):(O=this[Tt],O&&(m=Object.assign(O,m)),this[Tt]=O=m)),this._writeUpdate(this[Tt],R),this}addTo(m,R){if(typeof R=="number"||typeof R=="bigint")this[Sl]===xD?this.set(m,(+this.getProperty(m)||0)+R):(this[Sl]||this.update(),this.set(m,new M_(R)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,R){if(typeof R=="number")return this.addTo(m,-R);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Ar]}invalidate(m){let R=this[be],D=this[Me];cc(D),bn(this[be]).addWrite({key:D,store:i,invalidated:!0,entry:this[Ar],nodeName:this[be]?.nodeName,before:Be.invalidate?.bind(this,R,D),beforeIntermediate:Ne.invalidate?.bind(this,R,D),commit:(N,L)=>{if(L?.version>N)return;let y=null;for(let v in r)y||(y={}),y[v]=this.getProperty(v);T(D,y,this[Ar],N,Tl,h,this[be],0,"invalidate")}})}static evict(m,R,D){let O=this.Source,N;if(!((I||h)&&(!R||(N=i.getEntry(m),!N||!R)||N.version!==D))){if(I){if(i.hasLock(m,N.version))return;let L;for(let y in r)L||(L={}),L[y]=R[y];if(L)return T(m,L,N,D,gl,null,null,0,null,!0)}return i.ifVersion(m,D,()=>{Xu(m,R,null)}),h?T(m,null,N,D,gl,null,null,0,null,!0):i.remove(m,D)}}lock(){throw new Error("Not yet implemented")}static operation(m,R){return m.table||=s,m.schema||=c,KD.operation(m,R)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,R,D){let O=this[be],N=bn(O),L=this[Me];cc(L);let y=this[Ar];this[Sl]=R?xD:H4;let v={key:L,store:i,entry:y,nodeName:O?.nodeName,validate:F=>{m||(m=this[Tt]),R||m&&D_(this[Tt]===m?this:m)?O?.source||(N.checkOverloaded(),this.validate(m,!R),M&&(m[M.name]=M.type==="Date"?new Date(F):M.type==="String"?new Date(F).toISOString():F),R&&(t&&m[t]!==L&&(m[t]=L),q&&(y?.value?m[q.name]=y?.value[q.name]:m[q.name]=q.type==="Date"?new Date(F):q.type==="String"?new Date(F).toISOString():F),m=Gi(m))):N.removeWrite(v)},before:R?Be.put?()=>Be.put(O,L,m):null:Be.patch?()=>Be.patch(O,L,m):Be.put?()=>Be.put(O,L,Gi(this)):null,beforeIntermediate:R?Ne.put?()=>Ne.put(O,L,m):null:Ne.patch?()=>Ne.patch(O,L,m):Ne.put?()=>Ne.put(O,L,Gi(this)):null,commit:(F,C,G)=>{if(G){if(O&&C?.version>(O.lastModified||0)&&(O.lastModified=C.version),this[Ar]=C,C?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");R||(this[fe]=C?.value??null)}this[Tt]=void 0,this[Al]=F;let H=C?.value,Z=m;if(this[Sl]=0,C?.version>=F)if(h){let ce=C.localTime,De=C.version;for(;Z&&(ce>F||De>=F&&ce>0);){let te=l.get(ce);if(!te)break;let X=Bt(te);if(De=X.version,De>F){if(X.type==="patch"){let Se=X.getValue(i);Z=w_(Z,Se)}else if(X.type==="put"||X.type==="delete")return}else if(De===F)return;ce=X.previousLocalTime}}else{if(R)return;Z=w_(Z,H)}let _e;if(R?_e=Z:(this[fe]=H,_e=R?Z:Gi(this,Z)),this[fe]=_e,_e?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let re;R||(re=m),Xu(L,H,_e);let Ue=R?"put":"patch";T(L,_e,C,F,0,h,O,O.expiresAt||(E?E+Date.now():0),Ue,!1,re),O.expiresAt&&Zu()}};N.addWrite(v)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[wn]){for await(let R of this.search(m))(await Ye.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[fe]?this._writeDelete(m):!1}_writeDelete(m){let R=bn(this[be]),D=this[Me];cc(D);let O=this[be];return R.addWrite({key:D,store:i,resource:this,nodeName:O?.nodeName,before:Be.delete?.bind(this,O,D),beforeIntermediate:Ne.delete?.bind(this,O,D),commit:(N,L,y)=>{let v=L?.value;y&&(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),qd(this,L)),!(L?.version>N)&&(Xu(this[Me],v),et.trace("Write delete entry",D,N),h||p?(T(D,null,this[Ar],N,0,h,this[be],0,"delete"),h||Zu()):i.remove(this[Me]))}}),!0}search(m){let R=this[be],D=bn(R);if(!m)throw new Error("No query provided");let O=m.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(O=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(O));let N,L={};function y(X,Se){let xe;switch(Se){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');xe=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Se)}let Kn=xe&&{},zs;for(let Ke of X){if(Ke.conditions){Ke.conditions=y(Ke.conditions,Ke.operator);continue}let Vt=Ke[0]??Ke.attribute,sn=Vt==null?B:As(S,Vt);if(sn){if(xe){let Wn=In(Vt),$t=Kn[Wn];$t?($t.push(Ke),zs=!0):Kn[Wn]=[Ke]}(sn.type||um[Ke.comparator])&&(Ke[1]===void 0?Ke.value=F(Ke.value,sn):Ke[1]=F(Ke[1],sn))}else if(Vt!=null)throw(0,Or.handleHDBError)(new Error,`${Vt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(zs)for(let Ke in Kn){let Vt=Kn[Ke],sn=Vt.length;if(sn>1)for(let Wn=0;Wn<sn;Wn++){let $t=Vt[Wn];if($t.comparator==="ge"||$t.comparator==="greater_than_equal")for(let Js=0;Js<sn;Js++){let xo=Vt[Js];(xo.comparator==="le"||xo.comparator==="less_than_equal")&&($t.comparator="between",$t.value=[$t.value,xo.value],X.splice(X.indexOf(xo),1))}if($t.comparator==="equals"||!$t.comparator){for(let Js=0;Js<sn;Js++)if(Js!==Wn){let xo=Vt[Js];X.splice(X.indexOf(xo),1)}break}}}return X}a(y,"prepareConditions");function v(X,Se){if(m.enforceExecutionOrder)return X;for(let xe of X)xe.conditions&&(xe.conditions=v(xe.conditions,xe.operator));return X.length>1&&Se!=="or"?(0,$D.sortBy)(X,x_(Ye)):X}a(v,"orderConditions");function F(X,Se){return Array.isArray(X)?X.map(xe=>Fd(xe,Se)):Fd(X,Se)}a(F,"coerceTypedValues");let C=m.operator;(O.length>0||C)&&(O=y(O,C));let G=typeof m.sort=="object"&&m.sort,H;if(G&&C!=="or"){let X=G.attribute;if(X==null)throw new Or.ClientError("Sort requires an attribute");if(N=O.find(Se=>In(Se.attribute)===In(X)),!N){let Se=As(S,X);if(!Se)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);if(Se.indexed)N={attribute:X,comparator:"sort"},O.push(N);else if(O.length===0&&!m.allowFullScan)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not indexed and not combined with any other conditions`,404)}N&&(N.descending=!!G.descending)}O=v(O,C),G&&(N&&O[0]===N?G.next&&(H={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(N&&O.splice(O.indexOf(N),1),H=G));let Z=m.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:O,operator:C,postOrdering:H,selectApplied:!!Z};let _e=D.useReadTxn(),re=_m(O,C,Ye,_e,m,R,(X,Se)=>XA(X,Z,R,_e,Se),L),Ue=m.ensureLoaded!==!1;H||(re=te(re));let ce=Ye.transformEntryForSelect(Z,R,_e,L,Ue,!0),De=Ye.transformToOrderedSelect(re,Z,H,_e,R,ce);function te(X){return m.offset||m.limit!==void 0?X.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):X}return a(te,"applyOffset"),H&&(De=te(De)),De.onDone=()=>{De.onDone=null,D.doneReadTxn()},De.selectApplied=!0,De.getColumns=()=>{if(Z){let X=[];for(let Se of Z)Se==="*"?X.push(...S.map(xe=>xe.name)):X.push(Se.name||Se);return X}return S.map(X=>X.name)},De}static transformToOrderedSelect(m,R,D,O,N,L){let y=new QG;if(D){m=XA(m,R,O,N,null);let v;y.iterate=function(){let C,G=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),H,Z=D.dbOrderedAttribute,_e,re,Ue=!0;function ce(te){let X=te.next&&ce(te.next),Se=te.descending;return(xe,Kn)=>{let zs=Oh(xe,te.attribute,O),Ke=Oh(Kn,te.attribute,O),Vt=Se?(0,co.compareKeys)(Ke,zs):(0,co.compareKeys)(zs,Ke);return Vt===0?X?.(xe,Kn)||0:Vt}}a(ce,"createComparator");let De=ce(D);return{async next(){let te;if(C)if(te=C.next(),te.done){if(H)return y.onDone&&y.onDone(),te}else return{value:await L.call(this,te.value)};v=[],_e&&v.push(_e);do if(te=await G.next(),te.done){if(H=!0,v.length)break;return y.onDone&&y.onDone(),te}else{let X=te.value;if(X?.then&&(X=await X),Z){let Se=Oh(X,Z,O);if(Ue)Ue=!1,re=Se;else if(Se!==re){re=Se,_e=X;break}}v.push(X)}while(!0);return D.isGrouped,v.sort(De),C=v[Symbol.iterator](),te=C.next(),te.done?(y.onDone&&y.onDone(),te):{value:await L.call(this,te.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let F=a(C=>{if(typeof R=="object"&&Array.isArray(C.attribute))for(let G=0;G<R.length;G++){let H=R[G],Z;if(H.name===C.attribute[0]){for(Z=H.sort||(H.sort={});Z.next;)Z=Z.next;Z.attribute=C.attribute.slice(1),Z.descending=C.descending}else H===C.attribute[0]&&(R[G]=Z={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&F(C.next)},"applySortingOnSelect");F(D)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(L);return y}static transformEntryForSelect(m,R,D,O,N,L){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(G=>(R?.transaction?.stale&&(R.transaction.stale=!1),G?.key??G),"transform");return m===t?C:m.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let y;N&&I&&!m?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(y=!0);let v,F=a(function(C){let G;if(R?.transaction?.stale&&(R.transaction.stale=!1),C!=null){if(Th=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Rh(C.key??C,R,{transaction:D,lazy:m?.length<4},this?.isSync,H=>H),C?.then)return C.then(F.bind(this));G=C?.value}if(y&&C?.metadataFlags&(Tl|gl)||C?.expiresAt&&C?.expiresAt<Date.now()){if(R.onlyIfCached&&R.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let H=Ah(C.key??C,C,R);if(H?.then)return H.then(F)}}if(G==null)return L?oo.SKIP:G;if(m&&!(m[0]==="*"&&m.length===1)){let H,Z=a((re,Ue)=>{let ce;typeof re=="object"?ce=re.name:ce=re;let De=Qs?.[ce],te;if(De){let X=O?.[ce];if(X)if(X.hasMappings){let xe=De.from?G[De.from]:In(C.key);te=X.get(xe),te||(te=[])}else te=X.fromRecord?.(G);else te=De(G,R,C);let Se=a(xe=>{if(xe&&typeof xe=="object"){let Kn=De.definition?.tableClass||Ye;v||(v={});let zs=v[ce]||(v[ce]=Kn.transformEntryForSelect(ce===re?null:re.select||(Array.isArray(re)?re:null),R,D,X,N));if(Array.isArray(xe)){let Ke=[],Vt=Kn.transformToOrderedSelect(xe,re.select,typeof re.sort=="object"&&re.sort,R,D,zs)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),sn=a($t=>{for(;!$t.done;){if($t?.then)return $t.then(sn);Ke.push($t.value),$t=Vt.next()}Ue(Ke,ce)},"nextValue"),Wn=sn(Vt.next());Wn&&(H||(H=[]),H.push(Wn));return}else if(xe=zs.call(this,xe),xe?.then){H||(H=[]),H.push(xe.then(Ke=>Ue(Ke,ce)));return}}Ue(xe,ce)},"handleResolvedValue");te?.then?(H||(H=[]),H.push(te.then(Se))):Se(te);return}else te=G[ce],te&&typeof te=="object"&&ce!==re&&(te=Ye.transformEntryForSelect(re.select||re,R,D,null)({value:te}));Ue(te,ce)},"selectAttribute"),_e;if(typeof m=="string")Z(m,re=>{_e=re});else if(Array.isArray(m))if(m.asArray)_e=[],m.forEach((re,Ue)=>{re==="*"?m[Ue]=G:Z(re,ce=>_e[Ue]=ce)});else{_e={};let re=m.forceNulls;for(let Ue of m)if(Ue==="*")for(let ce in G)_e[ce]=G[ce];else Z(Ue,(ce,De)=>{ce===void 0&&re&&(ce=null),_e[De]=ce})}else throw new Or.ClientError("Invalid select"+m);return H?Promise.all(H).then(()=>_e):_e}return G},"transform");return F}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let R=!m.rawEvents,D=[],O=Qb(Ye,this[Me]??null,function(L,y,v,F){try{let C=y.getValue?.(i,R);if(!C&&y.type==="patch"&&R){let H=i.getEntry(L);H?.version===y.version?C=H.value:C=y.getValue?.(i,!0,v),y.type="put"}let G={id:L,timestamp:v,value:C,version:y.version,type:y.type,beginTxn:F};D?D.push(G):this.send(G)}catch(C){et.error(C)}},m.startTime||0,m),N=(async()=>{this[wn]&&(O.includeDescendants=!0,m.onlyChildren&&(O.onlyChildren=!0)),m.supportsTransactions&&(O.supportsTransactions=!0);let L=this[Me],y=m.previousCount;y>1e3&&(y=1e3);let v=m.startTime;if(this[wn]){if(v){if(y)throw new Or.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:F,value:C}of l.getRange({start:v,exclusiveStart:!0,snapshot:!1})){let G=Bt(C);if(G.tableId!==n)continue;let H=G.recordId;if(L==null||kD(L,H)){let Z=G.getValue(i,R,F);if(O.send({id:H,timestamp:F,value:Z,version:G.version,type:G.type}),O.queue?.length>FD&&await O.waitForDrain()===!1)return}O.startTime=F}}else if(y){let F=[];for(let{key:C,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let H=Bt(G);if(H.tableId!==n)continue;let Z=H.recordId;if(L==null||kD(L,Z)){let _e=H.getValue(i,R,C);if(F.push({id:Z,timestamp:C,value:_e,version:H.version,type:H.type}),--y<=0)break}}catch(H){et.error("Error getting history entry",C,H)}for(let C=F.length;C>0;)O.send(F[--C]);F[0]&&(O.startTime=F[0].timestamp)}else if(!m.omitCurrent){for(let{key:F,value:C,version:G,localTime:H}of i.getRange({start:L??!1,end:L==null?void 0:[L,co.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(O.send({id:F,timestamp:H,value:C,version:G,type:"put"}),O.queue?.length>FD&&await O.waitForDrain()===!1))return}}else{y&&!v&&(v=0);let F=this[Ar]?.localTime;if(F===Jh&&(i.cache?.delete(L),this[Ar]=i.getEntry(L),et.trace("re-retrieved record",F,this[Ar]?.localTime),F=this[Ar]?.localTime),et.trace("Subscription from",v,"from",L,F),v<F){let C=[],G=F;do{let H=l.get(G);if(H){m.omitCurrent=!0;let Z=Bt(H),_e=Z.getValue(i,R,G);R&&(Z.type="put"),C.push({id:L,value:_e,timestamp:G,...Z}),G=Z.previousLocalTime}else break;y&&y--}while(G>v&&y!==0);for(let H=C.length;H>0;)O.send(C[--H]);O.startTime=F}!m.omitCurrent&&this.doesExist()&&O.send({id:L,timestamp:F,value:this[fe],version:this[Al],type:"put"})}for(let F of D)O.send(F);D=null})();return m.listener&&O.on("data",m.listener),O}doesExist(){return!!(this[fe]||this[Sl])}publish(m,R){this._writePublish(m,R)}_writePublish(m,R){let D=bn(this[be]),O=this[Me]||null;cc(O);let N=this[be];D.addWrite({key:O,store:i,entry:this[Ar],nodeName:N?.nodeName,validate:()=>{N?.source||(D.checkOverloaded(),this.validate(m))},before:Be.publish?.bind(this,N,O,m),beforeIntermediate:Ne.publish?.bind(this,N,O,m),commit:(L,y,v)=>{y===void 0&&p&&!h&&Zu(),T(O,y?.value??null,y,y?.version||L,0,!0,N,y?.expiresAt,"message",!1,m)}})}validate(m,R){let D,O=a((N,L,y)=>{if(L.type&&N!=null)if(R&&N.__op__&&(N=N.value),L.properties){typeof N!="object"&&(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be an object${L.type?" ("+L.type+")":""}`);let v=L.properties;for(let F=0,C=v.length;F<C;F++){let G=v[F],H=O(N[G.name],G,y+"."+G.name);H&&(N[G.name]=H)}if(L.sealed&&N!=null&&typeof N=="object")for(let F in N)v.find(C=>C.name===F)||(D||(D=[])).push(`Property ${F} is not allowed within object in property ${y}`)}else switch(L.type){case"Int":(typeof N!="number"||N>>0!==N)&&(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(v=>typeof v=="string")||(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(L.elements)for(let v=0,F=N.length;v<F;v++){let C=N[v],G=O(C,L.elements,y+"[*]");G&&(N[v]=G)}}else(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&N==null&&(D||(D=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,L=S.length;N<L;N++){let y=S[N];if(!y.relationship&&(!R||y.name in m)){let v=O(m[y.name],y,y.name);v&&(m[y.name]=v)}}if(d)for(let N in m)S.find(L=>L.name===N)||(D||(D=[])).push(`Property ${N} is not allowed`);if(D)throw new Or.ClientError(D.join(". "))}getUpdatedTime(){return this[Al]}wasLoadedFromSource(){return I?!!this[gS]:void 0}static async addAttributes(m){let R=S.slice(0);for(let D of m){if(!D.name)throw new Or.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Or.ClientError("Attribute names cannot include backticks or forward slashes");(0,YD.validateAttribute)(D.name),R.push(D)}return Et({table:s,database:c,schemaDefined:_,attributes:R}),Ye.indexingOperation}static async removeAttributes(m){let R=S.filter(D=>!m.includes(D.name));return Et({table:s,database:c,schemaDefined:_,attributes:R}),Ye.indexingOperation}static getRecordCount(m){let R=i.getStats().entryCount,D=1e3/2,O=performance.now(),N=Math.floor(R/2),L=m?.exactCount,y=0,v=0,F;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&y++,v++,!L&&v<N&&performance.now()-O>D){F=v;break}if(F){let C=y;y=0;for(let{value:te}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:F}))te!=null&&y++;let G=F*2,H=(y+C)/G,Z=Math.pow((y-C+1)/F/2,2)+H*(1-H)/G,_e=Math.max(Math.sqrt(Z)*R,1),re=Math.round(H*R),Ue=Math.max(re-1.96*_e,y+C),ce=Math.min(re+1.96*_e,R),De=Math.pow(10,Math.round(Math.log10(_e)));return De>re&&(De=De/10),y=Math.round(re/De)*De,{recordCount:y,estimatedRange:[Math.round(Ue),Math.round(ce)]}}return{recordCount:y}}static updatedAttributes(){Qs=this.propertyResolvers={$id:(m,R,D)=>({value:D.key}),$updatedtime:(m,R,D)=>D.version,$record:(m,R,D)=>D?{value:m}:m};for(let m of this.attributes){m.resolve=null;let R=m.relationship;if(R)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),JA=!0,R.to)m.elements?.definition?(Qs[m.name]=m.resolve=(D,O,N)=>{let L=D[R.from?R.from:t],y=m.elements.definition.tableClass;return N?Wo({attribute:R.to,value:L},bn(O).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:R.to,value:L}],O).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,R.from&&(m.resolve.from=R.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(R.from){let D=m.definition||m.elements?.definition;D?(Qs[m.name]=m.resolve=(O,N,L)=>{let y=O[R.from];if(y!==void 0){if(m.elements){let v,F=y.map(C=>{let G=L?D.tableClass.primaryStore.getEntry(C,{transaction:bn(N).getReadTxn()}):D.tableClass.get(C,N);return G?.then&&(v=!0),G});return R.filterMissing?v?Promise.all(F).then(C=>C.filter(VD)):F.filter(VD):v?Promise.all(F):F}return L?D.tableClass.primaryStore.getEntry(y,{transaction:bn(N).getReadTxn()}):D.tableClass.get(y,N)}},m.set=(O,N)=>{if(Array.isArray(N)){let L=N.map(y=>y[Me]||y[D.tableClass.primaryKey]);O[R.from]=L}else{let L=N[Me]||N[D.tableClass.primaryKey];O[R.from]=L}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=R.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}P_(this,this)}static async deleteHistory(m=0){let R;for(let{key:D,value:O}of l.getRange({start:0,end:m}))await Rl(),Bt(O).tableId===n&&(R=l.remove(D));await R}static async*getHistory(m=0,R=1/0){for(let{key:D,value:O}of l.getRange({start:m,end:R})){await Rl();let N=Bt(O);N.tableId===n&&(yield{id:N.recordId,localTime:D,version:N.version,type:N.type,value:N.getValue(i,!0,D),user:N.user})}}static async getHistoryOfRecord(m){let R=[];if(m==null)throw new Error("An id is required");let D=i.getEntry(m);if(!D)return R;let O=D.localTime;if(!O)throw new Error("The entry does not have a local audit time");let N=0;do{await Rl();let L=l.get(O);if(L){let y=Bt(L);R.push({id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user}),O=y.previousLocalTime}else break}while(N<1e3&&O);return R.reverse()}static cleanup(){z?.remove()}}Ye.updatedAttributes();let XG=Ye.prototype;return XG[B4]=!0,E&&Ye.setTTLExpiration(E/1e3),Q&&jG(),Ye;function Xu(Y,m,R){let D;for(let O in r){let N=r[O],L=N.isIndexing,y=R?.[O],v=m?.[O];if(y===v&&!L)continue;D=!0;let F=N.indexNulls,C=(0,Ol.getIndexedValues)(y,F),G=(0,Ol.getIndexedValues)(v,F);if(G?.length>0){let H=new Set(G);if(C=C?C.filter(Z=>{if(H.has(Z))H.delete(Z);else return!0}):[],G=Array.from(H),(G.length>0||C.length>0)&&HD){let Z=G.concat(C).map(_e=>({key:_e,value:Y}));N.prefetch(Z,qD)}for(let Z=0,_e=G.length;Z<_e;Z++)N.remove(G[Z],Y)}else C?.length>0&&HD&&N.prefetch(C.map(H=>({key:H,value:Y})),qD);if(C)for(let H=0,Z=C.length;H<Z;H++)N.put(C[H],Y)}return D}a(Xu,"updateIndices");function cc(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>GD)throw new Error("Primary key size is too large: "+Y.length);break;case"object":if(Y===null)return!0;break;case"bigint":if(Y<2n**64n&&Y>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Y)}if((0,co.writeKey)(Y,x4,0)>GD)throw new Error("Primary key size is too large: "+Y.length);return!0}a(cc,"checkValidId");function Rh(Y,m,R,D,O){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),R.transaction?.isDone)return O(null,Y);let L=i.getEntry(Y,R);return L&&m&&(L?.version>(m.lastModified||0)&&(m.lastModified=L.version),L?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=L.localTime)),O(L,Y)},"whenPrefetched");return D?N():le>0?(le--,N()):new Promise((L,y)=>{le===0?(le--,i.prefetch([Y],()=>{v(),F()})):(j.push(Y),oe.push(F),j.length>JG&&(le--,v()));function v(){if(j.length>0){let C=oe;i.prefetch(j,()=>{le===-1?v():le++;for(let G of C)G()}),j=[],oe=[],ue>2&&ue--}else le=ue,ue<zG&&ue++}a(v,"prefetch");function F(){try{L(N())}catch(C){y(C)}}a(F,"load")})}a(Rh,"loadLocalRecord");function ju(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return G4;let R=m[c],D,O=R?.tables;if(O)return O[s];if(c==="data"&&(D=m[s])&&!D.tables)return D}a(ju,"getTablePermissions");function Ah(Y,m,R,D){if(I){let O;if(R.noCache?O=!0:(m?(!m.value||m.metadataFlags&(Tl|gl)||m.expiresAt&&m.expiresAt<Date.now())&&(O=!0):O=!0,Jr(!O,"cache-hit",s)),O){let N=jA(Y,m,R).then(L=>(L?.value?.[fe]&&et.error("Can not assign a record with a record property"),R&&(L?.version>(R.lastModified||0)&&(R.lastModified=L.version),R.lastRefreshed=Date.now()),L));if(R?.onlyIfCached||m?.value&&D?.allowStaleWhileRevalidate?.(m,Y)){if(N.catch(L=>et.warn(L)),R?.onlyIfCached&&!D.doesExist())throw new Or.ServerError("Entry is not cached",504);return}else return N}}else if(m?.value&&m.expiresAt&&m.expiresAt<Date.now())return Ye.evict(m.key,m.value,m.version),m.value=null,{then(O){return O(m)}}}a(Ah,"ensureLoadedFromSource");function bn(Y){let m=Y?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let R=m.next;if(!R)return m=m.next=new Fi,m.lmdbDb=i,m;m=R}while(!0)}else return new B_}a(bn,"txnForContext");function Oh(Y,m,R){if(!Y)return;Th=Y;let D=Y.value||Y.deref?.()||(Th=i.getEntry(Y.key))?.value;if(typeof m=="object"){let N=Qs,L=D;for(let y=0,v=m.length;y<v;y++){let F=m[y],C=N?.[F];L=C&&L?C(L,R,!0)?.value:L?.[F],N=C?.definition?.tableClass?.propertyResolvers}return L}let O=Qs[m];return O?O(D,R):D[m]}a(Oh,"getAttributeValue");function XA(Y,m,R,D,O){let N=O?.length,L={transaction:D,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function v(F,C){let G=F?.value;if(!G)return oo.SKIP;for(let H=0;H<N;H++)if(!y?.includes(H)&&!O[H](G,F))return oo.SKIP;return C!==void 0&&(F.key=C),F}if(a(v,"processEntry"),N>0||!Y.hasEntries){let F=Y.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return N>0?v(C):C;if(C==null)return oo.SKIP;for(let G=0;G<N;G++){let Z=O[G].idFilter;if(Z){if(!Z(C))return oo.SKIP;y||(y=[]),y.push(G)}}return Rh(C,R,L,!1,v)});return Array.isArray(Y)&&(F=F.filter(C=>C!==oo.SKIP)),F.hasEntries=!0,F}return Y}a(XA,"transformToEntries");async function jA(Y,m,R){let D=m?.metadataFlags,O=m?.version,N,L;if(!i.attemptLock(Y,O,()=>{clearTimeout(L);let C=i.getEntry(Y);!C||!C.value||C.metadataFlags&(Tl|gl)?N(jA(Y,i.getEntry(Y),R)):N(C)}))return new Promise(C=>{N=C,L=setTimeout(()=>{i.unlock(Y,O)},v4)});let y=m?.value,v={requestContext:R,replacingRecord:y,replacingVersion:O,noCacheStore:!1,source:null,resourceCache:R?.resourceCache},F=R?.responseHeaders;return new Promise((C,G)=>{let H;AS(je(v,async Z=>{let _e=performance.now(),re,Ue,ce;try{for(let Se of Ye.sources)if(Se.get&&(!Se.get.reliesOnPrototype||Se.prototype.get)&&(v.source=Se,re=await Se.get(Y,v),re))break;ce=D&Tl;let te=v.lastModified||ce&&O;Ue=ce||te>O||!y,te||(te=(0,Ol.getNextMonotonicTime)());let X=performance.now()-_e;if(nr(X,"cache-resolution",s,null,"success"),F&&Gd(F,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),Z.timestamp=te,E&&!v.expiresAt&&(v.expiresAt=Date.now()+E),re){if(typeof re!="object")throw new Error("Only objects can be cached and stored in tables");typeof re.toJSON=="function"&&(re=re.toJSON()),t&&re[t]!==Y&&(re[t]=Y)}H=!0,C({version:te,value:re})}catch(te){te.message+=` while resolving record ${Y} for ${s}`,y&&((te.code==="ECONNRESET"||te.code==="ECONNREFUSED"||te.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(te.statusCode===500||te.statusCode===502||te.statusCode===503||te.statusCode===504))?(C({version:O,value:y}),et.trace(te.message,"(returned stale record)")):G(te);let X=performance.now()-_e;nr(X,"cache-resolution",s,null,"fail"),F&&Gd(F,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),v.transaction.abort();return}if(R?.noCacheStore||v.noCacheStore){v.transaction.abort();return}bn(v).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(te,X)=>{if(X?.version!==O)return;let Se=Xu(Y,y,re);re?(Ne.put?.(v,Y,re),T(Y,re,X,te,0,h&&Ue||null,v,v.expiresAt,"put",!!ce)):(Ne.delete?.(v,Y),h||p?T(Y,null,X,te,0,h&&Ue||null,v,0,"delete",!!ce):i.remove(Y,O))}})}),()=>{i.unlock(Y,O)},Z=>{i.unlock(Y,O),H&&et.error("Error committing cache update",Z)})})}a(jA,"getFromSource");function Zu(){if(He!==zu&&(zu=He,(0,ao.getWorkerIndex)()===(0,ao.getWorkerCount)()-1)){if(Ju&&clearTimeout(Ju),!He)return;let Y=new Date;Y.setMonth(0),Y.setDate(1),Y.setHours(0),Y.setMinutes(0),Y.setSeconds(0);let m=Math.ceil((Date.now()-Y.getTime())/He)*He+Y.getTime(),R=a(D=>{et.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),Ju=setTimeout(()=>U=U.then(async()=>{if(R(Math.max(D+He,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ju);return}let O=50,N=new Array(O),L=0;et.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:v,value:F,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;F===null&&!h&&C+U4<Date.now()?H=i.remove(v,C):G&&G+f<Date.now()&&(H=Ye.evict(v,F,C),y++),H&&(await N[L],N[L]=H.catch(Z=>{et.error("Cleanup error",Z)}),++L>=O&&(L=0)),await Rl()}et.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){et.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");R(m)}}a(Zu,"scheduleCleanup");function ZA(){z=l?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(ZA,"addDeleteRemoval");function jG(){(0,ao.getWorkerIndex)()===0&&setInterval(async()=>{if(!gh){gh=!0;try{let Y=Q.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let R of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of m.getValues(R)){let O=i.getEntry(D);O?.value?O.value[Y]<Date.now()&&Ye.evict(D,O.value,O.version):i.ifVersion(D,O?.version,()=>m.remove(R,D))}await Rl()}}catch(Y){et.error("Error in evicting old records",Y)}finally{gh=!1}}},P4).unref()}a(jG,"runRecordExpirationEviction")}function RS(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 qD(){}function F4(e){KD=e}function Fd(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(q4.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,kd.autoCast)(e);default:return e}}function kD(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;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 AS(e,t,r){return e?.then?e.then(t,r):t(e)}function qd(e,t){e[Ar]=t,e[fe]=t?.value??null,e[Al]=t?.version}function VD(e){return e!=null}function xn(e){try{return JSON.stringify(e)}catch{return e}}var Gn,oo,Ol,$D,YD,Nl,Or,bl,yl,et,co,ao,kd,M4,KD,P4,U4,HD,v4,Al,B4,Ar,Sl,xD,H4,gS,Ea,Tl,gl,x4,GD,FD,G4,yde,q4,Rl,$d=Re(()=>{Gn=x(P()),oo=require("lmdb"),Ol=x(Br()),$D=require("lodash"),YD=x(bc());ln();cm();Nl=x(ne());Jb();Or=x(se()),bl=x(ys()),yl=x(Ln());Ae();F_();et=x(K());v_();qi();co=require("ordered-binary"),ao=x(it());ei();kd=x(J());Cc();Ds();N_();pl();M4=new Uint8Array(9);M4[8]=192;P4=6e4,U4=864e5;Nl.initSync();HD=Nl.get(Gn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),v4=1e4,Al=Symbol.for("version"),B4=Symbol.for("incremental-update"),Ar=Symbol("entry"),Sl=Symbol("is-saving"),xD=1,H4=2,gS=Symbol("loaded-from-source"),Ea={isNotification:!0,ensureLoaded:!1},Tl=1,gl=8,x4=Buffer.allocUnsafeSlow(8192),GD=1978,FD=100,G4={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},yde=(0,kd.convertToMS)(Nl.get(Gn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Vd,"makeTable");a(RS,"attributesAsObject");a(qD,"noop");a(F4,"setServerUtilities");q4=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Fd,"coerceType");a(kD,"isDescendantId");Rl=a(()=>new Promise(setImmediate),"rest");a(AS,"when");a(qd,"updateResource");a(VD,"exists");a(xn,"stringify")});var ke={};qe(ke,{database:()=>ia,databases:()=>ct,dropDatabase:()=>Up,dropTableMeta:()=>K4,getDatabases:()=>Sr,getDefaultCompression:()=>Xd,getTables:()=>k4,onUpdatedTable:()=>wS,readMetaDb:()=>Il,resetDatabases:()=>Dl,table:()=>Et,tables:()=>jr});function k4(){return zd||Sr(),jr||{}}function Sr(){if(zd)return ct;zd=!0,pa=new Map;let e=(0,ht.getHdbBasePath)()&&(0,tt.join)((0,ht.getHdbBasePath)(),wt.DATABASES_DIR_NAME),t=(0,ht.get)(wt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Xr.existsSync)(e)?e:(0,tt.join)((0,ht.getHdbBasePath)(),wt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Xr.existsSync)(e))for(let r of(0,Xr.readdirSync)(e,{withFileTypes:!0})){let n=(0,tt.basename)(r.name,".mdb");r.isFile()&&(0,tt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Il((0,tt.join)(e,r.name),null,n)}if((0,Xr.existsSync)((0,ma.getBaseSchemaPath)())){for(let r of(0,Xr.readdirSync)((0,ma.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,tt.join)((0,ma.getBaseSchemaPath)(),r.name),s=(0,tt.join)((0,ma.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Xr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,tt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,tt.join)(s,i.name);Il((0,tt.join)(n,i.name),(0,tt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Xr.existsSync)(s))for(let o of(0,Xr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,tt.extname)(o.name).toLowerCase()===".mdb"&&Il((0,tt.join)(s,o.name),(0,tt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,tt.join)(c.path,(0,tt.basename)(o+".mdb"));(0,Xr.existsSync)(l)&&Il(l,o,r,null,!0)}}for(let r in ct){let n=pa.get(r);if(n){let s=ct[r];r.includes("delete")&&hn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(hn.trace(`delete table class ${i}`),delete s[i])}else if(delete ct[r],r==="data"){for(let s in jr)delete jr[s];delete jr[Jd]}}return pa=null,ct}}function Dl(){zd=!1;for(let[,e]of mi)e.needsDeletion=!0;Sr();for(let[e,t]of mi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),mi.delete(e));return ct}function Il(e,t,r=NS,n,s){let i=new bS.default(e,!1);try{let o=mi.get(e);o?o.needsDeletion=!1:(o=(0,Kd.open)(i),mi.set(e,o));let c=new lo.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(Yd.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Xr.existsSync)(n)&&(i.path=n,_=(0,Kd.open)(i),_.isLegacy=!0):_=y_(o));let u=JD(r),d=u[Jd],E=new Map;for(let{key:f,value:h}of l.getRange({start:!1})){let[p,S]=f.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=E.get(p);T||E.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:S}=h;if(!S){for(let j of p)if(j.is_hash_attribute||j.isPrimaryKey){S=j;break}if(!S){hn.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`);continue}}let T=u[f],A={},b=[],I,B,U=typeof S.audit=="boolean"?S.audit:(0,ht.get)(wt.CONFIG_PARAMS.LOGGING_AUDITLOG),q=S.trackDeletes,M=S.expiration,Q=S.eviction,z=S.sealed;if(T)A=T.indices,b=T.attributes,T.schemaVersion++;else{I=S.tableId,I?I>=(l.get(ha)||0)&&l.putSync(ha,I+1):(S.tableId=I=l.get(ha),I||(I=1),l.putSync(ha,I+1),l.putSync(S.key,S));let j=new lo.default(!S.is_hash_attribute,S.is_hash_attribute);if(j.compression=S.compression,j.compression){let oe=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||zD;j.compression.threshold=oe}B=g_(o.openDB(S.key,j)),B.rootStore=o,B.tableId=I}for(let j of p){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!A[j.name]){let le=new lo.default(!j.is_hash_attribute,j.is_hash_attribute);A[j.name]=o.openDB(j.key,le),A[j.name].indexNulls=j.indexNulls}let oe=b.find(le=>le.name===j.name);oe?b.splice(b.indexOf(oe),1,j):b.push(j)}}catch(oe){hn.error("Error trying to update attribute",j,b,A,oe)}}if(!T){T=XD(u,f,Vd({primaryStore:B,auditStore:_,audit:U,sealed:z,expirationMS:M&&M*1e3,evictionMS:Q&&Q*1e3,trackDeletes:q,tableName:f,tableId:I,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:A,attributes:p,schemaDefined:S.schemaDefined,dbisDB:l})),T.schemaVersion=1;for(let j of IS)j(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function JD(e){let t=ct[e];if(t||(e==="data"?t=ct[e]=jr:e==="system"?Object.defineProperty(ct,"system",{value:t=Object.create(null),configurable:!0}):t=ct[e]=Object.create(null)),pa&&!pa.has(e)){let r=new Set;t[Jd]=r,pa.set(e,r)}return t}function XD(e,t,r){return e[t]=r,r}function ia({database:e,table:t}){e||(e=NS),Sr();let r=JD(e),n=(0,tt.join)((0,ht.getHdbBasePath)(),wt.DATABASES_DIR_NAME),s=(0,ht.get)(wt.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_PATH)||((0,Xr.existsSync)(n)?n:(0,tt.join)((0,ht.getHdbBasePath)(),wt.LEGACY_DATABASES_DIR_NAME));let o=(0,tt.join)(n,(i?t:e)+".mdb"),c=mi.get(o);if(!c){let l=new bS.default(o,!1);c=(0,Kd.open)(l),mi.set(o,c)}return c}async function Up(e){if(!ct[e])throw new Error("Schema does not exist");let t=ct[e],r;for(let n in t)r=t[n].primaryStore.rootStore,mi.delete(r.path),r.status==="open"&&(await r.close(),await wl.remove(r.path));if(r||(r=ia({database:e,table:null}),r.status==="open"&&(await r.close(),await wl.remove(r.path))),e==="data"){for(let n in jr)delete jr[n];delete jr[Jd]}delete ct[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=NS);let d=ia({database:t,table:e}),E=ct[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let A=new lo.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let b,I;if(f){if(h=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let M=d.auditStore;M||(M=y_(d)),p=i.find(oe=>oe.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=p.isPrimaryKey=!0,p.schemaDefined=_,p.compression=Xd(),l&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,ht.get)(wt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),n&&(p.eviction=n),typeof c=="boolean"&&(p.sealed=c),u&&(p.origins?p.origins.includes(u)||p.origins.push(u):p.origins=[u]),hn.trace(`${e} table loading, opening primary store`);let Q=new lo.default(!1,!0);Q.compression=p.compression;let z=e+"/",j=g_(d.openDB(z,Q));j.rootStore=d,T=d.dbisDb=d.openDB(Yd.INTERNAL_DBIS_NAME,A),j.tableId=T.get(ha),j.tableId||(j.tableId=1),T.putSync(ha,j.tableId+1),p.tableId=j.tableId,f=XD(E,e,Vd({primaryStore:j,auditStore:M,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:j.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),f.schemaVersion=1,b=!0,q(),T.put(z,p)}S=f.indices,T=T||(d.dbisDb=d.openDB(Yd.INTERNAL_DBIS_NAME,A)),f.dbisDB=T;let B=[];for(let{key:M,value:Q}of T.getRange({start:!0})){let[z,j]=M.toString().split("/");if(j===""&&(j=Q.name),j){if(z!==e)continue}else continue;let oe=i.find(ue=>ue.name===j),le=!oe?.indexed&&Q.indexed&&!Q.isPrimaryKey;if((!oe||le)&&(q(),b=!0,oe||T.remove(M),le)){let ue=f.indices[z];ue&&B.push(ue)}}let U=[];try{for(let M of i||[]){if(M.relationship)continue;let Q=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:Q,configurable:!0});let z=T.get(Q);if(M.isPrimaryKey){if(z=z||T.get(Q=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let oe=Object.assign({},z);typeof o=="boolean"&&(o&&f.enableAuditing(o),oe.audit=o),r&&(oe.expiration=+r),n&&(oe.eviction=+n),c!==void 0&&(oe.sealed=c),b=!0,q(),T.put(Q,oe)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let j=!z||z.type!==M.type||z.indexed!==M.indexed||z.nullable!==M.nullable||JSON.stringify(z.properties)!==JSON.stringify(M.properties)||JSON.stringify(z.elements)!==JSON.stringify(M.elements);if(M.indexed){let oe=new lo.default(!0,!1),le=d.openDB(Q,oe);(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Cl.workerData?.restartNumber)&&(b=!0,q(),z=T.get(Q),(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Cl.workerData?.restartNumber)&&(b=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=z?.lastIndexedKey||!1,M.indexingPID=process.pid,le.isIndexing=!0,Object.defineProperty(M,"dbi",{value:le}),U.push(M))),T.put(Q,M)),z?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),le.indexNulls=M.indexNulls,S[M.name]=le}else j&&(b=!0,q(),T.put(Q,M))}}finally{I&&I()}if(b&&(f.schemaVersion++,f.updatedAttributes()),hn.trace(`${e} table loading, running index`),U.length>0||B.length>0?f.indexingOperation=Y4(f,U,B):b&&Wd.signalSchemaChange(new Qd.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=u,b)for(let M of IS)M(f,u!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),hn.trace(`${e} table loaded`),f;function q(){I||d.transactionSync(()=>({then(M){I=M}}))}a(q,"startTxn")}async function Y4(e,t,r){try{let n=e.schemaVersion;await Wd.signalSchemaChange(new Qd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,WD.getIndexedValues)(u[h]);if(p)for(let S=0,T=p.length;S<T;S++)f.dbi.put(p[S],_)}}),s.then(()=>l--,E=>{l--,hn.error(E)}),Cl.workerData&&Cl.workerData.restartNumber!==QD.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}l>V4?await s:l>$4&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await Wd.signalSchemaChange(new Qd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){hn.error("Error in indexing",n)}}function K4({table:e,database:t}){let r=ia({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function wS(e){IS.push(e)}function Xd(){let e=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||zD,n={startingOffset:32};return t&&(n.dictionary=wl.readFileSync(t)),r&&(n.threshold=r),e&&n}var ht,Yd,Kd,tt,Xr,ma,lo,bS,wt,wl,yS,WD,Wd,Qd,Cl,hn,QD,NS,Jd,zD,jr,ct,ha,IS,zd,mi,pa,V4,$4,Ae=Re(()=>{ht=x(ne()),Yd=x(dt()),Kd=require("lmdb"),tt=require("path"),Xr=require("fs"),ma=x(ze());$d();lo=x(Bc()),bS=x(Hc()),wt=x(P()),wl=x(require("fs-extra")),yS=require("../index"),WD=x(Br()),Wd=x(ys()),Qd=x(Ln()),Cl=require("worker_threads"),hn=x(K()),QD=x(it());ei();Cc();NS="data",Jd=Symbol("defined-tables"),zD=((0,ht.get)(wt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,ht.initSync)();jr=Object.create(null),ct=Object.create(null);(0,yS._assignPackageExport)("databases",ct);(0,yS._assignPackageExport)("tables",jr);ha=Symbol.for("next-table-id"),IS=[],mi=new Map;a(k4,"getTables");a(Sr,"getDatabases");a(Dl,"resetDatabases");a(Il,"readMetaDb");a(JD,"ensureDB");a(XD,"setTable");a(ia,"database");a(Up,"dropDatabase");a(Et,"table");V4=1e3,$4=10;a(Y4,"runIndexing");a(K4,"dropTableMeta");a(wS,"onUpdatedTable");a(Xd,"getDefaultCompression")});var J=g((Ude,_L)=>{"use strict";var pi=require("path"),rL=require("fs-extra"),br=K(),jD=require("fs-extra"),jd=require("os"),W4=require("net"),Q4=require("recursive-iterator"),lt=P(),z4=MO(),ZD=require("papaparse"),Zd=require("moment"),{inspect:J4}=require("util"),eL=require("is-number"),Pde=require("lodash"),X4=require("minimist"),j4=require("https"),Z4=require("http"),{hdb_errors:ef}=se(),e3=/^((\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)))$/,nL=require("util").promisify(setTimeout),t3=100,r3=5,n3="",s3=4,tL={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};_L.exports={isEmpty:Zr,isEmptyOrZeroLength:as,arrayHasEmptyValues:a3,arrayHasEmptyOrZeroLengthValues:c3,buildFolderPath:l3,isBoolean:sL,errorizeMessage:i3,stripFileExtension:_3,autoCast:d3,autoCastJSON:iL,autoCastJSONDeep:DS,removeDir:f3,compareVersions:E3,isCompatibleDataVersion:h3,escapeRawValue:m3,unescapeValue:p3,stringifyProps:S3,timeoutPromise:g3,isClusterOperation:A3,getClusterUser:b3,checkGlobalSchemaTable:O3,getHomeDir:aL,getPropsFilePath:T3,promisifyPapaParse:y3,removeBOM:cL,createEventPromise:N3,checkProcessRunning:I3,checkSchemaTableExist:w3,checkSchemaExists:lL,checkTableExists:uL,getStartOfTomorrowInSeconds:C3,getLimitKey:D3,isObject:u3,isNotEmptyAndHasValue:o3,autoCasterIsNumberCheck:oL,backtickASTSchemaItems:L3,isPortTaken:R3,createForkArgs:M3,autoCastBoolean:P3,async_set_timeout:nL,getTableHashAttribute:U3,doesSchemaExist:v3,doesTableExist:B3,stringifyObj:H3,ms_to_time:x3,changeExtension:G3,getEnvCliRootPath:LS,noBootFile:F3,httpRequest:q3,transformReq:k3,convertToMS:V3,PACKAGE_ROOT:lt.PACKAGE_ROOT};function i3(e){return e instanceof Error?e:new Error(e)}a(i3,"errorizeMessage");function Zr(e){return e==null}a(Zr,"isEmpty");function o3(e){return!Zr(e)&&(e||e===0||e===""||sL(e))}a(o3,"isNotEmptyAndHasValue");function as(e){return Zr(e)||e.length===0||e.size===0}a(as,"isEmptyOrZeroLength");function a3(e){if(Zr(e))return!0;for(let t=0;t<e.length;t++)if(Zr(e[t]))return!0;return!1}a(a3,"arrayHasEmptyValues");function c3(e){if(as(e))return!0;for(let t=0;t<e.length;t++)if(as(e[t]))return!0;return!1}a(c3,"arrayHasEmptyOrZeroLengthValues");function l3(...e){try{return e.join(pi.sep)}catch{console.error(e)}}a(l3,"buildFolderPath");function sL(e){return Zr(e)?!1:e===!0||e===!1}a(sL,"isBoolean");function u3(e){return Zr(e)?!1:typeof e=="object"}a(u3,"isObject");function _3(e){return as(e)?n3:e.slice(0,-s3)}a(_3,"stripFileExtension");function d3(e){return Zr(e)||e===""||typeof e!="string"?e:tL[e]!==void 0?tL[e]:oL(e)===!0?Number(e):e3.test(e)?new Date(e):e}a(d3,"autoCast");function iL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(iL,"autoCastJSON");function DS(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=DS(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=DS(r);n!==r&&(e[t]=n)}return e}else return iL(e)}a(DS,"autoCastJSONDeep");function oL(e){if(e.startsWith("0.")&&eL(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&eL(e))}a(oL,"autoCasterIsNumberCheck");async function f3(e){if(as(e))throw new Error(`Directory path: ${e} does not exist`);try{await jD.emptyDir(e),await jD.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(f3,"removeDir");function E3(e,t){if(as(e)){br.info("Invalid current version sent as parameter.");return}if(as(t)){br.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 _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(E3,"compareVersions");function h3(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(h3,"isCompatibleDataVersion");function m3(e){if(Zr(e))return e;let t=String(e);return t==="."?lt.UNICODE_PERIOD:t===".."?lt.UNICODE_PERIOD+lt.UNICODE_PERIOD:t.replace(lt.FORWARD_SLASH_REGEX,lt.UNICODE_FORWARD_SLASH)}a(m3,"escapeRawValue");function p3(e){if(Zr(e))return e;let t=String(e);return t===lt.UNICODE_PERIOD?".":t===lt.UNICODE_PERIOD+lt.UNICODE_PERIOD?"..":String(e).replace(lt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(p3,"unescapeValue");function S3(e,t){if(Zr(e))return br.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+jd.EOL}!as(n)&&n[0]===";"?r+=" "+n+s+jd.EOL:as(n)||(r+=n+"="+s+jd.EOL)}catch{br.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(S3,"stringifyProps");function aL(){let e;try{e=jd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(aL,"getHomeDir");function T3(){let e=pi.join(aL(),lt.HDB_HOME_DIR_NAME,lt.BOOT_PROPS_FILE_NAME);return rL.existsSync(e)||(e=pi.join(__dirname,"../","hdb_boot_properties.file")),e}a(T3,"getPropsFilePath");function g3(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(g3,"timeoutPromise");async function R3(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=W4.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(R3,"isPortTaken");function A3(e){try{return lt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(A3,"isClusterOperation");function O3(e,t){let r=(Ae(),ie(ke)).getDatabases();if(!r[e])return ef.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return ef.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(O3,"checkGlobalSchemaTable");function b3(e,t){if(Zr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Zr(e)||as(e)){br.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){br.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(b3,"getClusterUser");function y3(){ZD.parsePromise=function(e,t,r){return new Promise(function(n,s){ZD.parse(e,{header:!0,transformHeader:cL,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(y3,"promisifyPapaParse");function cL(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(cL,"removeBOM");function N3(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;br.info(`Got cluster status event response: ${J4(s)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}n(s)})})}a(N3,"createEventPromise");async function I3(e){let t=!0,r=0;do await nL(t3*r++),(await z4.findPs(e)).length>0&&(t=!1);while(t&&r<r3);if(t)throw new Error(`process ${e} was not started`)}a(I3,"checkProcessRunning");function w3(e,t){let r=lL(e);if(r)return r;let n=uL(e,t);if(n)return n}a(w3,"checkSchemaTableExist");function lL(e){let{getDatabases:t}=(Ae(),ie(ke));if(!t()[e])return ef.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(lL,"checkSchemaExists");function uL(e,t){let{getDatabases:r}=(Ae(),ie(ke));if(!r()[e][t])return ef.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(uL,"checkTableExists");function C3(){let e=Zd().utc().add(1,lt.MOMENT_DAYS_TAG).startOf(lt.MOMENT_DAYS_TAG).unix(),t=Zd().utc().unix();return e-t}a(C3,"getStartOfTomorrowInSeconds");function D3(){return Zd().utc().format("DD-MM-YYYY")}a(D3,"getLimitKey");function L3(e){try{let t=new Q4(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){br.error("Got an error back ticking items."),br.error(t)}}a(L3,"backtickASTSchemaItems");function M3(e){return[e]}a(M3,"createForkArgs");function P3(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(P3,"autoCastBoolean");function U3(e,t){let{getDatabases:r}=(Ae(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(U3,"getTableHashAttribute");function v3(e){let{getDatabases:t}=(Ae(),ie(ke));return t()[e]!==void 0}a(v3,"doesSchemaExist");function B3(e,t){let{getDatabases:r}=(Ae(),ie(ke));return r()[e]?.[t]!==void 0}a(B3,"doesTableExist");function H3(e){try{return JSON.stringify(e)}catch{return e}}a(H3,"stringifyObj");function x3(e){let t=Zd.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(x3,"ms_to_time");function G3(e,t){let r=pi.basename(e,pi.extname(e));return pi.join(pi.dirname(e),r+t)}a(G3,"changeExtension");function LS(){if(process.env[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=X4(process.argv);if(e[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(LS,"getEnvCliRootPath");var CS;function F3(){if(CS)return CS;let e=LS();if(LS()&&rL.pathExistsSync(pi.join(e,lt.HDB_CONFIG_FILE)))return CS=!0,!0}a(F3,"noBootFile");function q3(e,t){let r;return e.protocol==="http:"?r=Z4:r=j4,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(q3,"httpRequest");function k3(e){if(!e.schema&&!e.database){e.schema=lt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(k3,"transformReq");function V3(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(V3,"convertToMS")});var ne=g((Bde,mL)=>{"use strict";var MS=require("fs-extra"),uo=require("path"),dL=require("os"),$3=require("properties-reader"),Ml=K(),Ll=J(),de=P(),tf=Rr(),Y3="Error initializing environment manager",rf="BOOT_PROPS_FILE_PATH",fL=!1,K3={[de.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ls={};mL.exports={BOOT_PROPS_FILE_PATH:rf,getHdbBasePath:W3,setHdbBasePath:Q3,get:EL,initSync:J3,setProperty:Pe,initTestEnvironment:j3,setCloneVar:X3};function W3(){return Ls[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(W3,"getHdbBasePath");function Q3(e){Ls[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Q3,"setHdbBasePath");function EL(e){let t=tf.getConfigValue(e);return t===void 0?Ls[e]:t}a(EL,"get");function Pe(e,t){K3[e]&&(Ls[e]=t),tf.updateConfigObject(e,t)}a(Pe,"setProperty");function z3(){let e;try{e=Ll.getPropsFilePath(),MS.accessSync(e,MS.constants.F_OK|MS.constants.R_OK),fL=!0;let t=$3(e);return Ls[de.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(de.HDB_SETTINGS_NAMES.INSTALL_USER),Ls[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ls[rf]=e,!0}catch{return Ml.trace(`Environment manager found no properties file at ${e}`),!1}}a(z3,"doesPropFileExist");function J3(e=!1){try{(fL||z3()||Ll.noBootFile())&&!hL&&(tf.initConfig(e),Ls[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=tf.getConfigValue(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ml.error(Y3),Ml.error(t),console.error(t),process.exit(1)}}a(J3,"initSync");var hL=!1;function X3(e){hL=e}a(X3,"setCloneVar");function j3(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=uo.join(__dirname,"../../","unitTests");Ls[rf]=uo.join(l,"hdb_boot_properties.file"),Pe(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,uo.join(l,"settings.test")),Pe(de.HDB_SETTINGS_NAMES.INSTALL_USER,dL.userInfo()?dL.userInfo().username:void 0),Pe(de.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Pe(de.HDB_SETTINGS_NAMES.LOG_PATH_KEY,uo.join(l,"envDir","log")),Pe(de.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Pe(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,uo.join(l,"envDir")),Pe(de.CONFIG_PARAMS.STORAGE_PATH,uo.join(l,"envDir")),s&&(Pe(de.CONFIG_PARAMS.HTTP_SECUREPORT,EL(de.CONFIG_PARAMS.HTTP_PORT)),Pe(de.CONFIG_PARAMS.HTTP_PORT,null)),Pe(de.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Pe(de.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Pe(de.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ll.isEmpty(i)?!1:i),Pe(de.CONFIG_PARAMS.HTTP_CORS,Ll.isEmpty(i)?!1:i),Pe(de.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Pe(de.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,uo.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Pe(de.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ll.isEmpty(c)?!1:c),o&&(Pe("CORS_ACCESSLIST",o),Pe(de.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Pe(de.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Pe(de.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Pe(de.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${rf}. Please check your boot props and settings files`;Ml.fatal(r),Ml.error(t)}}a(j3,"initTestEnvironment")});var vS={};qe(vS,{loadGQLSchema:()=>tX,start:()=>US,startOnMainThread:()=>eX});function US({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let B=function(U){if(U.kind==="NonNullType"){let Q=B(U.type);return Q.nullable=!1,Q}if(U.kind==="ListType")return{type:"array",elements:B(U.type)};let M={type:U.name?.value};return Object.defineProperty(M,"location",{value:U.loc.startToken}),M};a(B,"getProperty");let T=S.name.value,A=[],b={table:null,database:null,properties:A};E.set(T,b);for(let U of S.directives){if(U.name.value==="table"){for(let q of U.arguments)b[q.name.value]=q.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=T),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,f.push(b)}if(U.name.value==="sealed"&&(b.sealed=!0),U.name.value==="export"){b.export=!0;for(let q of U.arguments)q.name.value==="name"&&(b.export={name:q.value.value})}}let I=!1;for(let U of S.fields){let q=B(U.type);q.name=U.name.value,A.push(q);for(let M of U.directives)if(M.name.value==="primaryKey")I?console.warn("Can not define two attributes as a primary key"):(q.isPrimaryKey=!0,I=!0);else if(M.name.value==="indexed")q.indexed=!0;else if(M.name.value==="relationship"){let Q={};for(let z of M.arguments)Q[z.name.value]=z.value.value;q.relationship=Q}else if(M.name.value==="createdTime")q.assignCreatedTime=!0;else if(M.name.value==="updatedTime")q.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")q.expiresAt=!0;else if(M.name.value==="allow"){let Q=q.authorizedRoles=[];for(let z of M.arguments)z.name.value==="role"&&Q.push(z.value.value)}}b.type=T,T==="Query"&&(h=b)}function p(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):Z3.includes(S.type)||(0,pL.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of E.values())for(let T of S.properties)p(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,PS.dirname)(n),S.tableClass):i.set((0,PS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var PS,pL,Z3,eX,tX,SL=Re(()=>{PS=require("path");Ae();pL=x(it()),Z3=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(US,"start");eX=US,tX=US({ensureTable:Et}).handleFile});async function nf(e){let t=(0,RL.pathToFileURL)(e).toString();return rX?(Pl||(Pl=nX(iX)),(await(await Pl).import(t)).namespace):import(t)}async function nX(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Pl=new Compartment({console,Math,Date,fetch:sX,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,gL.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Yt,tables:jr,databases:ct})}};let n=await(0,TL.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Pl}function sX(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function iX(){return{Resource:Yt,tables:jr}}var TL,gL,RL,rX,Pl,BS=Re(()=>{ln();Ae();TL=require("fs/promises"),gL=require("path"),RL=require("url"),rX=!1;a(nf,"secureImport");a(nX,"getCompartment");a(sX,"secureOnlyFetch");a(iX,"getGlobalVars")});var xS={};qe(xS,{handleFile:()=>oX});async function oX(e,t,r,n){let s=new Map,i=await nf(r);c(i.default)&&n.set((0,HS.dirname)(t),i.default),o(i,(0,HS.dirname)(t));function o(l,_){for(let u in l){let d=l[u];c(d)?n.set(_+"/"+u,d):typeof d=="object"&&o(d,_+"/"+u)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var HS,AL=Re(()=>{BS();HS=require("path");a(oX,"handleFile")});var FS={};qe(FS,{start:()=>aX});function aX({resources:e}){e.set("login",GS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var GS,OL=Re(()=>{ln();a(aX,"start");GS=class extends Yt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var DL={};qe(DL,{parse:()=>kS,streamAsJSON:()=>Ul,stringify:()=>_o});function Ul(e){return new qS({value:e})}function bL(e){return console.error(e),JSON.stringify(e.toString())}function yL(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function _o(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===wL)return CL(e);if(t.resolution)return t.resolution.then(()=>_o(e));throw t}}function CL(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=CL(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+_o(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function kS(e){return uX.test(e)?cX.parse(e):JSON.parse(e)}var NL,IL,cX,lX,wL,qS,uX,VS=Re(()=>{NL=require("stream"),IL=x(require("json-bigint-fixes")),cX=(0,IL.default)({useNativeBigInt:!0}),lX=1e4,wL={};BigInt.prototype.toJSON=function(){throw wL};a(Ul,"streamAsJSON");qS=class extends NL.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),bL)}catch(s){yield bL(s)}else yield _o(t)}else yield _o(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);yL(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>lX?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return yL(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(bL,"handleError");a(yL,"when");a(_o,"stringify");a(CL,"jsStringify");uX=/[[,:]\s*-?\d{16,}/;a(kS,"parse")});var sf=g((zde,LL)=>{"use strict";var _X=Un();LL.exports={writeTransaction:dX};function dX(e,t,r){return _X.writeTransaction(e,t,r)}a(dX,"writeTransaction")});var vL=g((jde,UL)=>{"use strict";var fX=Yr(),EX=li(),ML=K(),hX=fn(),Xde=sf(),mX=require("clone"),YS=require("alasql"),pX=fd(),PL=require("util"),SX=PL.promisify(EX.getTableSchema),TX=PL.promisify(fX.search),gX=P(),$S=J();pX(YS);UL.exports={update:AX};var RX="There was a problem performing this update. Please check the logs and try again.";async function AX({statement:e,hdb_user:t}){let r=await SX(e.table.databaseid,e.table.tableid),n=OX(e.columns);$S.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=mX(s),c=$S.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=YS.parse(l).statements[0],u=await TX(_),d=bX(n,u);return yX(o,d,t)}a(AX,"update");function OX(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=YS.compile(`SELECT ${r.expression.toString()} AS [${gX.FUNC_VAL}] FROM ?`)}),t}catch(t){throw ML.error(t),new Error(RX)}}a(OX,"createUpdateRecord");function bX(e,t){return $S.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(bX,"buildUpdateRecords");async function yX(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await hX.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){ML.error(`Error delete new_attributes from update response: ${i}`)}return s}a(yX,"updateRecords")});var HL=g((rfe,BL)=>{var NX=require("alasql"),IX=Yr(),wX=K(),CX=Un(),WS=require("util"),KS=J(),DX=P(),LX=li(),efe=sf(),tfe=fn(),MX="record",PX="successfully deleted",UX=WS.callbackify(xX),vX=WS.promisify(IX.search),BX=WS.promisify(LX.getTableSchema);BL.exports={convertDelete:UX};function HX(e){return`${e.deleted_hashes.length} ${MX}${e.deleted_hashes.length===1?"":"s"} ${PX}`}a(HX,"generateReturnMessage");async function xX({statement:e,hdb_user:t}){let r=await BX(e.table.databaseid,e.table.tableid);KS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=KS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=NX.parse(o).statements[0],l={operation:DX.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await vX(c);let _=await CX.deleteRecords(l);return KS.isEmptyOrZeroLength(_.message)&&(_.message=HX(_)),delete _.txn_time,_}catch(_){throw wX.error(_),_.hdb_code?_.message:_}}a(xX,"convertDelete")});var kL=g((sfe,qL)=>{"use strict";var GX=ci(),{hdb_errors:xL}=se(),{getDatabases:GL}=(Ae(),ie(ke));qL.exports={checkSchemaExists:FL,checkSchemaTableExists:FX,schema_describe:GX};async function FL(e){if(!GL()[e])return xL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(FL,"checkSchemaExists");async function FX(e,t){let r=await FL(e);if(r)return r;if(!GL()[e][t])return xL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(FX,"checkSchemaTableExists")});var vl=g((ofe,qX)=>{qX.exports={name:"harperdb",version:"4.3.35",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.5",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var jS=g((ufe,eM)=>{"use strict";var{decode:kX}=require("msgpackr"),{isMainThread:afe,parentPort:cfe,threadId:lfe}=require("worker_threads"),cf=Ct(),Sa=at(),JS=P(),sr=K(),zS=ne(),VX=P(),{onMessageByType:$X}=it(),KL=Cs(),{recordAction:VL,recordActionBinary:YX}=(Ds(),ie(ml)),{publishToStream:KX}=cf,{ConsumerEvents:$L}=require("nats"),WX=Yr(),{promisify:QX}=require("util"),WL=QX(setTimeout),lf=1e4,uf,af,zX,JX,QL,Bl=new Map,Ta=new Map;eM.exports={initialize:zL,ingestConsumer:XS,setSubscription:XX,setIgnoreOrigin:ej,getDatabaseSubscriptions:ZX,updateConsumer:JL};async function zL(){$X(JS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await JL(n)}),QL=!0,sr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await cf.getNATSReferences();uf=e,af=e.info.server_name,zX=t,JX=r}a(zL,"initialize");async function JL(e){if(e.status==="start"){let{js:t,jsm:r}=await XL(e.node_domain_name);XS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Bl.get(e.stream_name+e.node_domain_name);t&&(sr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Bl.set(e.stream_name+e.node_domain_name,"close")),Ta.get(e.node_domain_name)==="failed"&&Ta.set(e.node_domain_name,"close")}}a(JL,"updateConsumer");var _f=new Map;function XX(e,t,r){let n=_f.get(e);n||_f.set(e,n=new Map),n.set(t,r),QL||zL().then(jX)}a(XX,"setSubscription");async function jX(){let e=await WX.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Sa.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await XL(r),!n))break;let{schema:o,table:c}=i,l=KL.createNatsTableStreamName(o,c);XS(l,n,s,r)}}}a(jX,"accessConsumers");async function XL(e){let t,r,n=1;for(;!r;)try{t=await uf.jetstream({domain:e}),r=await uf.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Ta.get(e)==="close")break;Ta.set(e,"failed"),n%10===1&&sr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<lf?n++*100:lf;await WL(i)}return{js:t,jsm:r}}a(XL,"connectToRemoteJS");function ZX(){return _f}a(ZX,"getDatabaseSubscriptions");var jL;function ej(e){jL=e}a(ej,"setIgnoreOrigin");var ZL=100,YL=new Array(ZL),of=0;async function XS(e,t,r,n){let{connection:s}=await cf.getNATSReferences();uf=s,af=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,af),sr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Ta.get(n)==="close")break;o%10===1&&sr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(sr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await cf.createConsumer(r,e,af,new Date(Date.now()).toISOString()));let u=o++*100<lf?o++*100:lf;await WL(u)}let c=!1,l;for(;!c;){if(Bl.get(e+n)==="close"||Ta.get(n)==="close"){Bl.delete(e+n),c=!0;continue}l=await i.consume({max_messages:zS.get(JS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Bl.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===$L.ConsumerDeleted&&(await l.close(),c=!0),u.type===$L.HeartbeatsMissed){let d=u.data;sr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(sr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await YL[of],YL[of]=tj(u).catch(d=>{sr.error(d)}),++of>=ZL&&(of=0)}catch(u){u.message==="consumer deleted"?(sr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):sr.error("Error consuming clustering ingest, restarting consumer",u)}}}a(XS,"ingestConsumer");async function tj(e){let t=kX(e.data);VL(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),sr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=zS.get(JS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Sa.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Sa.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Sa.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!jL),YX(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Sa.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:E,expiresAt:f}=t;sr.trace("processing message:",o,c,_,(u?"records: "+u.map(B=>B?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),sr.trace(`messageProcessor nats msg id: ${e.headers.get(Sa.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let p=new Promise(B=>h=B),{timestamp:S,user:T,node_name:A}=E||{},b=_f.get(c)?.get(_);if(!b)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,b.send(t);else if(u.length===1&&!l)b.send({type:QS(o),value:u[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:T,nodeName:A});else{let B=u.map((U,q)=>({type:QS(o),value:U,expiresAt:f,id:d?.[q],table:_}));for(;l;)B.push({type:QS(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;b.send({type:"transaction",writes:B,table:_,timestamp:S,onCommit:h,user:T,nodeName:A})}zS.get(VX.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&KX(e.subject.split(".").slice(0,-1).join("."),KL.createNatsTableStreamName(c,_),e.headers,e.data),await p;let I=Date.now()-S;S&&VL(I,"replication-latency",e.subject,o,"ingest")}catch(o){sr.error(o)}e.ack()}a(tj,"messageProcessor");function QS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(QS,"convertOperation")});var Ct=g((pfe,pM)=>{"use strict";var xt=ne();xt.initSync();var rj=require("fs-extra"),nj=require("semver"),Gl=require("path"),{monotonicFactory:sj}=require("ulidx"),rM=sj(),ij=require("util"),nM=require("child_process"),oj=ij.promisify(nM.exec),aj=nM.spawn,Wt=at(),Ie=P(),df=J(),Fn=K(),ff=Cs(),cj=sf(),Hl=Rr(),{broadcast:lj,onMessageByType:uj,getWorkerIndex:_j}=it(),{isMainThread:sM}=require("worker_threads"),{Encoder:dj,decode:rT}=require("msgpackr"),iM=new dj,{isEmpty:mo}=df,oM=En(),dfe=48*36e11;sM&&uj(Ie.ITC_EVENT_TYPES.RESTART,()=>{ir=void 0,ho=void 0});var{connect:fj,StorageType:Ej,RetentionPolicy:hj,AckPolicy:nT,DeliverPolicy:sT,DiscardPolicy:mj,NatsConnection:ffe,JetStreamManager:Efe,JetStreamClient:hfe,StringCodec:mfe,JSONCodec:pj,createInbox:iT,headers:Sj,ErrorCode:tM}=require("nats"),{PACKAGE_ROOT:Tj}=P(),gj=vl(),{recordAction:Rj}=(Ds(),ie(ml)),aM=pj(),Aj="clustering",Oj=gj.engines[Wt.NATS_SERVER_NAME],bj=Gl.join(Tj,"dependencies"),tT=Gl.join(bj,`${process.platform}-${process.arch}`,Wt.NATS_BINARY_NAME),ZS,eT,xl,fo,Eo;pM.exports={runCommand:cM,checkNATSServerInstalled:yj,createConnection:oT,getConnection:Fl,getJetStreamManager:ql,getJetStream:uM,getNATSReferences:cs,getServerList:Ij,createLocalStream:aT,listStreams:_M,deleteLocalStream:wj,getServerConfig:ga,listRemoteStreams:Cj,viewStream:Dj,viewStreamIterator:Lj,publishToStream:Mj,request:vj,reloadNATS:cT,reloadNATSHub:Bj,reloadNATSLeaf:Hj,extractServerName:Uj,requestErrorHandler:xj,createLocalTableStream:hM,createTableStreams:qj,purgeTableStream:mM,purgeSchemaTableStreams:kj,getStreamInfo:Vj,updateLocalStreams:Yj,closeConnection:Nj,getJsmServerName:Ef,addNatsMsgHeader:dM,clearClientCache:lM,updateRemoteConsumer:Gj,createConsumer:fM,updateConsumerIterator:Fj};async function cM(e,t=void 0){let{stdout:r,stderr:n}=await oj(e,{cwd:t});if(n)throw new Error(n.replace(`
10
+ `,t)}var io,yD,dl,fl,pS,Hd,El,SS,xd,ND,Bd,ID,wD,CD,DD,SD,TD,LD,N4,I4,RD,AD,PD,OD,bD,C4,vD,Ei,D4,Ds=Re(()=>{io=require("worker_threads"),yD=x(it());Ae();dl=x(K()),fl=require("path"),pS=require("fs/promises"),Hd=x(Br()),El=x(ne()),SS=x(P());ur();(0,El.initSync)();xd=new Map,ND=(0,El.get)(SS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(O4,"setAnalyticsEnabled");a(nr,"recordAction");st.recordAnalytics=nr;a(Jr,"recordActionBinary");Bd=0,ID=1e3,wD="analytics-report",CD=[];a(hl,"addAnalyticsListener");DD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(b4,"sendAnalytics");a(y4,"aggregation");SD=0,TD=0,LD=a(()=>new Promise(setImmediate),"rest");a(gD,"cleanup");N4=36e5,I4=31536e6;a(TS,"getRawAnalyticsTable");a(MD,"getAnalyticsTable");(0,yD.setChildListenerByType)(wD,UD);a(w4,"startScheduledTasks");OD=0,bD=new Map,C4=!1;a(UD,"recordAnalytics");D4=1e6;a(L4,"logAnalytics")});var BD={};qe(BD,{Headers:()=>hi,appendHeader:()=>Gd});function Gd(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var hi,pl=Re(()=>{hi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Gd,"appendHeader")});var OS={};qe(OS,{coerceType:()=>Fd,makeTable:()=>Vd,setServerUtilities:()=>F4,updateResource:()=>qd});function Vd(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]);let T=Xh(i,n,l),A=0,b,I,B={},U=Promise.resolve(),q,M,Q;for(let Y of S)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(q=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(M=Y),Y.expiresAt&&(Q=Y),Y.isPrimaryKey&&(B=Y);let z,j=[],oe=[],le=1,ue=2,Be={},Ne={},He=864e5,zu,Ju,Qs,JA=!1,Th,gh,QG=i.getRange({start:!1,end:!1}).constructor,zG=10,JG=6;h&&ZA();class Ye extends Yt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=q;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=u;static schemaDefined=_;static sourcedFrom(m,R){R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),I=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let D=a(L=>{let y=this.sources.slice(0,-1);if(y=y.filter(v=>v[L]&&(!v[L].reliesOnPrototype||v.prototype[L])),y.length>0)if(y.length===1){let v=y[0];return(F,C,G)=>{if(F?.source!==v)return v[L](C,G,F)}}else return(v,F,C)=>{let G=[];for(let H of y){if(v?.source===H)break;G.push(H[L](F,C,v))}return Promise.all(G)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],N=a(L=>{if(O[L]&&(!O[L].reliesOnPrototype||O.prototype[L]))return(y,v,F)=>{if(!y?.source)return O[L](v,F,y)}},"getApplyToCanonicalSource");return Be={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},Ne={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let L=!1,y=a(async(v,F)=>{let C=v.value,G=v.table?ct[c][v.table]:Ye;if(c===Gn.SYSTEM_SCHEMA_NAME&&(v.table===Gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||v.table===Gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),v.id===void 0&&(v.id=C[G.primaryKey],v.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(v));v.source=m;let H=await G.getResource(v.id,F,Ea);switch(v.type){case"put":return H._writeUpdate(C,!0,Ea);case"patch":return H._writeUpdate(C,!1,Ea);case"delete":return H._writeDelete(Ea);case"publish":return H._writePublish(C,Ea);case"invalidate":return H.invalidate(Ea);default:et.error("Unknown operation",v.type,v.id)}},"writeUpdate");try{let v=m.subscribe;v&&p==null&&(p=!0);let F=m.subscribeOnThisThread?m.subscribeOnThisThread((0,ao.getWorkerIndex)()):(0,ao.getWorkerIndex)()===0,C=v&&F&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let H of C)try{if(!(H.type==="transaction"?H.writes[0]:H)){et.error("Bad subscription event",H);continue}if(H.source=m,G)if(H.beginTxn)G.resolve();else{y(H,G);continue}if(H.type==="end_txn")continue;let _e=je(H,()=>{if(H.type==="transaction"){let re=[];for(let Ue of H.writes)try{re.push(y(Ue,H))}catch(ce){throw ce.message+=" writing "+JSON.stringify(Ue)+" of event "+JSON.stringify(H),ce}return Promise.all(re)}else if(H.type==="define_schema"){let re=this.attributes.slice(0),Ue;for(let ce of H.attributes)re.find(De=>De.name===ce.name)||(re.push(ce),Ue=!0);Ue&&(Et({table:s,database:c,attributes:re,origin:"cluster"}),bl.signalSchemaChange(new yl.SchemaEventMsg(process.pid,Gn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return H.beginTxn?(G=H,y(H,H),new Promise(re=>{G.resolve=re})):y(H,H)});L&&(await _e,bl.signalUserChange(new yl.UserEventMsg(process.pid))),H.onCommit&&(_e?.then?_e.then(H.onCommit):H.onCommit())}catch(Z){et.error("error in subscription handler",Z)}}}catch(v){et.error(v)}})(),this}static get isCaching(){return I}static getResource(m,R,D){let O=super.getResource(m,R,D);if(m!=null){cc(m);try{if(O.hasOwnProperty(fe))return O;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!D?.async||i.cache?.get(m),L=bn(R),y=L.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Rh(m,R,{transaction:y},N,v=>{if(v?qd(O,v):O[fe]=null,R.onlyIfCached&&R.noCacheStore){if(!O.doesExist())throw new Or.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let F=Ah(m,v,R,O);if(F)return L?.disregardReadTxn(),O[gS]=!0,AS(F,C=>(qd(O,C),O))}return O})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return O}ensureLoaded(){let m=Ah(this[Me],this[Ar],this[be]);if(m)return this[gS]=!0,AS(m,R=>{this[Ar]=R,this[fe]=R.value,this[Al]=R.version})}static setTTLExpiration(m){if(typeof m=="number")E=m*1e3,f||(f=0);else if(m&&typeof m=="object")E=m.expiration*1e3,f=(m.eviction||0)*1e3,He=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");He=He||(E+f)/4,Zu()}static enableAuditing(m=!0){h=m,m&&ZA(),Ye.audit=m}static coerceId(m){return m===""?null:Fd(m,B)}static async dropTable(){if(delete ct[c][s],c===o){for(let m of S)u.remove(Ye.tableName+"/"+m.name),r[m.name]?.drop();u.remove(Ye.tableName+"/"),i.drop(),await u.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));bl.signalSchemaChange(new yl.SchemaEventMsg(process.pid,Gn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[wn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let R=Ye.getRecordCount();return{recordCount:R.recordCount,estimatedRecordRange:R.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(m,R){let D=ju(m);if(D?.read){if(D.isSuperUser)return!0;let O=D.attribute_permissions,N=R?.select;if(O?.length>0||JA&&N){if(R||(R={}),N){let L=O?.length>0&&RS(O,"read");R.select=N.map(y=>{let v=y.name||y;if(!L||L[v]){let F=Qs[v]?.definition?.tableClass;if(F){if(y.name||(y={name:y}),!F.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else R.select=O.filter(L=>L.read&&!Qs[L.attribute_name]).map(L=>L.attribute_name);return R}else return!0}}allowUpdate(m,R){let D=ju(m);if(D?.update){let O=D.attribute_permissions;if(O?.length>0){let N=RS(O,"update");for(let L in R)if(!N[L])return!1;for(let L of O){let y=L.attribute_name;!L.update&&!(y in R)&&(R[y]=this.getProperty(y))}}return!0}}allowCreate(m,R){if(this[wn]){let D=ju(m);if(D?.insert){let O=D.attribute_permissions;if(O?.length>0){let N=RS(O,"insert");for(let L in R)if(!N[L])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return ju(m)?.delete}update(m,R){if(!bn(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let O;return typeof m=="object"&&m&&(R?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[fe]={},this[Tt]=m):(O=this[Tt],O&&(m=Object.assign(O,m)),this[Tt]=O=m)),this._writeUpdate(this[Tt],R),this}addTo(m,R){if(typeof R=="number"||typeof R=="bigint")this[Sl]===xD?this.set(m,(+this.getProperty(m)||0)+R):(this[Sl]||this.update(),this.set(m,new M_(R)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,R){if(typeof R=="number")return this.addTo(m,-R);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Ar]}invalidate(m){let R=this[be],D=this[Me];cc(D),bn(this[be]).addWrite({key:D,store:i,invalidated:!0,entry:this[Ar],nodeName:this[be]?.nodeName,before:Be.invalidate?.bind(this,R,D),beforeIntermediate:Ne.invalidate?.bind(this,R,D),commit:(N,L)=>{if(L?.version>N)return;let y=null;for(let v in r)y||(y={}),y[v]=this.getProperty(v);T(D,y,this[Ar],N,Tl,h,this[be],0,"invalidate")}})}static evict(m,R,D){let O=this.Source,N;if(!((I||h)&&(!R||(N=i.getEntry(m),!N||!R)||N.version!==D))){if(I){if(i.hasLock(m,N.version))return;let L;for(let y in r)L||(L={}),L[y]=R[y];if(L)return T(m,L,N,D,gl,null,null,0,null,!0)}return i.ifVersion(m,D,()=>{Xu(m,R,null)}),h?T(m,null,N,D,gl,null,null,0,null,!0):i.remove(m,D)}}lock(){throw new Error("Not yet implemented")}static operation(m,R){return m.table||=s,m.schema||=c,KD.operation(m,R)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,R,D){let O=this[be],N=bn(O),L=this[Me];cc(L);let y=this[Ar];this[Sl]=R?xD:H4;let v={key:L,store:i,entry:y,nodeName:O?.nodeName,validate:F=>{m||(m=this[Tt]),R||m&&D_(this[Tt]===m?this:m)?O?.source||(N.checkOverloaded(),this.validate(m,!R),M&&(m[M.name]=M.type==="Date"?new Date(F):M.type==="String"?new Date(F).toISOString():F),R&&(t&&m[t]!==L&&(m[t]=L),q&&(y?.value?m[q.name]=y?.value[q.name]:m[q.name]=q.type==="Date"?new Date(F):q.type==="String"?new Date(F).toISOString():F),m=Gi(m))):N.removeWrite(v)},before:R?Be.put?()=>Be.put(O,L,m):null:Be.patch?()=>Be.patch(O,L,m):Be.put?()=>Be.put(O,L,Gi(this)):null,beforeIntermediate:R?Ne.put?()=>Ne.put(O,L,m):null:Ne.patch?()=>Ne.patch(O,L,m):Ne.put?()=>Ne.put(O,L,Gi(this)):null,commit:(F,C,G)=>{if(G){if(O&&C?.version>(O.lastModified||0)&&(O.lastModified=C.version),this[Ar]=C,C?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");R||(this[fe]=C?.value??null)}this[Tt]=void 0,this[Al]=F;let H=C?.value,Z=m;if(this[Sl]=0,C?.version>=F)if(h){let ce=C.localTime,De=C.version;for(;Z&&(ce>F||De>=F&&ce>0);){let te=l.get(ce);if(!te)break;let X=Bt(te);if(De=X.version,De>F){if(X.type==="patch"){let Se=X.getValue(i);Z=w_(Z,Se)}else if(X.type==="put"||X.type==="delete")return}else if(De===F)return;ce=X.previousLocalTime}}else{if(R)return;Z=w_(Z,H)}let _e;if(R?_e=Z:(this[fe]=H,_e=R?Z:Gi(this,Z)),this[fe]=_e,_e?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let re;R||(re=m),Xu(L,H,_e);let Ue=R?"put":"patch";T(L,_e,C,F,0,h,O,O.expiresAt||(E?E+Date.now():0),Ue,!1,re),O.expiresAt&&Zu()}};N.addWrite(v)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[wn]){for await(let R of this.search(m))(await Ye.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[fe]?this._writeDelete(m):!1}_writeDelete(m){let R=bn(this[be]),D=this[Me];cc(D);let O=this[be];return R.addWrite({key:D,store:i,resource:this,nodeName:O?.nodeName,before:Be.delete?.bind(this,O,D),beforeIntermediate:Ne.delete?.bind(this,O,D),commit:(N,L,y)=>{let v=L?.value;y&&(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),qd(this,L)),!(L?.version>N)&&(Xu(this[Me],v),et.trace("Write delete entry",D,N),h||p?(T(D,null,this[Ar],N,0,h,this[be],0,"delete"),h||Zu()):i.remove(this[Me]))}}),!0}search(m){let R=this[be],D=bn(R);if(!m)throw new Error("No query provided");let O=m.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(O=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(O));let N,L={};function y(X,Se){let xe;switch(Se){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');xe=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Se)}let Kn=xe&&{},zs;for(let Ke of X){if(Ke.conditions){Ke.conditions=y(Ke.conditions,Ke.operator);continue}let Vt=Ke[0]??Ke.attribute,sn=Vt==null?B:As(S,Vt);if(sn){if(xe){let Wn=In(Vt),$t=Kn[Wn];$t?($t.push(Ke),zs=!0):Kn[Wn]=[Ke]}(sn.type||um[Ke.comparator])&&(Ke[1]===void 0?Ke.value=F(Ke.value,sn):Ke[1]=F(Ke[1],sn))}else if(Vt!=null)throw(0,Or.handleHDBError)(new Error,`${Vt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(zs)for(let Ke in Kn){let Vt=Kn[Ke],sn=Vt.length;if(sn>1)for(let Wn=0;Wn<sn;Wn++){let $t=Vt[Wn];if($t.comparator==="ge"||$t.comparator==="greater_than_equal")for(let Js=0;Js<sn;Js++){let xo=Vt[Js];(xo.comparator==="le"||xo.comparator==="less_than_equal")&&($t.comparator="between",$t.value=[$t.value,xo.value],X.splice(X.indexOf(xo),1))}if($t.comparator==="equals"||!$t.comparator){for(let Js=0;Js<sn;Js++)if(Js!==Wn){let xo=Vt[Js];X.splice(X.indexOf(xo),1)}break}}}return X}a(y,"prepareConditions");function v(X,Se){if(m.enforceExecutionOrder)return X;for(let xe of X)xe.conditions&&(xe.conditions=v(xe.conditions,xe.operator));return X.length>1&&Se!=="or"?(0,$D.sortBy)(X,x_(Ye)):X}a(v,"orderConditions");function F(X,Se){return Array.isArray(X)?X.map(xe=>Fd(xe,Se)):Fd(X,Se)}a(F,"coerceTypedValues");let C=m.operator;(O.length>0||C)&&(O=y(O,C));let G=typeof m.sort=="object"&&m.sort,H;if(G&&C!=="or"){let X=G.attribute;if(X==null)throw new Or.ClientError("Sort requires an attribute");if(N=O.find(Se=>In(Se.attribute)===In(X)),!N){let Se=As(S,X);if(!Se)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);if(Se.indexed)N={attribute:X,comparator:"sort"},O.push(N);else if(O.length===0&&!m.allowFullScan)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not indexed and not combined with any other conditions`,404)}N&&(N.descending=!!G.descending)}O=v(O,C),G&&(N&&O[0]===N?G.next&&(H={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(N&&O.splice(O.indexOf(N),1),H=G));let Z=m.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:O,operator:C,postOrdering:H,selectApplied:!!Z};let _e=D.useReadTxn(),re=_m(O,C,Ye,_e,m,R,(X,Se)=>XA(X,Z,R,_e,Se),L),Ue=m.ensureLoaded!==!1;H||(re=te(re));let ce=Ye.transformEntryForSelect(Z,R,_e,L,Ue,!0),De=Ye.transformToOrderedSelect(re,Z,H,_e,R,ce);function te(X){return m.offset||m.limit!==void 0?X.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):X}return a(te,"applyOffset"),H&&(De=te(De)),De.onDone=()=>{De.onDone=null,D.doneReadTxn()},De.selectApplied=!0,De.getColumns=()=>{if(Z){let X=[];for(let Se of Z)Se==="*"?X.push(...S.map(xe=>xe.name)):X.push(Se.name||Se);return X}return S.map(X=>X.name)},De}static transformToOrderedSelect(m,R,D,O,N,L){let y=new QG;if(D){m=XA(m,R,O,N,null);let v;y.iterate=function(){let C,G=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),H,Z=D.dbOrderedAttribute,_e,re,Ue=!0;function ce(te){let X=te.next&&ce(te.next),Se=te.descending;return(xe,Kn)=>{let zs=Oh(xe,te.attribute,O),Ke=Oh(Kn,te.attribute,O),Vt=Se?(0,co.compareKeys)(Ke,zs):(0,co.compareKeys)(zs,Ke);return Vt===0?X?.(xe,Kn)||0:Vt}}a(ce,"createComparator");let De=ce(D);return{async next(){let te;if(C)if(te=C.next(),te.done){if(H)return y.onDone&&y.onDone(),te}else return{value:await L.call(this,te.value)};v=[],_e&&v.push(_e);do if(te=await G.next(),te.done){if(H=!0,v.length)break;return y.onDone&&y.onDone(),te}else{let X=te.value;if(X?.then&&(X=await X),Z){let Se=Oh(X,Z,O);if(Ue)Ue=!1,re=Se;else if(Se!==re){re=Se,_e=X;break}}v.push(X)}while(!0);return D.isGrouped,v.sort(De),C=v[Symbol.iterator](),te=C.next(),te.done?(y.onDone&&y.onDone(),te):{value:await L.call(this,te.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let F=a(C=>{if(typeof R=="object"&&Array.isArray(C.attribute))for(let G=0;G<R.length;G++){let H=R[G],Z;if(H.name===C.attribute[0]){for(Z=H.sort||(H.sort={});Z.next;)Z=Z.next;Z.attribute=C.attribute.slice(1),Z.descending=C.descending}else H===C.attribute[0]&&(R[G]=Z={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&F(C.next)},"applySortingOnSelect");F(D)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(L);return y}static transformEntryForSelect(m,R,D,O,N,L){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(G=>(R?.transaction?.stale&&(R.transaction.stale=!1),G?.key??G),"transform");return m===t?C:m.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let y;N&&I&&!m?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(y=!0);let v,F=a(function(C){let G;if(R?.transaction?.stale&&(R.transaction.stale=!1),C!=null){if(Th=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Rh(C.key??C,R,{transaction:D,lazy:m?.length<4},this?.isSync,H=>H),C?.then)return C.then(F.bind(this));G=C?.value}if(y&&C?.metadataFlags&(Tl|gl)||C?.expiresAt&&C?.expiresAt<Date.now()){if(R.onlyIfCached&&R.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let H=Ah(C.key??C,C,R);if(H?.then)return H.then(F)}}if(G==null)return L?oo.SKIP:G;if(m&&!(m[0]==="*"&&m.length===1)){let H,Z=a((re,Ue)=>{let ce;typeof re=="object"?ce=re.name:ce=re;let De=Qs?.[ce],te;if(De){let X=O?.[ce];if(X)if(X.hasMappings){let xe=De.from?G[De.from]:In(C.key);te=X.get(xe),te||(te=[])}else te=X.fromRecord?.(G);else te=De(G,R,C);let Se=a(xe=>{if(xe&&typeof xe=="object"){let Kn=De.definition?.tableClass||Ye;v||(v={});let zs=v[ce]||(v[ce]=Kn.transformEntryForSelect(ce===re?null:re.select||(Array.isArray(re)?re:null),R,D,X,N));if(Array.isArray(xe)){let Ke=[],Vt=Kn.transformToOrderedSelect(xe,re.select,typeof re.sort=="object"&&re.sort,R,D,zs)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),sn=a($t=>{for(;!$t.done;){if($t?.then)return $t.then(sn);Ke.push($t.value),$t=Vt.next()}Ue(Ke,ce)},"nextValue"),Wn=sn(Vt.next());Wn&&(H||(H=[]),H.push(Wn));return}else if(xe=zs.call(this,xe),xe?.then){H||(H=[]),H.push(xe.then(Ke=>Ue(Ke,ce)));return}}Ue(xe,ce)},"handleResolvedValue");te?.then?(H||(H=[]),H.push(te.then(Se))):Se(te);return}else te=G[ce],te&&typeof te=="object"&&ce!==re&&(te=Ye.transformEntryForSelect(re.select||re,R,D,null)({value:te}));Ue(te,ce)},"selectAttribute"),_e;if(typeof m=="string")Z(m,re=>{_e=re});else if(Array.isArray(m))if(m.asArray)_e=[],m.forEach((re,Ue)=>{re==="*"?m[Ue]=G:Z(re,ce=>_e[Ue]=ce)});else{_e={};let re=m.forceNulls;for(let Ue of m)if(Ue==="*")for(let ce in G)_e[ce]=G[ce];else Z(Ue,(ce,De)=>{ce===void 0&&re&&(ce=null),_e[De]=ce})}else throw new Or.ClientError("Invalid select"+m);return H?Promise.all(H).then(()=>_e):_e}return G},"transform");return F}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let R=!m.rawEvents,D=[],O=Qb(Ye,this[Me]??null,function(L,y,v,F){try{let C=y.getValue?.(i,R);if(!C&&y.type==="patch"&&R){let H=i.getEntry(L);H?.version===y.version?C=H.value:C=y.getValue?.(i,!0,v),y.type="put"}let G={id:L,timestamp:v,value:C,version:y.version,type:y.type,beginTxn:F};D?D.push(G):this.send(G)}catch(C){et.error(C)}},m.startTime||0,m),N=(async()=>{this[wn]&&(O.includeDescendants=!0,m.onlyChildren&&(O.onlyChildren=!0)),m.supportsTransactions&&(O.supportsTransactions=!0);let L=this[Me],y=m.previousCount;y>1e3&&(y=1e3);let v=m.startTime;if(this[wn]){if(v){if(y)throw new Or.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:F,value:C}of l.getRange({start:v,exclusiveStart:!0,snapshot:!1})){let G=Bt(C);if(G.tableId!==n)continue;let H=G.recordId;if(L==null||kD(L,H)){let Z=G.getValue(i,R,F);if(O.send({id:H,timestamp:F,value:Z,version:G.version,type:G.type}),O.queue?.length>FD&&await O.waitForDrain()===!1)return}O.startTime=F}}else if(y){let F=[];for(let{key:C,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let H=Bt(G);if(H.tableId!==n)continue;let Z=H.recordId;if(L==null||kD(L,Z)){let _e=H.getValue(i,R,C);if(F.push({id:Z,timestamp:C,value:_e,version:H.version,type:H.type}),--y<=0)break}}catch(H){et.error("Error getting history entry",C,H)}for(let C=F.length;C>0;)O.send(F[--C]);F[0]&&(O.startTime=F[0].timestamp)}else if(!m.omitCurrent){for(let{key:F,value:C,version:G,localTime:H}of i.getRange({start:L??!1,end:L==null?void 0:[L,co.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(O.send({id:F,timestamp:H,value:C,version:G,type:"put"}),O.queue?.length>FD&&await O.waitForDrain()===!1))return}}else{y&&!v&&(v=0);let F=this[Ar]?.localTime;if(F===Jh&&(i.cache?.delete(L),this[Ar]=i.getEntry(L),et.trace("re-retrieved record",F,this[Ar]?.localTime),F=this[Ar]?.localTime),et.trace("Subscription from",v,"from",L,F),v<F){let C=[],G=F;do{let H=l.get(G);if(H){m.omitCurrent=!0;let Z=Bt(H),_e=Z.getValue(i,R,G);R&&(Z.type="put"),C.push({id:L,value:_e,timestamp:G,...Z}),G=Z.previousLocalTime}else break;y&&y--}while(G>v&&y!==0);for(let H=C.length;H>0;)O.send(C[--H]);O.startTime=F}!m.omitCurrent&&this.doesExist()&&O.send({id:L,timestamp:F,value:this[fe],version:this[Al],type:"put"})}for(let F of D)O.send(F);D=null})();return m.listener&&O.on("data",m.listener),O}doesExist(){return!!(this[fe]||this[Sl])}publish(m,R){this._writePublish(m,R)}_writePublish(m,R){let D=bn(this[be]),O=this[Me]||null;cc(O);let N=this[be];D.addWrite({key:O,store:i,entry:this[Ar],nodeName:N?.nodeName,validate:()=>{N?.source||(D.checkOverloaded(),this.validate(m))},before:Be.publish?.bind(this,N,O,m),beforeIntermediate:Ne.publish?.bind(this,N,O,m),commit:(L,y,v)=>{y===void 0&&p&&!h&&Zu(),T(O,y?.value??null,y,y?.version||L,0,!0,N,y?.expiresAt,"message",!1,m)}})}validate(m,R){let D,O=a((N,L,y)=>{if(L.type&&N!=null)if(R&&N.__op__&&(N=N.value),L.properties){typeof N!="object"&&(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be an object${L.type?" ("+L.type+")":""}`);let v=L.properties;for(let F=0,C=v.length;F<C;F++){let G=v[F],H=O(N[G.name],G,y+"."+G.name);H&&(N[G.name]=H)}if(L.sealed&&N!=null&&typeof N=="object")for(let F in N)v.find(C=>C.name===F)||(D||(D=[])).push(`Property ${F} is not allowed within object in property ${y}`)}else switch(L.type){case"Int":(typeof N!="number"||N>>0!==N)&&(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(v=>typeof v=="string")||(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(L.elements)for(let v=0,F=N.length;v<F;v++){let C=N[v],G=O(C,L.elements,y+"[*]");G&&(N[v]=G)}}else(D||(D=[])).push(`Value ${xn(N)} in property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&N==null&&(D||(D=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,L=S.length;N<L;N++){let y=S[N];if(!y.relationship&&(!R||y.name in m)){let v=O(m[y.name],y,y.name);v&&(m[y.name]=v)}}if(d)for(let N in m)S.find(L=>L.name===N)||(D||(D=[])).push(`Property ${N} is not allowed`);if(D)throw new Or.ClientError(D.join(". "))}getUpdatedTime(){return this[Al]}wasLoadedFromSource(){return I?!!this[gS]:void 0}static async addAttributes(m){let R=S.slice(0);for(let D of m){if(!D.name)throw new Or.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Or.ClientError("Attribute names cannot include backticks or forward slashes");(0,YD.validateAttribute)(D.name),R.push(D)}return Et({table:s,database:c,schemaDefined:_,attributes:R}),Ye.indexingOperation}static async removeAttributes(m){let R=S.filter(D=>!m.includes(D.name));return Et({table:s,database:c,schemaDefined:_,attributes:R}),Ye.indexingOperation}static getRecordCount(m){let R=i.getStats().entryCount,D=1e3/2,O=performance.now(),N=Math.floor(R/2),L=m?.exactCount,y=0,v=0,F;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&y++,v++,!L&&v<N&&performance.now()-O>D){F=v;break}if(F){let C=y;y=0;for(let{value:te}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:F}))te!=null&&y++;let G=F*2,H=(y+C)/G,Z=Math.pow((y-C+1)/F/2,2)+H*(1-H)/G,_e=Math.max(Math.sqrt(Z)*R,1),re=Math.round(H*R),Ue=Math.max(re-1.96*_e,y+C),ce=Math.min(re+1.96*_e,R),De=Math.pow(10,Math.round(Math.log10(_e)));return De>re&&(De=De/10),y=Math.round(re/De)*De,{recordCount:y,estimatedRange:[Math.round(Ue),Math.round(ce)]}}return{recordCount:y}}static updatedAttributes(){Qs=this.propertyResolvers={$id:(m,R,D)=>({value:D.key}),$updatedtime:(m,R,D)=>D.version,$record:(m,R,D)=>D?{value:m}:m};for(let m of this.attributes){m.resolve=null;let R=m.relationship;if(R)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),JA=!0,R.to)m.elements?.definition?(Qs[m.name]=m.resolve=(D,O,N)=>{let L=D[R.from?R.from:t],y=m.elements.definition.tableClass;return N?Wo({attribute:R.to,value:L},bn(O).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:R.to,value:L}],O).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,R.from&&(m.resolve.from=R.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(R.from){let D=m.definition||m.elements?.definition;D?(Qs[m.name]=m.resolve=(O,N,L)=>{let y=O[R.from];if(y!==void 0){if(m.elements){let v,F=y.map(C=>{let G=L?D.tableClass.primaryStore.getEntry(C,{transaction:bn(N).getReadTxn()}):D.tableClass.get(C,N);return G?.then&&(v=!0),G});return R.filterMissing?v?Promise.all(F).then(C=>C.filter(VD)):F.filter(VD):v?Promise.all(F):F}return L?D.tableClass.primaryStore.getEntry(y,{transaction:bn(N).getReadTxn()}):D.tableClass.get(y,N)}},m.set=(O,N)=>{if(Array.isArray(N)){let L=N.map(y=>y[Me]||y[D.tableClass.primaryKey]);O[R.from]=L}else{let L=N[Me]||N[D.tableClass.primaryKey];O[R.from]=L}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=R.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}P_(this,this)}static async deleteHistory(m=0){let R;for(let{key:D,value:O}of l.getRange({start:0,end:m}))await Rl(),Bt(O).tableId===n&&(R=l.remove(D));await R}static async*getHistory(m=0,R=1/0){for(let{key:D,value:O}of l.getRange({start:m,end:R})){await Rl();let N=Bt(O);N.tableId===n&&(yield{id:N.recordId,localTime:D,version:N.version,type:N.type,value:N.getValue(i,!0,D),user:N.user})}}static async getHistoryOfRecord(m){let R=[];if(m==null)throw new Error("An id is required");let D=i.getEntry(m);if(!D)return R;let O=D.localTime;if(!O)throw new Error("The entry does not have a local audit time");let N=0;do{await Rl();let L=l.get(O);if(L){let y=Bt(L);R.push({id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user}),O=y.previousLocalTime}else break}while(N<1e3&&O);return R.reverse()}static cleanup(){z?.remove()}}Ye.updatedAttributes();let XG=Ye.prototype;return XG[B4]=!0,E&&Ye.setTTLExpiration(E/1e3),Q&&jG(),Ye;function Xu(Y,m,R){let D;for(let O in r){let N=r[O],L=N.isIndexing,y=R?.[O],v=m?.[O];if(y===v&&!L)continue;D=!0;let F=N.indexNulls,C=(0,Ol.getIndexedValues)(y,F),G=(0,Ol.getIndexedValues)(v,F);if(G?.length>0){let H=new Set(G);if(C=C?C.filter(Z=>{if(H.has(Z))H.delete(Z);else return!0}):[],G=Array.from(H),(G.length>0||C.length>0)&&HD){let Z=G.concat(C).map(_e=>({key:_e,value:Y}));N.prefetch(Z,qD)}for(let Z=0,_e=G.length;Z<_e;Z++)N.remove(G[Z],Y)}else C?.length>0&&HD&&N.prefetch(C.map(H=>({key:H,value:Y})),qD);if(C)for(let H=0,Z=C.length;H<Z;H++)N.put(C[H],Y)}return D}a(Xu,"updateIndices");function cc(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>GD)throw new Error("Primary key size is too large: "+Y.length);break;case"object":if(Y===null)return!0;break;case"bigint":if(Y<2n**64n&&Y>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Y)}if((0,co.writeKey)(Y,x4,0)>GD)throw new Error("Primary key size is too large: "+Y.length);return!0}a(cc,"checkValidId");function Rh(Y,m,R,D,O){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),R.transaction?.isDone)return O(null,Y);let L=i.getEntry(Y,R);return L&&m&&(L?.version>(m.lastModified||0)&&(m.lastModified=L.version),L?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=L.localTime)),O(L,Y)},"whenPrefetched");return D?N():le>0?(le--,N()):new Promise((L,y)=>{le===0?(le--,i.prefetch([Y],()=>{v(),F()})):(j.push(Y),oe.push(F),j.length>JG&&(le--,v()));function v(){if(j.length>0){let C=oe;i.prefetch(j,()=>{le===-1?v():le++;for(let G of C)G()}),j=[],oe=[],ue>2&&ue--}else le=ue,ue<zG&&ue++}a(v,"prefetch");function F(){try{L(N())}catch(C){y(C)}}a(F,"load")})}a(Rh,"loadLocalRecord");function ju(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return G4;let R=m[c],D,O=R?.tables;if(O)return O[s];if(c==="data"&&(D=m[s])&&!D.tables)return D}a(ju,"getTablePermissions");function Ah(Y,m,R,D){if(I){let O;if(R.noCache?O=!0:(m?(!m.value||m.metadataFlags&(Tl|gl)||m.expiresAt&&m.expiresAt<Date.now())&&(O=!0):O=!0,Jr(!O,"cache-hit",s)),O){let N=jA(Y,m,R).then(L=>(L?.value?.[fe]&&et.error("Can not assign a record with a record property"),R&&(L?.version>(R.lastModified||0)&&(R.lastModified=L.version),R.lastRefreshed=Date.now()),L));if(R?.onlyIfCached||m?.value&&D?.allowStaleWhileRevalidate?.(m,Y)){if(N.catch(L=>et.warn(L)),R?.onlyIfCached&&!D.doesExist())throw new Or.ServerError("Entry is not cached",504);return}else return N}}else if(m?.value&&m.expiresAt&&m.expiresAt<Date.now())return Ye.evict(m.key,m.value,m.version),m.value=null,{then(O){return O(m)}}}a(Ah,"ensureLoadedFromSource");function bn(Y){let m=Y?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let R=m.next;if(!R)return m=m.next=new Fi,m.lmdbDb=i,m;m=R}while(!0)}else return new B_}a(bn,"txnForContext");function Oh(Y,m,R){if(!Y)return;Th=Y;let D=Y.value||Y.deref?.()||(Th=i.getEntry(Y.key))?.value;if(typeof m=="object"){let N=Qs,L=D;for(let y=0,v=m.length;y<v;y++){let F=m[y],C=N?.[F];L=C&&L?C(L,R,!0)?.value:L?.[F],N=C?.definition?.tableClass?.propertyResolvers}return L}let O=Qs[m];return O?O(D,R):D[m]}a(Oh,"getAttributeValue");function XA(Y,m,R,D,O){let N=O?.length,L={transaction:D,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function v(F,C){let G=F?.value;if(!G)return oo.SKIP;for(let H=0;H<N;H++)if(!y?.includes(H)&&!O[H](G,F))return oo.SKIP;return C!==void 0&&(F.key=C),F}if(a(v,"processEntry"),N>0||!Y.hasEntries){let F=Y.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return N>0?v(C):C;if(C==null)return oo.SKIP;for(let G=0;G<N;G++){let Z=O[G].idFilter;if(Z){if(!Z(C))return oo.SKIP;y||(y=[]),y.push(G)}}return Rh(C,R,L,!1,v)});return Array.isArray(Y)&&(F=F.filter(C=>C!==oo.SKIP)),F.hasEntries=!0,F}return Y}a(XA,"transformToEntries");async function jA(Y,m,R){let D=m?.metadataFlags,O=m?.version,N,L;if(!i.attemptLock(Y,O,()=>{clearTimeout(L);let C=i.getEntry(Y);!C||!C.value||C.metadataFlags&(Tl|gl)?N(jA(Y,i.getEntry(Y),R)):N(C)}))return new Promise(C=>{N=C,L=setTimeout(()=>{i.unlock(Y,O)},v4)});let y=m?.value,v={requestContext:R,replacingRecord:y,replacingVersion:O,noCacheStore:!1,source:null,resourceCache:R?.resourceCache},F=R?.responseHeaders;return new Promise((C,G)=>{let H;AS(je(v,async Z=>{let _e=performance.now(),re,Ue,ce;try{for(let Se of Ye.sources)if(Se.get&&(!Se.get.reliesOnPrototype||Se.prototype.get)&&(v.source=Se,re=await Se.get(Y,v),re))break;ce=D&Tl;let te=v.lastModified||ce&&O;Ue=ce||te>O||!y,te||(te=(0,Ol.getNextMonotonicTime)());let X=performance.now()-_e;if(nr(X,"cache-resolution",s,null,"success"),F&&Gd(F,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),Z.timestamp=te,E&&!v.expiresAt&&(v.expiresAt=Date.now()+E),re){if(typeof re!="object")throw new Error("Only objects can be cached and stored in tables");typeof re.toJSON=="function"&&(re=re.toJSON()),t&&re[t]!==Y&&(re[t]=Y)}H=!0,C({version:te,value:re})}catch(te){te.message+=` while resolving record ${Y} for ${s}`,y&&((te.code==="ECONNRESET"||te.code==="ECONNREFUSED"||te.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(te.statusCode===500||te.statusCode===502||te.statusCode===503||te.statusCode===504))?(C({version:O,value:y}),et.trace(te.message,"(returned stale record)")):G(te);let X=performance.now()-_e;nr(X,"cache-resolution",s,null,"fail"),F&&Gd(F,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),v.transaction.abort();return}if(R?.noCacheStore||v.noCacheStore){v.transaction.abort();return}bn(v).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(te,X)=>{if(X?.version!==O)return;let Se=Xu(Y,y,re);re?(Ne.put?.(v,Y,re),T(Y,re,X,te,0,h&&Ue||null,v,v.expiresAt,"put",!!ce)):(Ne.delete?.(v,Y),h||p?T(Y,null,X,te,0,h&&Ue||null,v,0,"delete",!!ce):i.remove(Y,O))}})}),()=>{i.unlock(Y,O)},Z=>{i.unlock(Y,O),H&&et.error("Error committing cache update",Z)})})}a(jA,"getFromSource");function Zu(){if(He!==zu&&(zu=He,(0,ao.getWorkerIndex)()===(0,ao.getWorkerCount)()-1)){if(Ju&&clearTimeout(Ju),!He)return;let Y=new Date;Y.setMonth(0),Y.setDate(1),Y.setHours(0),Y.setMinutes(0),Y.setSeconds(0);let m=Math.ceil((Date.now()-Y.getTime())/He)*He+Y.getTime(),R=a(D=>{et.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),Ju=setTimeout(()=>U=U.then(async()=>{if(R(Math.max(D+He,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ju);return}let O=50,N=new Array(O),L=0;et.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:v,value:F,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;F===null&&!h&&C+U4<Date.now()?H=i.remove(v,C):G&&G+f<Date.now()&&(H=Ye.evict(v,F,C),y++),H&&(await N[L],N[L]=H.catch(Z=>{et.error("Cleanup error",Z)}),++L>=O&&(L=0)),await Rl()}et.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){et.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");R(m)}}a(Zu,"scheduleCleanup");function ZA(){z=l?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(ZA,"addDeleteRemoval");function jG(){(0,ao.getWorkerIndex)()===0&&setInterval(async()=>{if(!gh){gh=!0;try{let Y=Q.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let R of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of m.getValues(R)){let O=i.getEntry(D);O?.value?O.value[Y]<Date.now()&&Ye.evict(D,O.value,O.version):i.ifVersion(D,O?.version,()=>m.remove(R,D))}await Rl()}}catch(Y){et.error("Error in evicting old records",Y)}finally{gh=!1}}},P4).unref()}a(jG,"runRecordExpirationEviction")}function RS(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 qD(){}function F4(e){KD=e}function Fd(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(q4.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,kd.autoCast)(e);default:return e}}function kD(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;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 AS(e,t,r){return e?.then?e.then(t,r):t(e)}function qd(e,t){e[Ar]=t,e[fe]=t?.value??null,e[Al]=t?.version}function VD(e){return e!=null}function xn(e){try{return JSON.stringify(e)}catch{return e}}var Gn,oo,Ol,$D,YD,Nl,Or,bl,yl,et,co,ao,kd,M4,KD,P4,U4,HD,v4,Al,B4,Ar,Sl,xD,H4,gS,Ea,Tl,gl,x4,GD,FD,G4,yde,q4,Rl,$d=Re(()=>{Gn=x(P()),oo=require("lmdb"),Ol=x(Br()),$D=require("lodash"),YD=x(bc());ln();cm();Nl=x(ne());Jb();Or=x(se()),bl=x(ys()),yl=x(Ln());Ae();F_();et=x(K());v_();qi();co=require("ordered-binary"),ao=x(it());ei();kd=x(J());Cc();Ds();N_();pl();M4=new Uint8Array(9);M4[8]=192;P4=6e4,U4=864e5;Nl.initSync();HD=Nl.get(Gn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),v4=1e4,Al=Symbol.for("version"),B4=Symbol.for("incremental-update"),Ar=Symbol("entry"),Sl=Symbol("is-saving"),xD=1,H4=2,gS=Symbol("loaded-from-source"),Ea={isNotification:!0,ensureLoaded:!1},Tl=1,gl=8,x4=Buffer.allocUnsafeSlow(8192),GD=1978,FD=100,G4={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},yde=(0,kd.convertToMS)(Nl.get(Gn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Vd,"makeTable");a(RS,"attributesAsObject");a(qD,"noop");a(F4,"setServerUtilities");q4=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Fd,"coerceType");a(kD,"isDescendantId");Rl=a(()=>new Promise(setImmediate),"rest");a(AS,"when");a(qd,"updateResource");a(VD,"exists");a(xn,"stringify")});var ke={};qe(ke,{database:()=>ia,databases:()=>ct,dropDatabase:()=>Up,dropTableMeta:()=>K4,getDatabases:()=>Sr,getDefaultCompression:()=>Xd,getTables:()=>k4,onUpdatedTable:()=>wS,readMetaDb:()=>Il,resetDatabases:()=>Dl,table:()=>Et,tables:()=>jr});function k4(){return zd||Sr(),jr||{}}function Sr(){if(zd)return ct;zd=!0,pa=new Map;let e=(0,ht.getHdbBasePath)()&&(0,tt.join)((0,ht.getHdbBasePath)(),wt.DATABASES_DIR_NAME),t=(0,ht.get)(wt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Xr.existsSync)(e)?e:(0,tt.join)((0,ht.getHdbBasePath)(),wt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Xr.existsSync)(e))for(let r of(0,Xr.readdirSync)(e,{withFileTypes:!0})){let n=(0,tt.basename)(r.name,".mdb");r.isFile()&&(0,tt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Il((0,tt.join)(e,r.name),null,n)}if((0,Xr.existsSync)((0,ma.getBaseSchemaPath)())){for(let r of(0,Xr.readdirSync)((0,ma.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,tt.join)((0,ma.getBaseSchemaPath)(),r.name),s=(0,tt.join)((0,ma.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Xr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,tt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,tt.join)(s,i.name);Il((0,tt.join)(n,i.name),(0,tt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Xr.existsSync)(s))for(let o of(0,Xr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,tt.extname)(o.name).toLowerCase()===".mdb"&&Il((0,tt.join)(s,o.name),(0,tt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,tt.join)(c.path,(0,tt.basename)(o+".mdb"));(0,Xr.existsSync)(l)&&Il(l,o,r,null,!0)}}for(let r in ct){let n=pa.get(r);if(n){let s=ct[r];r.includes("delete")&&hn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(hn.trace(`delete table class ${i}`),delete s[i])}else if(delete ct[r],r==="data"){for(let s in jr)delete jr[s];delete jr[Jd]}}return pa=null,ct}}function Dl(){zd=!1;for(let[,e]of mi)e.needsDeletion=!0;Sr();for(let[e,t]of mi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),mi.delete(e));return ct}function Il(e,t,r=NS,n,s){let i=new bS.default(e,!1);try{let o=mi.get(e);o?o.needsDeletion=!1:(o=(0,Kd.open)(i),mi.set(e,o));let c=new lo.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(Yd.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Xr.existsSync)(n)&&(i.path=n,_=(0,Kd.open)(i),_.isLegacy=!0):_=y_(o));let u=JD(r),d=u[Jd],E=new Map;for(let{key:f,value:h}of l.getRange({start:!1})){let[p,S]=f.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=E.get(p);T||E.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:S}=h;if(!S){for(let j of p)if(j.is_hash_attribute||j.isPrimaryKey){S=j;break}if(!S){hn.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`);continue}}let T=u[f],A={},b=[],I,B,U=typeof S.audit=="boolean"?S.audit:(0,ht.get)(wt.CONFIG_PARAMS.LOGGING_AUDITLOG),q=S.trackDeletes,M=S.expiration,Q=S.eviction,z=S.sealed;if(T)A=T.indices,b=T.attributes,T.schemaVersion++;else{I=S.tableId,I?I>=(l.get(ha)||0)&&l.putSync(ha,I+1):(S.tableId=I=l.get(ha),I||(I=1),l.putSync(ha,I+1),l.putSync(S.key,S));let j=new lo.default(!S.is_hash_attribute,S.is_hash_attribute);if(j.compression=S.compression,j.compression){let oe=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||zD;j.compression.threshold=oe}B=g_(o.openDB(S.key,j)),B.rootStore=o,B.tableId=I}for(let j of p){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!A[j.name]){let le=new lo.default(!j.is_hash_attribute,j.is_hash_attribute);A[j.name]=o.openDB(j.key,le),A[j.name].indexNulls=j.indexNulls}let oe=b.find(le=>le.name===j.name);oe?b.splice(b.indexOf(oe),1,j):b.push(j)}}catch(oe){hn.error("Error trying to update attribute",j,b,A,oe)}}if(!T){T=XD(u,f,Vd({primaryStore:B,auditStore:_,audit:U,sealed:z,expirationMS:M&&M*1e3,evictionMS:Q&&Q*1e3,trackDeletes:q,tableName:f,tableId:I,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:A,attributes:p,schemaDefined:S.schemaDefined,dbisDB:l})),T.schemaVersion=1;for(let j of IS)j(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function JD(e){let t=ct[e];if(t||(e==="data"?t=ct[e]=jr:e==="system"?Object.defineProperty(ct,"system",{value:t=Object.create(null),configurable:!0}):t=ct[e]=Object.create(null)),pa&&!pa.has(e)){let r=new Set;t[Jd]=r,pa.set(e,r)}return t}function XD(e,t,r){return e[t]=r,r}function ia({database:e,table:t}){e||(e=NS),Sr();let r=JD(e),n=(0,tt.join)((0,ht.getHdbBasePath)(),wt.DATABASES_DIR_NAME),s=(0,ht.get)(wt.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_PATH)||((0,Xr.existsSync)(n)?n:(0,tt.join)((0,ht.getHdbBasePath)(),wt.LEGACY_DATABASES_DIR_NAME));let o=(0,tt.join)(n,(i?t:e)+".mdb"),c=mi.get(o);if(!c){let l=new bS.default(o,!1);c=(0,Kd.open)(l),mi.set(o,c)}return c}async function Up(e){if(!ct[e])throw new Error("Schema does not exist");let t=ct[e],r;for(let n in t)r=t[n].primaryStore.rootStore,mi.delete(r.path),r.status==="open"&&(await r.close(),await wl.remove(r.path));if(r||(r=ia({database:e,table:null}),r.status==="open"&&(await r.close(),await wl.remove(r.path))),e==="data"){for(let n in jr)delete jr[n];delete jr[Jd]}delete ct[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=NS);let d=ia({database:t,table:e}),E=ct[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let A=new lo.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let b,I;if(f){if(h=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let M=d.auditStore;M||(M=y_(d)),p=i.find(oe=>oe.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=p.isPrimaryKey=!0,p.schemaDefined=_,p.compression=Xd(),l&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,ht.get)(wt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),n&&(p.eviction=n),typeof c=="boolean"&&(p.sealed=c),u&&(p.origins?p.origins.includes(u)||p.origins.push(u):p.origins=[u]),hn.trace(`${e} table loading, opening primary store`);let Q=new lo.default(!1,!0);Q.compression=p.compression;let z=e+"/",j=g_(d.openDB(z,Q));j.rootStore=d,T=d.dbisDb=d.openDB(Yd.INTERNAL_DBIS_NAME,A),j.tableId=T.get(ha),j.tableId||(j.tableId=1),T.putSync(ha,j.tableId+1),p.tableId=j.tableId,f=XD(E,e,Vd({primaryStore:j,auditStore:M,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:j.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),f.schemaVersion=1,b=!0,q(),T.put(z,p)}S=f.indices,T=T||(d.dbisDb=d.openDB(Yd.INTERNAL_DBIS_NAME,A)),f.dbisDB=T;let B=[];for(let{key:M,value:Q}of T.getRange({start:!0})){let[z,j]=M.toString().split("/");if(j===""&&(j=Q.name),j){if(z!==e)continue}else continue;let oe=i.find(ue=>ue.name===j),le=!oe?.indexed&&Q.indexed&&!Q.isPrimaryKey;if((!oe||le)&&(q(),b=!0,oe||T.remove(M),le)){let ue=f.indices[z];ue&&B.push(ue)}}let U=[];try{for(let M of i||[]){if(M.relationship)continue;let Q=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:Q,configurable:!0});let z=T.get(Q);if(M.isPrimaryKey){if(z=z||T.get(Q=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let oe=Object.assign({},z);typeof o=="boolean"&&(o&&f.enableAuditing(o),oe.audit=o),r&&(oe.expiration=+r),n&&(oe.eviction=+n),c!==void 0&&(oe.sealed=c),b=!0,q(),T.put(Q,oe)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let j=!z||z.type!==M.type||z.indexed!==M.indexed||z.nullable!==M.nullable||JSON.stringify(z.properties)!==JSON.stringify(M.properties)||JSON.stringify(z.elements)!==JSON.stringify(M.elements);if(M.indexed){let oe=new lo.default(!0,!1),le=d.openDB(Q,oe);(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Cl.workerData?.restartNumber)&&(b=!0,q(),z=T.get(Q),(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Cl.workerData?.restartNumber)&&(b=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=z?.lastIndexedKey||!1,M.indexingPID=process.pid,le.isIndexing=!0,Object.defineProperty(M,"dbi",{value:le}),U.push(M))),T.put(Q,M)),z?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),le.indexNulls=M.indexNulls,S[M.name]=le}else j&&(b=!0,q(),T.put(Q,M))}}finally{I&&I()}if(b&&(f.schemaVersion++,f.updatedAttributes()),hn.trace(`${e} table loading, running index`),U.length>0||B.length>0?f.indexingOperation=Y4(f,U,B):b&&Wd.signalSchemaChange(new Qd.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=u,b)for(let M of IS)M(f,u!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),hn.trace(`${e} table loaded`),f;function q(){I||d.transactionSync(()=>({then(M){I=M}}))}a(q,"startTxn")}async function Y4(e,t,r){try{let n=e.schemaVersion;await Wd.signalSchemaChange(new Qd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,WD.getIndexedValues)(u[h]);if(p)for(let S=0,T=p.length;S<T;S++)f.dbi.put(p[S],_)}}),s.then(()=>l--,E=>{l--,hn.error(E)}),Cl.workerData&&Cl.workerData.restartNumber!==QD.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}l>V4?await s:l>$4&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await Wd.signalSchemaChange(new Qd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){hn.error("Error in indexing",n)}}function K4({table:e,database:t}){let r=ia({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function wS(e){IS.push(e)}function Xd(){let e=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||zD,n={startingOffset:32};return t&&(n.dictionary=wl.readFileSync(t)),r&&(n.threshold=r),e&&n}var ht,Yd,Kd,tt,Xr,ma,lo,bS,wt,wl,yS,WD,Wd,Qd,Cl,hn,QD,NS,Jd,zD,jr,ct,ha,IS,zd,mi,pa,V4,$4,Ae=Re(()=>{ht=x(ne()),Yd=x(dt()),Kd=require("lmdb"),tt=require("path"),Xr=require("fs"),ma=x(ze());$d();lo=x(Bc()),bS=x(Hc()),wt=x(P()),wl=x(require("fs-extra")),yS=require("../index"),WD=x(Br()),Wd=x(ys()),Qd=x(Ln()),Cl=require("worker_threads"),hn=x(K()),QD=x(it());ei();Cc();NS="data",Jd=Symbol("defined-tables"),zD=((0,ht.get)(wt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,ht.initSync)();jr=Object.create(null),ct=Object.create(null);(0,yS._assignPackageExport)("databases",ct);(0,yS._assignPackageExport)("tables",jr);ha=Symbol.for("next-table-id"),IS=[],mi=new Map;a(k4,"getTables");a(Sr,"getDatabases");a(Dl,"resetDatabases");a(Il,"readMetaDb");a(JD,"ensureDB");a(XD,"setTable");a(ia,"database");a(Up,"dropDatabase");a(Et,"table");V4=1e3,$4=10;a(Y4,"runIndexing");a(K4,"dropTableMeta");a(wS,"onUpdatedTable");a(Xd,"getDefaultCompression")});var J=g((Ude,_L)=>{"use strict";var pi=require("path"),rL=require("fs-extra"),br=K(),jD=require("fs-extra"),jd=require("os"),W4=require("net"),Q4=require("recursive-iterator"),lt=P(),z4=MO(),ZD=require("papaparse"),Zd=require("moment"),{inspect:J4}=require("util"),eL=require("is-number"),Pde=require("lodash"),X4=require("minimist"),j4=require("https"),Z4=require("http"),{hdb_errors:ef}=se(),e3=/^((\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)))$/,nL=require("util").promisify(setTimeout),t3=100,r3=5,n3="",s3=4,tL={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};_L.exports={isEmpty:Zr,isEmptyOrZeroLength:as,arrayHasEmptyValues:a3,arrayHasEmptyOrZeroLengthValues:c3,buildFolderPath:l3,isBoolean:sL,errorizeMessage:i3,stripFileExtension:_3,autoCast:d3,autoCastJSON:iL,autoCastJSONDeep:DS,removeDir:f3,compareVersions:E3,isCompatibleDataVersion:h3,escapeRawValue:m3,unescapeValue:p3,stringifyProps:S3,timeoutPromise:g3,isClusterOperation:A3,getClusterUser:b3,checkGlobalSchemaTable:O3,getHomeDir:aL,getPropsFilePath:T3,promisifyPapaParse:y3,removeBOM:cL,createEventPromise:N3,checkProcessRunning:I3,checkSchemaTableExist:w3,checkSchemaExists:lL,checkTableExists:uL,getStartOfTomorrowInSeconds:C3,getLimitKey:D3,isObject:u3,isNotEmptyAndHasValue:o3,autoCasterIsNumberCheck:oL,backtickASTSchemaItems:L3,isPortTaken:R3,createForkArgs:M3,autoCastBoolean:P3,async_set_timeout:nL,getTableHashAttribute:U3,doesSchemaExist:v3,doesTableExist:B3,stringifyObj:H3,ms_to_time:x3,changeExtension:G3,getEnvCliRootPath:LS,noBootFile:F3,httpRequest:q3,transformReq:k3,convertToMS:V3,PACKAGE_ROOT:lt.PACKAGE_ROOT};function i3(e){return e instanceof Error?e:new Error(e)}a(i3,"errorizeMessage");function Zr(e){return e==null}a(Zr,"isEmpty");function o3(e){return!Zr(e)&&(e||e===0||e===""||sL(e))}a(o3,"isNotEmptyAndHasValue");function as(e){return Zr(e)||e.length===0||e.size===0}a(as,"isEmptyOrZeroLength");function a3(e){if(Zr(e))return!0;for(let t=0;t<e.length;t++)if(Zr(e[t]))return!0;return!1}a(a3,"arrayHasEmptyValues");function c3(e){if(as(e))return!0;for(let t=0;t<e.length;t++)if(as(e[t]))return!0;return!1}a(c3,"arrayHasEmptyOrZeroLengthValues");function l3(...e){try{return e.join(pi.sep)}catch{console.error(e)}}a(l3,"buildFolderPath");function sL(e){return Zr(e)?!1:e===!0||e===!1}a(sL,"isBoolean");function u3(e){return Zr(e)?!1:typeof e=="object"}a(u3,"isObject");function _3(e){return as(e)?n3:e.slice(0,-s3)}a(_3,"stripFileExtension");function d3(e){return Zr(e)||e===""||typeof e!="string"?e:tL[e]!==void 0?tL[e]:oL(e)===!0?Number(e):e3.test(e)?new Date(e):e}a(d3,"autoCast");function iL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(iL,"autoCastJSON");function DS(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=DS(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=DS(r);n!==r&&(e[t]=n)}return e}else return iL(e)}a(DS,"autoCastJSONDeep");function oL(e){if(e.startsWith("0.")&&eL(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&eL(e))}a(oL,"autoCasterIsNumberCheck");async function f3(e){if(as(e))throw new Error(`Directory path: ${e} does not exist`);try{await jD.emptyDir(e),await jD.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(f3,"removeDir");function E3(e,t){if(as(e)){br.info("Invalid current version sent as parameter.");return}if(as(t)){br.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 _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(E3,"compareVersions");function h3(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(h3,"isCompatibleDataVersion");function m3(e){if(Zr(e))return e;let t=String(e);return t==="."?lt.UNICODE_PERIOD:t===".."?lt.UNICODE_PERIOD+lt.UNICODE_PERIOD:t.replace(lt.FORWARD_SLASH_REGEX,lt.UNICODE_FORWARD_SLASH)}a(m3,"escapeRawValue");function p3(e){if(Zr(e))return e;let t=String(e);return t===lt.UNICODE_PERIOD?".":t===lt.UNICODE_PERIOD+lt.UNICODE_PERIOD?"..":String(e).replace(lt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(p3,"unescapeValue");function S3(e,t){if(Zr(e))return br.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+jd.EOL}!as(n)&&n[0]===";"?r+=" "+n+s+jd.EOL:as(n)||(r+=n+"="+s+jd.EOL)}catch{br.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(S3,"stringifyProps");function aL(){let e;try{e=jd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(aL,"getHomeDir");function T3(){let e=pi.join(aL(),lt.HDB_HOME_DIR_NAME,lt.BOOT_PROPS_FILE_NAME);return rL.existsSync(e)||(e=pi.join(__dirname,"../","hdb_boot_properties.file")),e}a(T3,"getPropsFilePath");function g3(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(g3,"timeoutPromise");async function R3(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=W4.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(R3,"isPortTaken");function A3(e){try{return lt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(A3,"isClusterOperation");function O3(e,t){let r=(Ae(),ie(ke)).getDatabases();if(!r[e])return ef.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return ef.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(O3,"checkGlobalSchemaTable");function b3(e,t){if(Zr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Zr(e)||as(e)){br.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){br.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(b3,"getClusterUser");function y3(){ZD.parsePromise=function(e,t,r){return new Promise(function(n,s){ZD.parse(e,{header:!0,transformHeader:cL,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(y3,"promisifyPapaParse");function cL(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(cL,"removeBOM");function N3(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;br.info(`Got cluster status event response: ${J4(s)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}n(s)})})}a(N3,"createEventPromise");async function I3(e){let t=!0,r=0;do await nL(t3*r++),(await z4.findPs(e)).length>0&&(t=!1);while(t&&r<r3);if(t)throw new Error(`process ${e} was not started`)}a(I3,"checkProcessRunning");function w3(e,t){let r=lL(e);if(r)return r;let n=uL(e,t);if(n)return n}a(w3,"checkSchemaTableExist");function lL(e){let{getDatabases:t}=(Ae(),ie(ke));if(!t()[e])return ef.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(lL,"checkSchemaExists");function uL(e,t){let{getDatabases:r}=(Ae(),ie(ke));if(!r()[e][t])return ef.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(uL,"checkTableExists");function C3(){let e=Zd().utc().add(1,lt.MOMENT_DAYS_TAG).startOf(lt.MOMENT_DAYS_TAG).unix(),t=Zd().utc().unix();return e-t}a(C3,"getStartOfTomorrowInSeconds");function D3(){return Zd().utc().format("DD-MM-YYYY")}a(D3,"getLimitKey");function L3(e){try{let t=new Q4(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){br.error("Got an error back ticking items."),br.error(t)}}a(L3,"backtickASTSchemaItems");function M3(e){return[e]}a(M3,"createForkArgs");function P3(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(P3,"autoCastBoolean");function U3(e,t){let{getDatabases:r}=(Ae(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(U3,"getTableHashAttribute");function v3(e){let{getDatabases:t}=(Ae(),ie(ke));return t()[e]!==void 0}a(v3,"doesSchemaExist");function B3(e,t){let{getDatabases:r}=(Ae(),ie(ke));return r()[e]?.[t]!==void 0}a(B3,"doesTableExist");function H3(e){try{return JSON.stringify(e)}catch{return e}}a(H3,"stringifyObj");function x3(e){let t=Zd.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(x3,"ms_to_time");function G3(e,t){let r=pi.basename(e,pi.extname(e));return pi.join(pi.dirname(e),r+t)}a(G3,"changeExtension");function LS(){if(process.env[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=X4(process.argv);if(e[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(LS,"getEnvCliRootPath");var CS;function F3(){if(CS)return CS;let e=LS();if(LS()&&rL.pathExistsSync(pi.join(e,lt.HDB_CONFIG_FILE)))return CS=!0,!0}a(F3,"noBootFile");function q3(e,t){let r;return e.protocol==="http:"?r=Z4:r=j4,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(q3,"httpRequest");function k3(e){if(!e.schema&&!e.database){e.schema=lt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(k3,"transformReq");function V3(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(V3,"convertToMS")});var ne=g((Bde,mL)=>{"use strict";var MS=require("fs-extra"),uo=require("path"),dL=require("os"),$3=require("properties-reader"),Ml=K(),Ll=J(),de=P(),tf=Rr(),Y3="Error initializing environment manager",rf="BOOT_PROPS_FILE_PATH",fL=!1,K3={[de.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ls={};mL.exports={BOOT_PROPS_FILE_PATH:rf,getHdbBasePath:W3,setHdbBasePath:Q3,get:EL,initSync:J3,setProperty:Pe,initTestEnvironment:j3,setCloneVar:X3};function W3(){return Ls[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(W3,"getHdbBasePath");function Q3(e){Ls[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Q3,"setHdbBasePath");function EL(e){let t=tf.getConfigValue(e);return t===void 0?Ls[e]:t}a(EL,"get");function Pe(e,t){K3[e]&&(Ls[e]=t),tf.updateConfigObject(e,t)}a(Pe,"setProperty");function z3(){let e;try{e=Ll.getPropsFilePath(),MS.accessSync(e,MS.constants.F_OK|MS.constants.R_OK),fL=!0;let t=$3(e);return Ls[de.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(de.HDB_SETTINGS_NAMES.INSTALL_USER),Ls[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ls[rf]=e,!0}catch{return Ml.trace(`Environment manager found no properties file at ${e}`),!1}}a(z3,"doesPropFileExist");function J3(e=!1){try{(fL||z3()||Ll.noBootFile())&&!hL&&(tf.initConfig(e),Ls[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=tf.getConfigValue(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ml.error(Y3),Ml.error(t),console.error(t),process.exit(1)}}a(J3,"initSync");var hL=!1;function X3(e){hL=e}a(X3,"setCloneVar");function j3(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=uo.join(__dirname,"../../","unitTests");Ls[rf]=uo.join(l,"hdb_boot_properties.file"),Pe(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,uo.join(l,"settings.test")),Pe(de.HDB_SETTINGS_NAMES.INSTALL_USER,dL.userInfo()?dL.userInfo().username:void 0),Pe(de.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Pe(de.HDB_SETTINGS_NAMES.LOG_PATH_KEY,uo.join(l,"envDir","log")),Pe(de.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Pe(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,uo.join(l,"envDir")),Pe(de.CONFIG_PARAMS.STORAGE_PATH,uo.join(l,"envDir")),s&&(Pe(de.CONFIG_PARAMS.HTTP_SECUREPORT,EL(de.CONFIG_PARAMS.HTTP_PORT)),Pe(de.CONFIG_PARAMS.HTTP_PORT,null)),Pe(de.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Pe(de.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Pe(de.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ll.isEmpty(i)?!1:i),Pe(de.CONFIG_PARAMS.HTTP_CORS,Ll.isEmpty(i)?!1:i),Pe(de.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Pe(de.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,uo.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Pe(de.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ll.isEmpty(c)?!1:c),o&&(Pe("CORS_ACCESSLIST",o),Pe(de.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Pe(de.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Pe(de.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Pe(de.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${rf}. Please check your boot props and settings files`;Ml.fatal(r),Ml.error(t)}}a(j3,"initTestEnvironment")});var vS={};qe(vS,{loadGQLSchema:()=>tX,start:()=>US,startOnMainThread:()=>eX});function US({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let B=function(U){if(U.kind==="NonNullType"){let Q=B(U.type);return Q.nullable=!1,Q}if(U.kind==="ListType")return{type:"array",elements:B(U.type)};let M={type:U.name?.value};return Object.defineProperty(M,"location",{value:U.loc.startToken}),M};a(B,"getProperty");let T=S.name.value,A=[],b={table:null,database:null,properties:A};E.set(T,b);for(let U of S.directives){if(U.name.value==="table"){for(let q of U.arguments)b[q.name.value]=q.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=T),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,f.push(b)}if(U.name.value==="sealed"&&(b.sealed=!0),U.name.value==="export"){b.export=!0;for(let q of U.arguments)q.name.value==="name"&&(b.export={name:q.value.value})}}let I=!1;for(let U of S.fields){let q=B(U.type);q.name=U.name.value,A.push(q);for(let M of U.directives)if(M.name.value==="primaryKey")I?console.warn("Can not define two attributes as a primary key"):(q.isPrimaryKey=!0,I=!0);else if(M.name.value==="indexed")q.indexed=!0;else if(M.name.value==="relationship"){let Q={};for(let z of M.arguments)Q[z.name.value]=z.value.value;q.relationship=Q}else if(M.name.value==="createdTime")q.assignCreatedTime=!0;else if(M.name.value==="updatedTime")q.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")q.expiresAt=!0;else if(M.name.value==="allow"){let Q=q.authorizedRoles=[];for(let z of M.arguments)z.name.value==="role"&&Q.push(z.value.value)}}b.type=T,T==="Query"&&(h=b)}function p(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):Z3.includes(S.type)||(0,pL.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of E.values())for(let T of S.properties)p(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,PS.dirname)(n),S.tableClass):i.set((0,PS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var PS,pL,Z3,eX,tX,SL=Re(()=>{PS=require("path");Ae();pL=x(it()),Z3=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(US,"start");eX=US,tX=US({ensureTable:Et}).handleFile});async function nf(e){let t=(0,RL.pathToFileURL)(e).toString();return rX?(Pl||(Pl=nX(iX)),(await(await Pl).import(t)).namespace):import(t)}async function nX(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Pl=new Compartment({console,Math,Date,fetch:sX,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,gL.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Yt,tables:jr,databases:ct})}};let n=await(0,TL.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Pl}function sX(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function iX(){return{Resource:Yt,tables:jr}}var TL,gL,RL,rX,Pl,BS=Re(()=>{ln();Ae();TL=require("fs/promises"),gL=require("path"),RL=require("url"),rX=!1;a(nf,"secureImport");a(nX,"getCompartment");a(sX,"secureOnlyFetch");a(iX,"getGlobalVars")});var xS={};qe(xS,{handleFile:()=>oX});async function oX(e,t,r,n){let s=new Map,i=await nf(r);c(i.default)&&n.set((0,HS.dirname)(t),i.default),o(i,(0,HS.dirname)(t));function o(l,_){for(let u in l){let d=l[u];c(d)?n.set(_+"/"+u,d):typeof d=="object"&&o(d,_+"/"+u)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var HS,AL=Re(()=>{BS();HS=require("path");a(oX,"handleFile")});var FS={};qe(FS,{start:()=>aX});function aX({resources:e}){e.set("login",GS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var GS,OL=Re(()=>{ln();a(aX,"start");GS=class extends Yt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var DL={};qe(DL,{parse:()=>kS,streamAsJSON:()=>Ul,stringify:()=>_o});function Ul(e){return new qS({value:e})}function bL(e){return console.error(e),JSON.stringify(e.toString())}function yL(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function _o(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===wL)return CL(e);if(t.resolution)return t.resolution.then(()=>_o(e));throw t}}function CL(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=CL(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+_o(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function kS(e){return uX.test(e)?cX.parse(e):JSON.parse(e)}var NL,IL,cX,lX,wL,qS,uX,VS=Re(()=>{NL=require("stream"),IL=x(require("json-bigint-fixes")),cX=(0,IL.default)({useNativeBigInt:!0}),lX=1e4,wL={};BigInt.prototype.toJSON=function(){throw wL};a(Ul,"streamAsJSON");qS=class extends NL.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),bL)}catch(s){yield bL(s)}else yield _o(t)}else yield _o(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);yL(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>lX?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return yL(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(bL,"handleError");a(yL,"when");a(_o,"stringify");a(CL,"jsStringify");uX=/[[,:]\s*-?\d{16,}/;a(kS,"parse")});var sf=g((zde,LL)=>{"use strict";var _X=Un();LL.exports={writeTransaction:dX};function dX(e,t,r){return _X.writeTransaction(e,t,r)}a(dX,"writeTransaction")});var vL=g((jde,UL)=>{"use strict";var fX=Yr(),EX=li(),ML=K(),hX=fn(),Xde=sf(),mX=require("clone"),YS=require("alasql"),pX=fd(),PL=require("util"),SX=PL.promisify(EX.getTableSchema),TX=PL.promisify(fX.search),gX=P(),$S=J();pX(YS);UL.exports={update:AX};var RX="There was a problem performing this update. Please check the logs and try again.";async function AX({statement:e,hdb_user:t}){let r=await SX(e.table.databaseid,e.table.tableid),n=OX(e.columns);$S.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=mX(s),c=$S.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=YS.parse(l).statements[0],u=await TX(_),d=bX(n,u);return yX(o,d,t)}a(AX,"update");function OX(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=YS.compile(`SELECT ${r.expression.toString()} AS [${gX.FUNC_VAL}] FROM ?`)}),t}catch(t){throw ML.error(t),new Error(RX)}}a(OX,"createUpdateRecord");function bX(e,t){return $S.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(bX,"buildUpdateRecords");async function yX(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await hX.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){ML.error(`Error delete new_attributes from update response: ${i}`)}return s}a(yX,"updateRecords")});var HL=g((rfe,BL)=>{var NX=require("alasql"),IX=Yr(),wX=K(),CX=Un(),WS=require("util"),KS=J(),DX=P(),LX=li(),efe=sf(),tfe=fn(),MX="record",PX="successfully deleted",UX=WS.callbackify(xX),vX=WS.promisify(IX.search),BX=WS.promisify(LX.getTableSchema);BL.exports={convertDelete:UX};function HX(e){return`${e.deleted_hashes.length} ${MX}${e.deleted_hashes.length===1?"":"s"} ${PX}`}a(HX,"generateReturnMessage");async function xX({statement:e,hdb_user:t}){let r=await BX(e.table.databaseid,e.table.tableid);KS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=KS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=NX.parse(o).statements[0],l={operation:DX.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await vX(c);let _=await CX.deleteRecords(l);return KS.isEmptyOrZeroLength(_.message)&&(_.message=HX(_)),delete _.txn_time,_}catch(_){throw wX.error(_),_.hdb_code?_.message:_}}a(xX,"convertDelete")});var kL=g((sfe,qL)=>{"use strict";var GX=ci(),{hdb_errors:xL}=se(),{getDatabases:GL}=(Ae(),ie(ke));qL.exports={checkSchemaExists:FL,checkSchemaTableExists:FX,schema_describe:GX};async function FL(e){if(!GL()[e])return xL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(FL,"checkSchemaExists");async function FX(e,t){let r=await FL(e);if(r)return r;if(!GL()[e][t])return xL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(FX,"checkSchemaTableExists")});var vl=g((ofe,qX)=>{qX.exports={name:"harperdb",version:"4.3.36",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var jS=g((ufe,eM)=>{"use strict";var{decode:kX}=require("msgpackr"),{isMainThread:afe,parentPort:cfe,threadId:lfe}=require("worker_threads"),cf=Ct(),Sa=at(),JS=P(),sr=K(),zS=ne(),VX=P(),{onMessageByType:$X}=it(),KL=Cs(),{recordAction:VL,recordActionBinary:YX}=(Ds(),ie(ml)),{publishToStream:KX}=cf,{ConsumerEvents:$L}=require("nats"),WX=Yr(),{promisify:QX}=require("util"),WL=QX(setTimeout),lf=1e4,uf,af,zX,JX,QL,Bl=new Map,Ta=new Map;eM.exports={initialize:zL,ingestConsumer:XS,setSubscription:XX,setIgnoreOrigin:ej,getDatabaseSubscriptions:ZX,updateConsumer:JL};async function zL(){$X(JS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await JL(n)}),QL=!0,sr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await cf.getNATSReferences();uf=e,af=e.info.server_name,zX=t,JX=r}a(zL,"initialize");async function JL(e){if(e.status==="start"){let{js:t,jsm:r}=await XL(e.node_domain_name);XS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Bl.get(e.stream_name+e.node_domain_name);t&&(sr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Bl.set(e.stream_name+e.node_domain_name,"close")),Ta.get(e.node_domain_name)==="failed"&&Ta.set(e.node_domain_name,"close")}}a(JL,"updateConsumer");var _f=new Map;function XX(e,t,r){let n=_f.get(e);n||_f.set(e,n=new Map),n.set(t,r),QL||zL().then(jX)}a(XX,"setSubscription");async function jX(){let e=await WX.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Sa.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await XL(r),!n))break;let{schema:o,table:c}=i,l=KL.createNatsTableStreamName(o,c);XS(l,n,s,r)}}}a(jX,"accessConsumers");async function XL(e){let t,r,n=1;for(;!r;)try{t=await uf.jetstream({domain:e}),r=await uf.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Ta.get(e)==="close")break;Ta.set(e,"failed"),n%10===1&&sr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<lf?n++*100:lf;await WL(i)}return{js:t,jsm:r}}a(XL,"connectToRemoteJS");function ZX(){return _f}a(ZX,"getDatabaseSubscriptions");var jL;function ej(e){jL=e}a(ej,"setIgnoreOrigin");var ZL=100,YL=new Array(ZL),of=0;async function XS(e,t,r,n){let{connection:s}=await cf.getNATSReferences();uf=s,af=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,af),sr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Ta.get(n)==="close")break;o%10===1&&sr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(sr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await cf.createConsumer(r,e,af,new Date(Date.now()).toISOString()));let u=o++*100<lf?o++*100:lf;await WL(u)}let c=!1,l;for(;!c;){if(Bl.get(e+n)==="close"||Ta.get(n)==="close"){Bl.delete(e+n),c=!0;continue}l=await i.consume({max_messages:zS.get(JS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Bl.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===$L.ConsumerDeleted&&(await l.close(),c=!0),u.type===$L.HeartbeatsMissed){let d=u.data;sr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(sr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await YL[of],YL[of]=tj(u).catch(d=>{sr.error(d)}),++of>=ZL&&(of=0)}catch(u){u.message==="consumer deleted"?(sr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):sr.error("Error consuming clustering ingest, restarting consumer",u)}}}a(XS,"ingestConsumer");async function tj(e){let t=kX(e.data);VL(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),sr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=zS.get(JS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Sa.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Sa.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Sa.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!jL),YX(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Sa.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:E,expiresAt:f}=t;sr.trace("processing message:",o,c,_,(u?"records: "+u.map(B=>B?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),sr.trace(`messageProcessor nats msg id: ${e.headers.get(Sa.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let p=new Promise(B=>h=B),{timestamp:S,user:T,node_name:A}=E||{},b=_f.get(c)?.get(_);if(!b)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,b.send(t);else if(u.length===1&&!l)b.send({type:QS(o),value:u[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:T,nodeName:A});else{let B=u.map((U,q)=>({type:QS(o),value:U,expiresAt:f,id:d?.[q],table:_}));for(;l;)B.push({type:QS(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;b.send({type:"transaction",writes:B,table:_,timestamp:S,onCommit:h,user:T,nodeName:A})}zS.get(VX.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&KX(e.subject.split(".").slice(0,-1).join("."),KL.createNatsTableStreamName(c,_),e.headers,e.data),await p;let I=Date.now()-S;S&&VL(I,"replication-latency",e.subject,o,"ingest")}catch(o){sr.error(o)}e.ack()}a(tj,"messageProcessor");function QS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(QS,"convertOperation")});var Ct=g((pfe,pM)=>{"use strict";var xt=ne();xt.initSync();var rj=require("fs-extra"),nj=require("semver"),Gl=require("path"),{monotonicFactory:sj}=require("ulidx"),rM=sj(),ij=require("util"),nM=require("child_process"),oj=ij.promisify(nM.exec),aj=nM.spawn,Wt=at(),Ie=P(),df=J(),Fn=K(),ff=Cs(),cj=sf(),Hl=Rr(),{broadcast:lj,onMessageByType:uj,getWorkerIndex:_j}=it(),{isMainThread:sM}=require("worker_threads"),{Encoder:dj,decode:rT}=require("msgpackr"),iM=new dj,{isEmpty:mo}=df,oM=En(),dfe=48*36e11;sM&&uj(Ie.ITC_EVENT_TYPES.RESTART,()=>{ir=void 0,ho=void 0});var{connect:fj,StorageType:Ej,RetentionPolicy:hj,AckPolicy:nT,DeliverPolicy:sT,DiscardPolicy:mj,NatsConnection:ffe,JetStreamManager:Efe,JetStreamClient:hfe,StringCodec:mfe,JSONCodec:pj,createInbox:iT,headers:Sj,ErrorCode:tM}=require("nats"),{PACKAGE_ROOT:Tj}=P(),gj=vl(),{recordAction:Rj}=(Ds(),ie(ml)),aM=pj(),Aj="clustering",Oj=gj.engines[Wt.NATS_SERVER_NAME],bj=Gl.join(Tj,"dependencies"),tT=Gl.join(bj,`${process.platform}-${process.arch}`,Wt.NATS_BINARY_NAME),ZS,eT,xl,fo,Eo;pM.exports={runCommand:cM,checkNATSServerInstalled:yj,createConnection:oT,getConnection:Fl,getJetStreamManager:ql,getJetStream:uM,getNATSReferences:cs,getServerList:Ij,createLocalStream:aT,listStreams:_M,deleteLocalStream:wj,getServerConfig:ga,listRemoteStreams:Cj,viewStream:Dj,viewStreamIterator:Lj,publishToStream:Mj,request:vj,reloadNATS:cT,reloadNATSHub:Bj,reloadNATSLeaf:Hj,extractServerName:Uj,requestErrorHandler:xj,createLocalTableStream:hM,createTableStreams:qj,purgeTableStream:mM,purgeSchemaTableStreams:kj,getStreamInfo:Vj,updateLocalStreams:Yj,closeConnection:Nj,getJsmServerName:Ef,addNatsMsgHeader:dM,clearClientCache:lM,updateRemoteConsumer:Gj,createConsumer:fM,updateConsumerIterator:Fj};async function cM(e,t=void 0){let{stdout:r,stderr:n}=await oj(e,{cwd:t});if(n)throw new Error(n.replace(`
11
11
  `,""));return r.replace(`
12
12
  `,"")}a(cM,"runCommand");async function yj(){try{await rj.access(tT)}catch{return!1}let e=await cM(`${tT} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return nj.eq(t,Oj)}a(yj,"checkNATSServerInstalled");async function oT(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await oM.getClusterUser();if(mo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Fn.trace("create nats connection called");let i=await fj({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Fn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Fn.error("Error with Nats client connection, connection closed",o),i===ir&&lM()}),i}a(oT,"createConnection");function lM(){ir=void 0,fo=void 0,Eo=void 0,ho=void 0}a(lM,"clearClientCache");async function Nj(){ir&&(await ir.drain(),ir=void 0,fo=void 0,Eo=void 0,ho=void 0)}a(Nj,"closeConnection");var ir,ho;async function Fl(){return ho||(ho=oT(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ir=await ho),ir||ho}a(Fl,"getConnection");async function ql(){if(fo)return fo;mo(ir)&&await Fl();let{domain:e}=ga(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(mo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return fo=await ir.jetstreamManager({domain:e,timeout:6e4}),fo}a(ql,"getJetStreamManager");async function uM(){if(Eo)return Eo;mo(ir)&&await Fl();let{domain:e}=ga(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(mo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Eo=ir.jetstream({domain:e,timeout:6e4}),Eo}a(uM,"getJetStream");async function cs(){let e=ir||await Fl(),t=fo||await ql(),r=Eo||await uM();return{connection:e,jsm:t,js:r}}a(cs,"getNATSReferences");async function Ij(e){let t=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await oM.getClusterUser(),s=await oT(t,r,n),i=iT(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=aM.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await df.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(Ij,"getServerList");async function aT(e,t){let{jsm:r}=await cs(),n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Ej.File,retention:hj.Limits,subjects:t,discard:mj.Old,max_msgs:s,max_bytes:i,max_age:n})}a(aT,"createLocalStream");async function _M(){let{jsm:e}=await cs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(_M,"listStreams");async function wj(e){let{jsm:t}=await cs();await t.streams.delete(e)}a(wj,"deleteLocalStream");async function Cj(e){let{connection:t}=await cs(),r=[],n=iT(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(aM.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Cj,"listRemoteStreams");async function Dj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await cs(),i=rM(),o={durable_name:i,ack_policy:nT.Explicit};t&&(o.deliver_policy=sT.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=rT(u.data),E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(E.origin=u.headers.get(Wt.MSG_HEADERS.ORIGIN)),_.push(E),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(Dj,"viewStream");async function*Lj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await cs(),i=rM(),o={durable_name:i,ack_policy:nT.Explicit};t&&(o.deliver_policy=sT.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=rT(_.data);u[0]||(u=[u]);for(let d of u){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(Wt.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(Lj,"viewStreamIterator");async function Mj(e,t,r,n){Fn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=dM(n,r);let{js:s}=await cs(),i=await Ef(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:iM.encode(n);try{Fn.trace(`publishToStream publishing to subject: ${o}`),Rj(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return EM(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Fn.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await aT(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Mj,"publishToStream");function dM(e,t){t===void 0&&(t=Sj());let r=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Wt.MSG_HEADERS.ORIGIN)&&r&&t.append(Wt.MSG_HEADERS.ORIGIN,r),t}a(dM,"addNatsMsgHeader");function ga(e){e=e.toLowerCase();let t=Gl.join(xt.get(Ie.CONFIG_PARAMS.ROOTPATH),Aj);if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return mo(eT)&&(eT={port:Hl.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Hl.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wt.SERVER_SUFFIX.HUB,config_file:Wt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Gl.join(t,Wt.PID_FILES.HUB),hdb_nats_path:t}),eT;if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return mo(ZS)&&(ZS={port:Hl.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Hl.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wt.SERVER_SUFFIX.LEAF,config_file:Wt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Hl.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wt.SERVER_SUFFIX.LEAF,pid_file_path:Gl.join(t,Wt.PID_FILES.LEAF),hdb_nats_path:t}),ZS;Fn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ga,"getServerConfig");async function fM(e,t,r,n){try{await e.consumers.add(t,{ack_policy:nT.Explicit,durable_name:r,deliver_policy:sT.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(fM,"createConsumer");async function Pj(e,t,r){await e.consumers.delete(t,r)}a(Pj,"removeConsumer");function Uj(e){return e.split(".")[1]}a(Uj,"extractServerName");async function vj(e,t,r=6e4,n=iT()){if(!df.isObject(t))throw new Error("data param must be an object");let s=iM.encode(t),{connection:i}=await cs(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return rT(c.data)}a(vj,"request");function cT(e){return new Promise(async(t,r)=>{let n=aj(tT,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(cT,"reloadNATS");async function Bj(){let{pid_file_path:e}=ga(Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await cT(e)}a(Bj,"reloadNATSHub");async function Hj(){let{pid_file_path:e}=ga(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await cT(e)}a(Hj,"reloadNATSLeaf");function xj(e,t,r){let n;switch(e.code){case tM.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case tM.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(xj,"requestErrorHandler");async function Gj(e,t){let r=t+Wt.SERVER_SUFFIX.LEAF,{connection:n}=await cs(),{jsm:s}=await Wj(r),{schema:i,table:o}=e,c=ff.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await EM(async()=>{if(e.subscribe===!0)await fM(s,c,n.info.server_name,l);else try{await Pj(s,c,n.info.server_name)}catch(_){Fn.trace(_)}})}a(Gj,"updateRemoteConsumer");async function Fj(e,t,r,n){let s=ff.createNatsTableStreamName(e,t),i=r+Wt.SERVER_SUFFIX.LEAF,o={type:Ie.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!sM&&_j()<xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=jS();await c(o)}await lj(o),n==="stop"&&await df.async_set_timeout(1e3)}a(Fj,"updateConsumerIterator");function EM(e){return cj.writeTransaction(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(EM,"exclusiveLock");async function hM(e,t){let r=ff.createNatsTableStreamName(e,t),n=await Ef(),s=$j(e,t,n);await aT(r,[s])}a(hM,"createLocalTableStream");async function qj(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await hM(n,s)}}a(qj,"createTableStreams");async function mM(e,t,r=void 0){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=ff.createNatsTableStreamName(e,t),{domain:s}=ga(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Fl()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Fn.warn(n);else throw n}}a(mM,"purgeTableStream");async function kj(e,t){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await mM(e,t[r])}a(kj,"purgeSchemaTableStreams");async function Vj(e){return(await ql()).streams.info(e)}a(Vj,"getStreamInfo");function $j(e,t,r){return`${Wt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a($j,"createSubjectName");async function Ef(){if(xl)return xl;if(xl=(await ql())?.nc?.info?.server_name,xl===void 0)throw new Error("Unable to get jetstream manager server name");return xl}a(Ef,"getJsmServerName");async function Yj(){let e=await ql(),t=await Ef(),r=await _M();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Kj(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");Fn.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(Yj,"updateLocalStreams");function Kj(e){let{config:t}=e,r=!1,n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Kj,"updateStreamLimits");async function Wj(e){let t,r;try{t=await ir.jetstream({domain:e}),r=await ir.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Fn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Wj,"connectToRemoteJS")});var Sf=g((gfe,RM)=>{"use strict";var Ra=j_(),Aa=kL(),Qj=K(),zj=require("uuid").v4,Tfe=require("clone"),mf=ys(),Oa=P(),Jj=require("util"),Si=Un(),{handleHDBError:yr,hdb_errors:Xj}=se(),{HDB_ERROR_MSGS:hf,HTTP_STATUS_CODES:Nr}=Xj,{SchemaEventMsg:pf}=Ln(),SM=Ct(),{getDatabases:jj}=(Ae(),ie(ke)),{transformReq:ba}=J();RM.exports={createSchema:Zj,createSchemaStructure:TM,createTable:eZ,createTableStructure:gM,createAttribute:iZ,dropSchema:tZ,dropTable:rZ,dropAttribute:nZ,getBackup:oZ};async function Zj(e){let t=await TM(e);return mf.signalSchemaChange(new pf(process.pid,e.operation,e.schema)),t}a(Zj,"createSchema");async function TM(e){let t=Ra.schema_object(e);if(t)throw yr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);if(ba(e),!await Aa.checkSchemaExists(e.schema))throw yr(new Error,hf.SCHEMA_EXISTS_ERR(e.schema),Nr.BAD_REQUEST,Oa.LOG_LEVELS.ERROR,hf.SCHEMA_EXISTS_ERR(e.schema),!0);return await Si.createSchema(e),`database '${e.schema}' successfully created`}a(TM,"createSchemaStructure");async function eZ(e){return ba(e),e.hash_attribute=e.primary_key??e.hash_attribute,await gM(e)}a(eZ,"createTable");async function gM(e){let t=Ra.create_table_object(e);if(t)throw yr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);if(Ra.validateTableResidence(e.residence),!await Aa.checkSchemaTableExists(e.schema,e.table))throw yr(new Error,hf.TABLE_EXISTS_ERR(e.schema,e.table),Nr.BAD_REQUEST,Oa.LOG_LEVELS.ERROR,hf.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:zj(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Si.createTable(n,e);else throw yr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Nr.BAD_REQUEST);else await Si.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(gM,"createTableStructure");async function tZ(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ra.schema_object(e),n=t??r;if(n)throw yr(n,n.message,Nr.BAD_REQUEST,void 0,void 0,!0);ba(e);let s=await Aa.checkSchemaExists(e.schema);if(s)throw yr(new Error,s,Nr.NOT_FOUND,Oa.LOG_LEVELS.ERROR,s,!0);let i=await Aa.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Si.dropSchema(e),mf.signalSchemaChange(new pf(process.pid,e.operation,e.schema)),await SM.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(tZ,"dropSchema");async function rZ(e){let t=Ra.table_object(e);if(t)throw yr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);ba(e);let r=await Aa.checkSchemaTableExists(e.schema,e.table);if(r)throw yr(new Error,r,Nr.NOT_FOUND,Oa.LOG_LEVELS.ERROR,r,!0);return await Si.dropTable(e),await SM.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(rZ,"dropTable");async function nZ(e){let t=Ra.attribute_object(e);if(t)throw yr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);ba(e);let r=await Aa.checkSchemaTableExists(e.schema,e.table);if(r)throw yr(new Error,r,Nr.NOT_FOUND,Oa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw yr(new Error,"You cannot drop a hash attribute",Nr.BAD_REQUEST,void 0,void 0,!0);if(Oa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw yr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Nr.BAD_REQUEST,void 0,void 0,!0);try{return await Si.dropAttribute(e),sZ(e),mf.signalSchemaChange(new pf(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Qj.error(`Got an error deleting attribute ${Jj.inspect(e)}.`),n}}a(nZ,"dropAttribute");function sZ(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(sZ,"dropAttributeFromGlobal");async function iZ(e){ba(e);let t=jj()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw yr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Nr.BAD_REQUEST,void 0,void 0,!0);return await Si.createAttribute(e),mf.signalSchemaChange(new pf(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(iZ,"createAttribute");function oZ(e){return Si.getBackup(e)}a(oZ,"getBackup")});var OM=g((Afe,AM)=>{"use strict";var{OPERATIONS_ENUM:aZ}=P(),lT=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=aZ.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};AM.exports=lT});var uT=g((yfe,wM)=>{"use strict";var cZ=Un(),bfe=OM(),Tf=J(),gf=P(),lZ=ne(),{handleHDBError:bM,hdb_errors:uZ}=se(),{HDB_ERROR_MSGS:yM,HTTP_STATUS_CODES:NM}=uZ,_Z=Object.values(gf.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),IM="To use this operation audit log must be enabled in harperdb-config.yaml";wM.exports=dZ;async function dZ(e){if(Tf.isEmpty(e.schema))throw new Error(yM.SCHEMA_REQUIRED_ERR);if(Tf.isEmpty(e.table))throw new Error(yM.TABLE_REQUIRED_ERR);if(!lZ.get(gf.CONFIG_PARAMS.LOGGING_AUDITLOG))throw bM(new Error,IM,NM.BAD_REQUEST,gf.LOG_LEVELS.ERROR,IM,!0);let t=Tf.checkSchemaTableExist(e.schema,e.table);if(t)throw bM(new Error,t,NM.NOT_FOUND,gf.LOG_LEVELS.ERROR,t,!0);if(!Tf.isEmpty(e.search_type)&&_Z.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await cZ.readAuditLog(e)}a(dZ,"readAuditLog")});var DM=g((Ife,CM)=>{"use strict";var{OPERATIONS_ENUM:fZ}=P(),_T=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=fZ.GET_BACKUP,this.schema=t,this.table=r}};CM.exports=_T});var PM=g((Lfe,MM)=>{"use strict";var EZ=Un(),Cfe=DM(),dT=J(),hZ=P(),Dfe=ne(),{handleHDBError:mZ,hdb_errors:pZ}=se(),{HDB_ERROR_MSGS:LM,HTTP_STATUS_CODES:SZ}=pZ;MM.exports=TZ;async function TZ(e){if(dT.isEmpty(e.schema))throw new Error(LM.SCHEMA_REQUIRED_ERR);if(dT.isEmpty(e.table))throw new Error(LM.TABLE_REQUIRED_ERR);let t=dT.checkSchemaTableExist(e.schema,e.table);if(t)throw mZ(new Error,t,SZ.NOT_FOUND,hZ.LOG_LEVELS.ERROR,t,!0);return await EZ.getBackup(read_audit_log_object)}a(TZ,"getBackup")});var GM=g((Pfe,xM)=>{var Ti=require("validate.js"),vM=ot(),ya=P(),{handleHDBError:gZ,hdb_errors:RZ}=se(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:AZ}=RZ,fT=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),OZ={STRUCTURE_USER:"structure_user"},UM=Object.values(ya.ROLE_TYPES_ENUM),bZ="attribute_permissions",yZ="attribute_name",{PERMS_CRUD_ENUM:Na}=ya,NZ=[bZ,...Object.values(Na)],BM=[Na.READ,Na.INSERT,Na.UPDATE],IZ=[yZ,...BM];function wZ(e){let t=fT();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,HM(e,t)}a(wZ,"addRoleValidation");function CZ(e){let t=fT();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,HM(e,t)}a(CZ,"alterRoleValidation");function DZ(e){let t=fT();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,vM.validateObject(e,t)}a(DZ,"dropRoleValidation");var LZ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function HM(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)LZ.includes(n[o])||s.push(n[o]);s.length>0&&At(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=vM.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=MZ(e);o&&At(o,r),UM.forEach(c=>{e.permission[c]&&!Ti.isBoolean(e.permission[c])&&At(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(UM.indexOf(o)<0){if(o===OZ.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||At(mt.SCHEMA_NOT_FOUND(d),r)}continue}At(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(mt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){At(mt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{NZ.includes(u)||At(mt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Na).forEach(u=>{Ti.isDefined(_[u])?Ti.isBoolean(_[u])||At(mt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):At(mt.TABLE_PERM_MISSING(u),r,o,l)}),Ti.isDefined(_.attribute_permissions)){if(!Ti.isArray(_.attribute_permissions)){At(mt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{At(mt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!IZ.includes(p)&&p!==Na.DELETE&&At(mt.INVALID_ATTR_PERM_KEY(p),r,o,l)}),!Ti.isDefined(f.attribute_name)){At(mt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=f.attribute_name;if(!u.includes(h)){At(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}BM.forEach(p=>{Ti.isDefined(f[p])?Ti.isBoolean(f[p])||At(mt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,l):At(mt.ATTR_PERM_MISSING(p,h),r,o,l)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${l}`;At(mt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,l)}}}}return PZ(r)}a(HM,"customValidate");xM.exports={addRoleValidation:wZ,alterRoleValidation:CZ,dropRoleValidation:DZ};function MZ(e){let{operation:t,permission:r}=e;if(t===ya.OPERATIONS_ENUM.ADD_ROLE||t===ya.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ya.ROLE_TYPES_ENUM.SUPER_USER:ya.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(MZ,"validateNoSUPerms");function PZ(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return gZ(new Error,n,AZ.BAD_REQUEST)}else return null}a(PZ,"generateRolePermResponse");function At(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(At,"addPermError")});var TT=g((vfe,VM)=>{"use strict";var FM=fn(),qM=Yr(),UZ=Zi(),hT=GM(),mT=ys(),vZ=require("uuid").v4,BZ=require("util"),Rf=P(),HZ=J(),pT=qM.searchByValue,xZ=qM.searchByHash,GZ=BZ.promisify(UZ.delete),FZ=es(),qZ=na(),{hdb_errors:kZ,handleHDBError:po}=se(),{HDB_ERROR_MSGS:kM,HTTP_STATUS_CODES:kl}=kZ,{UserEventMsg:ST}=Ln();VM.exports={addRole:VZ,alterRole:$Z,dropRole:YZ,listRoles:KZ};function ET(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(ET,"scrubRoleDetails");async function VZ(e){let t=hT.addRoleValidation(e);if(t)throw t;e=ET(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await pT(r)||[])}catch(i){throw po(i)}if(n&&n.length>0)throw po(new Error,kM.ROLE_ALREADY_EXISTS(e.role),kl.CONFLICT,void 0,void 0,!0);e.id||(e.id=vZ());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await FM.insert(s),mT.signalUserChange(new ST(process.pid)),e=ET(e),e}a(VZ,"addRole");async function $Z(e){let t=hT.alterRoleValidation(e);if(t)throw t;e=ET(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await FM.update(r)}catch(s){throw po(s)}if(n&&n?.message==="updated 0 of 1 records")throw po(new Error,"Invalid role id",kl.BAD_REQUEST,void 0,void 0,!0);return await mT.signalUserChange(new ST(process.pid)),e}a($Z,"alterRole");async function YZ(e){let t=hT.dropRoleValidation(e);if(t)throw po(new Error,t,kl.BAD_REQUEST,void 0,void 0,!0);let r=new qZ(Rf.SYSTEM_SCHEMA_NAME,Rf.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await xZ(r));if(n.length===0)throw po(new Error,kM.ROLE_NOT_FOUND,kl.NOT_FOUND,void 0,void 0,!0);let s=new FZ(Rf.SYSTEM_SCHEMA_NAME,Rf.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await pT(s)),o=!1;if(HZ.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw po(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,kl.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await GZ(c),mT.signalUserChange(new ST(process.pid)),`${n[0].role} successfully deleted`}a(YZ,"dropRole");async function KZ(){return pT({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(KZ,"listRoles")});var WM=g((Hfe,KM)=>{"use strict";var WZ=ne(),gi=require("joi"),QZ=ot(),$M=require("moment"),zZ=require("fs-extra"),gT=require("path"),JZ=require("lodash"),Vl=P(),{LOG_LEVELS:So}=P(),XZ="YYYY-MM-DD hh:mm:ss",jZ=gT.resolve(__dirname,"../logs");KM.exports=function(e){return QZ.validateBySchema(e,ZZ)};var ZZ=gi.object({from:gi.custom(YM),until:gi.custom(YM),level:gi.valid(So.NOTIFY,So.FATAL,So.ERROR,So.WARN,So.INFO,So.DEBUG,So.TRACE),order:gi.valid("asc","desc"),limit:gi.number().min(1),start:gi.number().min(0),log_name:gi.custom(e5)});function YM(e,t){if($M(e,$M.ISO_8601).format(XZ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(YM,"validateDatetime");function e5(e,t){if(JZ.invert(Vl.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=WZ.get(Vl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Vl.LOG_NAMES.HDB:e,i=s===Vl.LOG_NAMES.INSTALL?gT.join(jZ,Vl.LOG_NAMES.INSTALL):gT.join(n,s);return zZ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(e5,"validateReadLogPath")});var AT=g((Gfe,zM)=>{"use strict";var Af=P(),t5=K(),r5=ne(),n5=WM(),RT=require("path"),QM=require("fs-extra"),{once:s5}=require("events"),{handleHDBError:i5,hdb_errors:o5}=se(),{PACKAGE_ROOT:a5}=P(),c5=RT.join(a5,"logs"),l5=1e3,u5=200;zM.exports=_5;async function _5(e){let t=n5(e);if(t)throw i5(t,t.message,o5.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=r5.get(Af.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Af.LOG_NAMES.HDB:e.log_name,s=n===Af.LOG_NAMES.INSTALL?RT.join(c5,Af.LOG_NAMES.INSTALL):RT.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?l5:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!l&&!u&&(p=Math.max(QM.statSync(s).size-(h+5)*u5,0));let S=QM.createReadStream(s,{start:p});S.on("error",U=>{t5.error(U)});let T=0,A=[],b="",I;S.on("data",U=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=b+U;let M=0,Q;for(;(Q=q.exec(U))&&!S.destroyed;){I&&(I.message=U.slice(M,Q.index),B(I));let[z,j,oe]=Q,le=oe.split("] ["),ue=le[0],Be=le[1];le.splice(0,2),I={timestamp:j,thread:ue,level:Be,tags:le,message:""},M=Q.index+z.length}b=U.slice(M)}),S.on("end",U=>{S.destroyed||I&&(I.message=b.trim(),B(I))}),S.resume();function B(U){let q,M,Q;switch(!0){case(i&&c&&_):q=new Date(U.timestamp),M=new Date(l),Q=new Date(u),U.level===o&&q>=M&&q<=Q&&T<f?T++:U.level===o&&q>=M&&q<=Q&&(Ri(U,E,A),T++,T===h&&S.destroy());break;case(i&&c):q=new Date(U.timestamp),M=new Date(l),U.level===o&&q>=M&&T<f?T++:U.level===o&&q>=M&&(Ri(U,E,A),T++,T===h&&S.destroy());break;case(i&&_):q=new Date(U.timestamp),Q=new Date(u),U.level===o&&q<=Q&&T<f?T++:U.level===o&&q<=Q&&(Ri(U,E,A),T++,T===h&&S.destroy());break;case(c&&_):q=new Date(U.timestamp),M=new Date(l),Q=new Date(u),q>=M&&q<=Q&&T<f?T++:q>=M&&q<=Q&&(Ri(U,E,A),T++,T===h&&S.destroy());break;case i:U.level===o&&T<f?T++:U.level===o&&(Ri(U,E,A),T++,T===h&&S.destroy());break;case c:q=new Date(U.timestamp),M=new Date(l),q>=M&&T<f?T++:q>=M&&T>=f&&(Ri(U,E,A),T++,T===h&&S.destroy());break;case _:q=new Date(U.timestamp),Q=new Date(u),q<=Q&&T<f?T++:q<=Q&&T>=f&&(Ri(U,E,A),T++,T===h&&S.destroy());break;default:T<f?T++:(Ri(U,E,A),T++,T===h&&S.destroy())}}return a(B,"onLogMessage"),await s5(S,"close"),A}a(_5,"readLog");function Ri(e,t,r){t==="desc"?d5(e,r):t==="asc"?f5(e,r):r.push(e)}a(Ri,"pushLineToResult");function d5(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(d5,"insertDescending");function f5(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(f5,"insertAscending")});var Of=g(($fe,ZM)=>{"use strict";var OT=require("joi"),{string:$l,boolean:JM,date:E5}=OT.types(),h5=ot(),{validateSchemaExists:qfe,validateTableExists:kfe,validateSchemaName:Vfe}=jn(),m5=P(),p5=at(),XM=ne();XM.initSync();var S5=$l.invalid(XM.get(m5.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(p5.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),jM={operation:$l.valid("add_node","update_node","set_node_replication"),node_name:S5,subscriptions:OT.array().items({table:$l.optional(),schema:$l.optional(),database:$l.optional(),subscribe:JM.required(),publish:JM.required().custom(g5),start_time:E5.iso()}).min(1).required()};function T5(e){return h5.validateBySchema(e,OT.object(jM))}a(T5,"addUpdateNodeValidator");function g5(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(g5,"checkForFalsy");ZM.exports={addUpdateNodeValidator:T5,validation_schema:jM}});var tP=g((Kfe,eP)=>{var R5=ot(),A5={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};eP.exports=function(e){return R5.validateObject(e,A5)}});var yT=g((Wfe,rP)=>{"use strict";var O5=P().OPERATIONS_ENUM,bT=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=O5.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};rP.exports=bT});var sP=g((zfe,nP)=>{"use strict";var b5={OPERATION:"operation",REFRESH:"refresh"},NT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},IT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};nP.exports={JWTTokens:NT,TOKEN_TYPE_ENUM:b5,JWTRSAKeys:IT}});var Wl=g((Xfe,cP)=>{"use strict";var Kl=require("jsonwebtoken"),wT=require("fs-extra"),CT=J(),mn=P(),{handleHDBError:Ir,hdb_errors:y5}=se(),{HTTP_STATUS_CODES:wr,AUTHENTICATION_ERROR_MSGS:Cr}=y5,Yl=K(),iP=Od(),MT=En(),N5=fn().update,I5=yT(),w5=ys(),{UserEventMsg:C5}=Ln(),Ai=ne();Ai.initSync();var DT=require("path"),{JWTTokens:D5,JWTRSAKeys:L5,TOKEN_TYPE_ENUM:bf}=sP(),M5=Ai.get(mn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ai.get(mn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",P5=Ai.get(mn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ai.get(mn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",yf="RS256",LT;cP.exports={createTokens:U5,validateOperationToken:B5,refreshOperationToken:v5,validateRefreshToken:aP};async function U5(e){if(CT.isEmpty(e)||typeof e!="object")throw Ir(new Error,Cr.INVALID_AUTH_OBJECT,wr.BAD_REQUEST,void 0,void 0,!0);if(CT.isEmpty(e.username))throw Ir(new Error,Cr.USERNAME_REQUIRED,wr.BAD_REQUEST,void 0,void 0,!0);if(CT.isEmpty(e.password))throw Ir(new Error,Cr.PASSWORD_REQUIRED,wr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await MT.findAndValidateUser(e.username,e.password),!t)throw Ir(new Error,Cr.INVALID_CREDENTIALS,wr.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Yl.error(E),Ir(new Error,Cr.INVALID_CREDENTIALS,wr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Nf(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await oP(i,r.private_key,r.passphrase),c=await Kl.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:P5,algorithm:yf,subject:bf.REFRESH}),l=iP.hash(c),_=new I5(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await N5(_)}catch(E){Yl.error(E),d=E}if(d!==void 0||u.skipped_hashes.length>0)throw Ir(new Error,Cr.REFRESH_TOKEN_SAVE_FAILED,wr.INTERNAL_SERVER_ERROR);return w5.signalUserChange(new C5(process.pid)),new D5(o,c)}a(U5,"createTokens");async function oP(e,t,r){return await Kl.sign(e,{key:t,passphrase:r},{expiresIn:M5,algorithm:yf,subject:bf.OPERATION})}a(oP,"signOperationToken");async function Nf(){if(LT===void 0)try{let e=DT.join(Ai.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=DT.join(Ai.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=DT.join(Ai.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await wT.readFile(e)).toString(),s=(await wT.readFile(t)).toString(),i=(await wT.readFile(r)).toString();LT=new L5(i,s,n)}catch(e){throw Yl.error(e),Ir(new Error,Cr.NO_ENCRYPTION_KEYS,wr.INTERNAL_SERVER_ERROR)}return LT}a(Nf,"getJWTRSAKeys");async function v5(e){if(!e)throw Ir(new Error,Cr.INVALID_BODY,wr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ir(new Error,Cr.REFRESH_TOKEN_REQUIRED,wr.BAD_REQUEST,void 0,void 0,!0);await aP(e.refresh_token);let t=await Nf(),r=await Kl.decode(e.refresh_token);return{operation_token:await oP({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(v5,"refreshOperationToken");async function B5(e){try{let t=await Nf(),r=await Kl.verify(e,t.public_key,{algorithms:yf,subject:bf.OPERATION});return await MT.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Yl.warn(t),t.name&&t.name==="TokenExpiredError"?Ir(new Error,Cr.TOKEN_EXPIRED,wr.FORBIDDEN):Ir(new Error,Cr.INVALID_TOKEN,wr.UNAUTHORIZED)}}a(B5,"validateOperationToken");async function aP(e){let t;try{let r=await Nf(),n=await Kl.verify(e,r.public_key,{algorithms:yf,subject:bf.REFRESH});t=await MT.findAndValidateUser(n.username,void 0,!1)}catch(r){throw Yl.warn(r),r.name&&r.name==="TokenExpiredError"?Ir(new Error,Cr.TOKEN_EXPIRED,wr.FORBIDDEN):Ir(new Error,Cr.INVALID_TOKEN,wr.UNAUTHORIZED)}if(!iP.validate(t.refresh_token,e))throw Ir(new Error,Cr.INVALID_TOKEN,wr.UNAUTHORIZED);return t}a(aP,"validateRefreshToken")});var PT=g((eEe,_P)=>{"use strict";var H5=tP(),Ia=require("passport"),x5=require("passport-local").Strategy,G5=require("passport-http").BasicStrategy,F5=require("util"),q5=En(),uP=F5.callbackify(q5.findAndValidateUser),Zfe=vr(),k5=P(),lP=Wl();Ia.use(new x5(function(e,t,r){uP(e,t,r)}));Ia.use(new G5(function(e,t,r){uP(e,t,r)}));Ia.serializeUser(function(e,t){t(null,e)});Ia.deserializeUser(function(e,t){t(null,e)});function V5(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Ia.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===k5.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?lP.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):lP.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ia.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(V5,"authorize");function $5(e,t){let r=H5(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a($5,"checkPermissions");_P.exports={authorize:V5,checkPermissions:$5}});var wa=g((rEe,dP)=>{"use strict";var UT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},vT=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};dP.exports={Node:UT,NodeSubscription:vT}});var EP=g((sEe,fP)=>{"use strict";var Y5=P().OPERATIONS_ENUM,BT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Y5.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};fP.exports=BT});var Ql=g((oEe,hP)=>{"use strict";var HT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},xT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};hP.exports={RemotePayloadObject:HT,RemotePayloadSubscription:xT}});var pP=g((cEe,mP)=>{"use strict";var GT=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};mP.exports=GT});var gP=g((fEe,TP)=>{"use strict";var K5=pP(),uEe=dt(),SP=We(),W5=K(),{getSchemaPath:_Ee,getTransactionAuditStorePath:dEe}=ze(),{getDatabases:Q5}=(Ae(),ie(ke));TP.exports=z5;async function z5(e){let t=new K5;try{let r=Q5()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await SP.environmentDataSize(schema_path,e.name),o=await SP.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){W5.warn(`unable to stat table dbi due to ${r}`)}return t}a(z5,"lmdbGetTableSize")});var AP=g((hEe,RP)=>{"use strict";var FT=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};RP.exports=FT});var Ca=g((REe,NP)=>{"use strict";var J5=require("fs-extra"),X5=require("path"),or=require("systeminformation"),Oi=K(),OP=Ct(),pEe=at(),wf=P(),j5=gP(),Z5=ci(),{getThreadInfo:bP}=it(),XT=ne();XT.initSync();var e8=AP(),{openEnvironment:SEe}=We(),{getSchemaPath:TEe}=ze(),{database:gEe,databases:qT}=(Ae(),ie(ke)),If;NP.exports={getHDBProcessInfo:YT,getNetworkInfo:WT,getDiskInfo:KT,getMemoryInfo:$T,getCPUInfo:VT,getTimeInfo:kT,getSystemInformation:QT,systemInformation:t8,getTableSize:zT,getMetrics:JT};function kT(){return or.time()}a(kT,"getTimeInfo");async function VT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await or.cpu();u.cpu_speed=await or.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...A}=await or.currentLoad();return A.cpus=[],T.forEach(b=>{let{raw_load:I,raw_load_idle:B,raw_load_irq:U,raw_load_nice:q,raw_load_system:M,raw_load_user:Q,...z}=b;A.cpus.push(z)}),u.current_load=A,u}catch(e){return Oi.error(`error in getCPUInfo: ${e}`),{}}}a(VT,"getCPUInfo");async function $T(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await or.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Oi.error(`error in getMemoryInfo: ${e}`),{}}}a($T,"getMemoryInfo");async function YT(){let e={core:[],clustering:[]};try{let t=await or.processes(),r;try{r=Number.parseInt(await J5.readFile(X5.join(XT.get(wf.CONFIG_PARAMS.ROOTPATH),wf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===wf.NODE_ERROR_CODES.ENOENT)Oi.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return Oi.error(`error in getHDBProcessInfo: ${t}`),e}}a(YT,"getHDBProcessInfo");async function KT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await or.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await or.fsStats();return e.read_write=_,e.size=await or.fsSize(),e}catch(t){return Oi.error(`error in getDiskInfo: ${t}`),e}}a(KT,"getDiskInfo");async function WT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await or.networkInterfaceDefault(),e.latency=await or.inetChecksite("google.com"),(await or.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await or.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return Oi.error(`error in getNetworkInfo: ${t}`),e}}a(WT,"getNetworkInfo");async function QT(){if(If!==void 0)return If;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await or.osInfo();e=c;let l=await or.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,If=e,If}catch(t){return Oi.error(`error in getSystemInformation: ${t}`),e}}a(QT,"getSystemInformation");async function zT(){let e=[],t=await Z5.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await j5(n));return e}a(zT,"getTableSize");async function JT(){let e={};for(let t in qT){let r=e[t]={},n=r.tables={};for(let s in qT[t])try{let i=qT[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[_,u,d]=l.trim().split(" ");return{pid:_,thread:u,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Oi.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(JT,"getMetrics");async function yP(){if(XT.get(wf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await OP.getNATSReferences(),t=await OP.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(yP,"getNatsStreamInfo");async function t8(e){let t=new e8;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await QT(),t.time=kT(),t.cpu=await VT(),t.memory=await $T(),t.disk=await KT(),t.network=await WT(),t.harperdb_processes=await YT(),t.table_size=await zT(),t.metrics=await JT(),t.threads=await bP(),t.replication=await yP(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await QT();break;case"time":t.time=kT();break;case"cpu":t.cpu=await VT();break;case"memory":t.memory=await $T();break;case"disk":t.disk=await KT();break;case"network":t.network=await WT();break;case"harperdb_processes":t.harperdb_processes=await YT();break;case"table_size":t.table_size=await zT();break;case"database_metrics":case"metrics":t.metrics=await JT();break;case"threads":t.threads=await bP();break;case"replication":t.replication=await yP();break;default:break}return t}a(t8,"systemInformation")});var Df=g((OEe,IP)=>{"use strict";IP.exports={version:r8,printVersion:n8};var Cf=vl();function r8(){if(Cf)return Cf.version}a(r8,"version");function n8(){Cf&&console.log(`HarperDB Version ${Cf.version}`)}a(n8,"printVersion")});var Ms=g((IEe,LP)=>{"use strict";var s8=fn(),jT=J(),i8=require("util"),To=P(),wP=ne();wP.initSync();var o8=PT(),CP=Yr(),{Node:yEe,NodeSubscription:NEe}=wa(),a8=na(),c8=EP(),{RemotePayloadObject:l8,RemotePayloadSubscription:u8}=Ql(),{handleHDBError:_8,hdb_errors:d8}=se(),{HTTP_STATUS_CODES:f8,HDB_ERROR_MSGS:E8}=d8,h8=es(),m8=Ca(),p8=Df(),{getDatabases:S8}=(Ae(),ie(ke)),T8=i8.promisify(o8.authorize),g8=CP.searchByHash,R8=CP.searchByValue;LP.exports={authHeaderToUser:A8,isEmpty:O8,getNodeRecord:b8,upsertNodeRecord:y8,buildNodePayloads:N8,checkClusteringEnabled:I8,getAllNodeRecords:w8,getSystemInfo:C8,reverseSubscription:DP};async function A8(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await T8(t,null),e}a(A8,"authHeaderToUser");function O8(e){return e==null}a(O8,"isEmpty");async function b8(e){let t=new a8(To.SYSTEM_SCHEMA_NAME,To.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return g8(t)}a(b8,"getNodeRecord");async function y8(e){let t=new c8(To.SYSTEM_SCHEMA_NAME,To.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return s8.upsert(t)}a(y8,"upsertNodeRecord");function DP(e){if(jT.isEmpty(e.subscribe)||jT.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(DP,"reverseSubscription");function N8(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=jT.getTableHashAttribute(l,_),{subscribe:d,publish:E}=DP(c),f=S8()[l]?.[_],h=new u8(l,_,u,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new l8(r,t,s,n)}a(N8,"buildNodePayloads");function I8(){if(!wP.get(To.CONFIG_PARAMS.CLUSTERING_ENABLED))throw _8(new Error,E8.CLUSTERING_NOT_ENABLED,f8.BAD_REQUEST,void 0,void 0,!0)}a(I8,"checkClusteringEnabled");async function w8(){let e=new h8(To.SYSTEM_SCHEMA_NAME,To.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await R8(e))}a(w8,"getAllNodeRecords");async function C8(){let e=await m8.getSystemInformation();return{hdb_version:p8.version(),node_version:e.node_version,platform:e.platform}}a(C8,"getSystemInfo")});var ZT=g((CEe,GP)=>{"use strict";var Lf=Ct(),MP=J(),PP=at(),UP=P(),Mf=K(),vP=Sf(),D8=Ep(),{RemotePayloadObject:L8}=Ql(),{handleHDBError:BP,hdb_errors:M8}=se(),{HTTP_STATUS_CODES:HP}=M8,{NodeSubscription:xP}=wa();GP.exports=P8;async function P8(e,t){let r;try{r=await Lf.request(`${t}.${PP.REQUEST_SUFFIX}`,new L8(UP.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Mf.trace("Response from remote describe all request:",r)}catch(o){Mf.error(`addNode received error from describe all request to remote node: ${o}`);let c=Lf.requestErrorHandler(o,"add_node",t);throw BP(new Error,c,HP.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===PP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw BP(new Error,o,HP.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===UP.SYSTEM_SCHEMA_NAME){await Lf.createLocalTableStream(l,c);let h=new xP(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=MP.doesSchemaExist(l),u=n[l]!==void 0,d=c?MP.doesTableExist(l,c):!0,E=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!E){s.push(o);continue}if(!_&&u&&(Mf.trace(`addNode creating schema: ${l}`),await vP.createSchema({operation:"create_schema",schema:l})),!d&&E){Mf.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new D8(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await vP.createTable(h)}await Lf.createLocalTableStream(l,c);let f=new xP(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(P8,"reviewSubscriptions")});var Bf=g((LEe,kP)=>{"use strict";var{handleHDBError:Pf,hdb_errors:U8}=se(),{HTTP_STATUS_CODES:Uf}=U8,{addUpdateNodeValidator:v8}=Of(),vf=K(),qP=P(),FP=at(),B8=J(),zl=Ct(),Jl=Ms(),H8=ne(),x8=ZT(),{Node:G8,NodeSubscription:F8}=wa(),{broadcast:q8}=it(),k8="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",V8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",$8=H8.get(qP.CONFIG_PARAMS.CLUSTERING_NODENAME);kP.exports=Y8;async function Y8(e,t=!1){vf.trace("addNode called with:",e),Jl.checkClusteringEnabled();let r=v8(e);if(r)throw Pf(r,r.message,Uf.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Jl.getNodeRecord(n);if(!B8.isEmptyOrZeroLength(d))throw Pf(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Uf.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await x8(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=k8,o;let c=Jl.buildNodePayloads(s,$8,qP.OPERATIONS_ENUM.ADD_NODE,await Jl.getSystemInfo()),l=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new F8(f.schema,f.table,f.publish,f.subscribe))}vf.trace("addNode sending remote payload:",c);let _;try{_=await zl.request(`${n}.${FP.REQUEST_SUFFIX}`,c)}catch(d){vf.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let p=s[f];p.publish=!1,p.subscribe=!1,await zl.updateRemoteConsumer(p,n)}let E=zl.requestErrorHandler(d,"add_node",n);throw Pf(new Error,E,Uf.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===FP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw Pf(new Error,d,Uf.INTERNAL_SERVER_ERROR,"error",d)}vf.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await zl.updateRemoteConsumer(f,n),f.subscribe===!0&&await zl.updateConsumerIterator(f.schema,f.table,n,"start")}let u=new G8(n,l,_.system_info);return await Jl.upsertNodeRecord(u),q8({type:"nats_update"}),i.length>0?o.message=V8:o.message=`Successfully added '${n}' to manifest`,o}a(Y8,"addNode")});var rg=g((UEe,YP)=>{"use strict";var{handleHDBError:eg,hdb_errors:K8}=se(),{HTTP_STATUS_CODES:tg}=K8,{addUpdateNodeValidator:W8}=Of(),Xl=K(),$P=P(),VP=at(),PEe=J(),jl=Ct(),Zl=Ms(),Q8=ne(),{cloneDeep:z8}=require("lodash"),J8=ZT(),{Node:X8,NodeSubscription:j8}=wa(),{broadcast:Z8}=it(),e6="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",t6="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",r6=Q8.get($P.CONFIG_PARAMS.CLUSTERING_NODENAME);YP.exports=n6;async function n6(e){Xl.trace("updateNode called with:",e),Zl.checkClusteringEnabled();let t=W8(e);if(t)throw eg(t,t.message,tg.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Zl.getNodeRecord(r);s.length>0&&(n=z8(s));let{added:i,skipped:o}=await J8(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=e6,c;let l=Zl.buildNodePayloads(i,r6,$P.OPERATIONS_ENUM.UPDATE_NODE,await Zl.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let E=i[u];Xl.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[u].start_time===void 0&&delete i[u].start_time}Xl.trace("updateNode sending remote payload:",l);let _;try{_=await jl.request(`${r}.${VP.REQUEST_SUFFIX}`,l)}catch(u){Xl.error(`updateNode received error from request: ${u}`);let d=jl.requestErrorHandler(u,"update_node",r);throw eg(new Error,d,tg.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===VP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw eg(new Error,u,tg.INTERNAL_SERVER_ERROR,"error",u)}Xl.trace(_);for(let u=0,d=i.length;u<d;u++){let E=i[u];await jl.updateRemoteConsumer(E,r),E.subscribe===!0?await jl.updateConsumerIterator(E.schema,E.table,r,"start"):await jl.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new X8(r,[],_.system_info)]),await s6(n[0],i,_.system_info),o.length>0?c.message=t6:c.message=`Successfully updated '${r}'`,c}a(n6,"updateNode");async function s6(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new j8(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Zl.upsertNodeRecord(n),Z8({type:"nats_update"})}a(s6,"updateNodeTable")});var JP=g((BEe,zP)=>{"use strict";var QP=require("joi"),{string:KP}=QP.types(),i6=ot(),WP=P(),o6=ne(),a6=at();zP.exports=c6;function c6(e){let t=KP.invalid(o6.get(WP.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(a6.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=QP.object({operation:KP.valid(WP.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return i6.validateBySchema(e,r)}a(c6,"removeNodeValidator")});var xf=g((xEe,tU)=>{"use strict";var{handleHDBError:XP,hdb_errors:l6}=se(),{HTTP_STATUS_CODES:jP}=l6,u6=JP(),eu=K(),ZP=Ms(),_6=J(),Hf=P(),eU=at(),ng=Ct(),d6=ne(),{RemotePayloadObject:f6}=Ql(),{NodeSubscription:E6}=wa(),h6=jc(),m6=Zi(),{broadcast:p6}=it(),S6=d6.get(Hf.CONFIG_PARAMS.CLUSTERING_NODENAME);tU.exports=T6;async function T6(e){eu.trace("removeNode called with:",e),ZP.checkClusteringEnabled();let t=u6(e);if(t)throw XP(t,t.message,jP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await ZP.getNodeRecord(r);if(_6.isEmptyOrZeroLength(n))throw XP(new Error,`Node '${r}' was not found.`,jP.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new f6(Hf.OPERATIONS_ENUM.REMOVE_NODE,S6,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await ng.updateConsumerIterator(u.schema,u.table,r,"stop");try{await ng.updateRemoteConsumer(new E6(u.schema,u.table,!1,!1),r)}catch(d){eu.error(d)}}try{i=await ng.request(`${r}.${eU.REQUEST_SUFFIX}`,s),eu.trace("Remove node reply from remote node:",r,i)}catch(l){eu.error("removeNode received error from request:",l),o=!0}let c=new h6(Hf.SYSTEM_SCHEMA_NAME,Hf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await m6.deleteRecord(c),p6({type:"nats_update"}),i?.status===eU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(eu.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(T6,"removeNode")});var sU=g((FEe,nU)=>{"use strict";var rU=require("joi"),{string:g6,array:R6}=rU.types(),A6=ot(),O6=Of();nU.exports=b6;function b6(e){let t=rU.object({operation:g6.valid("configure_cluster").required(),connections:R6.items(O6.validation_schema).required()});return A6.validateBySchema(e,t)}a(b6,"configureClusterValidator")});var sg=g((kEe,lU)=>{"use strict";var y6=P(),Gf=K(),N6=J(),I6=xf(),w6=Bf(),iU=Ms(),C6=sU(),{handleHDBError:oU,hdb_errors:D6}=se(),{HTTP_STATUS_CODES:aU}=D6,L6="Configure cluster complete.",M6="Failed to configure the cluster. Check the logs for more details.",P6="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";lU.exports=U6;async function U6(e){Gf.trace("configure cluster called with:",e),iU.checkClusteringEnabled();let t=C6(e);if(t)throw oU(t,t.message,aU.BAD_REQUEST,void 0,void 0,!0);let r=await iU.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let E=await cU(I6,{operation:y6.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[u].name},r[u].name);n.push(E)}Gf.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let u=0;u<i;u++){let d=e.connections[u],E=await cU(w6,d,d.node_name);s.push(E)}Gf.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,_=n.concat(s);for(let u=0,d=_.length;u<d;u++){let E=_[u];E.status==="rejected"&&(Gf.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(l=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(N6.isEmptyOrZeroLength(o))return{message:L6,connections:c};if(l)return{message:P6,failed_nodes:o,connections:c};throw oU(new Error,M6,aU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(U6,"configureCluster");async function cU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(cU,"functionWrapper")});var fU=g(($Ee,dU)=>{"use strict";var tu=require("joi"),v6=ot(),{validateSchemaExists:uU,validateTableExists:B6,validateSchemaName:_U}=jn(),H6=tu.object({operation:tu.string().valid("purge_stream"),schema:tu.string().custom(uU).custom(_U).optional(),database:tu.string().custom(uU).custom(_U).optional(),table:tu.string().custom(B6).required()});function x6(e){return v6.validateBySchema(e,H6)}a(x6,"purgeStreamValidator");dU.exports=x6});var ig=g((KEe,EU)=>{"use strict";var{handleHDBError:G6,hdb_errors:F6}=se(),{HTTP_STATUS_CODES:q6}=F6,k6=fU(),V6=Ct(),$6=Ms();EU.exports=Y6;async function Y6(e){e.schema=e.schema??e.database;let t=k6(e);if(t)throw G6(t,t.message,q6.BAD_REQUEST,void 0,void 0,!0);$6.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await V6.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Y6,"purgeStream")});var cg=g((QEe,gU)=>{"use strict";var ag=Ms(),K6=Ct(),pU=ne(),Ff=P(),go=at(),W6=J(),og=K(),{RemotePayloadObject:Q6}=Ql(),{ErrorCode:hU}=require("nats"),mU=pU.get(Ff.CONFIG_PARAMS.CLUSTERING_ENABLED),SU=pU.get(Ff.CONFIG_PARAMS.CLUSTERING_NODENAME);gU.exports={clusterStatus:z6,buildNodeStatus:TU};async function z6(){let e={node_name:SU,is_enabled:mU,connections:[]};if(!mU)return e;let t=await ag.getAllNodeRecords();if(W6.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(TU(t[n],e.connections));return await Promise.allSettled(r),e}a(z6,"clusterStatus");async function TU(e,t){let r=e.name,n=new Q6(Ff.OPERATIONS_ENUM.CLUSTER_STATUS,SU,void 0,await ag.getSystemInfo()),s,i,o=go.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await K6.request(go.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===go.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=go.CLUSTER_STATUS_STATUSES.CLOSED,og.error(`Error getting node status from ${r} `,s))}catch(l){og.warn(`Error getting node status from ${r}`,l),l.code===hU.NoResponders?o=go.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===hU.Timeout?o=go.CLUSTER_STATUS_STATUSES.TIMEOUT:o=go.CLUSTER_STATUS_STATUSES.CLOSED}let c=new J6(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Ff.PRE_4_0_0_VERSION&&await ag.upsertNodeRecord(l)}catch(l){og.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(TU,"buildNodeStatus");function J6(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(J6,"NodeStatusObject")});var ug=g((JEe,RU)=>{"use strict";var{handleHDBError:X6,hdb_errors:j6}=se(),{HTTP_STATUS_CODES:Z6}=j6,e9=Ct(),t9=Ms(),lg=J(),qf=require("joi"),r9=ot(),n9=2e3,s9=qf.object({timeout:qf.number().min(1),connected_nodes:qf.boolean(),routes:qf.boolean()});RU.exports=i9;async function i9(e){t9.checkClusteringEnabled();let t=r9.validateBySchema(e,s9);if(t)throw X6(t,t.message,Z6.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||lg.autoCastBoolean(n),o=s===void 0||lg.autoCastBoolean(s),c={nodes:[]},l=await e9.getServerList(r??n9),_={};if(i)for(let u=0,d=l.length;u<d;u++){let E=l[u].statsz;E&&(_[l[u].server.name]=E.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let E=l[u].server,f=l[u].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:lg.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(i9,"clusterNetwork")});var yU=g((jEe,bU)=>{"use strict";var _g=require("joi"),AU=ot(),{route_constraints:OU}=jp();bU.exports={setRoutesValidator:o9,deleteRoutesValidator:a9};function o9(e){let t=_g.object({server:_g.valid("hub","leaf").required(),routes:OU.required()});return AU.validateBySchema(e,t)}a(o9,"setRoutesValidator");function a9(e){let t=_g.object({routes:OU.required()});return AU.validateBySchema(e,t)}a(a9,"deleteRoutesValidator")});var fg=g((ehe,CU)=>{"use strict";var Ro=Rr(),dg=J(),kf=P(),NU=yU(),{handleHDBError:IU,hdb_errors:c9}=se(),{HTTP_STATUS_CODES:wU}=c9,l9="cluster routes successfully set",u9="cluster routes successfully deleted";CU.exports={setRoutes:_9,getRoutes:d9,deleteRoutes:f9};function _9(e){let t=NU.setRoutesValidator(e);if(t)throw IU(t,t.message,wU.BAD_REQUEST,void 0,void 0,!0);let r=Ro.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=dg.autoCast(_.port);let u=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Ro.updateConfigValue(kf.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Ro.updateConfigValue(kf.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:l9,set:o,skipped:i}}a(_9,"setRoutes");function d9(){let e=Ro.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(d9,"getRoutes");function f9(e){let t=NU.deleteRoutesValidator(e);if(t)throw IU(t,t.message,wU.BAD_REQUEST,void 0,void 0,!0);let r=Ro.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let p=n[f];if(d.host===p.host&&d.port===p.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=dg.isEmptyOrZeroLength(n)?null:n,Ro.updateConfigValue(kf.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=dg.isEmptyOrZeroLength(s)?null:s,Ro.updateConfigValue(kf.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:u9,deleted:i,skipped:o}}a(f9,"deleteRoutes")});var LU=g((rhe,DU)=>{"use strict";var ru=require("alasql"),Ao=require("recursive-iterator"),qn=K(),E9=J(),nu=P(),Eg=class{static{a(this,"sql_statement_bucket")}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,m9(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=>nu.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=>!nu.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][nu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=h9(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!nu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new ru.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function h9(e){return e.filter(t=>t[nu.PERMS_CRUD_ENUM.READ])}a(h9,"filterReadRestrictedAttrs");function m9(e,t,r,n,s){p9(e,t,r,n,s)}a(m9,"interpretAST");function su(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(su,"addSchemaTableToMap");function p9(e,t,r,n,s){if(!e){qn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ru.yy.Insert?R9(e,t,r):e instanceof ru.yy.Select?S9(e,t,r,n,s):e instanceof ru.yy.Update?T9(e,t,r):e instanceof ru.yy.Delete?g9(e,t,r):qn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(p9,"getRecordAttributesAST");function S9(e,t,r,n,s){if(!e){qn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(E9.isEmptyOrZeroLength(i)){qn.error("No schema specified");return}e.from.forEach(c=>{su(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),su(c.table,t,r,n,s)});let o=new Ao(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{qn.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new Ao(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{qn.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Ao(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{qn.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new Ao(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{qn.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(S9,"getSelectAttributes");function T9(e,t,r){if(!e){qn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Ao(e.columns),s=e.table.databaseid;su(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&hg(e.table.tableid,s,i.columnid,t,r)}a(T9,"getUpdateAttributes");function g9(e,t,r){if(!e){qn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Ao(e.where),s=e.table.databaseid;su(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&hg(e.table.tableid,s,i.columnid,t,r)}a(g9,"getDeleteAttributes");function R9(e,t,r){if(!e){qn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Ao(e.columns),s=e.into.databaseid;su(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&hg(e.into.tableid,s,i.columnid,t,r)}a(R9,"getInsertAttributes");function hg(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(hg,"pushAttribute");DU.exports=Eg});var Sg=g((she,vU)=>{var Vf=no(),MU=require("chalk"),en=K(),PU=require("prompt"),{promisify:A9}=require("util"),mg=P(),O9=require("fs-extra"),b9=require("path"),y9=J(),N9=Df(),UU=ne();UU.initSync();var I9=require("moment"),w9=A9(PU.get),C9=b9.join(UU.getHdbBasePath(),mg.LICENSE_KEY_DIR_NAME,mg.LICENSE_FILE_NAME,mg.LICENSE_FILE_NAME);vU.exports={getFingerprint:L9,setLicense:D9,parseLicense:pg,register:M9,getRegistrationInfo:U9};async function D9(e){if(e&&e.key&&e.company){try{en.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await pg(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw en.error(r),en.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(D9,"setLicense");async function L9(){let e={};try{e=await Vf.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw en.error(r),en.error(t),new Error(r)}return e}a(L9,"getFingerprint");async function pg(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");en.info("Validating license input...");let r=Vf.validateLicense(e,t);if(en.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(en.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(en.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{en.info("writing license to disk"),await O9.writeFile(C9,JSON.stringify({license_key:e,company:t}))}catch(n){throw en.error("Failed to write License"),n}return"Registration successful."}a(pg,"parseLicense");async function M9(){let e=await P9();return pg(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(M9,"register");async function P9(){let e=await Vf.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:MU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:MU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{PU.start()}catch(n){en.error(n)}let r;try{r=await w9(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(P9,"promptForRegistration");async function U9(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Vf.getLicense()}catch(r){throw en.error(`There was an error when searching licenses due to: ${r.message}`),r}if(y9.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=N9.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=I9.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(U9,"getRegistrationInfo")});var HU=g((ohe,BU)=>{"use strict";var v9=at(),Tg=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+v9.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};BU.exports=Tg});var FU=g((che,GU)=>{"use strict";var xU=at(),gg=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+xU.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+xU.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};GU.exports=gg});var kU=g((uhe,qU)=>{"use strict";var Rg=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};qU.exports=Rg});var $U=g((dhe,VU)=>{"use strict";var B9=at(),Ag=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+B9.SERVER_SUFFIX.ADMIN,this.password=r}};VU.exports=Ag});var yg=g((Ehe,WU)=>{"use strict";var Da=require("path"),Kf=require("fs-extra"),H9=HU(),x9=FU(),G9=kU(),F9=$U(),Og=En(),Ma=J(),Dr=Rr(),Yf=P(),iu=at(),{CONFIG_PARAMS:pt}=Yf,Pa=K(),ou=ne(),YU=Cs(),bg=Ct(),La="clustering",q9=1e4,KU=50;WU.exports={generateNatsConfig:V9,removeNatsConfig:$9,getHubConfigPath:k9};function k9(){let e=ou.get(pt.ROOTPATH);return Da.join(e,La,iu.NATS_CONFIG_FILES.HUB_SERVER)}a(k9,"getHubConfigPath");async function V9(e=!1,t=void 0){ou.initSync();let r=ou.get(pt.ROOTPATH),n=Da.join(r,La,iu.PID_FILES.HUB),s=Da.join(r,La,iu.PID_FILES.LEAF),i=Dr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Da.join(r,La,iu.NATS_CONFIG_FILES.HUB_SERVER),c=Da.join(r,La,iu.NATS_CONFIG_FILES.LEAF_SERVER),l=Dr.getConfigFromFile(pt.CLUSTERING_TLS_CERTIFICATE),_=Dr.getConfigFromFile(pt.CLUSTERING_TLS_PRIVATEKEY),u=Dr.getConfigFromFile(pt.CLUSTERING_TLS_CERT_AUTH),d=Dr.getConfigFromFile(pt.CLUSTERING_TLS_INSECURE),E=Dr.getConfigFromFile(pt.CLUSTERING_TLS_VERIFY),f=Dr.getConfigFromFile(pt.CLUSTERING_NODENAME),h=Dr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await bg.checkNATSServerInstalled()||Wf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await Og.listUsers(),S=Dr.getConfigFromFile(pt.CLUSTERING_USER),T=await Og.getClusterUser();(Ma.isEmpty(T)||T.active!==!0)&&Wf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await $f(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await $f(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await $f(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),await $f(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],b=[];for(let[z,j]of p.entries())j.role?.role===Yf.ROLE_TYPES_ENUM.CLUSTER_USER&&j.active&&(A.push(new F9(j.username,YU.decrypt(j.hash))),b.push(new G9(j.username,YU.decrypt(j.hash))));let I=[],{hub_routes:B}=Dr.getClusteringRoutes();if(!Ma.isEmptyOrZeroLength(B))for(let z of B)I.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let U=new H9(Dr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,l,_,u,d,E,h,Dr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Dr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,A,b);u==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=Ma.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Yf.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Kf.writeJson(o,U),Pa.trace(`Hub server config written to ${o}`));let q=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=new x9(Dr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[q],[M],A,b,l,_,u,d);u==null&&delete Q.tls.ca_file,(t===void 0||t===Yf.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Kf.writeJson(c,Q),Pa.trace(`Leaf server config written to ${c}`))}a(V9,"generateNatsConfig");async function $f(e){let t=ou.get(e);return Ma.isEmpty(t)&&Wf(`port undefined for '${e}'`),await Ma.isPortTaken(t)&&Wf(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a($f,"isPortAvailable");function Wf(e){let t=`Error generating clustering config: ${e}`;Pa.error(t),console.error(t),process.exit(1)}a(Wf,"generateNatsConfigError");async function $9(e){let{port:t,config_file:r}=bg.getServerConfig(e),{username:n,decrypt_hash:s}=await Og.getClusterUser(),i=0,o=2e3;for(;i<KU;){try{let u=await bg.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Pa.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=KU)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let _=o*(i*2);_>3e4&&Pa.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Ma.async_set_timeout(_)}let c="0".repeat(q9),l=Da.join(ou.get(pt.ROOTPATH),La,r);await Kf.writeFile(l,c),await Kf.remove(l),Pa.notify(e,"started.")}a($9,"removeNatsConfig")});var ZU=g((mhe,jU)=>{"use strict";var tn=ne(),Y9=no(),pe=P(),au=at(),Ps=require("path"),{PACKAGE_ROOT:zf}=P(),QU=ne(),Qf=J(),Ua="/dev/null",K9=Ps.join(zf,"launchServiceScripts"),zU=Ps.join(zf,"utility/scripts"),W9=Ps.join(zU,pe.HDB_RESTART_SCRIPT),JU=Ps.resolve(zf,"dependencies",`${process.platform}-${process.arch}`,au.NATS_BINARY_NAME);function XU(){let t=Y9.licenseSearch().ram_allocation||pe.RAM_ALLOCATION_ENUM.DEFAULT,r=pe.MEM_SETTING_KEY+t,n={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Qf.noBootFile()&&(n[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Qf.getEnvCliRootPath()),{name:pe.PROCESS_DESCRIPTORS.HDB,script:pe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:zf}}a(XU,"generateMainServerConfig");var Q9=9930;function z9(){tn.initSync(!0);let e=tn.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ps.join(e,"clustering",au.NATS_CONFIG_FILES.HUB_SERVER),r=Ps.join(tn.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=QU.get(pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=au.LOG_LEVEL_FLAGS[tn.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Q9?"-"+n:""),script:JU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return tn.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ua,i.error_file=Ua),i}a(z9,"generateNatsHubServerConfig");var J9=9940;function X9(){tn.initSync(!0);let e=tn.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ps.join(e,"clustering",au.NATS_CONFIG_FILES.LEAF_SERVER),r=Ps.join(tn.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=QU.get(pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=au.LOG_LEVEL_FLAGS[tn.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==J9?"-"+n:""),script:JU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return tn.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ua,i.error_file=Ua),i}a(X9,"generateNatsLeafServerConfig");function j9(){tn.initSync();let e=Ps.join(tn.get(pe.CONFIG_PARAMS.LOGGING_ROOT),pe.LOG_NAMES.HDB),t={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:pe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:K9,autorestart:!1};return tn.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Ua,t.error_file=Ua),t}a(j9,"generateClusteringUpgradeV4ServiceConfig");function Z9(){let e={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.RESTART_HDB};return Qf.noBootFile()&&(e[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Qf.getEnvCliRootPath()),{...{name:pe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:zU},script:W9}}a(Z9,"generateRestart");function e7(){return{apps:[XU()]}}a(e7,"generateAllServiceConfigs");jU.exports={generateAllServiceConfigs:e7,generateMainServerConfig:XU,generateRestart:Z9,generateNatsHubServerConfig:z9,generateNatsLeafServerConfig:X9,generateClusteringUpgradeV4ServiceConfig:j9}});var Ev=g((The,fv)=>{"use strict";var ve=P(),t7=J(),vs=yg(),Jf=Ct(),Us=at(),bi=ZU(),Xf=ne(),yi=K(),r7=Ms(),{startWorker:ev,onMessageFromWorkers:n7}=it(),s7=Ca(),She=require("util"),i7=require("child_process"),o7=require("fs"),{execFile:a7}=i7,we;fv.exports={enterPM2Mode:c7,start:Ni,stop:Ng,reload:rv,restart:nv,list:Ig,describe:ov,connect:Bs,kill:f7,startAllServices:E7,startService:wg,getUniqueServicesList:av,restartAllServices:h7,isServiceRegistered:cv,reloadStopStart:lv,restartHdb:iv,deleteProcess:_7,startClusteringProcesses:_v,startClusteringThreads:dv,isHdbRestartRunning:d7,isClusteringRunning:p7,stopClustering:m7,reloadClustering:S7,expectedRestartOfChildren:sv};var cu=!1;n7(e=>{e.type==="restart"&&Xf.initSync(!0)});function c7(){cu=!0}a(c7,"enterPM2Mode");function Bs(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{yi.setupConsoleLogging(),r&&t(r),e(n)})})}a(Bs,"connect");var ar,l7=10,tv;function Ni(e,t=!1){if(cu)return u7(e);let r=a7(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=ar.indexOf(r);o>-1&&ar.splice(o,1),!tv&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<l7&&(o7.existsSync(vs.getHubConfigPath())?Ni(e):(await vs.generateNatsConfig(!0),Ni(e),await new Promise(c=>setTimeout(c,3e3)),await vs.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await vs.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Xf.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&Us.LOG_LEVEL_HIERARCHY[o]>=Us.LOG_LEVEL_HIERARCHY[u||"info"]){let f=u===Us.LOG_LEVELS.ERR||u===Us.LOG_LEVELS.WRN?yi.OUTPUTS.STDERR:yi.OUTPUTS.STDOUT;yi.logCustomLevel(u||"info",f,n,i.slice(_,l.index).trim())}let[d,E]=l;_=l.index+d.length,u=Us.LOG_LEVELS[E]}if(Us.LOG_LEVEL_HIERARCHY[o]>=Us.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Us.LOG_LEVELS.ERR||u===Us.LOG_LEVELS.WRN?yi.OUTPUTS.STDERR:yi.OUTPUTS.STDOUT;yi.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!ar&&(ar=[],!t)){let i=a(()=>{tv=!0,ar&&(ar.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}ar.push(r)}a(Ni,"start");function u7(e){return new Promise(async(t,r)=>{try{await Bs()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(u7,"startWithPM2");function Ng(e){if(!cu){for(let t of ar||[])t.name===e&&(ar.splice(ar.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Bs()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(Ng,"stop");function rv(e){return new Promise(async(t,r)=>{try{await Bs()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(rv,"reload");function nv(e){if(!cu){sv();for(let t of ar||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Bs()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(nv,"restart");function sv(){for(let e of ar||[])e.config&&(e.config.restarts=0)}a(sv,"expectedRestartOfChildren");function _7(e){return new Promise(async(t,r)=>{try{await Bs()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(_7,"deleteProcess");async function iv(){await Ni(bi.generateRestart())}a(iv,"restartHdb");async function d7(){let e=await Ig();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(d7,"isHdbRestartRunning");function Ig(){return new Promise(async(e,t)=>{try{await Bs()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(Ig,"list");function ov(e){return new Promise(async(t,r)=>{try{await Bs()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(ov,"describe");function f7(){if(!cu){for(let e of ar||[])e.kill();ar=[];return}return new Promise(async(e,t)=>{try{await Bs()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(f7,"kill");async function E7(){try{await _v(),await dv(),await Ni(bi.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(E7,"startAllServices");async function wg(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=bi.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=bi.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=bi.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=bi.generateNatsHubServerConfig(),await Ni(r,t),await vs.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=bi.generateNatsLeafServerConfig(),await Ni(r,t),await vs.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=bi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ni(r)}catch(r){throw we?.disconnect(),r}}a(wg,"startService");async function av(){try{let e=await Ig(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw we?.disconnect(),e}}a(av,"getUniqueServicesList");async function h7(e=[]){try{let t=!1,r=await av();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await nv(o))}t&&await lv(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(h7,"restartAllServices");async function cv(e){if(ar?.find(r=>r.name===e))return!0;let t=await s7.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(cv,"isServiceRegistered");async function lv(e){let t=Xf.get(ve.CONFIG_PARAMS.THREADS_COUNT)??Xf.get(ve.CONFIG_PARAMS.THREADS),r=await ov(e),n=t7.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await Ng(e),await wg(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await iv():await rv(e)}a(lv,"reloadStopStart");var uv;async function _v(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await wg(r,e)}}a(_v,"startClusteringProcesses");async function dv(){uv=ev(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Jf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Jf.updateLocalStreams();let e=await r7.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){yi.info("Starting clustering upgrade 4.0.0 process"),ev(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(dv,"startClusteringThreads");async function m7(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await uv.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await Ng(t)}}a(m7,"stopClustering");async function p7(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await cv(t)===!1)return!1}return!0}a(p7,"isClusteringRunning");async function S7(){await vs.generateNatsConfig(!0),await Jf.reloadNATSHub(),await Jf.reloadNATSLeaf(),await vs.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await vs.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(S7,"reloadClustering")});var Rv={};qe(Rv,{compactOnStart:()=>T7,copyDb:()=>gv});async function T7(){lu.notify("Running compact on start"),console.log("Running compact on start");let e=(0,Cg.get)(Ii.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Sr();try{for(let n in r){if(n==="system")continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,jf.join)(e,"backup",n+".mdb"),o=(0,jf.join)(e,Ii.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await hv(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await gv(n,o),console.log("Backing up",n,"to",i),await(0,Oo.move)(s,i,{overwrite:!0})}Dl();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Oo.move)(i,s,{overwrite:!0}),await(0,Oo.remove)((0,jf.join)(e,Ii.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));Dl()}catch(n){lu.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,Dg.updateConfigValue)(Ii.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,Oo.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Dl(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await hv(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
13
13
  Total record count before compaction: ${i}, total after: ${c}.