harperdb 4.3.4 → 4.3.5

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
@@ -5,7 +5,7 @@ var UG=Object.create;var sc=Object.defineProperty;var PG=Object.getOwnPropertyDe
5
5
  `),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
6
6
  `)},S2="certificate.pem",T2="privateKey.pem",g2="ca.pem";dC.exports={CERTIFICATE_VALUES:p2,CERTIFICATE_PEM_NAME:S2,PRIVATEKEY_PEM_NAME:T2,CA_PEM_NAME:g2}});var zp=R((u_e,TC)=>{"use strict";var pC=require("fs-extra"),oe=require("joi"),R2=require("os"),{boolean:ye,string:Xt,number:Je,array:Qp}=oe.types(),{totalmem:EC}=require("os"),Zi=require("path"),A2=K(),pd=J(),c_e=fC(),hC=U(),O2=rt(),mC="log",b2="components",y2="Invalid logging.rotation.maxSize unit. Available units are G, M or K",N2="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",I2="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'",C2="rootPath config parameter is undefined",D2="clustering.enabled config parameter is undefined",eo=Je.min(0).required(),Sd=Qp.items({host:Xt.required(),port:eo}).empty(null),ts,SC=!1;TC.exports={configValidator:L2,routesValidator:H2,route_constraints:Sd};function L2(e,t=!1){if(SC=t,ts=e.rootPath,pd.isEmpty(ts))throw C2;let r=ye.required(),n=Je.min(0).max(1e3).empty(null).default(B2),s=Xt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(tu),i=Xt.optional().empty(null),o=Xt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=oe.string().empty(null).default(tu),u=oe.custom(U2).empty(null).default(tu),_=e.clustering?.enabled;if(pd.isEmpty(_))throw D2;let l;return _===!0?l=oe.object({enabled:r,hubServer:oe.object({cluster:oe.object({name:oe.required().empty(null),network:oe.object({port:eo,routes:Sd}).required()}).required(),leafNodes:oe.object({network:oe.object({port:eo}).required()}).required(),network:oe.object({port:eo}).required()}).required(),leafServer:oe.object({network:oe.object({port:eo,routes:Sd}).required(),streams:oe.object({maxAge:Je.min(120).allow(null).optional(),maxBytes:Je.min(1).allow(null).optional(),maxMsgs:Je.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:oe.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:oe.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required(),verify:ye.optional()}),user:Xt.optional().empty(null)}).required():l=oe.object({enabled:r,tls:oe.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),oe.object({authentication:oe.object({authorizeLocal:ye,cacheTTL:Je.required(),enableSessions:ye}),analytics:oe.object({aggregatePeriod:Je}),componentsRoot:s.optional(),clustering:l,localStudio:oe.object({enabled:r}).required(),logging:oe.object({auditAuthEvents:oe.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:oe.valid("notify","fatal","error","warn","info","debug","trace"),rotation:oe.object({enabled:ye.optional(),compress:ye.optional(),interval:Xt.custom(v2).optional().empty(null),maxSize:Xt.custom(P2).optional().empty(null),path:Xt.optional().empty(null).default(tu)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:oe.object({network:oe.object({cors:ye.optional(),corsAccessList:Qp.optional(),headersTimeout:Je.min(1).optional(),keepAliveTimeout:Je.min(1).optional(),port:Je.optional().empty(null),domainSocket:oe.optional().empty("hdb/operations-server").default(tu),securePort:Je.optional().empty(null),timeout:Je.min(1).optional()}).optional(),tls:oe.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Xt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:oe.object({network:oe.object({port:eo,securePort:eo,mtls:oe.alternatives([ye.optional(),oe.object({user:Xt.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:oe.object({compressionThreshold:Je.optional(),cors:ye.optional(),corsAccessList:Qp.optional(),headersTimeout:Je.min(1).optional(),port:Je.min(0).optional().empty(null),securePort:Je.min(0).optional().empty(null),maxHeaderSize:Je.optional(),mtls:oe.alternatives([ye.optional(),oe.object({user:Xt.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),threads:oe.alternatives(n.optional(),oe.object({count:n.optional(),debug:oe.alternatives(ye.optional(),oe.object({startingPort:Je.min(1).optional(),host:Xt.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:Je.min(0).optional()})),storage:oe.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:oe.alternatives([ye.optional(),oe.object({dictionary:Xt.optional(),threshold:Je.optional()})]),compactOnStart:ye.optional(),compactOnStartKeepBackup:ye.optional(),noReadAhead:ye.optional(),path:u,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:Je.optional(),maxFreeSpaceToRetain:Je.optional()}).required(),ignoreScripts:ye.optional(),tls:oe.object({certificate:i.optional(),certificateAuthority:i.optional(),privateKey:i.optional(),ciphers:Xt.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(L2,"configValidator");function M2(e){return SC||pC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(M2,"doesPathExist");function U2(e,t){oe.assert(e,Xt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=M2(e);if(r)return t.message(r)}a(U2,"validatePath");function P2(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(y2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(I2):e}a(P2,"validateRotationMaxSize");function v2(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(N2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(w2):e}a(v2,"validateRotationInterval");function B2(e,t){let r=t.state.path.join("."),n=R2.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||EC();return i=Math.round(Math.min(i,EC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),A2.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(B2,"setDefaultThreads");function tu(e,t){let r=t.state.path.join(".");if(!pd.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(pd.isEmpty(ts))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Zi.join(ts,b2);case"logging.root":return Zi.join(ts,mC);case"clustering.leafServer.streams.path":return Zi.join(ts,"clustering","leaf");case"storage.path":let n=Zi.join(ts,hC.LEGACY_DATABASES_DIR_NAME);return pC.existsSync(n)?n:Zi.join(ts,hC.DATABASES_DIR_NAME);case"logging.rotation.path":return Zi.join(ts,mC);case"operationsApi.network.domainSocket":return r==null?null:Zi.join(ts,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(tu,"setDefaultRoot");function H2(e){let t=oe.object({routes:Sd});return O2.validateBySchema({routes:e},t)}a(H2,"routesValidator")});var mr=R((d_e,wC)=>{"use strict";var Vr=U(),Ut=J(),bt=K(),{configValidator:x2,routesValidator:gC}=zp(),hr=require("fs-extra"),G2=require("yaml"),Pn=require("path"),F2=require("is-number"),AC=require("properties-reader"),q2=require("lodash"),{handleHDBError:k2}=ne(),{HTTP_STATUS_CODES:V2,HDB_ERROR_MSGS:Td}=Lr(),__e=require("minimist"),{server:$2}=(ir(),ie(Pi)),{DATABASES_PARAM_CONFIG:ru,CONFIG_PARAMS:kr,CONFIG_PARAM_MAP:vn}=Vr,Y2="Unable to get config value because config is uninitialized",K2="Config successfully initialized",W2="Error backing up config file",Q2="Empty parameter sent to getConfigValue",OC=Pn.join(Vr.PACKAGE_ROOT,"config","yaml",Vr.HDB_DEFAULT_CONFIG_FILE),z2="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",RC={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"},gd,yt,Rd;wC.exports={createConfigFile:J2,getDefaultConfig:X2,getConfigValue:yC,initConfig:Xp,flattenConfig:ia,updateConfigValue:NC,updateConfigObject:Z2,getConfiguration:rJ,setConfiguration:nJ,readConfigFile:Zp,getClusteringRoutes:sJ,initOldConfig:IC,getConfigFromFile:iJ,getConfigFilePath:to,addConfig:oJ,deleteConfigFromFile:aJ,getConfigObj:cJ};function J2(e,t=!1){let r=ui(OC);gd=ia(r.toJSON());let n;for(let c in e){let u=vn[c.toLowerCase()];if(u===kr.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!u&&(c.endsWith("_package")||c.endsWith("_port"))&&(u=c),u!==void 0){let _=u.split("_"),l=Jp(u,e[c]);u==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{r.setIn([..._],l)}catch(d){bt.error(d)}}}n&&bC(r,n),jp(r,t);let s=r.toJSON();yt=ia(s);let i=r.getIn(["rootPath"]),o=Pn.join(i,Vr.HDB_CONFIG_FILE);hr.createFileSync(o),hr.writeFileSync(o,String(r)),bt.trace(`Config file written to ${o}`)}a(J2,"createConfigFile");function bC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ut.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(ru.TABLES))for(let i in n[s][ru.TABLES])for(let o in n[s][ru.TABLES][i]){let c=n[s][ru.TABLES][i][o],u=[kr.DATABASES,s,ru.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,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){bt.error("Error parsing schemas CLI/env config arguments",n)}}a(bC,"setSchemasConfig");function X2(e){if(gd===void 0){let r=ui(OC);gd=ia(r.toJSON())}let t=vn[e.toLowerCase()];if(t!==void 0)return gd[t.toLowerCase()]}a(X2,"getDefaultConfig");function yC(e){if(e==null){bt.error(Q2);return}if(yt===void 0){bt.trace(Y2);return}let t=vn[e.toLowerCase()];if(t!==void 0)return yt[t.toLowerCase()]}a(yC,"getConfigValue");function to(e=Ut.getPropsFilePath()){let t=Ut.getEnvCliRootPath();return t?Pn.join(t,Vr.HDB_CONFIG_FILE):AC(e).get(Vr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(to,"getConfigFilePath");function Xp(e=!1){if(yt===void 0||e){let t;if(!Ut.noBootFile()){t=Ut.getPropsFilePath();try{hr.accessSync(t,hr.constants.F_OK|hr.constants.R_OK)}catch(i){throw bt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=to(t),n;if(r.includes("config/settings.js"))try{IC(r);return}catch(i){if(i.code!==Vr.NODE_ERROR_CODES.ENOENT)throw i}try{n=ui(r)}catch(i){if(i.code===Vr.NODE_ERROR_CODES.ENOENT){bt.trace(`HarperDB config file not found at ${r}.
7
7
  This can occur during early stages of install where the config file has not yet been created`);return}else throw bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}j2(n,r),jp(n);let s=n.toJSON();if($2.config=s,yt=ia(s),yt.logging_rotation_rotate)for(let i in RC)yt[i]&&bt.error(`Config ${RC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);bt.trace(K2)}}a(Xp,"initConfig");function j2(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Pn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Pn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Pn.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&&(bt.trace("Updating config file with missing config params"),hr.writeFileSync(t,String(e)))}a(j2,"checkForUpdatedConfig");function jp(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=x2(r,t);if(n.error)throw Td.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(jp,"validateConfig");function Z2(e,t){yt===void 0&&(yt={});let r=vn[e.toLowerCase()];if(r===void 0){bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}yt[r.toLowerCase()]=t}a(Z2,"updateConfigObject");function NC(e,t,r=void 0,n=!1,s=!1,i=!1){yt===void 0&&Xp();let o=yC(vn.hdb_root),c=Pn.join(o,Vr.HDB_CONFIG_FILE),u=ui(c),_;if(r===void 0&&e.toLowerCase()===kr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=vn[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Jp(f,t);u.setIn([...E],h)}else for(let f in r){let E=vn[f.toLowerCase()];if(E===kr.HTTP_SECUREPORT&&r[f]===yt[kr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===kr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===yt[kr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===kr.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!E&&(f.endsWith("_package")||f.endsWith("_port"))&&(E=f),E!==void 0){let h=E.split("_"),S=Vr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];S&&S.startsWith("customFunctions")&&u.hasIn(S.split("_"))&&(E=S,h=S.split("_"));let p=Jp(E,r[f]);E==="rootPath"&&p?.endsWith("/")&&(p=p.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],p)}catch(T){bt.error(T)}}}_&&bC(u,_),jp(u);let l=u.getIn(["rootPath"]),d=Pn.join(l,Vr.HDB_CONFIG_FILE);n===!0&&eJ(c,l),hr.writeFileSync(d,String(u)),s&&(yt=ia(u.toJSON())),bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(NC,"updateConfigValue");function eJ(e,t){try{let r=Pn.join(t,"backup",`${Vr.HDB_CONFIG_FILE}.bak`);hr.copySync(e,r),bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){bt.error(W2),bt.error(r)}}a(eJ,"backupConfigFile");var tJ=["databases"];function ia(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)),Rd=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])&&!tJ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!kr[u.toUpperCase()]&&vn[u]&&(s[vn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(ia,"flattenConfig");function Jp(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(F2(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ut.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 Ut.autoCast(t)}a(Jp,"castConfigValue");function rJ(){let e=Ut.getPropsFilePath(),t=to(e);return ui(t).toJSON()}a(rJ,"getConfiguration");async function nJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return NC(void 0,void 0,s,!0),z2}catch(i){throw typeof i=="string"||i instanceof String?k2(i,i,V2.BAD_REQUEST,void 0,void 0,!0):i}}a(nJ,"setConfiguration");function Zp(){let e=Ut.getPropsFilePath();try{hr.accessSync(e,hr.constants.F_OK|hr.constants.R_OK)}catch(n){if(!Ut.noBootFile())throw bt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=to(e);return ui(t).toJSON()}a(Zp,"readConfigFile");function ui(e){return G2.parseDocument(hr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ui,"parseYamlDoc");function sJ(){let e=Zp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ut.isEmptyOrZeroLength(t)?[]:t;let r=gC(t);if(r)throw Td.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ut.isEmptyOrZeroLength(n)?[]:n;let s=gC(n);if(s)throw Td.CONFIG_VALIDATION(s.message);if(!Ut.isEmptyOrZeroLength(n)&&!Ut.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Ut.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Td.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(sJ,"getClusteringRoutes");function IC(e){let t=AC(e);yt={};for(let r in vn){let n=t.get(r.toUpperCase());if(Ut.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=vn[r].toLowerCase();s===kr.LOGGING_ROOT?yt[s]=Pn.dirname(n):yt[s]=n}return yt}a(IC,"initOldConfig");function iJ(e){let t=Zp();return q2.get(t,e.replaceAll("_","."))}a(iJ,"getConfigFromFile");async function oJ(e,t){let r=ui(to());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await hr.writeFile(to(),String(r))}a(oJ,"addConfig");function aJ(e){let t=to(Ut.getPropsFilePath()),r=ui(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Pn.join(n,Vr.HDB_CONFIG_FILE);hr.writeFileSync(s,String(r))}a(aJ,"deleteConfigFromFile");function cJ(){return Rd||(Xp(),Rd)}a(cJ,"getConfigObj")});var DC=R((E_e,CC)=>{"use strict";var Ad=U(),Od=class{static{a(this,"BaseLicense")}constructor(t=0,r=Ad.RAM_ALLOCATION_ENUM.DEFAULT,n=Ad.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},eS=class extends Od{static{a(this,"ExtendedLicense")}constructor(t=0,r=Ad.RAM_ALLOCATION_ENUM.DEFAULT,n=Ad.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};CC.exports={BaseLicense:Od,ExtendedLicense:eS}});var ro=R((m_e,BC)=>{"use strict";var aa=require("fs-extra"),MC=md(),UC=require("crypto"),uJ=require("moment"),lJ=require("uuid").v4,jt=K(),rS=require("path"),_J=J(),li=U(),{totalmem:LC}=require("os"),dJ=DC().ExtendedLicense,oa="invalid license key format",fJ="061183",EJ="mofi25",hJ="aes-256-cbc",mJ=16,pJ=32,PC=re();PC.initSync();var tS;BC.exports={validateLicense:vC,generateFingerPrint:TJ,licenseSearch:iS,getLicense:AJ,checkMemoryLimit:OJ};function nS(){return rS.join(PC.getHdbBasePath(),li.LICENSE_KEY_DIR_NAME,li.LICENSE_FILE_NAME)}a(nS,"getLicenseDirPath");function SJ(){let e=nS();return rS.join(e,li.LICENSE_FILE_NAME)}a(SJ,"getLicenseFilePath");function sS(){let e=nS();return rS.join(e,li.REG_KEY_FILE_NAME)}a(sS,"getFingerPrintFilePath");async function TJ(){let e=sS();try{return await aa.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await gJ();throw jt.error(`Error writing fingerprint file to ${e}`),jt.error(t),new Error("There was an error generating the fingerprint")}}a(TJ,"generateFingerPrint");async function gJ(){let e=lJ(),t=MC.hash(e),r=sS();try{await aa.mkdirp(nS()),await aa.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw jt.error(`Error writing fingerprint file to ${r}`),jt.error(n),new Error("There was an error generating the fingerprint")}return t}a(gJ,"writeFingerprint");function vC(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:li.RAM_ALLOCATION_ENUM.DEFAULT,version:li.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return jt.error("empty license key passed to validate."),r;let n=sS(),s=!1;try{s=aa.statSync(n)}catch(i){jt.error(i)}if(s){let i;try{i=aa.readFileSync(n,"utf8")}catch{jt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(EJ),c=o[1];c=Buffer.concat([Buffer.from(c)],mJ);let u=Buffer.concat([Buffer.from(i)],pJ),_=UC.createDecipheriv(hJ,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=RJ(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(oa),jt.error(oa),new Error(oa)}let d;if(isNaN(l))try{d=JSON.parse(l),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(oa),jt.error(oa),new Error(oa)}else r.exp_date=l;r.exp_date<uJ().valueOf()&&(r.valid_date=!1),MC.validate(o[1],`${fJ}${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||jt.error("Invalid licence"),r}a(vC,"validateLicense");function RJ(e,t){try{let r=UC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{jt.warn("Check old license failed")}}a(RJ,"checkOldLicense");function iS(){let e=new dJ,t=[];try{t=aa.readFileSync(SJ(),"utf-8").split(li.NEW_LINE)}catch(r){r.code==="ENOENT"?jt.info("no license file found"):jt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(_J.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=vC(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){jt.error("There was an error parsing the license string."),jt.error(s),e.ram_allocation=li.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return tS=e,e}a(iS,"licenseSearch");async function AJ(){return tS||await iS(),tS}a(AJ,"getLicense");function OJ(){let e=iS().ram_allocation,t=process.constrainedMemory?.()||LC();if(t=Math.round(Math.min(t,LC())/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(OJ,"checkMemoryLimit")});var ln=R((R_e,jC)=>{"use strict";var FC="username is required",qC="nothing to update, must supply active, role or password to update",kC="password cannot be an empty string",VC="If role is specified, it cannot be empty.",$C="active must be true or false";jC.exports={addUser:MJ,alterUser:UJ,dropUser:vJ,getSuperUser:GJ,userInfo:BJ,listUsers:yd,listUsersExternal:HJ,setUsersToGlobal:ua,findAndValidateUser:JC,getClusterUser:FJ,USERNAME_REQUIRED:FC,ALTERUSER_NOTHING_TO_UPDATE:qC,EMPTY_PASSWORD:kC,EMPTY_ROLE:VC,ACTIVE_BOOLEAN:$C};var YC=un(),bJ=ji(),cS=md(),KC=uC(),WC=qr(),uS=As(),$r=J(),QC=require("validate.js"),Ae=K(),{promisify:yJ}=require("util"),lS=Ns(),HC=U(),xC=nt(),NJ=mr(),S_e=re(),T_e=ro(),IJ=qi(),{table:g_e}=(Re(),ie(qe)),{handleHDBError:rs,hdb_errors:wJ}=ne(),{HTTP_STATUS_CODES:ns,AUTHENTICATION_ERROR_MSGS:oS,HDB_ERROR_MSGS:ca}=wJ,{UserEventMsg:_S}=Cn(),aS=require("lodash"),{server:dS}=(ir(),ie(Pi)),CJ=K();dS.getUser=(e,t)=>JC(e,t,t!=null);var zC={username:!0,active:!0,role:!0,password:!0},GC=new Map,bd=WC.searchByValue,DJ=WC.searchByHash,LJ=yJ(bJ.delete);async function MJ(e){let t=QC.cleanAttributes(e,zC),r=KC.addUserValidation(t);if(r)throw rs(new Error,r.message,ns.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 bd(n),s=s&&Array.from(s)}catch(u){throw Ae.error("There was an error searching for a role in add user"),Ae.error(u),u}if(!s||s.length<1)throw rs(new Error,ca.ROLE_NAME_NOT_FOUND(t.role),ns.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw rs(new Error,ca.DUP_ROLES_FOUND(t.role),ns.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=lS.encrypt(t.password)),t.password=cS.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await YC.insert(i)}catch(u){throw Ae.error("There was an error searching for a user."),Ae.error(u),u}Ae.debug(o);try{await ua()}catch(u){throw Ae.error("Got an error setting users to global"),Ae.error(u),u}if(o.skipped_hashes.length===1)throw rs(new Error,ca.USER_ALREADY_EXISTS(t.username),ns.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],uS.signalUserChange(new _S(process.pid)),`${c.username} successfully added`}a(MJ,"addUser");async function UJ(e){let t=QC.cleanAttributes(e,zC);if($r.isEmptyOrZeroLength(t.username))throw new Error(FC);if($r.isEmptyOrZeroLength(t.password)&&$r.isEmptyOrZeroLength(t.role)&&$r.isEmptyOrZeroLength(t.active))throw new Error(qC);if(!$r.isEmpty(t.password)&&$r.isEmptyOrZeroLength(t.password.trim()))throw new Error(kC);if(!$r.isEmpty(t.active)&&!$r.isBoolean(t.active))throw new Error($C);let r=PJ(t.username);if(!$r.isEmpty(t.password)&&!$r.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=lS.encrypt(t.password)),t.password=cS.hash(t.password)),t.role==="")throw new Error(VC);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 bd(i)||[])}catch(c){throw Ae.error("Got an error searching for a role."),Ae.error(c),c}if(!o||o.length===0){let c=ca.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ae.error(c),rs(new Error,c,ns.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ca.ALTER_USER_DUP_ROLES(t.role);throw Ae.error(c),rs(new Error,c,ns.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 YC.update(n)}catch(i){throw Ae.error("Error during update."),Ae.error(i),i}try{await ua()}catch(i){throw Ae.error("Got an error setting users to global"),Ae.error(i),i}return uS.signalUserChange(new _S(process.pid)),s}a(UJ,"alterUser");function PJ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(PJ,"isClusterUser");async function vJ(e){try{let t=KC.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if($r.isEmpty(global.hdb_users.get(e.username)))throw rs(new Error,ca.USER_NOT_EXIST(e.username),ns.NOT_FOUND,void 0,void 0,!0);let n;try{n=await LJ(r)}catch(s){throw Ae.error("Got an error deleting a user."),Ae.error(s),s}Ae.debug(n);try{await ua()}catch(s){throw Ae.error("Got an error setting users to global."),Ae.error(s),s}return uS.signalUserChange(new _S(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(vJ,"dropUser");async function BJ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=aS.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await DJ(r)}catch(s){throw Ae.error("Got an error searching for a role."),Ae.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ae.error(r),r}return t}a(BJ,"userInfo");async function HJ(){let e;try{e=await yd()}catch(t){throw Ae.error("Got an error listing users."),Ae.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(HJ,"listUsersExternal");async function yd(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await bd(e)}catch(o){throw Ae.error("Got an error searching for roles."),Ae.error(o),o}let r={};for(let o of t)r[o.id]=aS.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 bd(n)}catch(o){throw Ae.error("Got an error searching for users."),Ae.error(o),o}let i=new Map;for(let o of s)o=aS.cloneDeep(o),o.role=r[o.role],xJ(o.role),i.set(o.username,o);return i}catch(e){throw Ae.error("got an error listing users"),Ae.error(e),$r.errorizeMessage(e)}return null}a(yd,"listUsers");function xJ(e){try{if(!e){Ae.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(IJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ae.error("Got an error trying to set system permissions."),Ae.error(t)}}a(xJ,"appendSystemTablesToRole");async function ua(){try{let e=await yd();global.hdb_users=e}catch(e){throw Ae.error(e),e}}a(ua,"setUsersToGlobal");async function JC(e,t,r=!0){global.hdb_users||await ua();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw rs(new Error,oS.GENERIC_AUTH_FAIL,ns.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw rs(new Error,oS.USER_INACTIVE,ns.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(GC.get(t)===n.password)return s;if(cS.validate(n.password,t))GC.set(t,n.password);else throw rs(new Error,oS.GENERIC_AUTH_FAIL,ns.UNAUTHORIZED,void 0,void 0,!0)}return s}a(JC,"findAndValidateUser");async function GJ(){global.hdb_users||await ua();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(GJ,"getSuperUser");async function FJ(){let e=await yd(),t=NJ.getConfigFromFile(HC.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!$r.isEmpty(r)&&r?.role?.role===HC.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=lS.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+xC.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+xC.SERVER_SUFFIX.ADMIN,r}a(FJ,"getClusterUser");var XC=[];dS.invalidateUser=function(e){for(let t of XC)try{t(e)}catch(r){CJ.error("Error invalidating user",r)}};dS.onInvalidatedUser=function(e){XC.push(e)}});var su=R((y_e,rD)=>{"use strict";var no=K(),Yr=U(),qJ=ny(),O_e=oi(),b_e=ii(),kJ=ln(),{validateEvent:ZC}=Cn(),nu=Mn(),VJ=require("process"),{resetDatabases:$J}=(Re(),ie(qe)),YJ={[Yr.ITC_EVENT_TYPES.SCHEMA]:KJ,[Yr.ITC_EVENT_TYPES.USER]:tD};async function KJ(e){let t=ZC(e);if(t){no.error(t);return}no.trace("ITC schemaHandler received schema event:",e),await qJ(e.message),await WJ(e.message)}a(KJ,"schemaHandler");async function WJ(e){try{nu.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),nu.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),nu.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=$J();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){no.error(t)}}a(WJ,"syncSchemaMetadata");var eD=[];async function tD(e){try{try{nu.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),nu.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){no.warn(r)}let t=ZC(e);if(t){no.error(t);return}no.trace(`ITC userHandler ${Yr.HDB_ITC_CLIENT_PREFIX}${VJ.pid} received user event:`,e),await kJ.setUsersToGlobal();for(let r of eD)r()}catch(t){no.error(t)}}a(tD,"userHandler");tD.addListener=function(e){eD.push(e)};rD.exports=YJ});var Cn=R((L_e,sD)=>{"use strict";var I_e=K(),fS=J(),QJ=U(),{ITC_ERRORS:iu}=Lr(),{parentPort:w_e,threadId:zJ,isMainThread:JJ,workerData:C_e}=require("worker_threads"),{onMessageFromWorkers:XJ,broadcast:D_e,broadcastWithAcknowledgement:jJ}=tt();sD.exports={sendItcEvent:ZJ,validateEvent:nD,SchemaEventMsg:e4,UserEventMsg:t4};var Nd;XJ(async(e,t)=>{Nd=Nd||su(),nD(e),Nd[e.type]&&await Nd[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function ZJ(e){return!JJ&&e.message&&(e.message.originator=zJ),jJ(e)}a(ZJ,"sendItcEvent");function nD(e){if(typeof e!="object")return iu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||fS.isEmpty(e.type))return iu.MISSING_TYPE;if(!e.hasOwnProperty("message")||fS.isEmpty(e.message))return iu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||fS.isEmpty(e.message.originator))return iu.MISSING_ORIGIN;if(QJ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return iu.INVALID_EVENT(e.type)}a(nD,"validateEvent");function e4(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(e4,"SchemaEventMsg");function t4(e){this.originator=e}a(t4,"UserEventMsg")});var As=R((P_e,cD)=>{"use strict";var iD=U(),U_e=J(),Id=K(),oD=Gb(),la,{sendItcEvent:aD}=Cn();function r4(e){try{Id.trace("signalSchemaChange called with message:",e),la=la||su();let t=new oD(iD.ITC_EVENT_TYPES.SCHEMA,e);return la.schema(t),aD(t)}catch(t){Id.error(t)}}a(r4,"signalSchemaChange");function n4(e){try{Id.trace("signalUserChange called with message:",e),la=la||su();let t=new oD(iD.ITC_EVENT_TYPES.USER,e);return la.user(t),aD(t)}catch(t){Id.error(t)}}a(n4,"signalUserChange");cD.exports={signalSchemaChange:r4,signalUserChange:n4}});var lu={};Ge(lu,{addAnalyticsListener:()=>uu,recordAction:()=>Kr,recordActionBinary:()=>_n,setAnalyticsEnabled:()=>s4});function s4(e){pD=e}function Kr(e,t,r,n,s){if(!pD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Dd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=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},Dd.set(i,o)}wd||i4()}function _n(e,t,r,n,s){Kr(!!e,t,r,n,s)}function uu(e){gD.push(e)}function i4(){wd=performance.now(),setTimeout(async()=>{let e=performance.now()-wd;wd=0;let t=[],r={time:Date.now(),period:e,threadId:so.threadId,metrics:t};for(let[s,i]of Dd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of RD){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let S=_[_.length-1];typeof S=="number"?_[_.length-1]={value:S,count:1+h}:S.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}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 AD()}let n=process.memoryUsage();t.push({metric:"memory",threadId:so.threadId,byThread:!0,...n});for(let s of gD)s(t);Dd=new Map,so.parentPort?so.parentPort.postMessage({type:TD,report:r}):yD({report:r})},SD).unref()}async function o4(e,t=6e4){let r=mS(),n=OD(),s=new Promise(S=>{let p=performance.now();setImmediate(()=>{let T=performance.now();T-p>5e3&&(0,ou.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-p)+"ms"),p=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-p>5e3&&(0,ou.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-p)+"ms"),S(T-p)})}),i;for(let S of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(S.value?.time){i=S.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:S,value:p}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(o){if(S>o+t)break}else o=S;l=S;let{metrics:T,threadId:b}=p;for(let g of T||[]){let{path:L,method:v,type:P,metric:k,count:H,total:X,distribution:Q,threads:z,...me}=g;H||(H=1);let ce=k+(L?"-"+L:"");v!==void 0&&(ce+="-"+v),P!==void 0&&(ce+="-"+P);let de=c.get(ce);if(de){if(de.threads){let Be=de.threads[b];if(Be)de=Be;else{de.threads[b]=Object.assign({},me);continue}}de.count||(de.count=1);let Le=de.count;for(let Be in me){let Lt=me[Be];typeof Lt=="number"&&(de[Be]=(de[Be]*Le+Lt*H)/(Le+H))}de.count+=H,X>=0&&(de.total+=X,de.ratio=de.total/de.count)}else de=Object.assign({period:t},g),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[b]=Object.assign({},me),_.push(de));if(Q){Q=Q.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...Q):u.set(ce,Q)}}await AD()}for(let S of _){let{path:p,method:T,type:b,metric:g,count:L,total:v,distribution:P,threads:k,...H}=S;k=k.filter(X=>X);for(let X in H){if(typeof S[X]!="number")continue;let Q=0;for(let z of k){let me=z[X];typeof me=="number"&&(Q+=me)}S[X]=Q}S.count=k.length,delete S.threads,delete S.byThread}for(let[S,p]of u){let T=c.get(S);p.sort((Be,Lt)=>Be.value>Lt.value?1:-1);let b=T.count-1,g=[],L=0,v=0,P;for(let Be of RD){let Lt=b*Be;for(;L<Lt;)P=p[v++],L+=P.count,v===1&&L--;let ql=p[v>1?v-2:0];P||(P=p[0]),g.push(P.value-(P.value-ql.value)*(L-Lt)/P.count)}let[k,H,X,Q,z,me,ce,de,Le]=g;Object.assign(T,{p1:k,p10:H,p25:X,median:Q,p75:z,p90:me,p95:ce,p99:de,p999:Le})}let d;for(let[S,p]of c)p.id=(0,Cd.getNextMonotonicTime)(),p.time=l,n.primaryStore.put(p.id,p,{append:!0}).then(T=>{T||n.primaryStore.put(p.id,p)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let S=(0,Cd.getNextMonotonicTime)(),p={id:S,metric:"main-thread-utilization",idle:E-uD,active:h-lD,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(S,p,{append:!0}).then(T=>{T||n.primaryStore.put(S,p)})}uD=E,lD=h}async function _D(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function mS(){return dD||(dD=lt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function OD(){return fD||(fD=lt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function u4(){bD=!0;let e=(0,cu.get)(hS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await o4(SD,e),await _D(mS(),a4),await _D(OD(),c4)},Math.min(e/2,2147483647)).unref()}function yD(e,t){let r=e.report;r.threadId=t?.threadId||so.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(ED+=n.mean*n.count);r.totalBytesProcessed=ED,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(hD.get(t))}),hD.set(t,t.performance.eventLoopUtilization())),r.id=(0,Cd.getNextMonotonicTime)(),mS().primaryStore.put(r.id,r),bD||u4(),l4&&(ND=d4(r))}async function d4(e){if(await ND,!_i){let r=(0,au.dirname)((0,ou.getLogFilePath)());try{_i=await(0,ES.open)((0,au.join)(r,"analytics.log"),"r+")}catch{_i=await(0,ES.open)((0,au.join)(r,"analytics.log"),"w+")}}let t=(await _i.stat()).size;if(t>_4){let r=Buffer.alloc(t);await _i.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await _i.write(r,{position:0}),await _i.truncate(r.length),t=r.length}await _i.write(JSON.stringify(e)+`
8
- `,t)}var so,mD,ou,au,ES,Cd,cu,hS,Dd,pD,wd,SD,TD,gD,RD,uD,lD,AD,a4,c4,dD,fD,bD,ED,hD,l4,ND,_i,_4,Is=ge(()=>{so=require("worker_threads"),mD=B(tt());Re();ou=B(K()),au=require("path"),ES=require("fs/promises"),Cd=B(Mr()),cu=B(re()),hS=B(U());ir();(0,cu.initSync)();Dd=new Map,pD=(0,cu.get)(hS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(s4,"setAnalyticsEnabled");a(Kr,"recordAction");et.recordAnalytics=Kr;a(_n,"recordActionBinary");wd=0,SD=1e3,TD="analytics-report",gD=[];a(uu,"addAnalyticsListener");RD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(i4,"sendAnalytics");a(o4,"aggregation");uD=0,lD=0,AD=a(()=>new Promise(setImmediate),"rest");a(_D,"cleanup");a4=36e5,c4=31536e6;a(mS,"getRawAnalyticsTable");a(OD,"getAnalyticsTable");(0,mD.setChildListenerByType)(TD,yD);a(u4,"startScheduledTasks");ED=0,hD=new Map,l4=!1;a(yD,"recordAnalytics");_4=1e6;a(d4,"logAnalytics")});var ID={};Ge(ID,{Headers:()=>di,appendHeader:()=>pS});function pS(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 di,_u=ge(()=>{di=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(pS,"appendHeader")});var RS={};Ge(RS,{coerceType:()=>Ld,makeTable:()=>Pd,setServerUtilities:()=>R4,updateResource:()=>Md});function Pd(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:S}=e,{attributes:p}=e;p||(p=[]),Bb(i,u);let T=Vh(i,n,u),b=0,g,L,v={},P=Promise.resolve(),k,H,X;for(let Y of p)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(k=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(H=Y),Y.expiresAt&&(X=Y),Y.isPrimaryKey&&(v=Y);let Q,z=[],me=[],ce=1,de=2,Le={},Be={},Lt=864e5,ql,kl,Ys,YA=!1,dh,fh,wG=i.getRange({start:!1,end:!1}).constructor,CG=10,DG=6;h&&QA();class We extends qt{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=H;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),L=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let I=a(D=>{let N=this.sources.slice(0,-1);if(N=N.filter(M=>M[D]&&(!M[D].reliesOnPrototype||M.prototype[D])),N.length>0)if(N.length===1){let M=N[0];return(q,C,x)=>{if(q?.source!==M)return M[D](C,x,q)}}else return(M,q,C)=>{let x=[];for(let G of N){if(M?.source===G)break;x.push(G[D](q,C,M))}return Promise.all(x)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1],O=a(D=>{if(y[D]&&(!y[D].reliesOnPrototype||y.prototype[D]))return(N,M,q)=>{if(!N?.source)return y[D](M,q,N)}},"getApplyToCanonicalSource");return Le={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Be={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let D=!1,N=a(async(M,q)=>{let C=M.value,x=M.table?st[c][M.table]:We;if(c===Hn.SYSTEM_SCHEMA_NAME&&(M.table===Hn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Hn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),M.id===void 0&&(M.id=C[x.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let G=await x.getResource(M.id,q,_a);switch(M.type){case"put":return G._writeUpdate(C,!0,_a);case"patch":return G._writeUpdate(C,!1,_a);case"delete":return G._writeDelete(_a);case"publish":return G._writePublish(C,_a);case"invalidate":return G.invalidate(_a);default:Xe.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&S==null&&(S=!0);let q=m.subscribeOnThisThread?m.subscribeOnThisThread((0,oo.getWorkerIndex)()):(0,oo.getWorkerIndex)()===0,C=M&&q&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let x;for await(let G of C)try{if(!(G.type==="transaction"?G.writes[0]:G)){Xe.error("Bad subscription event",G);continue}if(G.source=m,x)if(G.beginTxn)x.resolve();else{N(G,x);continue}if(G.type==="end_txn")continue;let pe=ze(G,()=>{if(G.type==="transaction"){let ee=[];for(let Pe of G.writes)try{ee.push(N(Pe,G))}catch(ae){throw ae.message+=" writing "+JSON.stringify(Pe)+" of event "+JSON.stringify(G),ae}return Promise.all(ee)}else if(G.type==="define_schema"){let ee=this.attributes.slice(0),Pe;for(let ae of G.attributes)ee.find(Fe=>Fe.name===ae.name)||(ee.push(ae),Pe=!0);Pe&&(lt({table:s,database:c,attributes:ee,origin:"cluster"}),Su.signalSchemaChange(new Tu.SchemaEventMsg(process.pid,Hn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return G.beginTxn?(x=G,N(G,G),new Promise(ee=>{x.resolve=ee})):N(G,G)});D&&(await pe,Su.signalUserChange(new Tu.UserEventMsg(process.pid))),G.onCommit&&(pe?.then?pe.then(G.onCommit):G.onCommit())}catch(se){Xe.error("error in subscription handler",se)}}}catch(M){Xe.error(M)}})(),this}static getResource(m,A,I){let y=super.getResource(m,A,I);if(m!=null){nc(m);try{if(y.hasOwnProperty(_e))return y;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let O=!I?.async||i.cache?.get(m),D=An(A),N=D.getReadTxn();if(N?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Eh(m,A,{transaction:N},O,M=>{if(M?Md(y,M):y[_e]=null,A.onlyIfCached&&A.noCacheStore){if(!y.doesExist())throw new dn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let q=hh(m,M,A,y);if(q)return D?.disregardReadTxn(),y[SS]=!0,gS(q,C=>(Md(y,C),y))}return y})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(m)),O}}return y}ensureLoaded(){let m=hh(this[Me],this[Wr],this[be]);if(m)return this[SS]=!0,gS(m,A=>{this[Wr]=A,this[_e]=A.value,this[mu]=A.version})}static setTTLExpiration(m){if(typeof m=="number")f=m*1e3,E||(E=0);else if(m&&typeof m=="object")f=m.expiration*1e3,E=(m.eviction||0)*1e3,Lt=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Lt=Lt||(f+E)/4,ph()}static enableAuditing(m=!0){h=m,m&&QA(),We.audit=m}static coerceId(m){return m===""?null:Ld(m,v)}static async dropTable(){if(delete st[c][s],c===o){for(let m of p)l.remove(We.tableName+"/"+m.name),r[m.name]?.drop();l.remove(We.tableName+"/"),i.drop(),await l.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));Su.signalSchemaChange(new Tu.SchemaEventMsg(process.pid,Hn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[on])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let A=We.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(m,A){let I=$l(m);if(I?.read){if(I.isSuperUser)return!0;let y=I.attribute_permissions,O=A?.select;if(y?.length>0||YA&&O){if(A||(A={}),O){let D=y?.length>0&&TS(y,"read");A.select=O.map(N=>{let M=N.name||N;if(!D||D[M]){let q=Ys[M]?.definition?.tableClass;if(q){if(N.name||(N={name:N}),!q.prototype.allowRead.call(null,m,N))return!1;if(!N.select)return N.name}return N}}).filter(Boolean)}else A.select=y.filter(D=>D.read&&!Ys[D.attribute_name]).map(D=>D.attribute_name);return A}else return!0}}allowUpdate(m,A){let I=$l(m);if(I?.update){let y=I.attribute_permissions;if(y?.length>0){let O=TS(y,"update");for(let D in A)if(!O[D])return!1;for(let D of y){let N=D.attribute_name;!D.update&&!(N in A)&&(A[N]=this.getProperty(N))}}return!0}}allowCreate(m,A){if(this[on]){let I=$l(m);if(I?.insert){let y=I.attribute_permissions;if(y?.length>0){let O=TS(y,"insert");for(let D in A)if(!O[D])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return $l(m)?.delete}update(m,A){if(!An(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let y;return typeof m=="object"&&m&&(A?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[_e]={},this[Ot]=m):(y=this[Ot],y&&(m=Object.assign(y,m)),this[Ot]=y=m)),this._writeUpdate(this[Ot],A),this}addTo(m,A){if(typeof A=="number")this[du]===CD?this.set(m,(+this.getProperty(m)||0)+A):(this[du]||this.update(),this.set(m,new T_(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,A){if(typeof A=="number")return this.addTo(m,-A);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let A=this[be],I=this[Me];nc(I),An(this[be]).addWrite({key:I,store:i,invalidated:!0,entry:this[Wr],nodeName:this[be]?.nodeName,before:Le.invalidate?.bind(this,A,I),beforeIntermediate:Be.invalidate?.bind(this,A,I),commit:(O,D)=>{if(D?.version>O)return;let N=null;for(let M in r)N||(N={}),N[M]=this.getProperty(M);T(I,N,this[Wr],O,fu,h,this[be],0,"invalidate")}})}static evict(m,A,I){let y=this.Source,O;if(!((L||h)&&(!A||(O=i.getEntry(m),!O||!A)||O.version!==I))){if(L){if(i.hasLock(m,O.version))return;let D;for(let N in r)D||(D={}),D[N]=A[N];if(D)return T(m,D,O,I,Eu,null,null,0,null,!0)}return i.ifVersion(m,I,()=>{Vl(m,A,null)}),h?T(m,null,O,I,Eu,null,null,0,null,!0):i.remove(m,I)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=s,m.schema||=c,vD.operation(m,A)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,A,I){let y=this[be],O=An(y),D=this[Me];nc(D);let N=this[Wr];this[du]=A?CD:S4;let M={key:D,store:i,entry:N,nodeName:y?.nodeName,validate:q=>{m||(m=this[Ot]),A||m&&p_(m)?y?.source||(O.checkOverloaded(),this.validate(m,!A),H&&(m[H.name]=H.type==="Date"?new Date(q):H.type==="String"?new Date(q).toISOString():q),A&&(t&&m[t]!==D&&(m[t]=D),k&&(N?.value?m[k.name]=N?.value[k.name]:m[k.name]=k.type==="Date"?new Date(q):k.type==="String"?new Date(q).toISOString():q),m=xi(m))):O.removeWrite(M)},before:A?Le.put?()=>Le.put(y,D,m):null:Le.patch?()=>Le.patch(y,D,m):Le.put?()=>Le.put(y,D,xi(this)):null,beforeIntermediate:A?Be.put?()=>Be.put(y,D,m):null:Be.patch?()=>Be.patch(y,D,m):Be.put?()=>Be.put(y,D,xi(this)):null,commit:(q,C,x)=>{if(x){if(y&&C?.version>(y.lastModified||0)&&(y.lastModified=C.version),this[Wr]=C,C?.value?.[_e])throw new Error("Can not assign a record to a record, check for circular references");A||(this[_e]=C?.value??null)}this[Ot]=m,this[mu]=q;let G=C?.value,se=m;if(this[du]=0,C?.version>=q)if(h){let ae=C.localTime,Fe=C.version;for(;se&&(ae>q||Fe>=q&&ae>0);){let te=u.get(ae);if(!te)break;let j=Mt(te);if(Fe=j.version,Fe>q){if(j.type==="patch"){let Oe=j.getValue(i);se=h_(se,Oe)}else if(j.type==="put"||j.type==="delete")return}else if(Fe===q)return;ae=j.previousLocalTime}}else{if(A)return;se=h_(se,G)}let pe;if(A?pe=se:(this[_e]=G,pe=A?se:xi(this,se)),this[_e]=pe,pe?.[_e])throw new Error("Can not assign a record to a record, check for circular references");let ee;A||(ee=m),Vl(D,G,pe);let Pe=A?"put":"patch";T(D,pe,C,q,0,h,y,y.expiresAt||(f?f+Date.now():0),Pe,!1,ee)}};O.addWrite(M)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[on]){for await(let A of this.search(m))(await We.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[_e]?this._writeDelete(m):!1}_writeDelete(m){let A=An(this[be]),I=this[Me];nc(I);let y=this[be];return A.addWrite({key:I,store:i,resource:this,nodeName:y?.nodeName,before:Le.delete?.bind(this,y,I),beforeIntermediate:Be.delete?.bind(this,y,I),commit:(O,D,N)=>{let M=D?.value;N&&(y&&D?.version>(y.lastModified||0)&&(y.lastModified=D.version),Md(this,D)),!(D?.version>O)&&(Vl(this[Me],M),Xe.trace("Write delete entry",I,O),h||S?(T(I,null,this[Wr],O,0,h,this[be],0,"delete"),h||ph()):i.remove(this[Me]))}}),!0}search(m){let A=this[be],I=An(A);if(!m)throw new Error("No query provided");let y=m.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(y=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(y));let O,D={};function N(j,Oe){let He;switch(Oe){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Oe)}let Vn=He&&{},Ks;for(let $e of j){if($e.conditions){$e.conditions=N($e.conditions,$e.operator);continue}let Gt=$e[0]??$e.attribute,tn=Gt==null?v:Ts(p,Gt);if(tn){if(He){let $n=Nn(Gt),Ft=Vn[$n];Ft?(Ft.push($e),Ks=!0):Vn[$n]=[$e]}(tn.type||rm[$e.comparator])&&($e[1]===void 0?$e.value=q($e.value,tn):$e[1]=q($e[1],tn))}else if(Gt!=null)throw(0,dn.handleHDBError)(new Error,`${Gt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return j;if(Ks)for(let $e in Vn){let Gt=Vn[$e],tn=Gt.length;if(tn>1)for(let $n=0;$n<tn;$n++){let Ft=Gt[$n];if(Ft.comparator==="ge"||Ft.comparator==="greater_than_equal")for(let Ws=0;Ws<tn;Ws++){let Bo=Gt[Ws];(Bo.comparator==="le"||Bo.comparator==="less_than_equal")&&(Ft.comparator="between",Ft.value=[Ft.value,Bo.value],j.splice(j.indexOf(Bo),1))}if(Ft.comparator==="equals"||!Ft.comparator){for(let Ws=0;Ws<tn;Ws++)if(Ws!==$n){let Bo=Gt[Ws];j.splice(j.indexOf(Bo),1)}break}}}return j}a(N,"prepareConditions");function M(j,Oe){if(m.enforceExecutionOrder)return j;for(let He of j)He.conditions&&(He.conditions=M(He.conditions,He.operator));return j.length>1&&Oe!=="or"?(0,PD.sortBy)(j,y_(We)):j}a(M,"orderConditions");function q(j,Oe){return Array.isArray(j)?j.map(He=>Ld(He,Oe)):Ld(j,Oe)}a(q,"coerceTypedValues");let C=m.operator;(y.length>0||C)&&(y=N(y,C));let x=typeof m.sort=="object"&&m.sort,G;if(x&&C!=="or"){let j=x.attribute;if(O=y.find(Oe=>Nn(Oe.attribute)===Nn(j)),!O){if(!Ts(p,j))throw(0,dn.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);O={attribute:j,comparator:"sort"},y.push(O)}O.descending=!!x.descending}y=M(y,C),x&&(y[0]===O?x.next&&(G={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(O&&y.splice(y.indexOf(O),1),G=x));let se=m.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:y,operator:C,postOrdering:G,selectApplied:!!se};let pe=I.useReadTxn(),ee=nm(y,C,We,pe,m,A,(j,Oe)=>KA(j,se,A,pe,Oe),D),Pe=m.ensureLoaded!==!1;G||(ee=te(ee));let ae=We.transformEntryForSelect(se,A,pe,D,Pe,!0),Fe=We.transformToOrderedSelect(ee,se,G,pe,A,ae);function te(j){return m.offset||m.limit!==void 0?j.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):j}return a(te,"applyOffset"),G&&(Fe=te(Fe)),Fe.onDone=()=>{Fe.onDone=null,I.doneReadTxn()},Fe.selectApplied=!0,Fe.getColumns=()=>{if(se){let j=[];for(let Oe of se)Oe==="*"?j.push(...p.map(He=>He.name)):j.push(Oe.name||Oe);return j}return p.map(j=>j.name)},Fe}static transformToOrderedSelect(m,A,I,y,O,D){let N=new wG;if(I){m=KA(m,A,y,O,null);let M;N.iterate=function(){let C,x=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),G,se=I.dbOrderedAttribute,pe,ee,Pe=!0;function ae(te){let j=te.next&&ae(te.next),Oe=te.descending;return(He,Vn)=>{let Ks=mh(He,te.attribute,y),$e=mh(Vn,te.attribute,y),Gt=Oe?(0,ao.compareKeys)($e,Ks):(0,ao.compareKeys)(Ks,$e);return Gt===0?j?.(He,Vn)||0:Gt}}a(ae,"createComparator");let Fe=ae(I);return{async next(){let te;if(C)if(te=C.next(),te.done){if(G)return N.onDone&&N.onDone(),te}else return{value:await D.call(this,te.value)};M=[],pe&&M.push(pe);do if(te=await x.next(),te.done){if(G=!0,M.length)break;return N.onDone&&N.onDone(),te}else{let j=te.value;if(j?.then&&(j=await j),se){let Oe=mh(j,se,y);if(Pe)Pe=!1,ee=Oe;else if(Oe!==ee){ee=Oe,pe=j;break}}M.push(j)}while(!0);return I.isGrouped,M.sort(Fe),C=M[Symbol.iterator](),te=C.next(),te.done?(N.onDone&&N.onDone(),te):{value:await D.call(this,te.value)}},return(){N.onDone&&N.onDone(),x.return()},throw(){N.onDone&&N.onDone(),x.throw()}}};let q=a(C=>{if(typeof A=="object"&&Array.isArray(C.attribute))for(let x=0;x<A.length;x++){let G=A[x],se;if(G.name===C.attribute[0]){for(se=G.sort||(G.sort={});se.next;)se=se.next;se.attribute=C.attribute.slice(1),se.descending=C.descending}else G===C.attribute[0]&&(A[x]=se={name:G,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&q(C.next)},"applySortingOnSelect");q(I)}else N.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),N=N.map(D);return N}static transformEntryForSelect(m,A,I,y,O,D){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(x=>(A?.transaction?.stale&&(A.transaction.stale=!1),x?.key??x),"transform");return m===t?C:m.asArray?x=>[C(x)]:x=>({[t]:C(x)})}let N;O&&L&&!m?.every(C=>{let x;return typeof C=="object"?x=C.name:x=C,r[x]||x===t})&&(N=!0);let M,q=a(function(C){let x;if(A?.transaction?.stale&&(A.transaction.stale=!1),C!=null){if(dh=C,x=C.value||C.deref?.(),!x&&(C.key===void 0||C.deref)){if(C=Eh(C.key??C,A,{transaction:I,lazy:m?.length<4},this.isSync,G=>G),C?.then)return C.then(q.bind(this));x=C?.value}if(N&&(C.metadataFlags&(fu|Eu)||C.expiresAt&&C.expiresAt<Date.now())){let G=hh(C.key??C,C,A);if(G?.then)return G.then(q)}}if(x==null)return D?io.SKIP:x;if(m&&!(m[0]==="*"&&m.length===1)){let G,se=a((ee,Pe)=>{let ae;typeof ee=="object"?ae=ee.name:ae=ee;let Fe=Ys?.[ae],te;if(Fe){let j=y?.[ae];if(j)if(j.hasMappings){let He=Fe.from?x[Fe.from]:Nn(C.key);te=j.get(He),te||(te=[])}else te=j.fromRecord?.(x);else te=Fe(x,A,C);let Oe=a(He=>{if(He&&typeof He=="object"){let Vn=Fe.definition?.tableClass||We;M||(M={});let Ks=M[ae]||(M[ae]=Vn.transformEntryForSelect(ae===ee?null:ee.select||(Array.isArray(ee)?ee:null),A,I,j,O));if(Array.isArray(He)){let $e=[],Gt=Vn.transformToOrderedSelect(He,ee.select,typeof ee.sort=="object"&&ee.sort,A,I,Ks)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),tn=a(Ft=>{for(;!Ft.done;){if(Ft?.then)return Ft.then(tn);$e.push(Ft.value),Ft=Gt.next()}Pe($e,ae)},"nextValue"),$n=tn(Gt.next());$n&&(G||(G=[]),G.push($n));return}else if(He=Ks.call(this,He),He?.then){G||(G=[]),G.push(He.then($e=>Pe($e,ae)));return}}Pe(He,ae)},"handleResolvedValue");te?.then?(G||(G=[]),G.push(te.then(Oe))):Oe(te);return}else te=x[ae],te&&typeof te=="object"&&ae!==ee&&(te=We.transformEntryForSelect(ee.select||ee,A,I,null)({value:te}));Pe(te,ae)},"selectAttribute"),pe;if(typeof m=="string")se(m,ee=>{pe=ee});else if(Array.isArray(m))if(m.asArray)pe=[],m.forEach((ee,Pe)=>{ee==="*"?m[Pe]=x:se(ee,ae=>pe[Pe]=ae)});else{pe={};let ee=m.forceNulls;for(let Pe of m)if(Pe==="*")for(let ae in x)pe[ae]=x[ae];else se(Pe,(ae,Fe)=>{ae===void 0&&ee&&(ae=null),pe[Fe]=ae})}else throw new dn.ClientError("Invalid select"+m);return G?Promise.all(G).then(()=>pe):pe}return x},"transform");return q}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||lt({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=!m.rawEvents,I=Pb(We,this[Me]??null,function(N,M,q,C){try{let x=M.getValue?.(i,A);if(!x&&M.type==="patch"&&A){let G=i.getEntry(N);G?.version===M.version?x=G.value:x=M.getValue?.(i,!0,q),M.type="put"}this.send({id:N,timestamp:q,value:x,version:M.version,type:M.type,beginTxn:C})}catch(x){Xe.error(x)}},m.startTime||0,this[on]);this[on]&&(I.includeDescendants=!0,m.onlyChildren&&(I.onlyChildren=!0)),m.crossThreads===!1&&(I.crossThreads=!1),m.supportsTransactions&&(I.supportsTransactions=!0);let y=this[Me],O=m.previousCount;O>1e3&&(O=1e3);let D=m.startTime;if(this[on]){if(D){if(O)throw new dn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:M}of u.getRange({start:D,exclusiveStart:!0})){let q=Mt(M);if(q.tableId!==n)continue;let C=q.recordId;if(y==null||MD(y,C)){let x=q.getValue(i,A,N);I.send({id:C,timestamp:N,value:x,version:q.version,type:q.type})}I.startTime=N}}else if(O){let N=[];for(let{key:M,value:q}of u.getRange({start:"z",end:!1,reverse:!0}))try{let C=Mt(q);if(C.tableId!==n)continue;let x=C.recordId;if(y==null||MD(y,x)){let G=C.getValue(i,A,M);if(N.push({id:x,timestamp:M,value:G,version:C.version,type:C.type}),--O<=0)break}}catch(C){Xe.error("Error getting history entry",M,C)}for(let M=N.length;M>0;)I.send(N[--M]);N[0]&&(I.startTime=N[0].timestamp)}else if(!m.omitCurrent)for(let{key:N,value:M,version:q,localTime:C}of i.getRange({start:y??!1,end:y==null?void 0:[y,ao.MAXIMUM_KEY],versions:!0}))M&&I.send({id:N,timestamp:C,value:M,version:q,type:"put"})}else{O&&!D&&(D=0);let N=this[Wr]?.localTime;if(N===kh&&(i.cache?.delete(y),this[Wr]=i.getEntry(y),Xe.trace("re-retrieved record",N,this[Wr]?.localTime),N=this[Wr]?.localTime),Xe.trace("Subscription from",D,"from",y,N),D<N){let M=[],q=N;do{let C=u.get(q);if(C){m.omitCurrent=!0;let x=Mt(C),G=x.getValue(i,A,q);A&&(x.type="put"),M.push({id:y,value:G,timestamp:q,...x}),q=x.previousLocalTime}else break;O&&O--}while(q>D&&O!==0);for(let C=M.length;C>0;)I.send(M[--C]);I.startTime=N}!m.omitCurrent&&this.doesExist()&&I.send({id:y,timestamp:N,value:this,version:this[mu],type:"put"})}return m.listener&&I.on("data",m.listener),I}doesExist(){return!!(this[_e]||this[du])}publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let I=An(this[be]),y=this[Me]||null;nc(y);let O=this[be];I.addWrite({key:y,store:i,entry:this[Wr],nodeName:O?.nodeName,validate:()=>{O?.source||(I.checkOverloaded(),this.validate(m))},before:Le.publish?.bind(this,O,y,m),beforeIntermediate:Be.publish?.bind(this,O,y,m),commit:(D,N,M)=>{N===void 0&&S&&!h&&ph(),T(y,N?.value??null,N,N?.version||D,0,!0,O,N?.expiresAt,"message",!1,m)}})}validate(m,A){let I,y=a((O,D,N)=>{if(D.type&&O!=null)if(A&&O.__op__&&(O=O.value),D.properties){typeof O!="object"&&(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be an object${D.type?" ("+D.type+")":""}`);let M=D.properties;for(let q=0,C=M.length;q<C;q++){let x=M[q],G=y(O[x.name],x,N+"."+x.name);G&&(O[x.name]=G)}if(D.sealed&&O!=null&&typeof O=="object")for(let q in O)M.find(C=>C.name===q)||(I||(I=[])).push(`Property ${q} is not allowed within object in property ${N}`)}else switch(D.type){case"Int":(typeof O!="number"||O>>0!==O)&&(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a string`);break;case"Boolean":typeof O!="boolean"&&(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(D.elements)for(let M=0,q=O.length;M<q;M++){let C=O[M],x=y(C,D.elements,N+"[*]");x&&(O[M]=x)}}else(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a Buffer or Uint8Array`);break}D.nullable===!1&&O==null&&(I||(I=[])).push(`Property ${N} is required (and not does not allow null values)`)},"validateValue");for(let O=0,D=p.length;O<D;O++){let N=p[O];if(!N.relationship&&(!A||N.name in m)){let M=y(m[N.name],N,N.name);M&&(m[N.name]=M)}}if(d)for(let O in m)p.find(D=>D.name===O)||(I||(I=[])).push(`Property ${O} is not allowed`);if(I)throw new dn.ClientError(I.join(". "))}getUpdatedTime(){return this[mu]}wasLoadedFromSource(){return L?!!this[SS]:void 0}static async addAttributes(m){let A=p.slice(0);for(let I of m){if(!I.name)throw new dn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new dn.ClientError("Attribute names cannot include backticks or forward slashes");A.push(I)}return lt({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static async removeAttributes(m){let A=p.filter(I=>!m.includes(I.name));return lt({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,I=5e3,y=1e3,O;A>I&&!m?.exactCount&&(O=y);let D=0;for(let{value:N}of i.getRange({start:!0,lazy:!0,limit:O}))N!=null&&D++;if(O){let N=D;D=0;for(let{value:Pe}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:O}))Pe!=null&&D++;let M=O*2,q=(D+N)/M,C=Math.pow((D-N+1)/O/2,2)+q*(1-q)/M,x=Math.max(Math.sqrt(C)*A,1),G=Math.round(q*A),se=Math.max(G-1.96*x,0),pe=Math.min(G+1.96*x,A),ee=Math.pow(10,Math.round(Math.log10(x)));return ee>G&&(ee=ee/10),D=Math.round(G/ee)*ee,{recordCount:D,estimatedRange:[Math.round(se),Math.round(pe)]}}return{recordCount:D}}static updatedAttributes(){Ys=this.propertyResolvers={$id:(m,A,I)=>({value:I.key}),$updatedtime:(m,A,I)=>I.version,$record:(m,A,I)=>I?{value:m}:m};for(let m of this.attributes){m.resolve=null;let A=m.relationship;if(A)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),YA=!0,A.to)m.elements?.definition?(Ys[m.name]=m.resolve=(I,y,O)=>{let D=I[A.from?A.from:t],N=m.elements.definition.tableClass;return O?Yo({attribute:A.to,value:D},An(y).getReadTxn(),!1,N,!1).asArray:N.search([{attribute:A.to,value:D}],y).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,A.from&&(m.resolve.from=A.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(A.from){let I=m.definition||m.elements?.definition;I?(Ys[m.name]=m.resolve=(y,O,D)=>{let N=y[A.from];if(N!==void 0){if(m.elements){let M,q=N.map(C=>{let x=D?I.tableClass.primaryStore.getEntry(C,{transaction:An(O).getReadTxn()}):I.tableClass.get(C,O);return x?.then&&(M=!0),x});return A.filterMissing?M?Promise.all(q).then(C=>C.filter(UD)):q.filter(UD):M?Promise.all(q):q}return D?I.tableClass.primaryStore.getEntry(N,{transaction:An(O).getReadTxn()}):I.tableClass.get(N,O)}},m.set=(y,O)=>{if(Array.isArray(O)){let D=O.map(N=>N[Me]||N[I.tableClass.primaryKey]);y[A.from]=D}else{let D=O[Me]||O[I.tableClass.primaryKey];y[A.from]=D}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=A.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`)}g_(this,this)}static async deleteHistory(m=0){let A;for(let{key:I,value:y}of u.getRange({start:0,end:m}))await hu(),Mt(y).tableId===n&&(A=u.remove(I));await A}static async*getHistory(m=0,A=1/0){for(let{key:I,value:y}of u.getRange({start:m,end:A})){await hu();let O=Mt(y);O.tableId===n&&(yield{id:O.recordId,localTime:I,version:O.version,type:O.type,value:O.getValue(i,!0,I),user:O.user})}}static async getHistoryOfRecord(m){let A=[];if(m==null)throw new Error("An id is required");let I=i.getEntry(m);if(!I)return A;let y=I.localTime;if(!y)throw new Error("The entry does not have a local audit time");let O=0;do{await hu();let D=u.get(y);if(D){let N=Mt(D);A.push({id:N.recordId,localTime:y,version:N.version,type:N.type,value:N.getValue(i,!0,y),user:N.user}),y=N.previousLocalTime}else break}while(O<1e3&&y);return A.reverse()}static cleanup(){Q?.remove()}}We.updatedAttributes();let LG=We.prototype;return LG[p4]=!0,f&&We.setTTLExpiration(f/1e3),X&&MG(),We;function Vl(Y,m,A){let I;for(let y in r){let O=r[y],D=O.isIndexing,N=A?.[y],M=m?.[y];if(N===M&&!D)continue;I=!0;let q=O.indexNulls,C=(0,pu.getIndexedValues)(N,q),x=(0,pu.getIndexedValues)(M,q);if(x?.length>0){let G=new Set(x);if(C=C?C.filter(se=>{if(G.has(se))G.delete(se);else return!0}):[],x=Array.from(G),(x.length>0||C.length>0)&&wD){let se=x.concat(C).map(pe=>({key:pe,value:Y}));O.prefetch(se,LD)}for(let se=0,pe=x.length;se<pe;se++)O.remove(x[se],Y)}else C?.length>0&&wD&&O.prefetch(C.map(G=>({key:G,value:Y})),LD);if(C)for(let G=0,se=C.length;G<se;G++)O.put(C[G],Y)}return I}a(Vl,"updateIndices");function nc(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>DD)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,ao.writeKey)(Y,T4,0)>DD)throw new Error("Primary key size is too large: "+Y.length);return!0}a(nc,"checkValidId");function Eh(Y,m,A,I,y){let O=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return y(null,Y);let D=i.getEntry(Y,A);return D&&m&&(D?.version>(m.lastModified||0)&&(m.lastModified=D.version),D?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=D.localTime)),y(D,Y)},"whenPrefetched");return I?O():ce>0?(ce--,O()):new Promise((D,N)=>{ce===0?(ce--,i.prefetch([Y],()=>{M(),q()})):(z.push(Y),me.push(q),z.length>DG&&(ce--,M()));function M(){if(z.length>0){let C=me;i.prefetch(z,()=>{ce===-1?M():ce++;for(let x of C)x()}),z=[],me=[],de>2&&de--}else ce=de,de<CG&&de++}a(M,"prefetch");function q(){try{D(O())}catch(C){N(C)}}a(q,"load")})}a(Eh,"loadLocalRecord");function $l(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return g4;let A=m[c],I,y=A?.tables;if(y)return y[s];if(c==="data"&&(I=m[s])&&!I.tables)return I}a($l,"getTablePermissions");function hh(Y,m,A,I){if(L){let y;if(A.noCache?y=!0:(m?(!m.value||m.metadataFlags&(fu|Eu)||m.expiresAt&&m.expiresAt<Date.now())&&(y=!0):y=!0,_n(!y,"cache-hit",s)),y){let O=WA(Y,m,A).then(D=>(D?.value?.[_e]&&Xe.error("Can not assign a record with a record property"),A&&(D?.version>(A.lastModified||0)&&(A.lastModified=D.version),A.lastRefreshed=Date.now()),D));if(A?.onlyIfCached||m?.value&&I?.allowStaleWhileRevalidate?.(m,Y)){if(O.catch(D=>Xe.warn(D)),A?.onlyIfCached&&!I.doesExist())throw new dn.ServerError("Entry is not cached",504);return}else return O}}}a(hh,"ensureLoadedFromSource");function An(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 A=m.next;if(!A)return m=m.next=new Gi,m.lmdbDb=i,m;m=A}while(!0)}else return new O_}a(An,"txnForContext");function mh(Y,m,A){if(!Y)return;dh=Y;let I=Y.value||Y.deref?.()||(dh=i.getEntry(Y.key))?.value;if(typeof m=="object"){let O=Ys,D=I;for(let N=0,M=m.length;N<M;N++){let q=m[N],C=O?.[q];D=C&&D?C(D,A,!0)?.value:D?.[q],O=C?.definition?.tableClass?.propertyResolvers}return D}let y=Ys[m];return y?y(I,A):I[m]}a(mh,"getAttributeValue");function KA(Y,m,A,I,y){let O=y?.length,D={transaction:I,lazy:O>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},N;function M(q,C){let x=q?.value;if(!x)return io.SKIP;for(let G=0;G<O;G++)if(!N?.includes(G)&&!y[G](x,q))return io.SKIP;return C!==void 0&&(q.key=C),q}if(a(M,"processEntry"),O>0||!Y.hasEntries){let q=Y.map(C=>{if(N=null,typeof C=="object"&&C?.key!==void 0)return O>0?M(C):C;if(C==null)return io.SKIP;for(let x=0;x<O;x++){let se=y[x].idFilter;if(se){if(!se(C))return io.SKIP;N||(N=[]),N.push(x)}}return Eh(C,A,D,!1,M)});return Array.isArray(Y)&&(q=q.filter(C=>C!==io.SKIP)),q.hasEntries=!0,q}return Y}a(KA,"transformToEntries");async function WA(Y,m,A){let I=m?.metadataFlags,y=m?.version,O,D;if(!i.attemptLock(Y,y,()=>{clearTimeout(D);let C=i.getEntry(Y);!C||!C.value||C.metadataFlags&(fu|Eu)?O(WA(Y,i.getEntry(Y),A)):O(C)}))return new Promise(C=>{O=C,D=setTimeout(()=>{i.unlock(Y,y)},m4)});let N=m?.value,M={requestContext:A,replacingRecord:N,replacingVersion:y,source:null,resourceCache:A?.resourceCache},q=A?.responseHeaders;return new Promise((C,x)=>{let G;gS(ze(M,async se=>{let pe=performance.now(),ee,Pe,ae;try{for(let Oe of We.sources)if(Oe.get&&(!Oe.get.reliesOnPrototype||Oe.prototype.get)&&(M.source=Oe,ee=await Oe.get(Y,M),ee))break;ae=I&fu;let te=M.lastModified||ae&&y;Pe=ae||te>y||!N,te||(te=(0,pu.getNextMonotonicTime)());let j=performance.now()-pe;if(Kr(j,"cache-resolution",s),q&&pS(q,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),se.timestamp=te,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),ee){if(typeof ee!="object")throw new Error("Only objects can be cached and stored in tables");typeof ee.toJSON=="function"&&(ee=ee.toJSON()),t&&ee[t]!==Y&&(ee[t]=Y)}G=!0,C({version:te,value:ee})}catch(te){te.message+=` while resolving record ${Y} for ${s}`,N&&((te.code==="ECONNRESET"||te.code==="ECONNREFUSED"||te.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(te.statusCode===500||te.statusCode===502||te.statusCode===503||te.statusCode===504))?(C({version:y,value:N}),Xe.trace(te.message,"(returned stale record)")):x(te),M.transaction.abort();return}if(A?.noCacheStore){M.transaction.abort();return}An(M).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(te,j)=>{if(j?.version!==y)return;let Oe=Vl(Y,N,ee);ee?(Be.put?.(M,Y,ee),T(Y,ee,j,te,0,h&&Pe||null,M,M.expiresAt,"put",!!ae)):(Be.delete?.(M,Y),h||S?T(Y,null,j,te,0,h&&Pe||null,M,0,"delete",!!ae):i.remove(Y,y))}})}),()=>{i.unlock(Y,y)},se=>{i.unlock(Y,y),G&&Xe.error("Error committing cache update",se)})})}a(WA,"getFromSource");function ph(){if(Lt!==ql&&(ql=Lt,(0,oo.getWorkerIndex)()===(0,oo.getWorkerCount)()-1)){if(kl&&clearTimeout(kl),!Lt)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())/Lt)*Lt+Y.getTime(),A=a(I=>{Xe.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),kl=setTimeout(()=>P=P.then(async()=>{if(A(Math.max(I+Lt,Date.now())),i.rootStore.status!=="open"){clearTimeout(kl);return}let y=50,O=new Array(y),D=0;Xe.trace(`Starting cleanup scan for ${s}`);try{let N=0;for(let{key:M,value:q,version:C,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let G;q===null&&!h&&C+h4<Date.now()?G=i.remove(M,C):x&&x+E<Date.now()&&(G=We.evict(M,q,C),N++),G&&(await O[D],O[D]=G.catch(se=>{Xe.error("Cleanup error",se)}),++D>=y&&(D=0)),await hu()}Xe.trace(`Finished cleanup scan for ${s}, evicted ${N} entries`)}catch(N){Xe.trace(`Error in cleanup scan for ${s}:`,N)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(ph,"scheduleCleanup");function QA(){Q=u?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(QA,"addDeleteRemoval");function MG(){(0,oo.getWorkerIndex)()===0&&setInterval(async()=>{if(!fh){fh=!0;try{let Y=X.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${X} must be indexed`);for(let A of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let I of m.getValues(A)){let y=i.getEntry(I);y?.value?y.value[Y]<Date.now()&&We.evict(I,y.value,y.version):i.ifVersion(I,y?.version,()=>m.remove(A,I))}await hu()}}catch(Y){Xe.error("Error in evicting old records",Y)}finally{fh=!1}}},E4).unref()}a(MG,"runRecordExpirationEviction")}function TS(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 LD(){}function R4(e){vD=e}function Ld(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!A4.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,Ud.autoCast)(e):e}function MD(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 gS(e,t,r){return e?.then?e.then(t,r):t(e)}function Md(e,t){e[Wr]=t,e[_e]=t?.value??null,e[mu]=t?.version}function UD(e){return e!=null}function Bn(e){try{return JSON.stringify(e)}catch{return e}}var Hn,io,pu,PD,gu,dn,Su,Tu,Xe,ao,oo,Ud,f4,vD,E4,h4,wD,m4,mu,p4,Wr,du,CD,S4,SS,_a,fu,Eu,T4,DD,g4,ade,A4,hu,vd=ge(()=>{Hn=B(U()),io=require("lmdb"),pu=B(Mr()),PD=require("lodash");yn();em();gu=B(re());Hb();dn=B(ne()),Su=B(As()),Tu=B(Cn());Re();I_();Xe=B(K());A_();Fi();ao=require("ordered-binary"),oo=B(tt());Xs();Ud=B(J());Ac();Is();f_();_u();f4=new Uint8Array(9);f4[8]=192;E4=6e4,h4=864e5;gu.initSync();wD=gu.get(Hn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),m4=1e4,mu=Symbol.for("version"),p4=Symbol.for("incremental-update"),Wr=Symbol("entry"),du=Symbol("is-saving"),CD=1,S4=2,SS=Symbol("loaded-from-source"),_a={isNotification:!0,ensureLoaded:!1},fu=1,Eu=8,T4=Buffer.allocUnsafeSlow(8192),DD=1978,g4={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},ade=(0,Ud.convertToMS)(gu.get(Hn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Pd,"makeTable");a(TS,"attributesAsObject");a(LD,"noop");a(R4,"setServerUtilities");A4=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Ld,"coerceType");a(MD,"isDescendantId");hu=a(()=>new Promise(setImmediate),"rest");a(gS,"when");a(Md,"updateResource");a(UD,"exists");a(Bn,"stringify")});var qe={};Ge(qe,{database:()=>Jc,databases:()=>st,dropDatabase:()=>Dp,dropTableMeta:()=>I4,getDatabases:()=>fr,getDefaultCompression:()=>Vd,getTables:()=>O4,onUpdatedTable:()=>NS,readMetaDb:()=>Ru,resetDatabases:()=>Ou,table:()=>lt,tables:()=>zr});function O4(){return Fd||fr(),zr||{}}function fr(){if(Fd)return st;Fd=!0,Ea=new Map;let e=(0,_t.getHdbBasePath)()&&(0,je.join)((0,_t.getHdbBasePath)(),Nt.DATABASES_DIR_NAME),t=(0,_t.get)(Nt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,_t.get)(Nt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Qr.existsSync)(e)?e:(0,je.join)((0,_t.getHdbBasePath)(),Nt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Qr.existsSync)(e))for(let r of(0,Qr.readdirSync)(e,{withFileTypes:!0})){let n=(0,je.basename)(r.name,".mdb");r.isFile()&&(0,je.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Ru((0,je.join)(e,r.name),null,n)}if((0,Qr.existsSync)((0,fa.getBaseSchemaPath)())){for(let r of(0,Qr.readdirSync)((0,fa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,je.join)((0,fa.getBaseSchemaPath)(),r.name),s=(0,je.join)((0,fa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Qr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,je.extname)(i.name).toLowerCase()===".mdb"){let o=(0,je.join)(s,i.name);Ru((0,je.join)(n,i.name),(0,je.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Qr.existsSync)(s))for(let o of(0,Qr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,je.extname)(o.name).toLowerCase()===".mdb"&&Ru((0,je.join)(s,o.name),(0,je.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,je.join)(c.path,(0,je.basename)(o+".mdb"));(0,Qr.existsSync)(u)&&Ru(u,o,r,null,!0)}}for(let r in st){let n=Ea.get(r);if(n){let s=st[r];r.includes("delete")&&fn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(fn.trace(`delete table class ${i}`),delete s[i])}else if(delete st[r],r==="data"){for(let s in zr)delete zr[s];delete zr[kd]}}return Ea=null,st}}function Ou(){Fd=!1;for(let[,e]of fi)e.needsDeletion=!0;fr();for(let[e,t]of fi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),fi.delete(e));return st}function Ru(e,t,r=bS,n,s){let i=new AS.default(e,!1);try{let o=fi.get(e);o?o.needsDeletion=!1:(o=(0,Hd.open)(i),fi.set(e,o));let c=new co.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Bd.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Qr.existsSync)(n)&&(i.path=n,_=(0,Hd.open)(i),_.isLegacy=!0):_=d_(o));let l=GD(r),d=l[kd],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[S,p]=E.toString().split("/");p===""?p=h.name:p||(p=S,S=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(S);let T=f.get(S);T||f.set(S,T={attributes:[]}),(p==null||h.is_hash_attribute)&&(T.primary=h),p!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:S,primary:p}=h;if(!p){for(let z of S)if(z.is_hash_attribute||z.isPrimaryKey){p=z;break}if(!p){fn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(S)}`);continue}}let T=l[E],b={},g=[],L,v,P=typeof p.audit=="boolean"?p.audit:(0,_t.get)(Nt.CONFIG_PARAMS.LOGGING_AUDITLOG),k=p.trackDeletes,H=p.expiration,X=p.eviction,Q=p.sealed;if(T)b=T.indices,g=T.attributes,T.schemaVersion++;else{L=p.tableId,L?L>=(u.get(da)||0)&&u.putSync(da,L+1):(p.tableId=L=u.get(da),L||(L=1),u.putSync(da,L+1),u.putSync(p.key,p));let z=new co.default(!p.is_hash_attribute,p.is_hash_attribute);if(z.compression=p.compression,z.compression){let me=(0,_t.get)(Nt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||xD;z.compression.threshold=me}v=a_(o.openDB(p.key,z)),v.rootStore=o,v.tableId=L}for(let z of S){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!b[z.name]){let ce=new co.default(!z.is_hash_attribute,z.is_hash_attribute);b[z.name]=o.openDB(z.key,ce),b[z.name].indexNulls=z.indexNulls}let me=g.find(ce=>ce.name===z.name);me?g.splice(g.indexOf(me),1,z):g.push(z)}}catch(me){fn.error("Error trying to update attribute",z,g,b,me)}}if(!T){T=FD(l,E,Pd({primaryStore:v,auditStore:_,audit:P,sealed:Q,expirationMS:H&&H*1e3,evictionMS:X&&X*1e3,trackDeletes:k,tableName:E,tableId:L,primaryKey:p.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:b,attributes:S,schemaDefined:p.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let z of yS)z(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function GD(e){let t=st[e];if(t||(e==="data"?t=st[e]=zr:e==="system"?Object.defineProperty(st,"system",{value:t=Object.create(null),configurable:!0}):t=st[e]=Object.create(null)),Ea&&!Ea.has(e)){let r=new Set;t[kd]=r,Ea.set(e,r)}return t}function FD(e,t,r){return e[t]=r,r}function Jc({database:e,table:t}){e||(e=bS),fr();let r=GD(e),n=(0,je.join)((0,_t.getHdbBasePath)(),Nt.DATABASES_DIR_NAME),s=(0,_t.get)(Nt.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,_t.get)(Nt.CONFIG_PARAMS.STORAGE_PATH)||((0,Qr.existsSync)(n)?n:(0,je.join)((0,_t.getHdbBasePath)(),Nt.LEGACY_DATABASES_DIR_NAME));let o=(0,je.join)(n,(i?t:e)+".mdb"),c=fi.get(o);if(!c){let u=new AS.default(o,!1);c=(0,Hd.open)(u),fi.set(o,c)}return c}async function Dp(e){if(!st[e])throw new Error("Schema does not exist");let t=st[e];for(let r in t){let s=t[r].primaryStore.rootStore;fi.delete(s.path),s.status==="open"&&(await s.close(),await qd.remove(s.path))}if(e==="data"){for(let r in zr)delete zr[r];delete zr[kd]}delete st[e]}function lt({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=bS);let d=Jc({database:t,table:e}),f=st[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,S,p,T;_==null&&(_=!0);let b=new co.default(!1);for(let H of i)H.attribute?(H.name=H.attribute,H.indexed=!0):H.attribute=H.name,H.expiresAt&&(H.indexed=!0);let g,L;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let H=d.auditStore;H||(H=d_(d)),S=i.find(me=>me.isPrimaryKey)||{},h=S.name,S.is_hash_attribute=!0,S.schemaDefined=_,S.compression=Vd(),u&&(S.trackDeletes=!0),o=S.audit=typeof o=="boolean"?o:(0,_t.get)(Nt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(S.expiration=r),n&&(S.eviction=n),typeof c=="boolean"&&(S.sealed=c),l&&(S.origins?S.origins.includes(l)||S.origins.push(l):S.origins=[l]),fn.trace(`${e} table loading, opening primary store`);let X=new co.default(!1,!0);X.compression=S.compression;let Q=e+"/",z=a_(d.openDB(Q,X));z.rootStore=d,T=d.dbisDb=d.openDB(Bd.INTERNAL_DBIS_NAME,b),z.tableId=T.get(da),z.tableId||(z.tableId=1),T.putSync(da,z.tableId+1),S.tableId=z.tableId,E=FD(f,e,Pd({primaryStore:z,auditStore:H,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),E.schemaVersion=1,g=!0,k(),T.put(Q,S)}p=E.indices,T=T||(d.dbisDb=d.openDB(Bd.INTERNAL_DBIS_NAME,b)),E.dbisDB=T;let v=[];for(let{key:H,value:X}of T.getRange({start:!0})){let[Q,z]=H.toString().split("/");if(z===""&&(z=X.name),z){if(Q!==e)continue}else z=Q;if(!i.find(ce=>ce.name===z)?.indexed&&X.indexed&&!X.isPrimaryKey){k(),g=!0,T.remove(H);let ce=E.indices[Q];ce&&v.push(ce)}}let P=[];try{for(let H of i||[]){if(H.relationship)continue;let X=e+"/"+(H.name||"");Object.defineProperty(H,"key",{value:X,configurable:!0});let Q=T.get(X);if(H.isPrimaryKey){if(Q=Q||T.get(X=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+Q.expiration||void 0)||(+n||void 0)!==(+Q.eviction||void 0)){let me=Object.assign({},Q);typeof o=="boolean"&&(o&&E.enableAuditing(o),me.audit=o),r&&(me.expiration=+r),n&&(me.eviction=+n),c!==void 0&&(me.sealed=c),g=!0,k(),T.put(X,me)}continue}Q?.attribute&&!Q.name&&(Q.indexed=!0);let z=!Q||Q.type!==H.type||Q.indexed!==H.indexed||Q.nullable!==H.nullable||JSON.stringify(Q.attributes)!==JSON.stringify(H.attributes)||JSON.stringify(Q.elements)!==JSON.stringify(H.elements);if(H.indexed){let me=new co.default(!0,!1),ce=d.openDB(X,me);(z||Q.indexingPID&&Q.indexingPID!==process.pid||Q.restartNumber<Au.workerData?.restartNumber)&&(g=!0,k(),Q=T.get(X),(z||Q.indexingPID&&Q.indexingPID!==process.pid||Q.restartNumber<Au.workerData?.restartNumber)&&(g=!0,H.indexNulls===void 0&&(H.indexNulls=!0),E.primaryStore.getStats().entryCount>0&&(H.lastIndexedKey=Q?.lastIndexedKey||!1,H.indexingPID=process.pid,ce.isIndexing=!0,Object.defineProperty(H,"dbi",{value:ce}),P.push(H))),T.put(X,H)),Q?.indexNulls&&H.indexNulls===void 0&&(H.indexNulls=!0),ce.indexNulls=H.indexNulls,p[H.name]=ce}else z&&(g=!0,k(),T.put(X,H))}}finally{L&&L()}if(g&&(E.schemaVersion++,E.updatedAttributes()),fn.trace(`${e} table loading, running index`),P.length>0||v.length>0?E.indexingOperation=N4(E,P,v):g&&xd.signalSchemaChange(new Gd.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=l,g)for(let H of yS)H(E,l!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),fn.trace(`${e} table loaded`),E;function k(){L||d.transactionSync(()=>({then(H){L=H}}))}a(k,"startTxn")}async function N4(e,t,r){try{let n=e.schemaVersion;await xd.signalSchemaChange(new Gd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,S=(0,BD.getIndexedValues)(l[h]);if(S)for(let p=0,T=S.length;p<T;p++)E.dbi.put(S[p],_)}}),s.then(()=>u--,f=>{u--,fn.error(f)}),Au.workerData&&Au.workerData.restartNumber!==HD.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>b4?await s:u>y4&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await xd.signalSchemaChange(new Gd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){fn.error("Error in indexing",n)}}function I4({table:e,database:t}){let r=Jc({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 NS(e){yS.push(e)}function Vd(){let e=(0,_t.get)(Nt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,_t.get)(Nt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,_t.get)(Nt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||xD,n={startingOffset:32};return t&&(n.dictionary=qd.readFileSync(t)),r&&(n.threshold=r),e&&n}var _t,Bd,Hd,je,Qr,fa,co,AS,Nt,qd,OS,BD,xd,Gd,Au,fn,HD,bS,kd,xD,zr,st,da,yS,Fd,fi,Ea,b4,y4,Re=ge(()=>{_t=B(re()),Bd=B(ct()),Hd=require("lmdb"),je=require("path"),Qr=require("fs"),fa=B(Qe());vd();co=B(wc()),AS=B(Cc()),Nt=B(U()),qd=B(require("fs-extra")),OS=require("../index"),BD=B(Mr()),xd=B(As()),Gd=B(Cn()),Au=require("worker_threads"),fn=B(K()),HD=B(tt());Xs();Ac();bS="data",kd=Symbol("defined-tables"),xD=((0,_t.get)(Nt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,_t.initSync)();zr=Object.create(null),st=Object.create(null);(0,OS._assignPackageExport)("databases",st);(0,OS._assignPackageExport)("tables",zr);da=Symbol.for("next-table-id"),yS=[],fi=new Map;a(O4,"getTables");a(fr,"getDatabases");a(Ou,"resetDatabases");a(Ru,"readMetaDb");a(GD,"ensureDB");a(FD,"setTable");a(Jc,"database");a(Dp,"dropDatabase");a(lt,"table");b4=1e3,y4=10;a(N4,"runIndexing");a(I4,"dropTableMeta");a(NS,"onUpdatedTable");a(Vd,"getDefaultCompression")});var J=R((mde,eL)=>{"use strict";var Ei=require("path"),YD=require("fs-extra"),pr=K(),qD=require("fs-extra"),$d=require("os"),w4=require("net"),C4=require("recursive-iterator"),it=U(),D4=IO(),kD=require("papaparse"),Yd=require("moment"),{inspect:L4}=require("util"),VD=require("is-number"),hde=require("lodash"),M4=require("minimist"),U4=require("https"),P4=require("http"),{hdb_errors:Kd}=ne(),v4=/^((\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)))$/,KD=require("util").promisify(setTimeout),B4=100,H4=5,x4="",G4=4,$D={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};eL.exports={isEmpty:Jr,isEmptyOrZeroLength:ss,arrayHasEmptyValues:k4,arrayHasEmptyOrZeroLengthValues:V4,buildFolderPath:$4,isBoolean:WD,errorizeMessage:F4,stripFileExtension:K4,autoCast:W4,autoCastJSON:QD,autoCastJSONDeep:wS,removeDir:Q4,compareVersions:z4,isCompatibleDataVersion:J4,escapeRawValue:X4,unescapeValue:j4,stringifyProps:Z4,timeoutPromise:t3,isClusterOperation:n3,getClusterUser:i3,checkGlobalSchemaTable:s3,getHomeDir:JD,getPropsFilePath:e3,promisifyPapaParse:o3,removeBOM:XD,createEventPromise:a3,checkProcessRunning:c3,checkSchemaTableExist:u3,checkSchemaExists:jD,checkTableExists:ZD,getStartOfTomorrowInSeconds:l3,getLimitKey:_3,isObject:Y4,isNotEmptyAndHasValue:q4,autoCasterIsNumberCheck:zD,backtickASTSchemaItems:d3,isPortTaken:r3,createForkArgs:f3,autoCastBoolean:E3,async_set_timeout:KD,getTableHashAttribute:h3,doesSchemaExist:m3,doesTableExist:p3,stringifyObj:S3,ms_to_time:T3,changeExtension:g3,getEnvCliRootPath:CS,noBootFile:R3,httpRequest:A3,transformReq:O3,convertToMS:b3,PACKAGE_ROOT:it.PACKAGE_ROOT};function F4(e){return e instanceof Error?e:new Error(e)}a(F4,"errorizeMessage");function Jr(e){return e==null}a(Jr,"isEmpty");function q4(e){return!Jr(e)&&(e||e===0||e===""||WD(e))}a(q4,"isNotEmptyAndHasValue");function ss(e){return Jr(e)||e.length===0||e.size===0}a(ss,"isEmptyOrZeroLength");function k4(e){if(Jr(e))return!0;for(let t=0;t<e.length;t++)if(Jr(e[t]))return!0;return!1}a(k4,"arrayHasEmptyValues");function V4(e){if(ss(e))return!0;for(let t=0;t<e.length;t++)if(ss(e[t]))return!0;return!1}a(V4,"arrayHasEmptyOrZeroLengthValues");function $4(...e){try{return e.join(Ei.sep)}catch{console.error(e)}}a($4,"buildFolderPath");function WD(e){return Jr(e)?!1:e===!0||e===!1}a(WD,"isBoolean");function Y4(e){return Jr(e)?!1:typeof e=="object"}a(Y4,"isObject");function K4(e){return ss(e)?x4:e.slice(0,-G4)}a(K4,"stripFileExtension");function W4(e){return Jr(e)||e===""||typeof e!="string"?e:$D[e]!==void 0?$D[e]:zD(e)===!0?Number(e):v4.test(e)?new Date(e):e}a(W4,"autoCast");function QD(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(QD,"autoCastJSON");function wS(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=wS(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=wS(r);n!==r&&(e[t]=n)}return e}else return QD(e)}a(wS,"autoCastJSONDeep");function zD(e){if(e.startsWith("0.")&&VD(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&VD(e))}a(zD,"autoCasterIsNumberCheck");async function Q4(e){if(ss(e))throw new Error(`Directory path: ${e} does not exist`);try{await qD.emptyDir(e),await qD.remove(e)}catch(t){throw pr.error(`Error removing files in ${e} -- ${t}`),t}}a(Q4,"removeDir");function z4(e,t){if(ss(e)){pr.info("Invalid current version sent as parameter.");return}if(ss(t)){pr.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("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(z4,"compareVersions");function J4(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(J4,"isCompatibleDataVersion");function X4(e){if(Jr(e))return e;let t=String(e);return t==="."?it.UNICODE_PERIOD:t===".."?it.UNICODE_PERIOD+it.UNICODE_PERIOD:t.replace(it.FORWARD_SLASH_REGEX,it.UNICODE_FORWARD_SLASH)}a(X4,"escapeRawValue");function j4(e){if(Jr(e))return e;let t=String(e);return t===it.UNICODE_PERIOD?".":t===it.UNICODE_PERIOD+it.UNICODE_PERIOD?"..":String(e).replace(it.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(j4,"unescapeValue");function Z4(e,t){if(Jr(e))return pr.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+$d.EOL}!ss(n)&&n[0]===";"?r+=" "+n+s+$d.EOL:ss(n)||(r+=n+"="+s+$d.EOL)}catch{pr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Z4,"stringifyProps");function JD(){let e;try{e=$d.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(JD,"getHomeDir");function e3(){let e=Ei.join(JD(),it.HDB_HOME_DIR_NAME,it.BOOT_PROPS_FILE_NAME);return YD.existsSync(e)||(e=Ei.join(__dirname,"../","hdb_boot_properties.file")),e}a(e3,"getPropsFilePath");function t3(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(t3,"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 n3(e){try{return it.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){pr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(n3,"isClusterOperation");function s3(e,t){let r=(Re(),ie(qe)).getDatabases();if(!r[e])return Kd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Kd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(s3,"checkGlobalSchemaTable");function i3(e,t){if(Jr(t)){pr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Jr(e)||ss(e)){pr.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){pr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){pr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(i3,"getClusterUser");function o3(){kD.parsePromise=function(e,t,r){return new Promise(function(n,s){kD.parse(e,{header:!0,transformHeader:XD,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(o3,"promisifyPapaParse");function XD(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(XD,"removeBOM");function a3(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;pr.info(`Got cluster status event response: ${L4(s)}`);try{i.cancel()}catch{pr.error("Error trying to cancel timeout.")}n(s)})})}a(a3,"createEventPromise");async function c3(e){let t=!0,r=0;do await KD(B4*r++),(await D4.findPs(e)).length>0&&(t=!1);while(t&&r<H4);if(t)throw new Error(`process ${e} was not started`)}a(c3,"checkProcessRunning");function u3(e,t){let r=jD(e);if(r)return r;let n=ZD(e,t);if(n)return n}a(u3,"checkSchemaTableExist");function jD(e){let{getDatabases:t}=(Re(),ie(qe));if(!t()[e])return Kd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(jD,"checkSchemaExists");function ZD(e,t){let{getDatabases:r}=(Re(),ie(qe));if(!r()[e][t])return Kd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(ZD,"checkTableExists");function l3(){let e=Yd().utc().add(1,it.MOMENT_DAYS_TAG).startOf(it.MOMENT_DAYS_TAG).unix(),t=Yd().utc().unix();return e-t}a(l3,"getStartOfTomorrowInSeconds");function _3(){return Yd().utc().format("DD-MM-YYYY")}a(_3,"getLimitKey");function d3(e){try{let t=new C4(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){pr.error("Got an error back ticking items."),pr.error(t)}}a(d3,"backtickASTSchemaItems");function f3(e){return[e]}a(f3,"createForkArgs");function E3(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(E3,"autoCastBoolean");function h3(e,t){let{getDatabases:r}=(Re(),ie(qe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(h3,"getTableHashAttribute");function m3(e){let{getDatabases:t}=(Re(),ie(qe));return t()[e]!==void 0}a(m3,"doesSchemaExist");function p3(e,t){let{getDatabases:r}=(Re(),ie(qe));return r()[e]?.[t]!==void 0}a(p3,"doesTableExist");function S3(e){try{return JSON.stringify(e)}catch{return e}}a(S3,"stringifyObj");function T3(e){let t=Yd.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(T3,"ms_to_time");function g3(e,t){let r=Ei.basename(e,Ei.extname(e));return Ei.join(Ei.dirname(e),r+t)}a(g3,"changeExtension");function CS(){if(process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=M4(process.argv);if(e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(CS,"getEnvCliRootPath");var IS;function R3(){if(IS)return IS;let e=CS();CS()&&YD.pathExistsSync(Ei.join(e,it.HDB_CONFIG_FILE))&&(IS=!0)}a(R3,"noBootFile");function A3(e,t){let r;return e.protocol==="http:"?r=P4:r=U4,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(A3,"httpRequest");function O3(e){if(!e.schema&&!e.database){e.schema=it.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(O3,"transformReq");function b3(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(b3,"convertToMS")});var re=R((Sde,iL)=>{"use strict";var DS=require("fs-extra"),uo=require("path"),tL=require("os"),y3=require("properties-reader"),yu=K(),bu=J(),ue=U(),Wd=mr(),N3="Error initializing environment manager",Qd="BOOT_PROPS_FILE_PATH",rL=!1,I3={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ws={};iL.exports={BOOT_PROPS_FILE_PATH:Qd,getHdbBasePath:w3,setHdbBasePath:C3,get:nL,initSync:L3,setProperty:Ue,initTestEnvironment:U3,setCloneVar:M3};function w3(){return ws[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(w3,"getHdbBasePath");function C3(e){ws[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(C3,"setHdbBasePath");function nL(e){let t=Wd.getConfigValue(e);return t===void 0?ws[e]:t}a(nL,"get");function Ue(e,t){I3[e]&&(ws[e]=t),Wd.updateConfigObject(e,t)}a(Ue,"setProperty");function D3(){let e;try{e=bu.getPropsFilePath(),DS.accessSync(e,DS.constants.F_OK|DS.constants.R_OK),rL=!0;let t=y3(e);return ws[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),ws[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ws[Qd]=e,!0}catch{return yu.trace(`Environment manager found no properties file at ${e}`),!1}}a(D3,"doesPropFileExist");function L3(e=!1){try{(rL||D3()||bu.noBootFile())&&!sL&&(Wd.initConfig(e),ws[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Wd.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){yu.error(N3),yu.error(t),console.error(t),process.exit(1)}}a(L3,"initSync");var sL=!1;function M3(e){sL=e}a(M3,"setCloneVar");function U3(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,u=uo.join(__dirname,"../../","unitTests");ws[Qd]=uo.join(u,"hdb_boot_properties.file"),Ue(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,uo.join(u,"settings.test")),Ue(ue.HDB_SETTINGS_NAMES.INSTALL_USER,tL.userInfo()?tL.userInfo().username:void 0),Ue(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ue(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,uo.join(u,"envDir","log")),Ue(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,uo.join(u,"envDir")),Ue(ue.CONFIG_PARAMS.STORAGE_PATH,uo.join(u,"envDir")),s&&(Ue(ue.CONFIG_PARAMS.HTTP_SECUREPORT,nL(ue.CONFIG_PARAMS.HTTP_PORT)),Ue(ue.CONFIG_PARAMS.HTTP_PORT,null)),Ue(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ue(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ue(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,bu.isEmpty(i)?!1:i),Ue(ue.CONFIG_PARAMS.HTTP_CORS,bu.isEmpty(i)?!1:i),Ue(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ue(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,uo.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ue(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,bu.isEmpty(c)?!1:c),o&&(Ue("CORS_ACCESSLIST",o),Ue(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ue(ue.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ue(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ue(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Qd}. Please check your boot props and settings files`;yu.fatal(r),yu.error(t)}}a(U3,"initTestEnvironment")});var US={};Ge(US,{loadGQLSchema:()=>B3,start:()=>MS,startOnMainThread:()=>v3});function MS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let p of d.definitions)switch(p.kind){case u.OBJECT_TYPE_DEFINITION:let v=function(P){if(P.kind==="NonNullType"){let X=v(P.type);return X.nullable=!1,X}if(P.kind==="ListType")return{type:"array",elements:v(P.type)};let H={type:P.name?.value};return Object.defineProperty(H,"location",{value:P.loc.startToken}),H};a(v,"getProperty");let T=p.name.value,b=[],g={table:null,database:null,properties:b};f.set(T,g);for(let P of p.directives){if(P.name.value==="table"){for(let k of P.arguments)g[k.name.value]=k.value.value;g.schema&&(g.database=g.schema),g.table||(g.table=T),g.audit&&(g.audit=g.audit!=="false"),g.attributes=g.properties,E.push(g)}if(P.name.value==="sealed"&&(g.sealed=!0),P.name.value==="export"){g.export=!0;for(let k of P.arguments)k.name.value==="name"&&(g.export={name:k.value.value})}}let L=!1;for(let P of p.fields){let k=v(P.type);k.name=P.name.value,b.push(k);for(let H of P.directives)if(H.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(H.name.value==="indexed")k.indexed=!0;else if(H.name.value==="relationship"){let X={};for(let Q of H.arguments)X[Q.name.value]=Q.value.value;k.relationship=X}else if(H.name.value==="createdTime")k.assignCreatedTime=!0;else if(H.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(H.name.value==="expiresAt")k.expiresAt=!0;else if(H.name.value==="allow"){let X=k.authorizedRoles=[];for(let Q of H.arguments)Q.name.value==="role"&&X.push(Q.value.value)}}g.type=T,T==="Query"&&(h=g)}function S(p){let T=f.get(p.type);T?(Object.defineProperty(p,"properties",{value:T.properties}),Object.defineProperty(p,"definition",{value:T})):p.type==="array"?S(p.elements):P3.includes(p.type)||(0,oL.getWorkerIndex)()===0&&console.error(`The type ${p.type} is unknown at line ${p.location.line}, column ${p.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let p of f.values())for(let T of p.properties)S(T);for(let p of E)p.tableClass=e(p),p.export&&(p.export.name===""?i.set((0,LS.dirname)(n),p.tableClass):i.set((0,LS.dirname)(n)+"/"+(p.export.name||p.type),p.tableClass))}}var LS,oL,P3,v3,B3,aL=ge(()=>{LS=require("path");Re();oL=B(tt()),P3=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(MS,"start");v3=MS,B3=MS({ensureTable:lt}).handleFile});async function zd(e){return H3?(Nu||(Nu=x3(F3)),(await(await Nu).import(e)).namespace):import(e)}async function x3(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Nu=new Compartment({console,Math,Date,fetch:G3,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,uL.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:qt,tables:zr,databases:st})}};let n=await(0,cL.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Nu}function G3(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 F3(){return{Resource:qt,tables:zr}}var cL,uL,H3,Nu,PS=ge(()=>{yn();Re();cL=require("fs/promises"),uL=require("path"),H3=!1;a(zd,"secureImport");a(x3,"getCompartment");a(G3,"secureOnlyFetch");a(F3,"getGlobalVars")});var BS={};Ge(BS,{handleFile:()=>q3});async function q3(e,t,r,n){let s=new Map,i=(0,lL.pathToFileURL)(r).toString(),o=await zd(i);u(o.default)&&n.set((0,vS.dirname)(t),o.default),c(o,(0,vS.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var lL,vS,_L=ge(()=>{lL=require("url");PS();vS=require("path");a(q3,"handleFile")});var xS={};Ge(xS,{start:()=>k3});function k3({resources:e}){e.set("login",HS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var HS,dL=ge(()=>{yn();a(k3,"start");HS=class extends qt{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 TL={};Ge(TL,{parse:()=>FS,streamAsJSON:()=>Iu,stringify:()=>lo});function Iu(e){return new GS({value:e})}function fL(e){return console.error(e),JSON.stringify(e.toString())}function EL(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function lo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===pL)return SL(e);if(t.resolution)return t.resolution.then(()=>lo(e));throw t}}function SL(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+=SL(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+lo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function FS(e){return Y3.test(e)?V3.parse(e):JSON.parse(e)}var hL,mL,V3,$3,pL,GS,Y3,qS=ge(()=>{hL=require("stream"),mL=B(require("json-bigint-fixes")),V3=(0,mL.default)({useNativeBigInt:!0}),$3=1e4,pL={};BigInt.prototype.toJSON=function(){throw pL};a(Iu,"streamAsJSON");GS=class extends hL.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),fL)}catch(s){yield fL(s)}else yield lo(t)}else yield lo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);EL(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>$3?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 EL(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(fL,"handleError");a(EL,"when");a(lo,"stringify");a(SL,"jsStringify");Y3=/[[,:]\s*-?\d{16,}/;a(FS,"parse")});var Jd=R((Lde,gL)=>{"use strict";var K3=Mn();gL.exports={writeTransaction:W3};function W3(e,t,r){return K3.writeTransaction(e,t,r)}a(W3,"writeTransaction")});var bL=R((Pde,OL)=>{"use strict";var Q3=qr(),z3=oi(),RL=K(),J3=un(),Ude=Jd(),X3=require("clone"),VS=require("alasql"),j3=id(),AL=require("util"),Z3=AL.promisify(z3.getTableSchema),eX=AL.promisify(Q3.search),tX=U(),kS=J();j3(VS);OL.exports={update:nX};var rX="There was a problem performing this update. Please check the logs and try again.";async function nX({statement:e,hdb_user:t}){let r=await Z3(e.table.databaseid,e.table.tableid),n=sX(e.columns);kS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=X3(s),c=kS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=VS.parse(u).statements[0],l=await eX(_),d=iX(n,l);return oX(o,d,t)}a(nX,"update");function sX(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=VS.compile(`SELECT ${r.expression.toString()} AS [${tX.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RL.error(t),new Error(rX)}}a(sX,"createUpdateRecord");function iX(e,t){return kS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(iX,"buildUpdateRecords");async function oX(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await J3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RL.error(`Error delete new_attributes from update response: ${i}`)}return s}a(oX,"updateRecords")});var NL=R((xde,yL)=>{var aX=require("alasql"),cX=qr(),uX=K(),lX=Mn(),YS=require("util"),$S=J(),_X=U(),dX=oi(),Bde=Jd(),Hde=un(),fX="record",EX="successfully deleted",hX=YS.callbackify(TX),mX=YS.promisify(cX.search),pX=YS.promisify(dX.getTableSchema);yL.exports={convertDelete:hX};function SX(e){return`${e.deleted_hashes.length} ${fX}${e.deleted_hashes.length===1?"":"s"} ${EX}`}a(SX,"generateReturnMessage");async function TX({statement:e,hdb_user:t}){let r=await pX(e.table.databaseid,e.table.tableid);$S.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=$S.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=aX.parse(o).statements[0],u={operation:_X.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await mX(c);let _=await lX.deleteRecords(u);return $S.isEmptyOrZeroLength(_.message)&&(_.message=SX(_)),delete _.txn_time,_}catch(_){throw uX.error(_),_.hdb_code?_.message:_}}a(TX,"convertDelete")});var LL=R((Fde,DL)=>{"use strict";var gX=ii(),{hdb_errors:IL}=ne(),{getDatabases:wL}=(Re(),ie(qe));DL.exports={checkSchemaExists:CL,checkSchemaTableExists:RX,schema_describe:gX};async function CL(e){if(!wL()[e])return IL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(CL,"checkSchemaExists");async function RX(e,t){let r=await CL(e);if(r)return r;if(!wL()[e][t])return IL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(RX,"checkSchemaTableExists")});var wu=R((kde,AX)=>{AX.exports={name:"harperdb",version:"4.3.4",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","cloud","enterprise","Fastify","NATS"],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.535.0","@aws-sdk/lib-storage":"3.535.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.0.4",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.10.1",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.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.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.3","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.16.0",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 XS=R((Kde,qL)=>{"use strict";var{decode:OX}=require("msgpackr"),{isMainThread:Vde,parentPort:$de,threadId:Yde}=require("worker_threads"),Cu=It(),ha=nt(),QS=U(),Zt=K(),WS=re(),bX=U(),{onMessageByType:yX}=tt(),PL=Ns(),{recordAction:NX,recordActionBinary:IX}=(Is(),ie(lu)),{publishToStream:wX}=Cu,{ConsumerEvents:ML}=require("nats"),CX=qr(),{promisify:DX}=require("util"),vL=DX(setTimeout),Zd=1e4,ef,jd,LX,MX,BL,Du=new Map,ma=new Map;qL.exports={initialize:zS,ingestConsumer:JS,setSubscription:UX,setIgnoreOrigin:BX,getDatabaseSubscriptions:vX,updateConsumer:HL};async function zS(){yX(QS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await HL(n)}),BL=!0,Zt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Cu.getNATSReferences();ef=e,jd=e.info.server_name,LX=t,MX=r}a(zS,"initialize");async function HL(e){if(e.status==="start"){let{js:t,jsm:r}=await xL(e.node_domain_name);JS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Du.get(e.stream_name+e.node_domain_name);t&&(Zt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Du.set(e.stream_name+e.node_domain_name,"close")),ma.get(e.node_domain_name)==="failed"&&ma.set(e.node_domain_name,"close")}}a(HL,"updateConsumer");var tf=new Map;function UX(e,t,r){let n=tf.get(e);n||tf.set(e,n=new Map),n.set(t,r),BL||zS().then(PX)}a(UX,"setSubscription");async function PX(){let e=await CX.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+ha.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,u=PL.createNatsTableStreamName(o,c);JS(u,n,s,r)}}}a(PX,"accessConsumers");async function xL(e){let t,r,n=1;for(;!r;)try{t=await ef.jetstream({domain:e}),r=await ef.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(ma.get(e)==="close")break;ma.set(e,"failed"),n%10===1&&Zt.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Zd?n++*100:Zd;await vL(i)}return{js:t,jsm:r}}a(xL,"connectToRemoteJS");function vX(){return tf}a(vX,"getDatabaseSubscriptions");var GL;function BX(e){GL=e}a(BX,"setIgnoreOrigin");var FL=100,UL=new Array(FL),Xd=0;async function JS(e,t,r,n){let{connection:s}=await Cu.getNATSReferences();ef=s,jd=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,jd),Zt.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(ma.get(n)==="close")break;o%10===1&&Zt.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(Zt.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Cu.createConsumer(r,e,jd,new Date(Date.now()).toISOString()));let l=o++*100<Zd?o++*100:Zd;await vL(l)}let c=!1,u;for(;!c;){if(Du.get(e+n)==="close"||ma.get(n)==="close"){Du.delete(e+n),c=!0;continue}u=await i.consume({max_messages:WS.get(QS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),Du.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===ML.ConsumerDeleted&&(await u.close(),c=!0),l.type===ML.HeartbeatsMissed){let d=l.data;Zt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===2&&(Zt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await UL[Xd],UL[Xd]=HX(l).catch(d=>{Zt.error(d)}),++Xd>=FL&&(Xd=0)}catch(l){l.message==="consumer deleted"?(Zt.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):Zt.error("Error consuming clustering ingest, restarting consumer",l)}Cu.clearClientCache(),!c&&_&&await zS()}}a(JS,"ingestConsumer");async function HX(e){let t=OX(e.data);NX(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Zt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=WS.get(QS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(ha.MSG_HEADERS.TRANSACTED_NODES)&&r.values(ha.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(ha.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!GL),IX(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(ha.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Zt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Zt.trace(`messageProcessor nats msg id: ${e.headers.get(ha.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let S=new Promise(L=>h=L),{timestamp:p,user:T,node_name:b}=f||{},g=tf.get(c)?.get(_);if(!g)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,g.send(t);else if(l.length===1&&!u)g.send({type:KS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((v,P)=>({type:KS(o),value:v,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:KS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;g.send({type:"transaction",writes:L,table:_,timestamp:p,onCommit:h,user:T,nodeName:b})}WS.get(bX.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&wX(e.subject.split(".").slice(0,-1).join("."),PL.createNatsTableStreamName(c,_),e.headers,e.data),await S}catch(o){Zt.error(o)}e.ack()}a(HX,"messageProcessor");function KS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(KS,"convertOperation")});var It=R((Zde,sM)=>{"use strict";var Pt=re();Pt.initSync();var xX=require("fs-extra"),GX=require("semver"),Uu=require("path"),{monotonicFactory:FX}=require("ulidx"),VL=FX(),qX=require("util"),$L=require("child_process"),kX=qX.promisify($L.exec),VX=$L.spawn,Vt=nt(),Ne=U(),rf=J(),xn=K(),nf=Ns(),$X=Jd(),Lu=mr(),{broadcast:YX,onMessageByType:KX,getWorkerIndex:WX}=tt(),{isMainThread:YL}=require("worker_threads"),{Encoder:QX,decode:tT}=require("msgpackr"),KL=new QX,{isEmpty:ho}=rf,WL=ln(),Qde=48*36e11;YL&&KX(Ne.ITC_EVENT_TYPES.RESTART,()=>{Sr=void 0,Eo=void 0});var{connect:zX,StorageType:JX,RetentionPolicy:XX,AckPolicy:rT,DeliverPolicy:nT,DiscardPolicy:jX,NatsConnection:zde,JetStreamManager:Jde,JetStreamClient:Xde,StringCodec:jde,JSONCodec:ZX,createInbox:sT,headers:ej,ErrorCode:kL}=require("nats"),{PACKAGE_ROOT:tj}=U(),rj=wu(),{recordAction:nj}=(Is(),ie(lu)),QL=ZX(),sj="clustering",ij=rj.engines[Vt.NATS_SERVER_NAME],oj=Uu.join(tj,"dependencies"),eT=Uu.join(oj,`${process.platform}-${process.arch}`,Vt.NATS_BINARY_NAME),jS,ZS,Mu,_o,fo;sM.exports={runCommand:zL,checkNATSServerInstalled:aj,createConnection:iT,getConnection:Pu,getJetStreamManager:vu,getJetStream:XL,getNATSReferences:is,getServerList:uj,createLocalStream:oT,listStreams:jL,deleteLocalStream:lj,getServerConfig:pa,listRemoteStreams:_j,viewStream:dj,viewStreamIterator:fj,publishToStream:Ej,request:pj,reloadNATS:aT,reloadNATSHub:Sj,reloadNATSLeaf:Tj,extractServerName:mj,requestErrorHandler:gj,createLocalTableStream:rM,createTableStreams:Oj,purgeTableStream:nM,purgeSchemaTableStreams:bj,getStreamInfo:yj,updateLocalStreams:Ij,closeConnection:cj,getJsmServerName:sf,addNatsMsgHeader:ZL,clearClientCache:JL,updateRemoteConsumer:Rj,createConsumer:eM,updateConsumerIterator:Aj};async function zL(e,t=void 0){let{stdout:r,stderr:n}=await kX(e,{cwd:t});if(n)throw new Error(n.replace(`
8
+ `,t)}var so,mD,ou,au,ES,Cd,cu,hS,Dd,pD,wd,SD,TD,gD,RD,uD,lD,AD,a4,c4,dD,fD,bD,ED,hD,l4,ND,_i,_4,Is=ge(()=>{so=require("worker_threads"),mD=B(tt());Re();ou=B(K()),au=require("path"),ES=require("fs/promises"),Cd=B(Mr()),cu=B(re()),hS=B(U());ir();(0,cu.initSync)();Dd=new Map,pD=(0,cu.get)(hS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(s4,"setAnalyticsEnabled");a(Kr,"recordAction");et.recordAnalytics=Kr;a(_n,"recordActionBinary");wd=0,SD=1e3,TD="analytics-report",gD=[];a(uu,"addAnalyticsListener");RD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(i4,"sendAnalytics");a(o4,"aggregation");uD=0,lD=0,AD=a(()=>new Promise(setImmediate),"rest");a(_D,"cleanup");a4=36e5,c4=31536e6;a(mS,"getRawAnalyticsTable");a(OD,"getAnalyticsTable");(0,mD.setChildListenerByType)(TD,yD);a(u4,"startScheduledTasks");ED=0,hD=new Map,l4=!1;a(yD,"recordAnalytics");_4=1e6;a(d4,"logAnalytics")});var ID={};Ge(ID,{Headers:()=>di,appendHeader:()=>pS});function pS(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 di,_u=ge(()=>{di=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(pS,"appendHeader")});var RS={};Ge(RS,{coerceType:()=>Ld,makeTable:()=>Pd,setServerUtilities:()=>R4,updateResource:()=>Md});function Pd(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:S}=e,{attributes:p}=e;p||(p=[]),Bb(i,u);let T=Vh(i,n,u),b=0,g,L,v={},P=Promise.resolve(),k,H,X;for(let Y of p)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(k=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(H=Y),Y.expiresAt&&(X=Y),Y.isPrimaryKey&&(v=Y);let Q,z=[],me=[],ce=1,de=2,Le={},Be={},Lt=864e5,ql,kl,Ys,YA=!1,dh,fh,wG=i.getRange({start:!1,end:!1}).constructor,CG=10,DG=6;h&&QA();class We extends qt{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=H;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),L=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let I=a(D=>{let N=this.sources.slice(0,-1);if(N=N.filter(M=>M[D]&&(!M[D].reliesOnPrototype||M.prototype[D])),N.length>0)if(N.length===1){let M=N[0];return(q,C,x)=>{if(q?.source!==M)return M[D](C,x,q)}}else return(M,q,C)=>{let x=[];for(let G of N){if(M?.source===G)break;x.push(G[D](q,C,M))}return Promise.all(x)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1],O=a(D=>{if(y[D]&&(!y[D].reliesOnPrototype||y.prototype[D]))return(N,M,q)=>{if(!N?.source)return y[D](M,q,N)}},"getApplyToCanonicalSource");return Le={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Be={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let D=!1,N=a(async(M,q)=>{let C=M.value,x=M.table?st[c][M.table]:We;if(c===Hn.SYSTEM_SCHEMA_NAME&&(M.table===Hn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Hn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),M.id===void 0&&(M.id=C[x.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let G=await x.getResource(M.id,q,_a);switch(M.type){case"put":return G._writeUpdate(C,!0,_a);case"patch":return G._writeUpdate(C,!1,_a);case"delete":return G._writeDelete(_a);case"publish":return G._writePublish(C,_a);case"invalidate":return G.invalidate(_a);default:Xe.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&S==null&&(S=!0);let q=m.subscribeOnThisThread?m.subscribeOnThisThread((0,oo.getWorkerIndex)()):(0,oo.getWorkerIndex)()===0,C=M&&q&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let x;for await(let G of C)try{if(!(G.type==="transaction"?G.writes[0]:G)){Xe.error("Bad subscription event",G);continue}if(G.source=m,x)if(G.beginTxn)x.resolve();else{N(G,x);continue}if(G.type==="end_txn")continue;let pe=ze(G,()=>{if(G.type==="transaction"){let ee=[];for(let Pe of G.writes)try{ee.push(N(Pe,G))}catch(ae){throw ae.message+=" writing "+JSON.stringify(Pe)+" of event "+JSON.stringify(G),ae}return Promise.all(ee)}else if(G.type==="define_schema"){let ee=this.attributes.slice(0),Pe;for(let ae of G.attributes)ee.find(Fe=>Fe.name===ae.name)||(ee.push(ae),Pe=!0);Pe&&(lt({table:s,database:c,attributes:ee,origin:"cluster"}),Su.signalSchemaChange(new Tu.SchemaEventMsg(process.pid,Hn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return G.beginTxn?(x=G,N(G,G),new Promise(ee=>{x.resolve=ee})):N(G,G)});D&&(await pe,Su.signalUserChange(new Tu.UserEventMsg(process.pid))),G.onCommit&&(pe?.then?pe.then(G.onCommit):G.onCommit())}catch(se){Xe.error("error in subscription handler",se)}}}catch(M){Xe.error(M)}})(),this}static getResource(m,A,I){let y=super.getResource(m,A,I);if(m!=null){nc(m);try{if(y.hasOwnProperty(_e))return y;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let O=!I?.async||i.cache?.get(m),D=An(A),N=D.getReadTxn();if(N?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Eh(m,A,{transaction:N},O,M=>{if(M?Md(y,M):y[_e]=null,A.onlyIfCached&&A.noCacheStore){if(!y.doesExist())throw new dn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let q=hh(m,M,A,y);if(q)return D?.disregardReadTxn(),y[SS]=!0,gS(q,C=>(Md(y,C),y))}return y})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(m)),O}}return y}ensureLoaded(){let m=hh(this[Me],this[Wr],this[be]);if(m)return this[SS]=!0,gS(m,A=>{this[Wr]=A,this[_e]=A.value,this[mu]=A.version})}static setTTLExpiration(m){if(typeof m=="number")f=m*1e3,E||(E=0);else if(m&&typeof m=="object")f=m.expiration*1e3,E=(m.eviction||0)*1e3,Lt=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Lt=Lt||(f+E)/4,ph()}static enableAuditing(m=!0){h=m,m&&QA(),We.audit=m}static coerceId(m){return m===""?null:Ld(m,v)}static async dropTable(){if(delete st[c][s],c===o){for(let m of p)l.remove(We.tableName+"/"+m.name),r[m.name]?.drop();l.remove(We.tableName+"/"),i.drop(),await l.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));Su.signalSchemaChange(new Tu.SchemaEventMsg(process.pid,Hn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[on])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let A=We.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(m,A){let I=$l(m);if(I?.read){if(I.isSuperUser)return!0;let y=I.attribute_permissions,O=A?.select;if(y?.length>0||YA&&O){if(A||(A={}),O){let D=y?.length>0&&TS(y,"read");A.select=O.map(N=>{let M=N.name||N;if(!D||D[M]){let q=Ys[M]?.definition?.tableClass;if(q){if(N.name||(N={name:N}),!q.prototype.allowRead.call(null,m,N))return!1;if(!N.select)return N.name}return N}}).filter(Boolean)}else A.select=y.filter(D=>D.read&&!Ys[D.attribute_name]).map(D=>D.attribute_name);return A}else return!0}}allowUpdate(m,A){let I=$l(m);if(I?.update){let y=I.attribute_permissions;if(y?.length>0){let O=TS(y,"update");for(let D in A)if(!O[D])return!1;for(let D of y){let N=D.attribute_name;!D.update&&!(N in A)&&(A[N]=this.getProperty(N))}}return!0}}allowCreate(m,A){if(this[on]){let I=$l(m);if(I?.insert){let y=I.attribute_permissions;if(y?.length>0){let O=TS(y,"insert");for(let D in A)if(!O[D])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return $l(m)?.delete}update(m,A){if(!An(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let y;return typeof m=="object"&&m&&(A?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[_e]={},this[Ot]=m):(y=this[Ot],y&&(m=Object.assign(y,m)),this[Ot]=y=m)),this._writeUpdate(this[Ot],A),this}addTo(m,A){if(typeof A=="number")this[du]===CD?this.set(m,(+this.getProperty(m)||0)+A):(this[du]||this.update(),this.set(m,new T_(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,A){if(typeof A=="number")return this.addTo(m,-A);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let A=this[be],I=this[Me];nc(I),An(this[be]).addWrite({key:I,store:i,invalidated:!0,entry:this[Wr],nodeName:this[be]?.nodeName,before:Le.invalidate?.bind(this,A,I),beforeIntermediate:Be.invalidate?.bind(this,A,I),commit:(O,D)=>{if(D?.version>O)return;let N=null;for(let M in r)N||(N={}),N[M]=this.getProperty(M);T(I,N,this[Wr],O,fu,h,this[be],0,"invalidate")}})}static evict(m,A,I){let y=this.Source,O;if(!((L||h)&&(!A||(O=i.getEntry(m),!O||!A)||O.version!==I))){if(L){if(i.hasLock(m,O.version))return;let D;for(let N in r)D||(D={}),D[N]=A[N];if(D)return T(m,D,O,I,Eu,null,null,0,null,!0)}return i.ifVersion(m,I,()=>{Vl(m,A,null)}),h?T(m,null,O,I,Eu,null,null,0,null,!0):i.remove(m,I)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=s,m.schema||=c,vD.operation(m,A)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,A,I){let y=this[be],O=An(y),D=this[Me];nc(D);let N=this[Wr];this[du]=A?CD:S4;let M={key:D,store:i,entry:N,nodeName:y?.nodeName,validate:q=>{m||(m=this[Ot]),A||m&&p_(m)?y?.source||(O.checkOverloaded(),this.validate(m,!A),H&&(m[H.name]=H.type==="Date"?new Date(q):H.type==="String"?new Date(q).toISOString():q),A&&(t&&m[t]!==D&&(m[t]=D),k&&(N?.value?m[k.name]=N?.value[k.name]:m[k.name]=k.type==="Date"?new Date(q):k.type==="String"?new Date(q).toISOString():q),m=xi(m))):O.removeWrite(M)},before:A?Le.put?()=>Le.put(y,D,m):null:Le.patch?()=>Le.patch(y,D,m):Le.put?()=>Le.put(y,D,xi(this)):null,beforeIntermediate:A?Be.put?()=>Be.put(y,D,m):null:Be.patch?()=>Be.patch(y,D,m):Be.put?()=>Be.put(y,D,xi(this)):null,commit:(q,C,x)=>{if(x){if(y&&C?.version>(y.lastModified||0)&&(y.lastModified=C.version),this[Wr]=C,C?.value?.[_e])throw new Error("Can not assign a record to a record, check for circular references");A||(this[_e]=C?.value??null)}this[Ot]=m,this[mu]=q;let G=C?.value,se=m;if(this[du]=0,C?.version>=q)if(h){let ae=C.localTime,Fe=C.version;for(;se&&(ae>q||Fe>=q&&ae>0);){let te=u.get(ae);if(!te)break;let j=Mt(te);if(Fe=j.version,Fe>q){if(j.type==="patch"){let Oe=j.getValue(i);se=h_(se,Oe)}else if(j.type==="put"||j.type==="delete")return}else if(Fe===q)return;ae=j.previousLocalTime}}else{if(A)return;se=h_(se,G)}let pe;if(A?pe=se:(this[_e]=G,pe=A?se:xi(this,se)),this[_e]=pe,pe?.[_e])throw new Error("Can not assign a record to a record, check for circular references");let ee;A||(ee=m),Vl(D,G,pe);let Pe=A?"put":"patch";T(D,pe,C,q,0,h,y,y.expiresAt||(f?f+Date.now():0),Pe,!1,ee)}};O.addWrite(M)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[on]){for await(let A of this.search(m))(await We.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[_e]?this._writeDelete(m):!1}_writeDelete(m){let A=An(this[be]),I=this[Me];nc(I);let y=this[be];return A.addWrite({key:I,store:i,resource:this,nodeName:y?.nodeName,before:Le.delete?.bind(this,y,I),beforeIntermediate:Be.delete?.bind(this,y,I),commit:(O,D,N)=>{let M=D?.value;N&&(y&&D?.version>(y.lastModified||0)&&(y.lastModified=D.version),Md(this,D)),!(D?.version>O)&&(Vl(this[Me],M),Xe.trace("Write delete entry",I,O),h||S?(T(I,null,this[Wr],O,0,h,this[be],0,"delete"),h||ph()):i.remove(this[Me]))}}),!0}search(m){let A=this[be],I=An(A);if(!m)throw new Error("No query provided");let y=m.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(y=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(y));let O,D={};function N(j,Oe){let He;switch(Oe){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Oe)}let Vn=He&&{},Ks;for(let $e of j){if($e.conditions){$e.conditions=N($e.conditions,$e.operator);continue}let Gt=$e[0]??$e.attribute,tn=Gt==null?v:Ts(p,Gt);if(tn){if(He){let $n=Nn(Gt),Ft=Vn[$n];Ft?(Ft.push($e),Ks=!0):Vn[$n]=[$e]}(tn.type||rm[$e.comparator])&&($e[1]===void 0?$e.value=q($e.value,tn):$e[1]=q($e[1],tn))}else if(Gt!=null)throw(0,dn.handleHDBError)(new Error,`${Gt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return j;if(Ks)for(let $e in Vn){let Gt=Vn[$e],tn=Gt.length;if(tn>1)for(let $n=0;$n<tn;$n++){let Ft=Gt[$n];if(Ft.comparator==="ge"||Ft.comparator==="greater_than_equal")for(let Ws=0;Ws<tn;Ws++){let Bo=Gt[Ws];(Bo.comparator==="le"||Bo.comparator==="less_than_equal")&&(Ft.comparator="between",Ft.value=[Ft.value,Bo.value],j.splice(j.indexOf(Bo),1))}if(Ft.comparator==="equals"||!Ft.comparator){for(let Ws=0;Ws<tn;Ws++)if(Ws!==$n){let Bo=Gt[Ws];j.splice(j.indexOf(Bo),1)}break}}}return j}a(N,"prepareConditions");function M(j,Oe){if(m.enforceExecutionOrder)return j;for(let He of j)He.conditions&&(He.conditions=M(He.conditions,He.operator));return j.length>1&&Oe!=="or"?(0,PD.sortBy)(j,y_(We)):j}a(M,"orderConditions");function q(j,Oe){return Array.isArray(j)?j.map(He=>Ld(He,Oe)):Ld(j,Oe)}a(q,"coerceTypedValues");let C=m.operator;(y.length>0||C)&&(y=N(y,C));let x=typeof m.sort=="object"&&m.sort,G;if(x&&C!=="or"){let j=x.attribute;if(O=y.find(Oe=>Nn(Oe.attribute)===Nn(j)),!O){if(!Ts(p,j))throw(0,dn.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);O={attribute:j,comparator:"sort"},y.push(O)}O.descending=!!x.descending}y=M(y,C),x&&(y[0]===O?x.next&&(G={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(O&&y.splice(y.indexOf(O),1),G=x));let se=m.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:y,operator:C,postOrdering:G,selectApplied:!!se};let pe=I.useReadTxn(),ee=nm(y,C,We,pe,m,A,(j,Oe)=>KA(j,se,A,pe,Oe),D),Pe=m.ensureLoaded!==!1;G||(ee=te(ee));let ae=We.transformEntryForSelect(se,A,pe,D,Pe,!0),Fe=We.transformToOrderedSelect(ee,se,G,pe,A,ae);function te(j){return m.offset||m.limit!==void 0?j.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):j}return a(te,"applyOffset"),G&&(Fe=te(Fe)),Fe.onDone=()=>{Fe.onDone=null,I.doneReadTxn()},Fe.selectApplied=!0,Fe.getColumns=()=>{if(se){let j=[];for(let Oe of se)Oe==="*"?j.push(...p.map(He=>He.name)):j.push(Oe.name||Oe);return j}return p.map(j=>j.name)},Fe}static transformToOrderedSelect(m,A,I,y,O,D){let N=new wG;if(I){m=KA(m,A,y,O,null);let M;N.iterate=function(){let C,x=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),G,se=I.dbOrderedAttribute,pe,ee,Pe=!0;function ae(te){let j=te.next&&ae(te.next),Oe=te.descending;return(He,Vn)=>{let Ks=mh(He,te.attribute,y),$e=mh(Vn,te.attribute,y),Gt=Oe?(0,ao.compareKeys)($e,Ks):(0,ao.compareKeys)(Ks,$e);return Gt===0?j?.(He,Vn)||0:Gt}}a(ae,"createComparator");let Fe=ae(I);return{async next(){let te;if(C)if(te=C.next(),te.done){if(G)return N.onDone&&N.onDone(),te}else return{value:await D.call(this,te.value)};M=[],pe&&M.push(pe);do if(te=await x.next(),te.done){if(G=!0,M.length)break;return N.onDone&&N.onDone(),te}else{let j=te.value;if(j?.then&&(j=await j),se){let Oe=mh(j,se,y);if(Pe)Pe=!1,ee=Oe;else if(Oe!==ee){ee=Oe,pe=j;break}}M.push(j)}while(!0);return I.isGrouped,M.sort(Fe),C=M[Symbol.iterator](),te=C.next(),te.done?(N.onDone&&N.onDone(),te):{value:await D.call(this,te.value)}},return(){N.onDone&&N.onDone(),x.return()},throw(){N.onDone&&N.onDone(),x.throw()}}};let q=a(C=>{if(typeof A=="object"&&Array.isArray(C.attribute))for(let x=0;x<A.length;x++){let G=A[x],se;if(G.name===C.attribute[0]){for(se=G.sort||(G.sort={});se.next;)se=se.next;se.attribute=C.attribute.slice(1),se.descending=C.descending}else G===C.attribute[0]&&(A[x]=se={name:G,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&q(C.next)},"applySortingOnSelect");q(I)}else N.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),N=N.map(D);return N}static transformEntryForSelect(m,A,I,y,O,D){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(x=>(A?.transaction?.stale&&(A.transaction.stale=!1),x?.key??x),"transform");return m===t?C:m.asArray?x=>[C(x)]:x=>({[t]:C(x)})}let N;O&&L&&!m?.every(C=>{let x;return typeof C=="object"?x=C.name:x=C,r[x]||x===t})&&(N=!0);let M,q=a(function(C){let x;if(A?.transaction?.stale&&(A.transaction.stale=!1),C!=null){if(dh=C,x=C.value||C.deref?.(),!x&&(C.key===void 0||C.deref)){if(C=Eh(C.key??C,A,{transaction:I,lazy:m?.length<4},this.isSync,G=>G),C?.then)return C.then(q.bind(this));x=C?.value}if(N&&(C.metadataFlags&(fu|Eu)||C.expiresAt&&C.expiresAt<Date.now())){let G=hh(C.key??C,C,A);if(G?.then)return G.then(q)}}if(x==null)return D?io.SKIP:x;if(m&&!(m[0]==="*"&&m.length===1)){let G,se=a((ee,Pe)=>{let ae;typeof ee=="object"?ae=ee.name:ae=ee;let Fe=Ys?.[ae],te;if(Fe){let j=y?.[ae];if(j)if(j.hasMappings){let He=Fe.from?x[Fe.from]:Nn(C.key);te=j.get(He),te||(te=[])}else te=j.fromRecord?.(x);else te=Fe(x,A,C);let Oe=a(He=>{if(He&&typeof He=="object"){let Vn=Fe.definition?.tableClass||We;M||(M={});let Ks=M[ae]||(M[ae]=Vn.transformEntryForSelect(ae===ee?null:ee.select||(Array.isArray(ee)?ee:null),A,I,j,O));if(Array.isArray(He)){let $e=[],Gt=Vn.transformToOrderedSelect(He,ee.select,typeof ee.sort=="object"&&ee.sort,A,I,Ks)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),tn=a(Ft=>{for(;!Ft.done;){if(Ft?.then)return Ft.then(tn);$e.push(Ft.value),Ft=Gt.next()}Pe($e,ae)},"nextValue"),$n=tn(Gt.next());$n&&(G||(G=[]),G.push($n));return}else if(He=Ks.call(this,He),He?.then){G||(G=[]),G.push(He.then($e=>Pe($e,ae)));return}}Pe(He,ae)},"handleResolvedValue");te?.then?(G||(G=[]),G.push(te.then(Oe))):Oe(te);return}else te=x[ae],te&&typeof te=="object"&&ae!==ee&&(te=We.transformEntryForSelect(ee.select||ee,A,I,null)({value:te}));Pe(te,ae)},"selectAttribute"),pe;if(typeof m=="string")se(m,ee=>{pe=ee});else if(Array.isArray(m))if(m.asArray)pe=[],m.forEach((ee,Pe)=>{ee==="*"?m[Pe]=x:se(ee,ae=>pe[Pe]=ae)});else{pe={};let ee=m.forceNulls;for(let Pe of m)if(Pe==="*")for(let ae in x)pe[ae]=x[ae];else se(Pe,(ae,Fe)=>{ae===void 0&&ee&&(ae=null),pe[Fe]=ae})}else throw new dn.ClientError("Invalid select"+m);return G?Promise.all(G).then(()=>pe):pe}return x},"transform");return q}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||lt({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=!m.rawEvents,I=Pb(We,this[Me]??null,function(N,M,q,C){try{let x=M.getValue?.(i,A);if(!x&&M.type==="patch"&&A){let G=i.getEntry(N);G?.version===M.version?x=G.value:x=M.getValue?.(i,!0,q),M.type="put"}this.send({id:N,timestamp:q,value:x,version:M.version,type:M.type,beginTxn:C})}catch(x){Xe.error(x)}},m.startTime||0,this[on]);this[on]&&(I.includeDescendants=!0,m.onlyChildren&&(I.onlyChildren=!0)),m.crossThreads===!1&&(I.crossThreads=!1),m.supportsTransactions&&(I.supportsTransactions=!0);let y=this[Me],O=m.previousCount;O>1e3&&(O=1e3);let D=m.startTime;if(this[on]){if(D){if(O)throw new dn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:M}of u.getRange({start:D,exclusiveStart:!0})){let q=Mt(M);if(q.tableId!==n)continue;let C=q.recordId;if(y==null||MD(y,C)){let x=q.getValue(i,A,N);I.send({id:C,timestamp:N,value:x,version:q.version,type:q.type})}I.startTime=N}}else if(O){let N=[];for(let{key:M,value:q}of u.getRange({start:"z",end:!1,reverse:!0}))try{let C=Mt(q);if(C.tableId!==n)continue;let x=C.recordId;if(y==null||MD(y,x)){let G=C.getValue(i,A,M);if(N.push({id:x,timestamp:M,value:G,version:C.version,type:C.type}),--O<=0)break}}catch(C){Xe.error("Error getting history entry",M,C)}for(let M=N.length;M>0;)I.send(N[--M]);N[0]&&(I.startTime=N[0].timestamp)}else if(!m.omitCurrent)for(let{key:N,value:M,version:q,localTime:C}of i.getRange({start:y??!1,end:y==null?void 0:[y,ao.MAXIMUM_KEY],versions:!0}))M&&I.send({id:N,timestamp:C,value:M,version:q,type:"put"})}else{O&&!D&&(D=0);let N=this[Wr]?.localTime;if(N===kh&&(i.cache?.delete(y),this[Wr]=i.getEntry(y),Xe.trace("re-retrieved record",N,this[Wr]?.localTime),N=this[Wr]?.localTime),Xe.trace("Subscription from",D,"from",y,N),D<N){let M=[],q=N;do{let C=u.get(q);if(C){m.omitCurrent=!0;let x=Mt(C),G=x.getValue(i,A,q);A&&(x.type="put"),M.push({id:y,value:G,timestamp:q,...x}),q=x.previousLocalTime}else break;O&&O--}while(q>D&&O!==0);for(let C=M.length;C>0;)I.send(M[--C]);I.startTime=N}!m.omitCurrent&&this.doesExist()&&I.send({id:y,timestamp:N,value:this,version:this[mu],type:"put"})}return m.listener&&I.on("data",m.listener),I}doesExist(){return!!(this[_e]||this[du])}publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let I=An(this[be]),y=this[Me]||null;nc(y);let O=this[be];I.addWrite({key:y,store:i,entry:this[Wr],nodeName:O?.nodeName,validate:()=>{O?.source||(I.checkOverloaded(),this.validate(m))},before:Le.publish?.bind(this,O,y,m),beforeIntermediate:Be.publish?.bind(this,O,y,m),commit:(D,N,M)=>{N===void 0&&S&&!h&&ph(),T(y,N?.value??null,N,N?.version||D,0,!0,O,N?.expiresAt,"message",!1,m)}})}validate(m,A){let I,y=a((O,D,N)=>{if(D.type&&O!=null)if(A&&O.__op__&&(O=O.value),D.properties){typeof O!="object"&&(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be an object${D.type?" ("+D.type+")":""}`);let M=D.properties;for(let q=0,C=M.length;q<C;q++){let x=M[q],G=y(O[x.name],x,N+"."+x.name);G&&(O[x.name]=G)}if(D.sealed&&O!=null&&typeof O=="object")for(let q in O)M.find(C=>C.name===q)||(I||(I=[])).push(`Property ${q} is not allowed within object in property ${N}`)}else switch(D.type){case"Int":(typeof O!="number"||O>>0!==O)&&(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a string`);break;case"Boolean":typeof O!="boolean"&&(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(D.elements)for(let M=0,q=O.length;M<q;M++){let C=O[M],x=y(C,D.elements,N+"[*]");x&&(O[M]=x)}}else(I||(I=[])).push(`Value ${Bn(O)} in property ${N} must be a Buffer or Uint8Array`);break}D.nullable===!1&&O==null&&(I||(I=[])).push(`Property ${N} is required (and not does not allow null values)`)},"validateValue");for(let O=0,D=p.length;O<D;O++){let N=p[O];if(!N.relationship&&(!A||N.name in m)){let M=y(m[N.name],N,N.name);M&&(m[N.name]=M)}}if(d)for(let O in m)p.find(D=>D.name===O)||(I||(I=[])).push(`Property ${O} is not allowed`);if(I)throw new dn.ClientError(I.join(". "))}getUpdatedTime(){return this[mu]}wasLoadedFromSource(){return L?!!this[SS]:void 0}static async addAttributes(m){let A=p.slice(0);for(let I of m){if(!I.name)throw new dn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new dn.ClientError("Attribute names cannot include backticks or forward slashes");A.push(I)}return lt({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static async removeAttributes(m){let A=p.filter(I=>!m.includes(I.name));return lt({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,I=5e3,y=1e3,O;A>I&&!m?.exactCount&&(O=y);let D=0;for(let{value:N}of i.getRange({start:!0,lazy:!0,limit:O}))N!=null&&D++;if(O){let N=D;D=0;for(let{value:Pe}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:O}))Pe!=null&&D++;let M=O*2,q=(D+N)/M,C=Math.pow((D-N+1)/O/2,2)+q*(1-q)/M,x=Math.max(Math.sqrt(C)*A,1),G=Math.round(q*A),se=Math.max(G-1.96*x,0),pe=Math.min(G+1.96*x,A),ee=Math.pow(10,Math.round(Math.log10(x)));return ee>G&&(ee=ee/10),D=Math.round(G/ee)*ee,{recordCount:D,estimatedRange:[Math.round(se),Math.round(pe)]}}return{recordCount:D}}static updatedAttributes(){Ys=this.propertyResolvers={$id:(m,A,I)=>({value:I.key}),$updatedtime:(m,A,I)=>I.version,$record:(m,A,I)=>I?{value:m}:m};for(let m of this.attributes){m.resolve=null;let A=m.relationship;if(A)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),YA=!0,A.to)m.elements?.definition?(Ys[m.name]=m.resolve=(I,y,O)=>{let D=I[A.from?A.from:t],N=m.elements.definition.tableClass;return O?Yo({attribute:A.to,value:D},An(y).getReadTxn(),!1,N,!1).asArray:N.search([{attribute:A.to,value:D}],y).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,A.from&&(m.resolve.from=A.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(A.from){let I=m.definition||m.elements?.definition;I?(Ys[m.name]=m.resolve=(y,O,D)=>{let N=y[A.from];if(N!==void 0){if(m.elements){let M,q=N.map(C=>{let x=D?I.tableClass.primaryStore.getEntry(C,{transaction:An(O).getReadTxn()}):I.tableClass.get(C,O);return x?.then&&(M=!0),x});return A.filterMissing?M?Promise.all(q).then(C=>C.filter(UD)):q.filter(UD):M?Promise.all(q):q}return D?I.tableClass.primaryStore.getEntry(N,{transaction:An(O).getReadTxn()}):I.tableClass.get(N,O)}},m.set=(y,O)=>{if(Array.isArray(O)){let D=O.map(N=>N[Me]||N[I.tableClass.primaryKey]);y[A.from]=D}else{let D=O[Me]||O[I.tableClass.primaryKey];y[A.from]=D}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=A.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`)}g_(this,this)}static async deleteHistory(m=0){let A;for(let{key:I,value:y}of u.getRange({start:0,end:m}))await hu(),Mt(y).tableId===n&&(A=u.remove(I));await A}static async*getHistory(m=0,A=1/0){for(let{key:I,value:y}of u.getRange({start:m,end:A})){await hu();let O=Mt(y);O.tableId===n&&(yield{id:O.recordId,localTime:I,version:O.version,type:O.type,value:O.getValue(i,!0,I),user:O.user})}}static async getHistoryOfRecord(m){let A=[];if(m==null)throw new Error("An id is required");let I=i.getEntry(m);if(!I)return A;let y=I.localTime;if(!y)throw new Error("The entry does not have a local audit time");let O=0;do{await hu();let D=u.get(y);if(D){let N=Mt(D);A.push({id:N.recordId,localTime:y,version:N.version,type:N.type,value:N.getValue(i,!0,y),user:N.user}),y=N.previousLocalTime}else break}while(O<1e3&&y);return A.reverse()}static cleanup(){Q?.remove()}}We.updatedAttributes();let LG=We.prototype;return LG[p4]=!0,f&&We.setTTLExpiration(f/1e3),X&&MG(),We;function Vl(Y,m,A){let I;for(let y in r){let O=r[y],D=O.isIndexing,N=A?.[y],M=m?.[y];if(N===M&&!D)continue;I=!0;let q=O.indexNulls,C=(0,pu.getIndexedValues)(N,q),x=(0,pu.getIndexedValues)(M,q);if(x?.length>0){let G=new Set(x);if(C=C?C.filter(se=>{if(G.has(se))G.delete(se);else return!0}):[],x=Array.from(G),(x.length>0||C.length>0)&&wD){let se=x.concat(C).map(pe=>({key:pe,value:Y}));O.prefetch(se,LD)}for(let se=0,pe=x.length;se<pe;se++)O.remove(x[se],Y)}else C?.length>0&&wD&&O.prefetch(C.map(G=>({key:G,value:Y})),LD);if(C)for(let G=0,se=C.length;G<se;G++)O.put(C[G],Y)}return I}a(Vl,"updateIndices");function nc(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>DD)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,ao.writeKey)(Y,T4,0)>DD)throw new Error("Primary key size is too large: "+Y.length);return!0}a(nc,"checkValidId");function Eh(Y,m,A,I,y){let O=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return y(null,Y);let D=i.getEntry(Y,A);return D&&m&&(D?.version>(m.lastModified||0)&&(m.lastModified=D.version),D?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=D.localTime)),y(D,Y)},"whenPrefetched");return I?O():ce>0?(ce--,O()):new Promise((D,N)=>{ce===0?(ce--,i.prefetch([Y],()=>{M(),q()})):(z.push(Y),me.push(q),z.length>DG&&(ce--,M()));function M(){if(z.length>0){let C=me;i.prefetch(z,()=>{ce===-1?M():ce++;for(let x of C)x()}),z=[],me=[],de>2&&de--}else ce=de,de<CG&&de++}a(M,"prefetch");function q(){try{D(O())}catch(C){N(C)}}a(q,"load")})}a(Eh,"loadLocalRecord");function $l(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return g4;let A=m[c],I,y=A?.tables;if(y)return y[s];if(c==="data"&&(I=m[s])&&!I.tables)return I}a($l,"getTablePermissions");function hh(Y,m,A,I){if(L){let y;if(A.noCache?y=!0:(m?(!m.value||m.metadataFlags&(fu|Eu)||m.expiresAt&&m.expiresAt<Date.now())&&(y=!0):y=!0,_n(!y,"cache-hit",s)),y){let O=WA(Y,m,A).then(D=>(D?.value?.[_e]&&Xe.error("Can not assign a record with a record property"),A&&(D?.version>(A.lastModified||0)&&(A.lastModified=D.version),A.lastRefreshed=Date.now()),D));if(A?.onlyIfCached||m?.value&&I?.allowStaleWhileRevalidate?.(m,Y)){if(O.catch(D=>Xe.warn(D)),A?.onlyIfCached&&!I.doesExist())throw new dn.ServerError("Entry is not cached",504);return}else return O}}}a(hh,"ensureLoadedFromSource");function An(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 A=m.next;if(!A)return m=m.next=new Gi,m.lmdbDb=i,m;m=A}while(!0)}else return new O_}a(An,"txnForContext");function mh(Y,m,A){if(!Y)return;dh=Y;let I=Y.value||Y.deref?.()||(dh=i.getEntry(Y.key))?.value;if(typeof m=="object"){let O=Ys,D=I;for(let N=0,M=m.length;N<M;N++){let q=m[N],C=O?.[q];D=C&&D?C(D,A,!0)?.value:D?.[q],O=C?.definition?.tableClass?.propertyResolvers}return D}let y=Ys[m];return y?y(I,A):I[m]}a(mh,"getAttributeValue");function KA(Y,m,A,I,y){let O=y?.length,D={transaction:I,lazy:O>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},N;function M(q,C){let x=q?.value;if(!x)return io.SKIP;for(let G=0;G<O;G++)if(!N?.includes(G)&&!y[G](x,q))return io.SKIP;return C!==void 0&&(q.key=C),q}if(a(M,"processEntry"),O>0||!Y.hasEntries){let q=Y.map(C=>{if(N=null,typeof C=="object"&&C?.key!==void 0)return O>0?M(C):C;if(C==null)return io.SKIP;for(let x=0;x<O;x++){let se=y[x].idFilter;if(se){if(!se(C))return io.SKIP;N||(N=[]),N.push(x)}}return Eh(C,A,D,!1,M)});return Array.isArray(Y)&&(q=q.filter(C=>C!==io.SKIP)),q.hasEntries=!0,q}return Y}a(KA,"transformToEntries");async function WA(Y,m,A){let I=m?.metadataFlags,y=m?.version,O,D;if(!i.attemptLock(Y,y,()=>{clearTimeout(D);let C=i.getEntry(Y);!C||!C.value||C.metadataFlags&(fu|Eu)?O(WA(Y,i.getEntry(Y),A)):O(C)}))return new Promise(C=>{O=C,D=setTimeout(()=>{i.unlock(Y,y)},m4)});let N=m?.value,M={requestContext:A,replacingRecord:N,replacingVersion:y,source:null,resourceCache:A?.resourceCache},q=A?.responseHeaders;return new Promise((C,x)=>{let G;gS(ze(M,async se=>{let pe=performance.now(),ee,Pe,ae;try{for(let Oe of We.sources)if(Oe.get&&(!Oe.get.reliesOnPrototype||Oe.prototype.get)&&(M.source=Oe,ee=await Oe.get(Y,M),ee))break;ae=I&fu;let te=M.lastModified||ae&&y;Pe=ae||te>y||!N,te||(te=(0,pu.getNextMonotonicTime)());let j=performance.now()-pe;if(Kr(j,"cache-resolution",s),q&&pS(q,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),se.timestamp=te,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),ee){if(typeof ee!="object")throw new Error("Only objects can be cached and stored in tables");typeof ee.toJSON=="function"&&(ee=ee.toJSON()),t&&ee[t]!==Y&&(ee[t]=Y)}G=!0,C({version:te,value:ee})}catch(te){te.message+=` while resolving record ${Y} for ${s}`,N&&((te.code==="ECONNRESET"||te.code==="ECONNREFUSED"||te.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(te.statusCode===500||te.statusCode===502||te.statusCode===503||te.statusCode===504))?(C({version:y,value:N}),Xe.trace(te.message,"(returned stale record)")):x(te),M.transaction.abort();return}if(A?.noCacheStore){M.transaction.abort();return}An(M).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(te,j)=>{if(j?.version!==y)return;let Oe=Vl(Y,N,ee);ee?(Be.put?.(M,Y,ee),T(Y,ee,j,te,0,h&&Pe||null,M,M.expiresAt,"put",!!ae)):(Be.delete?.(M,Y),h||S?T(Y,null,j,te,0,h&&Pe||null,M,0,"delete",!!ae):i.remove(Y,y))}})}),()=>{i.unlock(Y,y)},se=>{i.unlock(Y,y),G&&Xe.error("Error committing cache update",se)})})}a(WA,"getFromSource");function ph(){if(Lt!==ql&&(ql=Lt,(0,oo.getWorkerIndex)()===(0,oo.getWorkerCount)()-1)){if(kl&&clearTimeout(kl),!Lt)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())/Lt)*Lt+Y.getTime(),A=a(I=>{Xe.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),kl=setTimeout(()=>P=P.then(async()=>{if(A(Math.max(I+Lt,Date.now())),i.rootStore.status!=="open"){clearTimeout(kl);return}let y=50,O=new Array(y),D=0;Xe.trace(`Starting cleanup scan for ${s}`);try{let N=0;for(let{key:M,value:q,version:C,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let G;q===null&&!h&&C+h4<Date.now()?G=i.remove(M,C):x&&x+E<Date.now()&&(G=We.evict(M,q,C),N++),G&&(await O[D],O[D]=G.catch(se=>{Xe.error("Cleanup error",se)}),++D>=y&&(D=0)),await hu()}Xe.trace(`Finished cleanup scan for ${s}, evicted ${N} entries`)}catch(N){Xe.trace(`Error in cleanup scan for ${s}:`,N)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(ph,"scheduleCleanup");function QA(){Q=u?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(QA,"addDeleteRemoval");function MG(){(0,oo.getWorkerIndex)()===0&&setInterval(async()=>{if(!fh){fh=!0;try{let Y=X.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${X} must be indexed`);for(let A of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let I of m.getValues(A)){let y=i.getEntry(I);y?.value?y.value[Y]<Date.now()&&We.evict(I,y.value,y.version):i.ifVersion(I,y?.version,()=>m.remove(A,I))}await hu()}}catch(Y){Xe.error("Error in evicting old records",Y)}finally{fh=!1}}},E4).unref()}a(MG,"runRecordExpirationEviction")}function TS(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 LD(){}function R4(e){vD=e}function Ld(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!A4.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,Ud.autoCast)(e):e}function MD(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 gS(e,t,r){return e?.then?e.then(t,r):t(e)}function Md(e,t){e[Wr]=t,e[_e]=t?.value??null,e[mu]=t?.version}function UD(e){return e!=null}function Bn(e){try{return JSON.stringify(e)}catch{return e}}var Hn,io,pu,PD,gu,dn,Su,Tu,Xe,ao,oo,Ud,f4,vD,E4,h4,wD,m4,mu,p4,Wr,du,CD,S4,SS,_a,fu,Eu,T4,DD,g4,ade,A4,hu,vd=ge(()=>{Hn=B(U()),io=require("lmdb"),pu=B(Mr()),PD=require("lodash");yn();em();gu=B(re());Hb();dn=B(ne()),Su=B(As()),Tu=B(Cn());Re();I_();Xe=B(K());A_();Fi();ao=require("ordered-binary"),oo=B(tt());Xs();Ud=B(J());Ac();Is();f_();_u();f4=new Uint8Array(9);f4[8]=192;E4=6e4,h4=864e5;gu.initSync();wD=gu.get(Hn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),m4=1e4,mu=Symbol.for("version"),p4=Symbol.for("incremental-update"),Wr=Symbol("entry"),du=Symbol("is-saving"),CD=1,S4=2,SS=Symbol("loaded-from-source"),_a={isNotification:!0,ensureLoaded:!1},fu=1,Eu=8,T4=Buffer.allocUnsafeSlow(8192),DD=1978,g4={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},ade=(0,Ud.convertToMS)(gu.get(Hn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Pd,"makeTable");a(TS,"attributesAsObject");a(LD,"noop");a(R4,"setServerUtilities");A4=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Ld,"coerceType");a(MD,"isDescendantId");hu=a(()=>new Promise(setImmediate),"rest");a(gS,"when");a(Md,"updateResource");a(UD,"exists");a(Bn,"stringify")});var qe={};Ge(qe,{database:()=>Jc,databases:()=>st,dropDatabase:()=>Dp,dropTableMeta:()=>I4,getDatabases:()=>fr,getDefaultCompression:()=>Vd,getTables:()=>O4,onUpdatedTable:()=>NS,readMetaDb:()=>Ru,resetDatabases:()=>Ou,table:()=>lt,tables:()=>zr});function O4(){return Fd||fr(),zr||{}}function fr(){if(Fd)return st;Fd=!0,Ea=new Map;let e=(0,_t.getHdbBasePath)()&&(0,je.join)((0,_t.getHdbBasePath)(),Nt.DATABASES_DIR_NAME),t=(0,_t.get)(Nt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,_t.get)(Nt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Qr.existsSync)(e)?e:(0,je.join)((0,_t.getHdbBasePath)(),Nt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Qr.existsSync)(e))for(let r of(0,Qr.readdirSync)(e,{withFileTypes:!0})){let n=(0,je.basename)(r.name,".mdb");r.isFile()&&(0,je.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Ru((0,je.join)(e,r.name),null,n)}if((0,Qr.existsSync)((0,fa.getBaseSchemaPath)())){for(let r of(0,Qr.readdirSync)((0,fa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,je.join)((0,fa.getBaseSchemaPath)(),r.name),s=(0,je.join)((0,fa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Qr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,je.extname)(i.name).toLowerCase()===".mdb"){let o=(0,je.join)(s,i.name);Ru((0,je.join)(n,i.name),(0,je.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Qr.existsSync)(s))for(let o of(0,Qr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,je.extname)(o.name).toLowerCase()===".mdb"&&Ru((0,je.join)(s,o.name),(0,je.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,je.join)(c.path,(0,je.basename)(o+".mdb"));(0,Qr.existsSync)(u)&&Ru(u,o,r,null,!0)}}for(let r in st){let n=Ea.get(r);if(n){let s=st[r];r.includes("delete")&&fn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(fn.trace(`delete table class ${i}`),delete s[i])}else if(delete st[r],r==="data"){for(let s in zr)delete zr[s];delete zr[kd]}}return Ea=null,st}}function Ou(){Fd=!1;for(let[,e]of fi)e.needsDeletion=!0;fr();for(let[e,t]of fi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),fi.delete(e));return st}function Ru(e,t,r=bS,n,s){let i=new AS.default(e,!1);try{let o=fi.get(e);o?o.needsDeletion=!1:(o=(0,Hd.open)(i),fi.set(e,o));let c=new co.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Bd.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Qr.existsSync)(n)&&(i.path=n,_=(0,Hd.open)(i),_.isLegacy=!0):_=d_(o));let l=GD(r),d=l[kd],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[S,p]=E.toString().split("/");p===""?p=h.name:p||(p=S,S=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(S);let T=f.get(S);T||f.set(S,T={attributes:[]}),(p==null||h.is_hash_attribute)&&(T.primary=h),p!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:S,primary:p}=h;if(!p){for(let z of S)if(z.is_hash_attribute||z.isPrimaryKey){p=z;break}if(!p){fn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(S)}`);continue}}let T=l[E],b={},g=[],L,v,P=typeof p.audit=="boolean"?p.audit:(0,_t.get)(Nt.CONFIG_PARAMS.LOGGING_AUDITLOG),k=p.trackDeletes,H=p.expiration,X=p.eviction,Q=p.sealed;if(T)b=T.indices,g=T.attributes,T.schemaVersion++;else{L=p.tableId,L?L>=(u.get(da)||0)&&u.putSync(da,L+1):(p.tableId=L=u.get(da),L||(L=1),u.putSync(da,L+1),u.putSync(p.key,p));let z=new co.default(!p.is_hash_attribute,p.is_hash_attribute);if(z.compression=p.compression,z.compression){let me=(0,_t.get)(Nt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||xD;z.compression.threshold=me}v=a_(o.openDB(p.key,z)),v.rootStore=o,v.tableId=L}for(let z of S){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!b[z.name]){let ce=new co.default(!z.is_hash_attribute,z.is_hash_attribute);b[z.name]=o.openDB(z.key,ce),b[z.name].indexNulls=z.indexNulls}let me=g.find(ce=>ce.name===z.name);me?g.splice(g.indexOf(me),1,z):g.push(z)}}catch(me){fn.error("Error trying to update attribute",z,g,b,me)}}if(!T){T=FD(l,E,Pd({primaryStore:v,auditStore:_,audit:P,sealed:Q,expirationMS:H&&H*1e3,evictionMS:X&&X*1e3,trackDeletes:k,tableName:E,tableId:L,primaryKey:p.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:b,attributes:S,schemaDefined:p.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let z of yS)z(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function GD(e){let t=st[e];if(t||(e==="data"?t=st[e]=zr:e==="system"?Object.defineProperty(st,"system",{value:t=Object.create(null),configurable:!0}):t=st[e]=Object.create(null)),Ea&&!Ea.has(e)){let r=new Set;t[kd]=r,Ea.set(e,r)}return t}function FD(e,t,r){return e[t]=r,r}function Jc({database:e,table:t}){e||(e=bS),fr();let r=GD(e),n=(0,je.join)((0,_t.getHdbBasePath)(),Nt.DATABASES_DIR_NAME),s=(0,_t.get)(Nt.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,_t.get)(Nt.CONFIG_PARAMS.STORAGE_PATH)||((0,Qr.existsSync)(n)?n:(0,je.join)((0,_t.getHdbBasePath)(),Nt.LEGACY_DATABASES_DIR_NAME));let o=(0,je.join)(n,(i?t:e)+".mdb"),c=fi.get(o);if(!c){let u=new AS.default(o,!1);c=(0,Hd.open)(u),fi.set(o,c)}return c}async function Dp(e){if(!st[e])throw new Error("Schema does not exist");let t=st[e];for(let r in t){let s=t[r].primaryStore.rootStore;fi.delete(s.path),s.status==="open"&&(await s.close(),await qd.remove(s.path))}if(e==="data"){for(let r in zr)delete zr[r];delete zr[kd]}delete st[e]}function lt({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=bS);let d=Jc({database:t,table:e}),f=st[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,S,p,T;_==null&&(_=!0);let b=new co.default(!1);for(let H of i)H.attribute?(H.name=H.attribute,H.indexed=!0):H.attribute=H.name,H.expiresAt&&(H.indexed=!0);let g,L;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let H=d.auditStore;H||(H=d_(d)),S=i.find(me=>me.isPrimaryKey)||{},h=S.name,S.is_hash_attribute=!0,S.schemaDefined=_,S.compression=Vd(),u&&(S.trackDeletes=!0),o=S.audit=typeof o=="boolean"?o:(0,_t.get)(Nt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(S.expiration=r),n&&(S.eviction=n),typeof c=="boolean"&&(S.sealed=c),l&&(S.origins?S.origins.includes(l)||S.origins.push(l):S.origins=[l]),fn.trace(`${e} table loading, opening primary store`);let X=new co.default(!1,!0);X.compression=S.compression;let Q=e+"/",z=a_(d.openDB(Q,X));z.rootStore=d,T=d.dbisDb=d.openDB(Bd.INTERNAL_DBIS_NAME,b),z.tableId=T.get(da),z.tableId||(z.tableId=1),T.putSync(da,z.tableId+1),S.tableId=z.tableId,E=FD(f,e,Pd({primaryStore:z,auditStore:H,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),E.schemaVersion=1,g=!0,k(),T.put(Q,S)}p=E.indices,T=T||(d.dbisDb=d.openDB(Bd.INTERNAL_DBIS_NAME,b)),E.dbisDB=T;let v=[];for(let{key:H,value:X}of T.getRange({start:!0})){let[Q,z]=H.toString().split("/");if(z===""&&(z=X.name),z){if(Q!==e)continue}else z=Q;if(!i.find(ce=>ce.name===z)?.indexed&&X.indexed&&!X.isPrimaryKey){k(),g=!0,T.remove(H);let ce=E.indices[Q];ce&&v.push(ce)}}let P=[];try{for(let H of i||[]){if(H.relationship)continue;let X=e+"/"+(H.name||"");Object.defineProperty(H,"key",{value:X,configurable:!0});let Q=T.get(X);if(H.isPrimaryKey){if(Q=Q||T.get(X=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+Q.expiration||void 0)||(+n||void 0)!==(+Q.eviction||void 0)){let me=Object.assign({},Q);typeof o=="boolean"&&(o&&E.enableAuditing(o),me.audit=o),r&&(me.expiration=+r),n&&(me.eviction=+n),c!==void 0&&(me.sealed=c),g=!0,k(),T.put(X,me)}continue}Q?.attribute&&!Q.name&&(Q.indexed=!0);let z=!Q||Q.type!==H.type||Q.indexed!==H.indexed||Q.nullable!==H.nullable||JSON.stringify(Q.attributes)!==JSON.stringify(H.attributes)||JSON.stringify(Q.elements)!==JSON.stringify(H.elements);if(H.indexed){let me=new co.default(!0,!1),ce=d.openDB(X,me);(z||Q.indexingPID&&Q.indexingPID!==process.pid||Q.restartNumber<Au.workerData?.restartNumber)&&(g=!0,k(),Q=T.get(X),(z||Q.indexingPID&&Q.indexingPID!==process.pid||Q.restartNumber<Au.workerData?.restartNumber)&&(g=!0,H.indexNulls===void 0&&(H.indexNulls=!0),E.primaryStore.getStats().entryCount>0&&(H.lastIndexedKey=Q?.lastIndexedKey||!1,H.indexingPID=process.pid,ce.isIndexing=!0,Object.defineProperty(H,"dbi",{value:ce}),P.push(H))),T.put(X,H)),Q?.indexNulls&&H.indexNulls===void 0&&(H.indexNulls=!0),ce.indexNulls=H.indexNulls,p[H.name]=ce}else z&&(g=!0,k(),T.put(X,H))}}finally{L&&L()}if(g&&(E.schemaVersion++,E.updatedAttributes()),fn.trace(`${e} table loading, running index`),P.length>0||v.length>0?E.indexingOperation=N4(E,P,v):g&&xd.signalSchemaChange(new Gd.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=l,g)for(let H of yS)H(E,l!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),fn.trace(`${e} table loaded`),E;function k(){L||d.transactionSync(()=>({then(H){L=H}}))}a(k,"startTxn")}async function N4(e,t,r){try{let n=e.schemaVersion;await xd.signalSchemaChange(new Gd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,S=(0,BD.getIndexedValues)(l[h]);if(S)for(let p=0,T=S.length;p<T;p++)E.dbi.put(S[p],_)}}),s.then(()=>u--,f=>{u--,fn.error(f)}),Au.workerData&&Au.workerData.restartNumber!==HD.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>b4?await s:u>y4&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await xd.signalSchemaChange(new Gd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){fn.error("Error in indexing",n)}}function I4({table:e,database:t}){let r=Jc({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 NS(e){yS.push(e)}function Vd(){let e=(0,_t.get)(Nt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,_t.get)(Nt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,_t.get)(Nt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||xD,n={startingOffset:32};return t&&(n.dictionary=qd.readFileSync(t)),r&&(n.threshold=r),e&&n}var _t,Bd,Hd,je,Qr,fa,co,AS,Nt,qd,OS,BD,xd,Gd,Au,fn,HD,bS,kd,xD,zr,st,da,yS,Fd,fi,Ea,b4,y4,Re=ge(()=>{_t=B(re()),Bd=B(ct()),Hd=require("lmdb"),je=require("path"),Qr=require("fs"),fa=B(Qe());vd();co=B(wc()),AS=B(Cc()),Nt=B(U()),qd=B(require("fs-extra")),OS=require("../index"),BD=B(Mr()),xd=B(As()),Gd=B(Cn()),Au=require("worker_threads"),fn=B(K()),HD=B(tt());Xs();Ac();bS="data",kd=Symbol("defined-tables"),xD=((0,_t.get)(Nt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,_t.initSync)();zr=Object.create(null),st=Object.create(null);(0,OS._assignPackageExport)("databases",st);(0,OS._assignPackageExport)("tables",zr);da=Symbol.for("next-table-id"),yS=[],fi=new Map;a(O4,"getTables");a(fr,"getDatabases");a(Ou,"resetDatabases");a(Ru,"readMetaDb");a(GD,"ensureDB");a(FD,"setTable");a(Jc,"database");a(Dp,"dropDatabase");a(lt,"table");b4=1e3,y4=10;a(N4,"runIndexing");a(I4,"dropTableMeta");a(NS,"onUpdatedTable");a(Vd,"getDefaultCompression")});var J=R((mde,eL)=>{"use strict";var Ei=require("path"),YD=require("fs-extra"),pr=K(),qD=require("fs-extra"),$d=require("os"),w4=require("net"),C4=require("recursive-iterator"),it=U(),D4=IO(),kD=require("papaparse"),Yd=require("moment"),{inspect:L4}=require("util"),VD=require("is-number"),hde=require("lodash"),M4=require("minimist"),U4=require("https"),P4=require("http"),{hdb_errors:Kd}=ne(),v4=/^((\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)))$/,KD=require("util").promisify(setTimeout),B4=100,H4=5,x4="",G4=4,$D={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};eL.exports={isEmpty:Jr,isEmptyOrZeroLength:ss,arrayHasEmptyValues:k4,arrayHasEmptyOrZeroLengthValues:V4,buildFolderPath:$4,isBoolean:WD,errorizeMessage:F4,stripFileExtension:K4,autoCast:W4,autoCastJSON:QD,autoCastJSONDeep:wS,removeDir:Q4,compareVersions:z4,isCompatibleDataVersion:J4,escapeRawValue:X4,unescapeValue:j4,stringifyProps:Z4,timeoutPromise:t3,isClusterOperation:n3,getClusterUser:i3,checkGlobalSchemaTable:s3,getHomeDir:JD,getPropsFilePath:e3,promisifyPapaParse:o3,removeBOM:XD,createEventPromise:a3,checkProcessRunning:c3,checkSchemaTableExist:u3,checkSchemaExists:jD,checkTableExists:ZD,getStartOfTomorrowInSeconds:l3,getLimitKey:_3,isObject:Y4,isNotEmptyAndHasValue:q4,autoCasterIsNumberCheck:zD,backtickASTSchemaItems:d3,isPortTaken:r3,createForkArgs:f3,autoCastBoolean:E3,async_set_timeout:KD,getTableHashAttribute:h3,doesSchemaExist:m3,doesTableExist:p3,stringifyObj:S3,ms_to_time:T3,changeExtension:g3,getEnvCliRootPath:CS,noBootFile:R3,httpRequest:A3,transformReq:O3,convertToMS:b3,PACKAGE_ROOT:it.PACKAGE_ROOT};function F4(e){return e instanceof Error?e:new Error(e)}a(F4,"errorizeMessage");function Jr(e){return e==null}a(Jr,"isEmpty");function q4(e){return!Jr(e)&&(e||e===0||e===""||WD(e))}a(q4,"isNotEmptyAndHasValue");function ss(e){return Jr(e)||e.length===0||e.size===0}a(ss,"isEmptyOrZeroLength");function k4(e){if(Jr(e))return!0;for(let t=0;t<e.length;t++)if(Jr(e[t]))return!0;return!1}a(k4,"arrayHasEmptyValues");function V4(e){if(ss(e))return!0;for(let t=0;t<e.length;t++)if(ss(e[t]))return!0;return!1}a(V4,"arrayHasEmptyOrZeroLengthValues");function $4(...e){try{return e.join(Ei.sep)}catch{console.error(e)}}a($4,"buildFolderPath");function WD(e){return Jr(e)?!1:e===!0||e===!1}a(WD,"isBoolean");function Y4(e){return Jr(e)?!1:typeof e=="object"}a(Y4,"isObject");function K4(e){return ss(e)?x4:e.slice(0,-G4)}a(K4,"stripFileExtension");function W4(e){return Jr(e)||e===""||typeof e!="string"?e:$D[e]!==void 0?$D[e]:zD(e)===!0?Number(e):v4.test(e)?new Date(e):e}a(W4,"autoCast");function QD(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(QD,"autoCastJSON");function wS(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=wS(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=wS(r);n!==r&&(e[t]=n)}return e}else return QD(e)}a(wS,"autoCastJSONDeep");function zD(e){if(e.startsWith("0.")&&VD(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&VD(e))}a(zD,"autoCasterIsNumberCheck");async function Q4(e){if(ss(e))throw new Error(`Directory path: ${e} does not exist`);try{await qD.emptyDir(e),await qD.remove(e)}catch(t){throw pr.error(`Error removing files in ${e} -- ${t}`),t}}a(Q4,"removeDir");function z4(e,t){if(ss(e)){pr.info("Invalid current version sent as parameter.");return}if(ss(t)){pr.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("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(z4,"compareVersions");function J4(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(J4,"isCompatibleDataVersion");function X4(e){if(Jr(e))return e;let t=String(e);return t==="."?it.UNICODE_PERIOD:t===".."?it.UNICODE_PERIOD+it.UNICODE_PERIOD:t.replace(it.FORWARD_SLASH_REGEX,it.UNICODE_FORWARD_SLASH)}a(X4,"escapeRawValue");function j4(e){if(Jr(e))return e;let t=String(e);return t===it.UNICODE_PERIOD?".":t===it.UNICODE_PERIOD+it.UNICODE_PERIOD?"..":String(e).replace(it.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(j4,"unescapeValue");function Z4(e,t){if(Jr(e))return pr.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+$d.EOL}!ss(n)&&n[0]===";"?r+=" "+n+s+$d.EOL:ss(n)||(r+=n+"="+s+$d.EOL)}catch{pr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Z4,"stringifyProps");function JD(){let e;try{e=$d.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(JD,"getHomeDir");function e3(){let e=Ei.join(JD(),it.HDB_HOME_DIR_NAME,it.BOOT_PROPS_FILE_NAME);return YD.existsSync(e)||(e=Ei.join(__dirname,"../","hdb_boot_properties.file")),e}a(e3,"getPropsFilePath");function t3(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(t3,"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 n3(e){try{return it.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){pr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(n3,"isClusterOperation");function s3(e,t){let r=(Re(),ie(qe)).getDatabases();if(!r[e])return Kd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Kd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(s3,"checkGlobalSchemaTable");function i3(e,t){if(Jr(t)){pr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Jr(e)||ss(e)){pr.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){pr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){pr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(i3,"getClusterUser");function o3(){kD.parsePromise=function(e,t,r){return new Promise(function(n,s){kD.parse(e,{header:!0,transformHeader:XD,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(o3,"promisifyPapaParse");function XD(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(XD,"removeBOM");function a3(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;pr.info(`Got cluster status event response: ${L4(s)}`);try{i.cancel()}catch{pr.error("Error trying to cancel timeout.")}n(s)})})}a(a3,"createEventPromise");async function c3(e){let t=!0,r=0;do await KD(B4*r++),(await D4.findPs(e)).length>0&&(t=!1);while(t&&r<H4);if(t)throw new Error(`process ${e} was not started`)}a(c3,"checkProcessRunning");function u3(e,t){let r=jD(e);if(r)return r;let n=ZD(e,t);if(n)return n}a(u3,"checkSchemaTableExist");function jD(e){let{getDatabases:t}=(Re(),ie(qe));if(!t()[e])return Kd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(jD,"checkSchemaExists");function ZD(e,t){let{getDatabases:r}=(Re(),ie(qe));if(!r()[e][t])return Kd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(ZD,"checkTableExists");function l3(){let e=Yd().utc().add(1,it.MOMENT_DAYS_TAG).startOf(it.MOMENT_DAYS_TAG).unix(),t=Yd().utc().unix();return e-t}a(l3,"getStartOfTomorrowInSeconds");function _3(){return Yd().utc().format("DD-MM-YYYY")}a(_3,"getLimitKey");function d3(e){try{let t=new C4(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){pr.error("Got an error back ticking items."),pr.error(t)}}a(d3,"backtickASTSchemaItems");function f3(e){return[e]}a(f3,"createForkArgs");function E3(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(E3,"autoCastBoolean");function h3(e,t){let{getDatabases:r}=(Re(),ie(qe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(h3,"getTableHashAttribute");function m3(e){let{getDatabases:t}=(Re(),ie(qe));return t()[e]!==void 0}a(m3,"doesSchemaExist");function p3(e,t){let{getDatabases:r}=(Re(),ie(qe));return r()[e]?.[t]!==void 0}a(p3,"doesTableExist");function S3(e){try{return JSON.stringify(e)}catch{return e}}a(S3,"stringifyObj");function T3(e){let t=Yd.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(T3,"ms_to_time");function g3(e,t){let r=Ei.basename(e,Ei.extname(e));return Ei.join(Ei.dirname(e),r+t)}a(g3,"changeExtension");function CS(){if(process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=M4(process.argv);if(e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(CS,"getEnvCliRootPath");var IS;function R3(){if(IS)return IS;let e=CS();CS()&&YD.pathExistsSync(Ei.join(e,it.HDB_CONFIG_FILE))&&(IS=!0)}a(R3,"noBootFile");function A3(e,t){let r;return e.protocol==="http:"?r=P4:r=U4,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(A3,"httpRequest");function O3(e){if(!e.schema&&!e.database){e.schema=it.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(O3,"transformReq");function b3(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(b3,"convertToMS")});var re=R((Sde,iL)=>{"use strict";var DS=require("fs-extra"),uo=require("path"),tL=require("os"),y3=require("properties-reader"),yu=K(),bu=J(),ue=U(),Wd=mr(),N3="Error initializing environment manager",Qd="BOOT_PROPS_FILE_PATH",rL=!1,I3={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ws={};iL.exports={BOOT_PROPS_FILE_PATH:Qd,getHdbBasePath:w3,setHdbBasePath:C3,get:nL,initSync:L3,setProperty:Ue,initTestEnvironment:U3,setCloneVar:M3};function w3(){return ws[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(w3,"getHdbBasePath");function C3(e){ws[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(C3,"setHdbBasePath");function nL(e){let t=Wd.getConfigValue(e);return t===void 0?ws[e]:t}a(nL,"get");function Ue(e,t){I3[e]&&(ws[e]=t),Wd.updateConfigObject(e,t)}a(Ue,"setProperty");function D3(){let e;try{e=bu.getPropsFilePath(),DS.accessSync(e,DS.constants.F_OK|DS.constants.R_OK),rL=!0;let t=y3(e);return ws[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),ws[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ws[Qd]=e,!0}catch{return yu.trace(`Environment manager found no properties file at ${e}`),!1}}a(D3,"doesPropFileExist");function L3(e=!1){try{(rL||D3()||bu.noBootFile())&&!sL&&(Wd.initConfig(e),ws[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Wd.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){yu.error(N3),yu.error(t),console.error(t),process.exit(1)}}a(L3,"initSync");var sL=!1;function M3(e){sL=e}a(M3,"setCloneVar");function U3(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,u=uo.join(__dirname,"../../","unitTests");ws[Qd]=uo.join(u,"hdb_boot_properties.file"),Ue(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,uo.join(u,"settings.test")),Ue(ue.HDB_SETTINGS_NAMES.INSTALL_USER,tL.userInfo()?tL.userInfo().username:void 0),Ue(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ue(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,uo.join(u,"envDir","log")),Ue(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,uo.join(u,"envDir")),Ue(ue.CONFIG_PARAMS.STORAGE_PATH,uo.join(u,"envDir")),s&&(Ue(ue.CONFIG_PARAMS.HTTP_SECUREPORT,nL(ue.CONFIG_PARAMS.HTTP_PORT)),Ue(ue.CONFIG_PARAMS.HTTP_PORT,null)),Ue(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ue(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ue(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,bu.isEmpty(i)?!1:i),Ue(ue.CONFIG_PARAMS.HTTP_CORS,bu.isEmpty(i)?!1:i),Ue(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ue(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,uo.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ue(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,bu.isEmpty(c)?!1:c),o&&(Ue("CORS_ACCESSLIST",o),Ue(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ue(ue.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ue(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ue(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Qd}. Please check your boot props and settings files`;yu.fatal(r),yu.error(t)}}a(U3,"initTestEnvironment")});var US={};Ge(US,{loadGQLSchema:()=>B3,start:()=>MS,startOnMainThread:()=>v3});function MS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let p of d.definitions)switch(p.kind){case u.OBJECT_TYPE_DEFINITION:let v=function(P){if(P.kind==="NonNullType"){let X=v(P.type);return X.nullable=!1,X}if(P.kind==="ListType")return{type:"array",elements:v(P.type)};let H={type:P.name?.value};return Object.defineProperty(H,"location",{value:P.loc.startToken}),H};a(v,"getProperty");let T=p.name.value,b=[],g={table:null,database:null,properties:b};f.set(T,g);for(let P of p.directives){if(P.name.value==="table"){for(let k of P.arguments)g[k.name.value]=k.value.value;g.schema&&(g.database=g.schema),g.table||(g.table=T),g.audit&&(g.audit=g.audit!=="false"),g.attributes=g.properties,E.push(g)}if(P.name.value==="sealed"&&(g.sealed=!0),P.name.value==="export"){g.export=!0;for(let k of P.arguments)k.name.value==="name"&&(g.export={name:k.value.value})}}let L=!1;for(let P of p.fields){let k=v(P.type);k.name=P.name.value,b.push(k);for(let H of P.directives)if(H.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(H.name.value==="indexed")k.indexed=!0;else if(H.name.value==="relationship"){let X={};for(let Q of H.arguments)X[Q.name.value]=Q.value.value;k.relationship=X}else if(H.name.value==="createdTime")k.assignCreatedTime=!0;else if(H.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(H.name.value==="expiresAt")k.expiresAt=!0;else if(H.name.value==="allow"){let X=k.authorizedRoles=[];for(let Q of H.arguments)Q.name.value==="role"&&X.push(Q.value.value)}}g.type=T,T==="Query"&&(h=g)}function S(p){let T=f.get(p.type);T?(Object.defineProperty(p,"properties",{value:T.properties}),Object.defineProperty(p,"definition",{value:T})):p.type==="array"?S(p.elements):P3.includes(p.type)||(0,oL.getWorkerIndex)()===0&&console.error(`The type ${p.type} is unknown at line ${p.location.line}, column ${p.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let p of f.values())for(let T of p.properties)S(T);for(let p of E)p.tableClass=e(p),p.export&&(p.export.name===""?i.set((0,LS.dirname)(n),p.tableClass):i.set((0,LS.dirname)(n)+"/"+(p.export.name||p.type),p.tableClass))}}var LS,oL,P3,v3,B3,aL=ge(()=>{LS=require("path");Re();oL=B(tt()),P3=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(MS,"start");v3=MS,B3=MS({ensureTable:lt}).handleFile});async function zd(e){return H3?(Nu||(Nu=x3(F3)),(await(await Nu).import(e)).namespace):import(e)}async function x3(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Nu=new Compartment({console,Math,Date,fetch:G3,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,uL.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:qt,tables:zr,databases:st})}};let n=await(0,cL.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Nu}function G3(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 F3(){return{Resource:qt,tables:zr}}var cL,uL,H3,Nu,PS=ge(()=>{yn();Re();cL=require("fs/promises"),uL=require("path"),H3=!1;a(zd,"secureImport");a(x3,"getCompartment");a(G3,"secureOnlyFetch");a(F3,"getGlobalVars")});var BS={};Ge(BS,{handleFile:()=>q3});async function q3(e,t,r,n){let s=new Map,i=(0,lL.pathToFileURL)(r).toString(),o=await zd(i);u(o.default)&&n.set((0,vS.dirname)(t),o.default),c(o,(0,vS.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var lL,vS,_L=ge(()=>{lL=require("url");PS();vS=require("path");a(q3,"handleFile")});var xS={};Ge(xS,{start:()=>k3});function k3({resources:e}){e.set("login",HS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var HS,dL=ge(()=>{yn();a(k3,"start");HS=class extends qt{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 TL={};Ge(TL,{parse:()=>FS,streamAsJSON:()=>Iu,stringify:()=>lo});function Iu(e){return new GS({value:e})}function fL(e){return console.error(e),JSON.stringify(e.toString())}function EL(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function lo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===pL)return SL(e);if(t.resolution)return t.resolution.then(()=>lo(e));throw t}}function SL(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+=SL(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+lo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function FS(e){return Y3.test(e)?V3.parse(e):JSON.parse(e)}var hL,mL,V3,$3,pL,GS,Y3,qS=ge(()=>{hL=require("stream"),mL=B(require("json-bigint-fixes")),V3=(0,mL.default)({useNativeBigInt:!0}),$3=1e4,pL={};BigInt.prototype.toJSON=function(){throw pL};a(Iu,"streamAsJSON");GS=class extends hL.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),fL)}catch(s){yield fL(s)}else yield lo(t)}else yield lo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);EL(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>$3?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 EL(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(fL,"handleError");a(EL,"when");a(lo,"stringify");a(SL,"jsStringify");Y3=/[[,:]\s*-?\d{16,}/;a(FS,"parse")});var Jd=R((Lde,gL)=>{"use strict";var K3=Mn();gL.exports={writeTransaction:W3};function W3(e,t,r){return K3.writeTransaction(e,t,r)}a(W3,"writeTransaction")});var bL=R((Pde,OL)=>{"use strict";var Q3=qr(),z3=oi(),RL=K(),J3=un(),Ude=Jd(),X3=require("clone"),VS=require("alasql"),j3=id(),AL=require("util"),Z3=AL.promisify(z3.getTableSchema),eX=AL.promisify(Q3.search),tX=U(),kS=J();j3(VS);OL.exports={update:nX};var rX="There was a problem performing this update. Please check the logs and try again.";async function nX({statement:e,hdb_user:t}){let r=await Z3(e.table.databaseid,e.table.tableid),n=sX(e.columns);kS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=X3(s),c=kS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=VS.parse(u).statements[0],l=await eX(_),d=iX(n,l);return oX(o,d,t)}a(nX,"update");function sX(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=VS.compile(`SELECT ${r.expression.toString()} AS [${tX.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RL.error(t),new Error(rX)}}a(sX,"createUpdateRecord");function iX(e,t){return kS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(iX,"buildUpdateRecords");async function oX(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await J3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RL.error(`Error delete new_attributes from update response: ${i}`)}return s}a(oX,"updateRecords")});var NL=R((xde,yL)=>{var aX=require("alasql"),cX=qr(),uX=K(),lX=Mn(),YS=require("util"),$S=J(),_X=U(),dX=oi(),Bde=Jd(),Hde=un(),fX="record",EX="successfully deleted",hX=YS.callbackify(TX),mX=YS.promisify(cX.search),pX=YS.promisify(dX.getTableSchema);yL.exports={convertDelete:hX};function SX(e){return`${e.deleted_hashes.length} ${fX}${e.deleted_hashes.length===1?"":"s"} ${EX}`}a(SX,"generateReturnMessage");async function TX({statement:e,hdb_user:t}){let r=await pX(e.table.databaseid,e.table.tableid);$S.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=$S.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=aX.parse(o).statements[0],u={operation:_X.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await mX(c);let _=await lX.deleteRecords(u);return $S.isEmptyOrZeroLength(_.message)&&(_.message=SX(_)),delete _.txn_time,_}catch(_){throw uX.error(_),_.hdb_code?_.message:_}}a(TX,"convertDelete")});var LL=R((Fde,DL)=>{"use strict";var gX=ii(),{hdb_errors:IL}=ne(),{getDatabases:wL}=(Re(),ie(qe));DL.exports={checkSchemaExists:CL,checkSchemaTableExists:RX,schema_describe:gX};async function CL(e){if(!wL()[e])return IL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(CL,"checkSchemaExists");async function RX(e,t){let r=await CL(e);if(r)return r;if(!wL()[e][t])return IL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(RX,"checkSchemaTableExists")});var wu=R((kde,AX)=>{AX.exports={name:"harperdb",version:"4.3.5",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","cloud","enterprise","Fastify","NATS"],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.535.0","@aws-sdk/lib-storage":"3.535.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.0.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.10.1",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.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.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.3","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.16.0",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 XS=R((Kde,qL)=>{"use strict";var{decode:OX}=require("msgpackr"),{isMainThread:Vde,parentPort:$de,threadId:Yde}=require("worker_threads"),Cu=It(),ha=nt(),QS=U(),Zt=K(),WS=re(),bX=U(),{onMessageByType:yX}=tt(),PL=Ns(),{recordAction:NX,recordActionBinary:IX}=(Is(),ie(lu)),{publishToStream:wX}=Cu,{ConsumerEvents:ML}=require("nats"),CX=qr(),{promisify:DX}=require("util"),vL=DX(setTimeout),Zd=1e4,ef,jd,LX,MX,BL,Du=new Map,ma=new Map;qL.exports={initialize:zS,ingestConsumer:JS,setSubscription:UX,setIgnoreOrigin:BX,getDatabaseSubscriptions:vX,updateConsumer:HL};async function zS(){yX(QS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await HL(n)}),BL=!0,Zt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Cu.getNATSReferences();ef=e,jd=e.info.server_name,LX=t,MX=r}a(zS,"initialize");async function HL(e){if(e.status==="start"){let{js:t,jsm:r}=await xL(e.node_domain_name);JS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Du.get(e.stream_name+e.node_domain_name);t&&(Zt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Du.set(e.stream_name+e.node_domain_name,"close")),ma.get(e.node_domain_name)==="failed"&&ma.set(e.node_domain_name,"close")}}a(HL,"updateConsumer");var tf=new Map;function UX(e,t,r){let n=tf.get(e);n||tf.set(e,n=new Map),n.set(t,r),BL||zS().then(PX)}a(UX,"setSubscription");async function PX(){let e=await CX.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+ha.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,u=PL.createNatsTableStreamName(o,c);JS(u,n,s,r)}}}a(PX,"accessConsumers");async function xL(e){let t,r,n=1;for(;!r;)try{t=await ef.jetstream({domain:e}),r=await ef.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(ma.get(e)==="close")break;ma.set(e,"failed"),n%10===1&&Zt.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Zd?n++*100:Zd;await vL(i)}return{js:t,jsm:r}}a(xL,"connectToRemoteJS");function vX(){return tf}a(vX,"getDatabaseSubscriptions");var GL;function BX(e){GL=e}a(BX,"setIgnoreOrigin");var FL=100,UL=new Array(FL),Xd=0;async function JS(e,t,r,n){let{connection:s}=await Cu.getNATSReferences();ef=s,jd=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,jd),Zt.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(ma.get(n)==="close")break;o%10===1&&Zt.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(Zt.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Cu.createConsumer(r,e,jd,new Date(Date.now()).toISOString()));let l=o++*100<Zd?o++*100:Zd;await vL(l)}let c=!1,u;for(;!c;){if(Du.get(e+n)==="close"||ma.get(n)==="close"){Du.delete(e+n),c=!0;continue}u=await i.consume({max_messages:WS.get(QS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),Du.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===ML.ConsumerDeleted&&(await u.close(),c=!0),l.type===ML.HeartbeatsMissed){let d=l.data;Zt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===2&&(Zt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await UL[Xd],UL[Xd]=HX(l).catch(d=>{Zt.error(d)}),++Xd>=FL&&(Xd=0)}catch(l){l.message==="consumer deleted"?(Zt.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):Zt.error("Error consuming clustering ingest, restarting consumer",l)}Cu.clearClientCache(),!c&&_&&await zS()}}a(JS,"ingestConsumer");async function HX(e){let t=OX(e.data);NX(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Zt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=WS.get(QS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(ha.MSG_HEADERS.TRANSACTED_NODES)&&r.values(ha.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(ha.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!GL),IX(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(ha.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Zt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Zt.trace(`messageProcessor nats msg id: ${e.headers.get(ha.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let S=new Promise(L=>h=L),{timestamp:p,user:T,node_name:b}=f||{},g=tf.get(c)?.get(_);if(!g)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,g.send(t);else if(l.length===1&&!u)g.send({type:KS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((v,P)=>({type:KS(o),value:v,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:KS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;g.send({type:"transaction",writes:L,table:_,timestamp:p,onCommit:h,user:T,nodeName:b})}WS.get(bX.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&wX(e.subject.split(".").slice(0,-1).join("."),PL.createNatsTableStreamName(c,_),e.headers,e.data),await S}catch(o){Zt.error(o)}e.ack()}a(HX,"messageProcessor");function KS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(KS,"convertOperation")});var It=R((Zde,sM)=>{"use strict";var Pt=re();Pt.initSync();var xX=require("fs-extra"),GX=require("semver"),Uu=require("path"),{monotonicFactory:FX}=require("ulidx"),VL=FX(),qX=require("util"),$L=require("child_process"),kX=qX.promisify($L.exec),VX=$L.spawn,Vt=nt(),Ne=U(),rf=J(),xn=K(),nf=Ns(),$X=Jd(),Lu=mr(),{broadcast:YX,onMessageByType:KX,getWorkerIndex:WX}=tt(),{isMainThread:YL}=require("worker_threads"),{Encoder:QX,decode:tT}=require("msgpackr"),KL=new QX,{isEmpty:ho}=rf,WL=ln(),Qde=48*36e11;YL&&KX(Ne.ITC_EVENT_TYPES.RESTART,()=>{Sr=void 0,Eo=void 0});var{connect:zX,StorageType:JX,RetentionPolicy:XX,AckPolicy:rT,DeliverPolicy:nT,DiscardPolicy:jX,NatsConnection:zde,JetStreamManager:Jde,JetStreamClient:Xde,StringCodec:jde,JSONCodec:ZX,createInbox:sT,headers:ej,ErrorCode:kL}=require("nats"),{PACKAGE_ROOT:tj}=U(),rj=wu(),{recordAction:nj}=(Is(),ie(lu)),QL=ZX(),sj="clustering",ij=rj.engines[Vt.NATS_SERVER_NAME],oj=Uu.join(tj,"dependencies"),eT=Uu.join(oj,`${process.platform}-${process.arch}`,Vt.NATS_BINARY_NAME),jS,ZS,Mu,_o,fo;sM.exports={runCommand:zL,checkNATSServerInstalled:aj,createConnection:iT,getConnection:Pu,getJetStreamManager:vu,getJetStream:XL,getNATSReferences:is,getServerList:uj,createLocalStream:oT,listStreams:jL,deleteLocalStream:lj,getServerConfig:pa,listRemoteStreams:_j,viewStream:dj,viewStreamIterator:fj,publishToStream:Ej,request:pj,reloadNATS:aT,reloadNATSHub:Sj,reloadNATSLeaf:Tj,extractServerName:mj,requestErrorHandler:gj,createLocalTableStream:rM,createTableStreams:Oj,purgeTableStream:nM,purgeSchemaTableStreams:bj,getStreamInfo:yj,updateLocalStreams:Ij,closeConnection:cj,getJsmServerName:sf,addNatsMsgHeader:ZL,clearClientCache:JL,updateRemoteConsumer:Rj,createConsumer:eM,updateConsumerIterator:Aj};async function zL(e,t=void 0){let{stdout:r,stderr:n}=await kX(e,{cwd:t});if(n)throw new Error(n.replace(`
9
9
  `,""));return r.replace(`
10
10
  `,"")}a(zL,"runCommand");async function aj(){try{await xX.access(eT)}catch{return!1}let e=await zL(`${eT} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return GX.eq(t,ij)}a(aj,"checkNATSServerInstalled");async function iT(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await WL.getClusterUser();if(ho(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}xn.trace("create nats connection called");let i=await zX({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),xn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&xn.error("Error with Nats client connection, connection closed",o),JL()}),i}a(iT,"createConnection");function JL(){Sr=void 0,_o=void 0,fo=void 0,Eo=void 0}a(JL,"clearClientCache");async function cj(){Sr&&(await Sr.drain(),Sr=void 0,_o=void 0,fo=void 0,Eo=void 0)}a(cj,"closeConnection");var Sr,Eo;async function Pu(){return Eo||(Eo=iT(Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Sr=await Eo),Sr||Eo}a(Pu,"getConnection");async function vu(){if(_o)return _o;ho(Sr)&&await Pu();let{domain:e}=pa(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ho(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return _o=await Sr.jetstreamManager({domain:e,timeout:6e4}),_o}a(vu,"getJetStreamManager");async function XL(){if(fo)return fo;ho(Sr)&&await Pu();let{domain:e}=pa(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ho(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return fo=Sr.jetstream({domain:e,timeout:6e4}),fo}a(XL,"getJetStream");async function is(){let e=Sr||await Pu(),t=_o||await vu(),r=fo||await XL();return{connection:e,jsm:t,js:r}}a(is,"getNATSReferences");async function uj(e){let t=Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await WL.getClusterUser(),s=await iT(t,r,n),i=sT(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=QL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=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 rf.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(uj,"getServerList");async function oT(e,t){let{jsm:r}=await is(),n=Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:JX.File,retention:XX.Limits,subjects:t,discard:jX.Old,max_msgs:s,max_bytes:i,max_age:n})}a(oT,"createLocalStream");async function jL(){let{jsm:e}=await is(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(jL,"listStreams");async function lj(e){let{jsm:t}=await is();await t.streams.delete(e)}a(lj,"deleteLocalStream");async function _j(e){let{connection:t}=await is(),r=[],n=sT(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(QL.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(_j,"listRemoteStreams");async function dj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await is(),i=VL(),o={durable_name:i,ack_policy:rT.Explicit};t&&(o.deliver_policy=nT.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=tT(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Vt.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(dj,"viewStream");async function*fj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await is(),i=VL(),o={durable_name:i,ack_policy:rT.Explicit};t&&(o.deliver_policy=nT.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=tT(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Vt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(fj,"viewStreamIterator");async function Ej(e,t,r,n){xn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=ZL(n,r);let{js:s}=await is(),i=await sf(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:KL.encode(n);try{xn.trace(`publishToStream publishing to subject: ${o}`),nj(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return tM(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){xn.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await oT(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(Ej,"publishToStream");function ZL(e,t){t===void 0&&(t=ej());let r=Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Vt.MSG_HEADERS.ORIGIN)&&r&&t.append(Vt.MSG_HEADERS.ORIGIN,r),t}a(ZL,"addNatsMsgHeader");function pa(e){e=e.toLowerCase();let t=Uu.join(Pt.get(Ne.CONFIG_PARAMS.ROOTPATH),sj);if(e===Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ho(ZS)&&(ZS={port:Lu.getConfigFromFile(Ne.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Lu.getConfigFromFile(Ne.CONFIG_PARAMS.CLUSTERING_NODENAME)+Vt.SERVER_SUFFIX.HUB,config_file:Vt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Uu.join(t,Vt.PID_FILES.HUB),hdb_nats_path:t}),ZS;if(e===Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ho(jS)&&(jS={port:Lu.getConfigFromFile(Ne.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Lu.getConfigFromFile(Ne.CONFIG_PARAMS.CLUSTERING_NODENAME)+Vt.SERVER_SUFFIX.LEAF,config_file:Vt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Lu.getConfigFromFile(Ne.CONFIG_PARAMS.CLUSTERING_NODENAME)+Vt.SERVER_SUFFIX.LEAF,pid_file_path:Uu.join(t,Vt.PID_FILES.LEAF),hdb_nats_path:t}),jS;xn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(pa,"getServerConfig");async function eM(e,t,r,n){try{await e.consumers.add(t,{ack_policy:rT.Explicit,durable_name:r,deliver_policy:nT.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(eM,"createConsumer");async function hj(e,t,r){await e.consumers.delete(t,r)}a(hj,"removeConsumer");function mj(e){return e.split(".")[1]}a(mj,"extractServerName");async function pj(e,t,r=6e4,n=sT()){if(!rf.isObject(t))throw new Error("data param must be an object");let s=KL.encode(t),{connection:i}=await is(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return tT(c.data)}a(pj,"request");function aT(e){return new Promise(async(t,r)=>{let n=VX(eT,["--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(aT,"reloadNATS");async function Sj(){let{pid_file_path:e}=pa(Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await aT(e)}a(Sj,"reloadNATSHub");async function Tj(){let{pid_file_path:e}=pa(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await aT(e)}a(Tj,"reloadNATSLeaf");function gj(e,t,r){let n;switch(e.code){case kL.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case kL.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(gj,"requestErrorHandler");async function Rj(e,t){let r=t+Vt.SERVER_SUFFIX.LEAF,{connection:n}=await is(),{jsm:s}=await Cj(r),{schema:i,table:o}=e,c=nf.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await tM(async()=>{if(e.subscribe===!0)await eM(s,c,n.info.server_name,u);else try{await hj(s,c,n.info.server_name)}catch(_){xn.trace(_)}})}a(Rj,"updateRemoteConsumer");async function Aj(e,t,r,n){let s=nf.createNatsTableStreamName(e,t),i=r+Vt.SERVER_SUFFIX.LEAF,o={type:Ne.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!YL&&WX()<Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=XS();await c(o)}await YX(o),n==="stop"&&await rf.async_set_timeout(1e3)}a(Aj,"updateConsumerIterator");function tM(e){return $X.writeTransaction(Ne.SYSTEM_SCHEMA_NAME,Ne.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(tM,"exclusiveLock");async function rM(e,t){let r=nf.createNatsTableStreamName(e,t),n=await sf(),s=Nj(e,t,n);await oT(r,[s])}a(rM,"createLocalTableStream");async function Oj(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await rM(n,s)}}a(Oj,"createTableStreams");async function nM(e,t,r=void 0){if(Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=nf.createNatsTableStreamName(e,t),{domain:s}=pa(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Pu()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")xn.warn(n);else throw n}}a(nM,"purgeTableStream");async function bj(e,t){if(Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await nM(e,t[r])}a(bj,"purgeSchemaTableStreams");async function yj(e){return(await vu()).streams.info(e)}a(yj,"getStreamInfo");function Nj(e,t,r){return`${Vt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Nj,"createSubjectName");async function sf(){if(Mu)return Mu;if(Mu=(await vu())?.nc?.info?.server_name,Mu===void 0)throw new Error("Unable to get jetstream manager server name");return Mu}a(sf,"getJsmServerName");async function Ij(){let e=await vu(),t=await sf(),r=await jL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=wj(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");xn.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a(Ij,"updateLocalStreams");function wj(e){let{config:t}=e,r=!1,n=Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Pt.get(Ne.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Pt.get(Ne.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(wj,"updateStreamLimits");async function Cj(e){let t,r;try{t=await Sr.jetstream({domain:e}),r=await Sr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw xn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Cj,"connectToRemoteJS")});var uf=R((rfe,cM)=>{"use strict";var Sa=F_(),Ta=LL(),Dj=K(),Lj=require("uuid").v4,tfe=require("clone"),af=As(),ga=U(),Mj=require("util"),hi=Mn(),{handleHDBError:Tr,hdb_errors:Uj}=ne(),{HDB_ERROR_MSGS:of,HTTP_STATUS_CODES:gr}=Uj,{SchemaEventMsg:cf}=Cn(),iM=It(),{getDatabases:Pj}=(Re(),ie(qe)),{transformReq:Ra}=J();cM.exports={createSchema:vj,createSchemaStructure:oM,createTable:Bj,createTableStructure:aM,createAttribute:qj,dropSchema:Hj,dropTable:xj,dropAttribute:Gj,getBackup:kj};async function vj(e){let t=await oM(e);return af.signalSchemaChange(new cf(process.pid,e.operation,e.schema)),t}a(vj,"createSchema");async function oM(e){let t=Sa.schema_object(e);if(t)throw Tr(t,t.message,gr.BAD_REQUEST,void 0,void 0,!0);if(Ra(e),!await Ta.checkSchemaExists(e.schema))throw Tr(new Error,of.SCHEMA_EXISTS_ERR(e.schema),gr.BAD_REQUEST,ga.LOG_LEVELS.ERROR,of.SCHEMA_EXISTS_ERR(e.schema),!0);return await hi.createSchema(e),`database '${e.schema}' successfully created`}a(oM,"createSchemaStructure");async function Bj(e){return Ra(e),e.hash_attribute=e.primary_key??e.hash_attribute,await aM(e)}a(Bj,"createTable");async function aM(e){let t=Sa.create_table_object(e);if(t)throw Tr(t,t.message,gr.BAD_REQUEST,void 0,void 0,!0);if(Sa.validateTableResidence(e.residence),!await Ta.checkSchemaTableExists(e.schema,e.table))throw Tr(new Error,of.TABLE_EXISTS_ERR(e.schema,e.table),gr.BAD_REQUEST,ga.LOG_LEVELS.ERROR,of.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Lj(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await hi.createTable(n,e);else throw Tr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",gr.BAD_REQUEST);else await hi.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(aM,"createTableStructure");async function Hj(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Sa.schema_object(e),n=t??r;if(n)throw Tr(n,n.message,gr.BAD_REQUEST,void 0,void 0,!0);Ra(e);let s=await Ta.checkSchemaExists(e.schema);if(s)throw Tr(new Error,s,gr.NOT_FOUND,ga.LOG_LEVELS.ERROR,s,!0);let i=await Ta.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await hi.dropSchema(e),af.signalSchemaChange(new cf(process.pid,e.operation,e.schema)),await iM.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Hj,"dropSchema");async function xj(e){let t=Sa.table_object(e);if(t)throw Tr(t,t.message,gr.BAD_REQUEST,void 0,void 0,!0);Ra(e);let r=await Ta.checkSchemaTableExists(e.schema,e.table);if(r)throw Tr(new Error,r,gr.NOT_FOUND,ga.LOG_LEVELS.ERROR,r,!0);return await hi.dropTable(e),await iM.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(xj,"dropTable");async function Gj(e){let t=Sa.attribute_object(e);if(t)throw Tr(t,t.message,gr.BAD_REQUEST,void 0,void 0,!0);Ra(e);let r=await Ta.checkSchemaTableExists(e.schema,e.table);if(r)throw Tr(new Error,r,gr.NOT_FOUND,ga.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Tr(new Error,"You cannot drop a hash attribute",gr.BAD_REQUEST,void 0,void 0,!0);if(ga.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Tr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,gr.BAD_REQUEST,void 0,void 0,!0);try{return await hi.dropAttribute(e),Fj(e),af.signalSchemaChange(new cf(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Dj.error(`Got an error deleting attribute ${Mj.inspect(e)}.`),n}}a(Gj,"dropAttribute");function Fj(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(Fj,"dropAttributeFromGlobal");async function qj(e){Ra(e);let t=Pj()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Tr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,gr.BAD_REQUEST,void 0,void 0,!0);return await hi.createAttribute(e),af.signalSchemaChange(new cf(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(qj,"createAttribute");function kj(e){return hi.getBackup(e)}a(kj,"getBackup")});var lM=R((sfe,uM)=>{"use strict";var{OPERATIONS_ENUM:Vj}=U(),cT=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Vj.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};uM.exports=cT});var uT=R((afe,hM)=>{"use strict";var $j=Mn(),ofe=lM(),lf=J(),_f=U(),Yj=re(),{handleHDBError:_M,hdb_errors:Kj}=ne(),{HDB_ERROR_MSGS:dM,HTTP_STATUS_CODES:fM}=Kj,Wj=Object.values(_f.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),EM="To use this operation audit log must be enabled in harperdb-config.yaml";hM.exports=Qj;async function Qj(e){if(lf.isEmpty(e.schema))throw new Error(dM.SCHEMA_REQUIRED_ERR);if(lf.isEmpty(e.table))throw new Error(dM.TABLE_REQUIRED_ERR);if(!Yj.get(_f.CONFIG_PARAMS.LOGGING_AUDITLOG))throw _M(new Error,EM,fM.BAD_REQUEST,_f.LOG_LEVELS.ERROR,EM,!0);let t=lf.checkSchemaTableExist(e.schema,e.table);if(t)throw _M(new Error,t,fM.NOT_FOUND,_f.LOG_LEVELS.ERROR,t,!0);if(!lf.isEmpty(e.search_type)&&Wj.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await $j.readAuditLog(e)}a(Qj,"readAuditLog")});var pM=R((ufe,mM)=>{"use strict";var{OPERATIONS_ENUM:zj}=U(),lT=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=zj.GET_BACKUP,this.schema=t,this.table=r}};mM.exports=lT});var gM=R((ffe,TM)=>{"use strict";var Jj=Mn(),_fe=pM(),_T=J(),Xj=U(),dfe=re(),{handleHDBError:jj,hdb_errors:Zj}=ne(),{HDB_ERROR_MSGS:SM,HTTP_STATUS_CODES:eZ}=Zj;TM.exports=tZ;async function tZ(e){if(_T.isEmpty(e.schema))throw new Error(SM.SCHEMA_REQUIRED_ERR);if(_T.isEmpty(e.table))throw new Error(SM.TABLE_REQUIRED_ERR);let t=_T.checkSchemaTableExist(e.schema,e.table);if(t)throw jj(new Error,t,eZ.NOT_FOUND,Xj.LOG_LEVELS.ERROR,t,!0);return await Jj.getBackup(read_audit_log_object)}a(tZ,"getBackup")});var NM=R((hfe,yM)=>{var mi=require("validate.js"),AM=rt(),Aa=U(),{handleHDBError:rZ,hdb_errors:nZ}=ne(),{HDB_ERROR_MSGS:dt,HTTP_STATUS_CODES:sZ}=nZ,dT=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),iZ={STRUCTURE_USER:"structure_user"},RM=Object.values(Aa.ROLE_TYPES_ENUM),oZ="attribute_permissions",aZ="attribute_name",{PERMS_CRUD_ENUM:Oa}=Aa,cZ=[oZ,...Object.values(Oa)],OM=[Oa.READ,Oa.INSERT,Oa.UPDATE],uZ=[aZ,...OM];function lZ(e){let t=dT();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,bM(e,t)}a(lZ,"addRoleValidation");function _Z(e){let t=dT();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,bM(e,t)}a(_Z,"alterRoleValidation");function dZ(e){let t=dT();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,AM.validateObject(e,t)}a(dZ,"dropRoleValidation");var fZ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function bM(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)fZ.includes(n[o])||s.push(n[o]);s.length>0&&St(dt.INVALID_ROLE_JSON_KEYS(s),r);let i=AM.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{St(o,r)}),e.permission){let o=EZ(e);o&&St(o,r),RM.forEach(c=>{e.permission[c]&&!mi.isBoolean(e.permission[c])&&St(dt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(RM.indexOf(o)<0){if(o===iZ.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||St(dt.SCHEMA_NOT_FOUND(d),r)}continue}St(dt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){St(dt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){St(dt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{cZ.includes(l)||St(dt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Oa).forEach(l=>{mi.isDefined(_[l])?mi.isBoolean(_[l])||St(dt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):St(dt.TABLE_PERM_MISSING(l),r,o,u)}),mi.isDefined(_.attribute_permissions)){if(!mi.isArray(_.attribute_permissions)){St(dt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{St(dt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(S=>{!uZ.includes(S)&&S!==Oa.DELETE&&St(dt.INVALID_ATTR_PERM_KEY(S),r,o,u)}),!mi.isDefined(E.attribute_name)){St(dt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){St(dt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}OM.forEach(S=>{mi.isDefined(E[S])?mi.isBoolean(E[S])||St(dt.ATTR_PERM_NOT_BOOLEAN(S,h),r,o,u):St(dt.ATTR_PERM_MISSING(S,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;St(dt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return hZ(r)}a(bM,"customValidate");yM.exports={addRoleValidation:lZ,alterRoleValidation:_Z,dropRoleValidation:dZ};function EZ(e){let{operation:t,permission:r}=e;if(t===Aa.OPERATIONS_ENUM.ADD_ROLE||t===Aa.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 dt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Aa.ROLE_TYPES_ENUM.SUPER_USER:Aa.ROLE_TYPES_ENUM.CLUSTER_USER;return dt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(EZ,"validateNoSUPerms");function hZ(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:dt.ROLE_PERMS_ERROR,...e};return rZ(new Error,n,sZ.BAD_REQUEST)}else return null}a(hZ,"generateRolePermResponse");function St(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(St,"addPermError")});var ST=R((pfe,DM)=>{"use strict";var IM=un(),wM=qr(),mZ=ji(),ET=NM(),hT=As(),pZ=require("uuid").v4,SZ=require("util"),df=U(),TZ=J(),mT=wM.searchByValue,gZ=wM.searchByHash,RZ=SZ.promisify(mZ.delete),AZ=Xn(),OZ=ta(),{hdb_errors:bZ,handleHDBError:mo}=ne(),{HDB_ERROR_MSGS:CM,HTTP_STATUS_CODES:Bu}=bZ,{UserEventMsg:pT}=Cn();DM.exports={addRole:yZ,alterRole:NZ,dropRole:IZ,listRoles:wZ};function fT(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(fT,"scrubRoleDetails");async function yZ(e){let t=ET.addRoleValidation(e);if(t)throw t;e=fT(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 mT(r)||[])}catch(i){throw mo(i)}if(n&&n.length>0)throw mo(new Error,CM.ROLE_ALREADY_EXISTS(e.role),Bu.CONFLICT,void 0,void 0,!0);e.id||(e.id=pZ());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await IM.insert(s),hT.signalUserChange(new pT(process.pid)),e=fT(e),e}a(yZ,"addRole");async function NZ(e){let t=ET.alterRoleValidation(e);if(t)throw t;e=fT(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await IM.update(r)}catch(s){throw mo(s)}if(n&&n?.message==="updated 0 of 1 records")throw mo(new Error,"Invalid role id",Bu.BAD_REQUEST,void 0,void 0,!0);return await hT.signalUserChange(new pT(process.pid)),e}a(NZ,"alterRole");async function IZ(e){let t=ET.dropRoleValidation(e);if(t)throw mo(new Error,t,Bu.BAD_REQUEST,void 0,void 0,!0);let r=new OZ(df.SYSTEM_SCHEMA_NAME,df.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await gZ(r));if(n.length===0)throw mo(new Error,CM.ROLE_NOT_FOUND,Bu.NOT_FOUND,void 0,void 0,!0);let s=new AZ(df.SYSTEM_SCHEMA_NAME,df.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await mT(s)),o=!1;if(TZ.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw mo(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Bu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await RZ(c),hT.signalUserChange(new pT(process.pid)),`${n[0].role} successfully deleted`}a(IZ,"dropRole");async function wZ(){return mT({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(wZ,"listRoles")});var PM=R((Tfe,UM)=>{"use strict";var CZ=re(),pi=require("joi"),DZ=rt(),LM=require("moment"),LZ=require("fs-extra"),TT=require("path"),MZ=require("lodash"),Hu=U(),{LOG_LEVELS:po}=U(),UZ="YYYY-MM-DD hh:mm:ss",PZ=TT.resolve(__dirname,"../logs");UM.exports=function(e){return DZ.validateBySchema(e,vZ)};var vZ=pi.object({from:pi.custom(MM),until:pi.custom(MM),level:pi.valid(po.NOTIFY,po.FATAL,po.ERROR,po.WARN,po.INFO,po.DEBUG,po.TRACE),order:pi.valid("asc","desc"),limit:pi.number().min(1),start:pi.number().min(0),log_name:pi.custom(BZ)});function MM(e,t){if(LM(e,LM.ISO_8601).format(UZ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(MM,"validateDatetime");function BZ(e,t){if(MZ.invert(Hu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=CZ.get(Hu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Hu.LOG_NAMES.HDB:e,i=s===Hu.LOG_NAMES.INSTALL?TT.join(PZ,Hu.LOG_NAMES.INSTALL):TT.join(n,s);return LZ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(BZ,"validateReadLogPath")});var RT=R((Rfe,BM)=>{"use strict";var ff=U(),HZ=K(),xZ=re(),GZ=PM(),gT=require("path"),vM=require("fs-extra"),{once:FZ}=require("events"),{handleHDBError:qZ,hdb_errors:kZ}=ne(),{PACKAGE_ROOT:VZ}=U(),$Z=gT.join(VZ,"logs"),YZ=1e3,KZ=200;BM.exports=WZ;async function WZ(e){let t=GZ(e);if(t)throw qZ(t,t.message,kZ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=xZ.get(ff.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?ff.LOG_NAMES.HDB:e.log_name,s=n===ff.LOG_NAMES.INSTALL?gT.join($Z,ff.LOG_NAMES.INSTALL):gT.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?YZ:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,S=0;f==="desc"&&!u&&!l&&(S=Math.max(vM.statSync(s).size-(h+5)*KZ,0));let p=vM.createReadStream(s,{start:S});p.on("error",P=>{HZ.error(P)});let T=0,b=[],g="",L;p.on("data",P=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;P=g+P;let H=0,X;for(;(X=k.exec(P))&&!p.destroyed;){L&&(L.message=P.slice(H,X.index),v(L));let[Q,z,me]=X,ce=me.split("] ["),de=ce[0],Le=ce[1];ce.splice(0,2),L={timestamp:z,thread:de,level:Le,tags:ce,message:""},H=X.index+Q.length}g=P.slice(H)}),p.on("end",P=>{p.destroyed||L&&(L.message=g.trim(),v(L))}),p.resume();function v(P){let k,H,X;switch(!0){case(i&&c&&_):k=new Date(P.timestamp),H=new Date(u),X=new Date(l),P.level===o&&k>=H&&k<=X&&T<E?T++:P.level===o&&k>=H&&k<=X&&(Si(P,f,b),T++,T===h&&p.destroy());break;case(i&&c):k=new Date(P.timestamp),H=new Date(u),P.level===o&&k>=H&&T<E?T++:P.level===o&&k>=H&&(Si(P,f,b),T++,T===h&&p.destroy());break;case(i&&_):k=new Date(P.timestamp),X=new Date(l),P.level===o&&k<=X&&T<E?T++:P.level===o&&k<=X&&(Si(P,f,b),T++,T===h&&p.destroy());break;case(c&&_):k=new Date(P.timestamp),H=new Date(u),X=new Date(l),k>=H&&k<=X&&T<E?T++:k>=H&&k<=X&&(Si(P,f,b),T++,T===h&&p.destroy());break;case i:P.level===o&&T<E?T++:P.level===o&&(Si(P,f,b),T++,T===h&&p.destroy());break;case c:k=new Date(P.timestamp),H=new Date(u),k>=H&&T<E?T++:k>=H&&T>=E&&(Si(P,f,b),T++,T===h&&p.destroy());break;case _:k=new Date(P.timestamp),X=new Date(l),k<=X&&T<E?T++:k<=X&&T>=E&&(Si(P,f,b),T++,T===h&&p.destroy());break;default:T<E?T++:(Si(P,f,b),T++,T===h&&p.destroy())}}return a(v,"onLogMessage"),await FZ(p,"close"),b}a(WZ,"readLog");function Si(e,t,r){t==="desc"?QZ(e,r):t==="asc"?zZ(e,r):r.push(e)}a(Si,"pushLineToResult");function QZ(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(QZ,"insertDescending");function zZ(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(zZ,"insertAscending")});var Ef=R((Nfe,FM)=>{"use strict";var AT=require("joi"),{string:xu,boolean:HM,date:JZ}=AT.types(),XZ=rt(),{validateSchemaExists:Ofe,validateTableExists:bfe,validateSchemaName:yfe}=zn(),jZ=U(),ZZ=nt(),xM=re();xM.initSync();var e5=xu.invalid(xM.get(jZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(ZZ.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(),GM={operation:xu.valid("add_node","update_node","set_node_replication"),node_name:e5,subscriptions:AT.array().items({table:xu.optional(),schema:xu.optional(),database:xu.optional(),subscribe:HM.required(),publish:HM.required().custom(r5),start_time:JZ.iso()}).min(1).required()};function t5(e){return XZ.validateBySchema(e,AT.object(GM))}a(t5,"addUpdateNodeValidator");function r5(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(r5,"checkForFalsy");FM.exports={addUpdateNodeValidator:t5,validation_schema:GM}});var kM=R((wfe,qM)=>{var n5=rt(),s5={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};qM.exports=function(e){return n5.validateObject(e,s5)}});var bT=R((Cfe,VM)=>{"use strict";var i5=U().OPERATIONS_ENUM,OT=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=i5.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};VM.exports=OT});var YM=R((Lfe,$M)=>{"use strict";var o5={OPERATION:"operation",REFRESH:"refresh"},yT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},NT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};$M.exports={JWTTokens:yT,TOKEN_TYPE_ENUM:o5,JWTRSAKeys:NT}});var qu=R((Ufe,zM)=>{"use strict";var Fu=require("jsonwebtoken"),IT=require("fs-extra"),wT=J(),En=U(),{handleHDBError:Rr,hdb_errors:a5}=ne(),{HTTP_STATUS_CODES:Ar,AUTHENTICATION_ERROR_MSGS:Or}=a5,Gu=K(),KM=md(),LT=ln(),c5=un().update,u5=bT(),l5=As(),{UserEventMsg:_5}=Cn(),Ti=re();Ti.initSync();var CT=require("path"),{JWTTokens:d5,JWTRSAKeys:f5,TOKEN_TYPE_ENUM:hf}=YM(),E5=Ti.get(En.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ti.get(En.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",h5=Ti.get(En.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ti.get(En.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",mf="RS256",DT;zM.exports={createTokens:m5,validateOperationToken:S5,refreshOperationToken:p5,validateRefreshToken:QM};async function m5(e){if(wT.isEmpty(e)||typeof e!="object")throw Rr(new Error,Or.INVALID_AUTH_OBJECT,Ar.BAD_REQUEST,void 0,void 0,!0);if(wT.isEmpty(e.username))throw Rr(new Error,Or.USERNAME_REQUIRED,Ar.BAD_REQUEST,void 0,void 0,!0);if(wT.isEmpty(e.password))throw Rr(new Error,Or.PASSWORD_REQUIRED,Ar.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await LT.findAndValidateUser(e.username,e.password),!t)throw Rr(new Error,Or.INVALID_CREDENTIALS,Ar.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Gu.error(f),Rr(new Error,Or.INVALID_CREDENTIALS,Ar.UNAUTHORIZED,void 0,void 0,!0)}let r=await pf(),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 WM(i,r.private_key,r.passphrase),c=await Fu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:h5,algorithm:mf,subject:hf.REFRESH}),u=KM.hash(c),_=new u5(En.SYSTEM_SCHEMA_NAME,En.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await c5(_)}catch(f){Gu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Rr(new Error,Or.REFRESH_TOKEN_SAVE_FAILED,Ar.INTERNAL_SERVER_ERROR);return l5.signalUserChange(new _5(process.pid)),new d5(o,c)}a(m5,"createTokens");async function WM(e,t,r){return await Fu.sign(e,{key:t,passphrase:r},{expiresIn:E5,algorithm:mf,subject:hf.OPERATION})}a(WM,"signOperationToken");async function pf(){if(DT===void 0)try{let e=CT.join(Ti.getHdbBasePath(),En.LICENSE_KEY_DIR_NAME,En.JWT_ENUM.JWT_PASSPHRASE_NAME),t=CT.join(Ti.getHdbBasePath(),En.LICENSE_KEY_DIR_NAME,En.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=CT.join(Ti.getHdbBasePath(),En.LICENSE_KEY_DIR_NAME,En.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await IT.readFile(e)).toString(),s=(await IT.readFile(t)).toString(),i=(await IT.readFile(r)).toString();DT=new f5(i,s,n)}catch(e){throw Gu.error(e),Rr(new Error,Or.NO_ENCRYPTION_KEYS,Ar.INTERNAL_SERVER_ERROR)}return DT}a(pf,"getJWTRSAKeys");async function p5(e){if(!e)throw Rr(new Error,Or.INVALID_BODY,Ar.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Rr(new Error,Or.REFRESH_TOKEN_REQUIRED,Ar.BAD_REQUEST,void 0,void 0,!0);await QM(e.refresh_token);let t=await pf(),r=await Fu.decode(e.refresh_token);return{operation_token:await WM({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(p5,"refreshOperationToken");async function S5(e){try{let t=await pf(),r=await Fu.verify(e,t.public_key,{algorithms:mf,subject:hf.OPERATION});return await LT.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Gu.warn(t),t.name&&t.name==="TokenExpiredError"?Rr(new Error,Or.TOKEN_EXPIRED,Ar.FORBIDDEN):Rr(new Error,Or.INVALID_TOKEN,Ar.UNAUTHORIZED)}}a(S5,"validateOperationToken");async function QM(e){let t;try{let r=await pf(),n=await Fu.verify(e,r.public_key,{algorithms:mf,subject:hf.REFRESH});t=await LT.findAndValidateUser(n.username,void 0,!1)}catch(r){throw Gu.warn(r),r.name&&r.name==="TokenExpiredError"?Rr(new Error,Or.TOKEN_EXPIRED,Ar.FORBIDDEN):Rr(new Error,Or.INVALID_TOKEN,Ar.UNAUTHORIZED)}if(!KM.validate(t.refresh_token,e))throw Rr(new Error,Or.INVALID_TOKEN,Ar.UNAUTHORIZED);return t}a(QM,"validateRefreshToken")});var MT=R((Bfe,jM)=>{"use strict";var T5=kM(),ba=require("passport"),g5=require("passport-local").Strategy,R5=require("passport-http").BasicStrategy,A5=require("util"),O5=ln(),XM=A5.callbackify(O5.findAndValidateUser),vfe=Lr(),b5=U(),JM=qu();ba.use(new g5(function(e,t,r){XM(e,t,r)}));ba.use(new R5(function(e,t,r){XM(e,t,r)}));ba.serializeUser(function(e,t){t(null,e)});ba.deserializeUser(function(e,t){t(null,e)});function y5(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":ba.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===b5.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?JM.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):JM.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ba.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(y5,"authorize");function N5(e,t){let r=T5(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(N5,"checkPermissions");jM.exports={authorize:y5,checkPermissions:N5}});var ya=R((xfe,ZM)=>{"use strict";var UT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},PT=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};ZM.exports={Node:UT,NodeSubscription:PT}});var tU=R((Ffe,eU)=>{"use strict";var I5=U().OPERATIONS_ENUM,vT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=I5.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};eU.exports=vT});var ku=R((kfe,rU)=>{"use strict";var BT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},HT=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)}};rU.exports={RemotePayloadObject:BT,RemotePayloadSubscription:HT}});var sU=R(($fe,nU)=>{"use strict";var xT=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}};nU.exports=xT});var aU=R((zfe,oU)=>{"use strict";var w5=sU(),Kfe=ct(),iU=Ye(),C5=K(),{getSchemaPath:Wfe,getTransactionAuditStorePath:Qfe}=Qe(),{getDatabases:D5}=(Re(),ie(qe));oU.exports=L5;async function L5(e){let t=new w5;try{let r=D5()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await iU.environmentDataSize(schema_path,e.name),o=await iU.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){C5.warn(`unable to stat table dbi due to ${r}`)}return t}a(L5,"lmdbGetTableSize")});var uU=R((Xfe,cU)=>{"use strict";var GT=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}};cU.exports=GT});var Na=R((rEe,EU)=>{"use strict";var M5=require("fs-extra"),U5=require("path"),er=require("systeminformation"),gi=K(),lU=It(),Zfe=nt(),Tf=U(),P5=aU(),v5=ii(),{getThreadInfo:_U}=tt(),zT=re();zT.initSync();var B5=uU(),{openEnvironment:eEe}=Ye(),{getSchemaPath:tEe}=Qe(),{database:H5,databases:dU}=(Re(),ie(qe)),Sf;EU.exports={getHDBProcessInfo:VT,getNetworkInfo:YT,getDiskInfo:$T,getMemoryInfo:kT,getCPUInfo:qT,getTimeInfo:FT,getSystemInformation:KT,systemInformation:x5,getTableSize:WT,getMetrics:QT};function FT(){return er.time()}a(FT,"getTimeInfo");async function qT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await er.cpu();l.cpu_speed=await er.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:S,raw_currentload_user:p,cpus:T,...b}=await er.currentLoad();return b.cpus=[],T.forEach(g=>{let{raw_load:L,raw_load_idle:v,raw_load_irq:P,raw_load_nice:k,raw_load_system:H,raw_load_user:X,...Q}=g;b.cpus.push(Q)}),l.current_load=b,l}catch(e){return gi.error(`error in getCPUInfo: ${e}`),{}}}a(qT,"getCPUInfo");async function kT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await er.mem();return Object.assign(s,process.memoryUsage())}catch(e){return gi.error(`error in getMemoryInfo: ${e}`),{}}}a(kT,"getMemoryInfo");async function VT(){let e={core:[],clustering:[]};try{let t=await er.processes(),r;try{r=Number.parseInt(await M5.readFile(U5.join(zT.get(Tf.CONFIG_PARAMS.ROOTPATH),Tf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Tf.NODE_ERROR_CODES.ENOENT)gi.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 gi.error(`error in getHDBProcessInfo: ${t}`),e}}a(VT,"getHDBProcessInfo");async function $T(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await er.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await er.fsStats();return e.read_write=_,e.size=await er.fsSize(),e}catch(t){return gi.error(`error in getDiskInfo: ${t}`),e}}a($T,"getDiskInfo");async function YT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await er.networkInterfaceDefault(),e.latency=await er.inetChecksite("google.com"),(await er.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await er.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return gi.error(`error in getNetworkInfo: ${t}`),e}}a(YT,"getNetworkInfo");async function KT(){if(Sf!==void 0)return Sf;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await er.osInfo();e=c;let u=await er.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Sf=e,Sf}catch(t){return gi.error(`error in getSystemInformation: ${t}`),e}}a(KT,"getSystemInformation");async function WT(){let e=[],t=await v5.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await P5(n));return e}a(WT,"getTableSize");async function QT(){let e={};for(let t in dU){let r=e[t]={};for(let n in dU[t])try{let s=H5({database:t,table:n}),i=s.getStats();i.readers=s.readerList().split(/\n\s+/).slice(1).map(o=>{let[c,u,_]=o.trim().split(" ");return{pid:c,thread:u,txnid:_}}),r[n]=i}catch(s){gi.notify(`Error getting stats for table ${n}: ${s}`)}}return e}a(QT,"getMetrics");async function fU(){if(zT.get(Tf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await lU.getNATSReferences(),t=await lU.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(fU,"getNatsStreamInfo");async function x5(e){let t=new B5;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await KT(),t.time=FT(),t.cpu=await qT(),t.memory=await kT(),t.disk=await $T(),t.network=await YT(),t.harperdb_processes=await VT(),t.table_size=await WT(),t.metrics=await QT(),t.threads=await _U(),t.replication=await fU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await KT();break;case"time":t.time=FT();break;case"cpu":t.cpu=await qT();break;case"memory":t.memory=await kT();break;case"disk":t.disk=await $T();break;case"network":t.network=await YT();break;case"harperdb_processes":t.harperdb_processes=await VT();break;case"table_size":t.table_size=await WT();break;case"database_metrics":case"metrics":t.metrics=await QT();break;case"threads":t.threads=await _U();break;case"replication":t.replication=await fU();break;default:break}return t}a(x5,"systemInformation")});var Rf=R((sEe,hU)=>{"use strict";hU.exports={version:G5,printVersion:F5};var gf=wu();function G5(){if(gf)return gf.version}a(G5,"version");function F5(){gf&&console.log(`HarperDB Version ${gf.version}`)}a(F5,"printVersion")});var Cs=R((cEe,TU)=>{"use strict";var q5=un(),JT=J(),k5=require("util"),So=U(),mU=re();mU.initSync();var V5=MT(),pU=qr(),{Node:oEe,NodeSubscription:aEe}=ya(),$5=ta(),Y5=tU(),{RemotePayloadObject:K5,RemotePayloadSubscription:W5}=ku(),{handleHDBError:Q5,hdb_errors:z5}=ne(),{HTTP_STATUS_CODES:J5,HDB_ERROR_MSGS:X5}=z5,j5=Xn(),Z5=Na(),e8=Rf(),{getDatabases:t8}=(Re(),ie(qe)),r8=k5.promisify(V5.authorize),n8=pU.searchByHash,s8=pU.searchByValue;TU.exports={authHeaderToUser:i8,isEmpty:o8,getNodeRecord:a8,upsertNodeRecord:c8,buildNodePayloads:u8,checkClusteringEnabled:l8,getAllNodeRecords:_8,getSystemInfo:d8,reverseSubscription:SU};async function i8(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await r8(t,null),e}a(i8,"authHeaderToUser");function o8(e){return e==null}a(o8,"isEmpty");async function a8(e){let t=new $5(So.SYSTEM_SCHEMA_NAME,So.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return n8(t)}a(a8,"getNodeRecord");async function c8(e){let t=new Y5(So.SYSTEM_SCHEMA_NAME,So.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return q5.upsert(t)}a(c8,"upsertNodeRecord");function SU(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(SU,"reverseSubscription");function u8(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=JT.getTableHashAttribute(u,_),{subscribe:d,publish:f}=SU(c),E=t8()[u]?.[_],h=new W5(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new K5(r,t,s,n)}a(u8,"buildNodePayloads");function l8(){if(!mU.get(So.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Q5(new Error,X5.CLUSTERING_NOT_ENABLED,J5.BAD_REQUEST,void 0,void 0,!0)}a(l8,"checkClusteringEnabled");async function _8(){let e=new j5(So.SYSTEM_SCHEMA_NAME,So.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await s8(e))}a(_8,"getAllNodeRecords");async function d8(){let e=await Z5.getSystemInformation();return{hdb_version:e8.version(),node_version:e.node_version,platform:e.platform}}a(d8,"getSystemInfo")});var XT=R((lEe,IU)=>{"use strict";var Af=It(),gU=J(),RU=nt(),AU=U(),Of=K(),OU=uf(),f8=lp(),{RemotePayloadObject:E8}=ku(),{handleHDBError:bU,hdb_errors:h8}=ne(),{HTTP_STATUS_CODES:yU}=h8,{NodeSubscription:NU}=ya();IU.exports=m8;async function m8(e,t){let r;try{r=await Af.request(`${t}.${RU.REQUEST_SUFFIX}`,new E8(AU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Of.trace("Response from remote describe all request:",r)}catch(o){Of.error(`addNode received error from describe all request to remote node: ${o}`);let c=Af.requestErrorHandler(o,"add_node",t);throw bU(new Error,c,yU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===RU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw bU(new Error,o,yU.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===AU.SYSTEM_SCHEMA_NAME){await Af.createLocalTableStream(u,c);let h=new NU(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=gU.doesSchemaExist(u),l=n[u]!==void 0,d=c?gU.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Of.trace(`addNode creating schema: ${u}`),await OU.createSchema({operation:"create_schema",schema:u})),!d&&f){Of.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new f8(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await OU.createTable(h)}await Af.createLocalTableStream(u,c);let E=new NU(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(m8,"reviewSubscriptions")});var If=R((dEe,DU)=>{"use strict";var{handleHDBError:bf,hdb_errors:p8}=ne(),{HTTP_STATUS_CODES:yf}=p8,{addUpdateNodeValidator:S8}=Ef(),Nf=K(),CU=U(),wU=nt(),T8=J(),Vu=It(),$u=Cs(),g8=re(),R8=XT(),{Node:A8,NodeSubscription:O8}=ya(),{broadcast:b8}=tt(),y8="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",N8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",I8=g8.get(CU.CONFIG_PARAMS.CLUSTERING_NODENAME);DU.exports=w8;async function w8(e,t=!1){Nf.trace("addNode called with:",e),$u.checkClusteringEnabled();let r=S8(e);if(r)throw bf(r,r.message,yf.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await $u.getNodeRecord(n);if(!T8.isEmptyOrZeroLength(d))throw bf(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,yf.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await R8(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=y8,o;let c=$u.buildNodePayloads(s,I8,CU.OPERATIONS_ENUM.ADD_NODE,await $u.getSystemInfo()),u=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];s[d].start_time===void 0&&delete s[d].start_time,u.push(new O8(E.schema,E.table,E.publish,E.subscribe))}Nf.trace("addNode sending remote payload:",c);let _;try{_=await Vu.request(`${n}.${wU.REQUEST_SUFFIX}`,c)}catch(d){Nf.error(`addNode received error from request: ${d}`);for(let E=0,h=s.length;E<h;E++){let S=s[E];S.publish=!1,S.subscribe=!1,await Vu.updateRemoteConsumer(S,n)}let f=Vu.requestErrorHandler(d,"add_node",n);throw bf(new Error,f,yf.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===wU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw bf(new Error,d,yf.INTERNAL_SERVER_ERROR,"error",d)}Nf.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await Vu.updateRemoteConsumer(E,n),E.subscribe===!0&&await Vu.updateConsumerIterator(E.schema,E.table,n,"start")}let l=new A8(n,u,_.system_info);return await $u.upsertNodeRecord(l),b8({type:"nats_update"}),i.length>0?o.message=N8:o.message=`Successfully added '${n}' to manifest`,o}a(w8,"addNode")});var eg=R((hEe,UU)=>{"use strict";var{handleHDBError:jT,hdb_errors:C8}=ne(),{HTTP_STATUS_CODES:ZT}=C8,{addUpdateNodeValidator:D8}=Ef(),Yu=K(),MU=U(),LU=nt(),EEe=J(),Ku=It(),Wu=Cs(),L8=re(),{cloneDeep:M8}=require("lodash"),U8=XT(),{Node:P8,NodeSubscription:v8}=ya(),{broadcast:B8}=tt(),H8="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",x8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",G8=L8.get(MU.CONFIG_PARAMS.CLUSTERING_NODENAME);UU.exports=F8;async function F8(e){Yu.trace("updateNode called with:",e),Wu.checkClusteringEnabled();let t=D8(e);if(t)throw jT(t,t.message,ZT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Wu.getNodeRecord(r);s.length>0&&(n=M8(s));let{added:i,skipped:o}=await U8(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=H8,c;let u=Wu.buildNodePayloads(i,G8,MU.OPERATIONS_ENUM.UPDATE_NODE,await Wu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let f=i[l];Yu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[l].start_time===void 0&&delete i[l].start_time}Yu.trace("updateNode sending remote payload:",u);let _;try{_=await Ku.request(`${r}.${LU.REQUEST_SUFFIX}`,u)}catch(l){Yu.error(`updateNode received error from request: ${l}`);let d=Ku.requestErrorHandler(l,"update_node",r);throw jT(new Error,d,ZT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===LU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw jT(new Error,l,ZT.INTERNAL_SERVER_ERROR,"error",l)}Yu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];await Ku.updateRemoteConsumer(f,r),f.subscribe===!0?await Ku.updateConsumerIterator(f.schema,f.table,r,"start"):await Ku.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new P8(r,[],_.system_info)]),await q8(n[0],i,_.system_info),o.length>0?c.message=x8:c.message=`Successfully updated '${r}'`,c}a(F8,"updateNode");async function q8(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new v8(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Wu.upsertNodeRecord(n),B8({type:"nats_update"})}a(q8,"updateNodeTable")});var xU=R((pEe,HU)=>{"use strict";var BU=require("joi"),{string:PU}=BU.types(),k8=rt(),vU=U(),V8=re(),$8=nt();HU.exports=Y8;function Y8(e){let t=PU.invalid(V8.get(vU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern($8.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=BU.object({operation:PU.valid(vU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return k8.validateBySchema(e,r)}a(Y8,"removeNodeValidator")});var Cf=R((TEe,VU)=>{"use strict";var{handleHDBError:GU,hdb_errors:K8}=ne(),{HTTP_STATUS_CODES:FU}=K8,W8=xU(),Qu=K(),qU=Cs(),Q8=J(),wf=U(),kU=nt(),tg=It(),z8=re(),{RemotePayloadObject:J8}=ku(),{NodeSubscription:X8}=ya(),j8=Kc(),Z8=ji(),{broadcast:e6}=tt(),t6=z8.get(wf.CONFIG_PARAMS.CLUSTERING_NODENAME);VU.exports=r6;async function r6(e){Qu.trace("removeNode called with:",e),qU.checkClusteringEnabled();let t=W8(e);if(t)throw GU(t,t.message,FU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await qU.getNodeRecord(r);if(Q8.isEmptyOrZeroLength(n))throw GU(new Error,`Node '${r}' was not found.`,FU.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new J8(wf.OPERATIONS_ENUM.REMOVE_NODE,t6,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await tg.updateConsumerIterator(l.schema,l.table,r,"stop");try{await tg.updateRemoteConsumer(new X8(l.schema,l.table,!1,!1),r)}catch(d){Qu.error(d)}}try{i=await tg.request(`${r}.${kU.REQUEST_SUFFIX}`,s),Qu.trace("Remove node reply from remote node:",r,i)}catch(u){Qu.error("removeNode received error from request:",u),o=!0}let c=new j8(wf.SYSTEM_SCHEMA_NAME,wf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Z8.deleteRecord(c),e6({type:"nats_update"}),i?.status===kU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Qu.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(r6,"removeNode")});var KU=R((REe,YU)=>{"use strict";var $U=require("joi"),{string:n6,array:s6}=$U.types(),i6=rt(),o6=Ef();YU.exports=a6;function a6(e){let t=$U.object({operation:n6.valid("configure_cluster").required(),connections:s6.items(o6.validation_schema).required()});return i6.validateBySchema(e,t)}a(a6,"configureClusterValidator")});var rg=R((OEe,XU)=>{"use strict";var c6=U(),Df=K(),u6=J(),l6=Cf(),_6=If(),WU=Cs(),d6=KU(),{handleHDBError:QU,hdb_errors:f6}=ne(),{HTTP_STATUS_CODES:zU}=f6,E6="Configure cluster complete.",h6="Failed to configure the cluster. Check the logs for more details.",m6="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";XU.exports=p6;async function p6(e){Df.trace("configure cluster called with:",e),WU.checkClusteringEnabled();let t=d6(e);if(t)throw QU(t,t.message,zU.BAD_REQUEST,void 0,void 0,!0);let r=await WU.getAllNodeRecords(),n=[];for(let l=0,d=r.length;l<d;l++){let f=await JU(l6,{operation:c6.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[l].name},r[l].name);n.push(f)}Df.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let l=0;l<i;l++){let d=e.connections[l],f=await JU(_6,d,d.node_name);s.push(f)}Df.trace("All results from configure_cluster add node:",s);let o=[],c=[],u=!1,_=n.concat(s);for(let l=0,d=_.length;l<d;l++){let f=_[l];f.status==="rejected"&&(Df.error(f),o.includes(f.node_name)||o.push(f.node_name)),(f?.result?.message?.includes?.("Successfully")||f?.result?.includes?.("Successfully"))&&(u=!0),!(typeof f.result=="string"&&f.result.includes("Successfully removed")||f.status==="rejected")&&c.push({node_name:f?.node_name,subscriptions:f?.result})}if(u6.isEmptyOrZeroLength(o))return{message:E6,connections:c};if(u)return{message:m6,failed_nodes:o,connections:c};throw QU(new Error,h6,zU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(p6,"configureCluster");async function JU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(JU,"functionWrapper")});var tP=R((yEe,eP)=>{"use strict";var zu=require("joi"),S6=rt(),{validateSchemaExists:jU,validateTableExists:T6,validateSchemaName:ZU}=zn(),g6=zu.object({operation:zu.string().valid("purge_stream"),schema:zu.string().custom(jU).custom(ZU).optional(),database:zu.string().custom(jU).custom(ZU).optional(),table:zu.string().custom(T6).required()});function R6(e){return S6.validateBySchema(e,g6)}a(R6,"purgeStreamValidator");eP.exports=R6});var ng=R((IEe,rP)=>{"use strict";var{handleHDBError:A6,hdb_errors:O6}=ne(),{HTTP_STATUS_CODES:b6}=O6,y6=tP(),N6=It(),I6=Cs();rP.exports=w6;async function w6(e){e.schema=e.schema??e.database;let t=y6(e);if(t)throw A6(t,t.message,b6.BAD_REQUEST,void 0,void 0,!0);I6.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await N6.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(w6,"purgeStream")});var og=R((CEe,cP)=>{"use strict";var ig=Cs(),C6=It(),iP=re(),Lf=U(),To=nt(),D6=J(),sg=K(),{RemotePayloadObject:L6}=ku(),{ErrorCode:nP}=require("nats"),sP=iP.get(Lf.CONFIG_PARAMS.CLUSTERING_ENABLED),oP=iP.get(Lf.CONFIG_PARAMS.CLUSTERING_NODENAME);cP.exports={clusterStatus:M6,buildNodeStatus:aP};async function M6(){let e={node_name:oP,is_enabled:sP,connections:[]};if(!sP)return e;let t=await ig.getAllNodeRecords();if(D6.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(aP(t[n],e.connections));return await Promise.allSettled(r),e}a(M6,"clusterStatus");async function aP(e,t){let r=e.name,n=new L6(Lf.OPERATIONS_ENUM.CLUSTER_STATUS,oP,void 0,await ig.getSystemInfo()),s,i,o=To.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await C6.request(To.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===To.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=To.CLUSTER_STATUS_STATUSES.CLOSED,sg.error(`Error getting node status from ${r} `,s))}catch(u){sg.warn(`Error getting node status from ${r}`,u),u.code===nP.NoResponders?o=To.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===nP.Timeout?o=To.CLUSTER_STATUS_STATUSES.TIMEOUT:o=To.CLUSTER_STATUS_STATUSES.CLOSED}let c=new U6(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Lf.PRE_4_0_0_VERSION&&await ig.upsertNodeRecord(u)}catch(u){sg.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(aP,"buildNodeStatus");function U6(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(U6,"NodeStatusObject")});var cg=R((LEe,uP)=>{"use strict";var{handleHDBError:P6,hdb_errors:v6}=ne(),{HTTP_STATUS_CODES:B6}=v6,H6=It(),x6=Cs(),ag=J(),Mf=require("joi"),G6=rt(),F6=2e3,q6=Mf.object({timeout:Mf.number().min(1),connected_nodes:Mf.boolean(),routes:Mf.boolean()});uP.exports=k6;async function k6(e){x6.checkClusteringEnabled();let t=G6.validateBySchema(e,q6);if(t)throw P6(t,t.message,B6.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||ag.autoCastBoolean(n),o=s===void 0||ag.autoCastBoolean(s),c={nodes:[]},u=await H6.getServerList(r??F6),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(S=>{h.connected_nodes.includes(S.name.slice(0,-4))||h.connected_nodes.push(S.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(S=>({host:S.split(":")[0],port:ag.autoCast(S.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(k6,"clusterNetwork")});var fP=R((UEe,dP)=>{"use strict";var ug=require("joi"),lP=rt(),{route_constraints:_P}=zp();dP.exports={setRoutesValidator:V6,deleteRoutesValidator:$6};function V6(e){let t=ug.object({server:ug.valid("hub","leaf").required(),routes:_P.required()});return lP.validateBySchema(e,t)}a(V6,"setRoutesValidator");function $6(e){let t=ug.object({routes:_P.required()});return lP.validateBySchema(e,t)}a($6,"deleteRoutesValidator")});var _g=R((vEe,pP)=>{"use strict";var go=mr(),lg=J(),Uf=U(),EP=fP(),{handleHDBError:hP,hdb_errors:Y6}=ne(),{HTTP_STATUS_CODES:mP}=Y6,K6="cluster routes successfully set",W6="cluster routes successfully deleted";pP.exports={setRoutes:Q6,getRoutes:z6,deleteRoutes:J6};function Q6(e){let t=EP.setRoutesValidator(e);if(t)throw hP(t,t.message,mP.BAD_REQUEST,void 0,void 0,!0);let r=go.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,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=lg.autoCast(_.port);let l=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?go.updateConfigValue(Uf.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):go.updateConfigValue(Uf.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:K6,set:o,skipped:i}}a(Q6,"setRoutes");function z6(){let e=go.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(z6,"getRoutes");function J6(e){let t=EP.deleteRoutesValidator(e);if(t)throw hP(t,t.message,mP.BAD_REQUEST,void 0,void 0,!0);let r=go.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let S=n[E];if(d.host===S.host&&d.port===S.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,S=s.length;h<S;h++){let p=s[h];if(d.host===p.host&&d.port===p.port){s.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=lg.isEmptyOrZeroLength(n)?null:n,go.updateConfigValue(Uf.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=lg.isEmptyOrZeroLength(s)?null:s,go.updateConfigValue(Uf.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:W6,deleted:i,skipped:o}}a(J6,"deleteRoutes")});var TP=R((HEe,SP)=>{"use strict";var Ju=require("alasql"),Ro=require("recursive-iterator"),Gn=K(),X6=J(),Xu=U(),dg=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,Z6(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=>Xu.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=>!Xu.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][Xu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=j6(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Xu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Ju.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function j6(e){return e.filter(t=>t[Xu.PERMS_CRUD_ENUM.READ])}a(j6,"filterReadRestrictedAttrs");function Z6(e,t,r,n,s){e9(e,t,r,n,s)}a(Z6,"interpretAST");function ju(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(ju,"addSchemaTableToMap");function e9(e,t,r,n,s){if(!e){Gn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ju.yy.Insert?s9(e,t,r):e instanceof Ju.yy.Select?t9(e,t,r,n,s):e instanceof Ju.yy.Update?r9(e,t,r):e instanceof Ju.yy.Delete?n9(e,t,r):Gn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(e9,"getRecordAttributesAST");function t9(e,t,r,n,s){if(!e){Gn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(X6.isEmptyOrZeroLength(i)){Gn.error("No schema specified");return}e.from.forEach(c=>{ju(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ju(c.table,t,r,n,s)});let o=new Ro(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Gn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new Ro(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Gn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new Ro(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Gn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new Ro(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Gn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(t9,"getSelectAttributes");function r9(e,t,r){if(!e){Gn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Ro(e.columns),s=e.table.databaseid;ju(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fg(e.table.tableid,s,i.columnid,t,r)}a(r9,"getUpdateAttributes");function n9(e,t,r){if(!e){Gn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Ro(e.where),s=e.table.databaseid;ju(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fg(e.table.tableid,s,i.columnid,t,r)}a(n9,"getDeleteAttributes");function s9(e,t,r){if(!e){Gn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Ro(e.columns),s=e.into.databaseid;ju(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&fg(e.into.tableid,s,i.columnid,t,r)}a(s9,"getInsertAttributes");function fg(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(fg,"pushAttribute");SP.exports=dg});var mg=R((GEe,OP)=>{var Pf=ro(),gP=require("chalk"),Xr=K(),RP=require("prompt"),{promisify:i9}=require("util"),Eg=U(),o9=require("fs-extra"),a9=require("path"),c9=J(),u9=Rf(),AP=re();AP.initSync();var l9=require("moment"),_9=i9(RP.get),d9=a9.join(AP.getHdbBasePath(),Eg.LICENSE_KEY_DIR_NAME,Eg.LICENSE_FILE_NAME,Eg.LICENSE_FILE_NAME);OP.exports={getFingerprint:E9,setLicense:f9,parseLicense:hg,register:h9,getRegistrationInfo:p9};async function f9(e){if(e&&e.key&&e.company){try{Xr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await hg(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Xr.error(r),Xr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(f9,"setLicense");async function E9(){let e={};try{e=await Pf.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Xr.error(r),Xr.error(t),new Error(r)}return e}a(E9,"getFingerprint");async function hg(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Xr.info("Validating license input...");let r=Pf.validateLicense(e,t);if(Xr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Xr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Xr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Xr.info("writing license to disk"),await o9.writeFile(d9,JSON.stringify({license_key:e,company:t}))}catch(n){throw Xr.error("Failed to write License"),n}return"Registration successful."}a(hg,"parseLicense");async function h9(){let e=await m9();return hg(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(h9,"register");async function m9(){let e=await Pf.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:gP.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:gP.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{RP.start()}catch(n){Xr.error(n)}let r;try{r=await _9(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(m9,"promptForRegistration");async function p9(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Pf.getLicense()}catch(r){throw Xr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(c9.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=u9.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=l9.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(p9,"getRegistrationInfo")});var yP=R((qEe,bP)=>{"use strict";var S9=nt(),pg=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+S9.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:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};bP.exports=pg});var wP=R((VEe,IP)=>{"use strict";var NP=nt(),Sg=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+NP.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+NP.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,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:u,jetstream:"enabled"}},this.system_account="SYS"}};IP.exports=Sg});var DP=R((YEe,CP)=>{"use strict";var Tg=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};CP.exports=Tg});var MP=R((WEe,LP)=>{"use strict";var T9=nt(),gg=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+T9.SERVER_SUFFIX.ADMIN,this.password=r}};LP.exports=gg});var Og=R((zEe,vP)=>{"use strict";var Ia=require("path"),Hf=require("fs-extra"),g9=yP(),R9=wP(),A9=DP(),O9=MP(),Rg=ln(),Ca=J(),br=mr(),Bf=U(),Zu=nt(),{CONFIG_PARAMS:ft}=Bf,Da=K(),el=re(),UP=Ns(),Ag=It(),wa="clustering",b9=1e4,PP=50;vP.exports={generateNatsConfig:N9,removeNatsConfig:I9,getHubConfigPath:y9};function y9(){let e=el.get(ft.ROOTPATH);return Ia.join(e,wa,Zu.NATS_CONFIG_FILES.HUB_SERVER)}a(y9,"getHubConfigPath");async function N9(e=!1,t=void 0){el.initSync();let r=el.get(ft.ROOTPATH),n=Ia.join(r,wa,Zu.PID_FILES.HUB),s=Ia.join(r,wa,Zu.PID_FILES.LEAF),i=br.getConfigFromFile(ft.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Ia.join(r,wa,Zu.NATS_CONFIG_FILES.HUB_SERVER),c=Ia.join(r,wa,Zu.NATS_CONFIG_FILES.LEAF_SERVER),u=br.getConfigFromFile(ft.CLUSTERING_TLS_CERTIFICATE),_=br.getConfigFromFile(ft.CLUSTERING_TLS_PRIVATEKEY),l=br.getConfigFromFile(ft.CLUSTERING_TLS_CERT_AUTH),d=br.getConfigFromFile(ft.CLUSTERING_TLS_INSECURE),f=br.getConfigFromFile(ft.CLUSTERING_TLS_VERIFY),E=br.getConfigFromFile(ft.CLUSTERING_NODENAME),h=br.getConfigFromFile(ft.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Ag.checkNATSServerInstalled()||xf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await Rg.listUsers(),p=br.getConfigFromFile(ft.CLUSTERING_USER),T=await Rg.getClusterUser();(Ca.isEmpty(T)||T.active!==!0)&&xf(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await vf(ft.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await vf(ft.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await vf(ft.CLUSTERING_HUBSERVER_NETWORK_PORT),await vf(ft.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],g=[];for(let[Q,z]of S.entries())z.role.role===Bf.ROLE_TYPES_ENUM.CLUSTER_USER&&z.active&&(b.push(new O9(z.username,UP.decrypt(z.hash))),g.push(new A9(z.username,UP.decrypt(z.hash))));let L=[],{hub_routes:v}=br.getClusteringRoutes();if(!Ca.isEmptyOrZeroLength(v))for(let Q of v)L.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${Q.host}:${Q.port}`);let P=new g9(br.getConfigFromFile(ft.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,br.getConfigFromFile(ft.CLUSTERING_HUBSERVER_CLUSTER_NAME),br.getConfigFromFile(ft.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,b,g);l==null&&(delete P.tls.ca_file,delete P.leafnodes.tls.ca_file),t=Ca.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Bf.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Hf.writeJson(o,P),Da.trace(`Hub server config written to ${o}`));let k=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,H=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,X=new R9(br.getConfigFromFile(ft.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[k],[H],b,g,u,_,l,d);l==null&&delete X.tls.ca_file,(t===void 0||t===Bf.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Hf.writeJson(c,X),Da.trace(`Leaf server config written to ${c}`))}a(N9,"generateNatsConfig");async function vf(e){let t=el.get(e);return Ca.isEmpty(t)&&xf(`port undefined for '${e}'`),await Ca.isPortTaken(t)&&xf(`'${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(vf,"isPortAvailable");function xf(e){let t=`Error generating clustering config: ${e}`;Da.error(t),console.error(t),process.exit(1)}a(xf,"generateNatsConfigError");async function I9(e){let{port:t,config_file:r}=Ag.getServerConfig(e),{username:n,decrypt_hash:s}=await Rg.getClusterUser(),i=0,o=2e3;for(;i<PP;){try{let l=await Ag.createConnection(t,n,s,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){Da.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=PP)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&&Da.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Ca.async_set_timeout(_)}let c="0".repeat(b9),u=Ia.join(el.get(ft.ROOTPATH),wa,r);await Hf.writeFile(u,c),await Hf.remove(u),Da.notify(e,"started.")}a(I9,"removeNatsConfig")});var qP=R((XEe,FP)=>{"use strict";var jr=re(),w9=ro(),he=U(),tl=nt(),Ds=require("path"),{PACKAGE_ROOT:Ff}=U(),BP=re(),Gf=J(),La="/dev/null",C9=Ds.join(Ff,"launchServiceScripts"),HP=Ds.join(Ff,"utility/scripts"),D9=Ds.join(HP,he.HDB_RESTART_SCRIPT),xP=Ds.resolve(Ff,"dependencies",`${process.platform}-${process.arch}`,tl.NATS_BINARY_NAME);function GP(){let t=w9.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,n={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Gf.noBootFile()&&(n[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Gf.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Ff}}a(GP,"generateMainServerConfig");var L9=9930;function M9(){jr.initSync(!0);let e=jr.get(he.CONFIG_PARAMS.ROOTPATH),t=Ds.join(e,"clustering",tl.NATS_CONFIG_FILES.HUB_SERVER),r=Ds.join(jr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=BP.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=tl.LOG_LEVEL_FLAGS[jr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==L9?"-"+n:""),script:xP,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return jr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=La,i.error_file=La),i}a(M9,"generateNatsHubServerConfig");var U9=9940;function P9(){jr.initSync(!0);let e=jr.get(he.CONFIG_PARAMS.ROOTPATH),t=Ds.join(e,"clustering",tl.NATS_CONFIG_FILES.LEAF_SERVER),r=Ds.join(jr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=BP.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=tl.LOG_LEVEL_FLAGS[jr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==U9?"-"+n:""),script:xP,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return jr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=La,i.error_file=La),i}a(P9,"generateNatsLeafServerConfig");function v9(){jr.initSync();let e=Ds.join(jr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:C9,autorestart:!1};return jr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=La,t.error_file=La),t}a(v9,"generateClusteringUpgradeV4ServiceConfig");function B9(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return Gf.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Gf.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:HP},script:D9}}a(B9,"generateRestart");function H9(){return{apps:[GP()]}}a(H9,"generateAllServiceConfigs");FP.exports={generateAllServiceConfigs:H9,generateMainServerConfig:GP,generateRestart:B9,generateNatsHubServerConfig:M9,generateNatsLeafServerConfig:P9,generateClusteringUpgradeV4ServiceConfig:v9}});var tv=R((ehe,ev)=>{"use strict";var ve=U(),x9=J(),Ms=Og(),qf=It(),Ls=nt(),Ri=qP(),kf=re(),Ai=K(),G9=Cs(),{startWorker:kP,onMessageFromWorkers:F9}=tt(),q9=Na(),ZEe=require("util"),k9=require("child_process"),V9=require("fs"),{execFile:$9}=k9,Ie;ev.exports={enterPM2Mode:Y9,start:Oi,stop:bg,reload:$P,restart:YP,list:yg,describe:WP,connect:Us,kill:J9,startAllServices:X9,startService:Ng,getUniqueServicesList:QP,restartAllServices:j9,isServiceRegistered:zP,reloadStopStart:JP,restartHdb:KP,deleteProcess:Q9,startClusteringProcesses:jP,startClusteringThreads:ZP,isHdbRestartRunning:z9,isClusteringRunning:e7,stopClustering:Z9,reloadClustering:t7};var rl=!1;F9(e=>{e.type==="restart"&&kf.initSync(!0)});function Y9(){rl=!0}a(Y9,"enterPM2Mode");function Us(){return Ie||(Ie=require("pm2")),new Promise((e,t)=>{Ie.connect((r,n)=>{Ai.setupConsoleLogging(),r&&t(r),e(n)})})}a(Us,"connect");var yr,K9=10,VP;function Oi(e,t=!1){if(rl)return W9(e);let r=$9(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=yr.indexOf(r);o>-1&&yr.splice(o,1),!VP&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<K9&&(V9.existsSync(Ms.getHubConfigPath())?Oi(e):(await Ms.generateNatsConfig(!0),Oi(e),await new Promise(c=>setTimeout(c,3e3)),await Ms.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ms.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=kf.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Ls.LOG_LEVEL_HIERARCHY[o]>=Ls.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Ls.LOG_LEVELS.ERR||l===Ls.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Ls.LOG_LEVELS[f]}if(Ls.LOG_LEVEL_HIERARCHY[o]>=Ls.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Ls.LOG_LEVELS.ERR||l===Ls.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),yr=[],!yr&&!t){let i=a(()=>{VP=!0,yr&&(yr.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)}yr.push(r)}a(Oi,"start");function W9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}Ie.start(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(W9,"startWithPM2");function bg(e){if(!rl){for(let t of yr||[])t.name===e&&(yr.splice(yr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}Ie.stop(e,async(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.delete(e,(i,o)=>{i&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(o)})})})}a(bg,"stop");function $P(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}Ie.reload(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a($P,"reload");function YP(e){if(!rl)for(let t of yr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}Ie.restart(e,(n,s)=>{Ie.disconnect(),t(s)})})}a(YP,"restart");function Q9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}Ie.delete(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Q9,"deleteProcess");async function KP(){await Oi(Ri.generateRestart())}a(KP,"restartHdb");async function z9(){let e=await yg();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(z9,"isHdbRestartRunning");function yg(){return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}Ie.list((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(yg,"list");function WP(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}Ie.describe(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(WP,"describe");function J9(){if(!rl){for(let e of yr||[])e.kill();yr=[];return}return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}Ie.killDaemon((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(J9,"kill");async function X9(){try{await jP(),await ZP(),await Oi(Ri.generateAllServiceConfigs())}catch(e){throw Ie?.disconnect(),e}}a(X9,"startAllServices");async function Ng(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ri.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ri.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ri.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ri.generateNatsHubServerConfig(),await Oi(r,t),await Ms.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ri.generateNatsLeafServerConfig(),await Oi(r,t),await Ms.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oi(r)}catch(r){throw Ie?.disconnect(),r}}a(Ng,"startService");async function QP(){try{let e=await yg(),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 Ie?.disconnect(),e}}a(QP,"getUniqueServicesList");async function j9(e=[]){try{let t=!1,r=await QP();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 YP(o))}t&&await JP(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ie?.disconnect(),t}}a(j9,"restartAllServices");async function zP(e){if(yr?.find(r=>r.name===e))return!0;let t=await q9.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(zP,"isServiceRegistered");async function JP(e){let t=kf.get(ve.CONFIG_PARAMS.THREADS_COUNT)??kf.get(ve.CONFIG_PARAMS.THREADS),r=await WP(e),n=x9.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await bg(e),await Ng(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await KP():await $P(e)}a(JP,"reloadStopStart");var XP;async function jP(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await Ng(r,e)}}a(jP,"startClusteringProcesses");async function ZP(){XP=kP(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await qf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await qf.updateLocalStreams();let e=await G9.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){Ai.info("Starting clustering upgrade 4.0.0 process"),kP(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(ZP,"startClusteringThreads");async function Z9(){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 XP.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await bg(t)}}a(Z9,"stopClustering");async function e7(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await zP(t)===!1)return!1}return!0}a(e7,"isClusteringRunning");async function t7(){await Ms.generateNatsConfig(!0),await qf.reloadNATSHub(),await qf.reloadNATSLeaf(),await Ms.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ms.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(t7,"reloadClustering")});var cv={};Ge(cv,{compactOnStart:()=>r7,copyDb:()=>av});async function r7(){nl.notify("Running compact on start"),console.log("Running compact on start");let e=(0,Ig.get)(bi.CONFIG_PARAMS.ROOTPATH),t=new Map,r=fr();try{for(let n in r){if(n==="system")continue;let s;for(let u in r[n]){s=r[n][u].primaryStore.path;break}let i=(0,Vf.join)(e,"backup",n+".mdb"),o=(0,Vf.join)(e,bi.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await rv(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 av(n,o),console.log("Backing up",n,"to",i),await(0,Ao.move)(s,i,{overwrite:!0})}Ou();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Ao.move)(i,s,{overwrite:!0}),await(0,Ao.remove)((0,Vf.join)(e,bi.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));Ou()}catch(n){nl.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,wg.updateConfigValue)(bi.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,Ao.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ou(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await rv(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let u=`There is a discrepancy between pre and post compact record count for database ${n}.
11
11
  Total record count before compaction: ${i}, total after: ${c}.