harperdb 4.3.40 → 4.3.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +30 -30
- package/package.json +2 -2
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadServer.js +1 -1
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.6fe75e34.js → main.870bbedf.js} +2 -2
- package/utility/scripts/restartHdb.js +1 -1
- /package/studio/build-local/static/js/{main.6fe75e34.js.LICENSE.txt → main.870bbedf.js.LICENSE.txt} +0 -0
package/bin/lite.js
CHANGED
|
@@ -7,7 +7,7 @@ Caused by:`));else if(typeof _=="object")try{n+=JSON.stringify(_)}catch{n+="Obje
|
|
|
7
7
|
`),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
8
8
|
`)},G2="certificate.pem",F2="privateKey.pem",q2="ca.pem";AC.exports={CERTIFICATE_VALUES:x2,CERTIFICATE_PEM_NAME:G2,PRIVATEKEY_PEM_NAME:F2,CA_PEM_NAME:q2}});var Zp=g((C_e,CC)=>{"use strict";var IC=require("fs-extra"),ae=require("joi"),k2=require("os"),{boolean:ye,string:tr,number:Ze,array:Nd}=ae.types(),{totalmem:bC}=require("os"),to=require("path"),V2=K(),Id=J(),w_e=OC(),yC=U(),$2=ot(),NC="log",Y2="components",K2="Invalid logging.rotation.maxSize unit. Available units are G, M or K",W2="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Q2="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",z2="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",J2="rootPath config parameter is undefined",X2="clustering.enabled config parameter is undefined",ro=Ze.min(0).required(),wd=Nd.items({host:tr.required(),port:ro}).empty(null),ss,wC=!1;CC.exports={configValidator:j2,routesValidator:sJ,route_constraints:wd};function j2(e,t=!1){if(wC=t,ss=e.rootPath,Id.isEmpty(ss))throw J2;let r=ye.required(),n=Ze.min(0).max(1e3).empty(null).default(nJ),s=tr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ll),i=tr.optional().empty(null),o=tr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ae.string().empty(null).default(ll),l=ae.custom(eJ).empty(null).default(ll),_=e.clustering?.enabled;if(Id.isEmpty(_))throw X2;let u=ae.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=ae.object({enabled:r,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:ro,routes:wd}).required()}).required(),leafNodes:ae.object({network:ae.object({port:ro}).required()}).required(),network:ae.object({port:ro}).required()}).required(),leafServer:ae.object({network:ae.object({port:ro,routes:wd}).required(),streams:ae.object({maxAge:Ze.min(120).allow(null).optional(),maxBytes:Ze.min(1).allow(null).optional(),maxMsgs:Ze.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ae.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required(),verify:ye.optional()}),user:tr.optional().empty(null)}).required():d=ae.object({enabled:r,tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),ae.object({authentication:ae.object({authorizeLocal:ye,cacheTTL:Ze.required(),enableSessions:ye}),analytics:ae.object({aggregatePeriod:Ze}),componentsRoot:s.optional(),clustering:d,localStudio:ae.object({enabled:r}).required(),logging:ae.object({auditAuthEvents:ae.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:ae.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ae.object({enabled:ye.optional(),compress:ye.optional(),interval:tr.custom(rJ).optional().empty(null),maxSize:tr.custom(tJ).optional().empty(null),path:tr.optional().empty(null).default(ll)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:ae.object({network:ae.object({cors:ye.optional(),corsAccessList:Nd.optional(),headersTimeout:Ze.min(1).optional(),keepAliveTimeout:Ze.min(1).optional(),port:Ze.optional().empty(null),domainSocket:ae.optional().empty("hdb/operations-server").default(ll),securePort:Ze.optional().empty(null),timeout:Ze.min(1).optional()}).optional(),tls:ae.alternatives([ae.array().items(u),u])}).required(),rootPath:tr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:ro,securePort:ro,mtls:ae.alternatives([ye.optional(),ae.object({user:tr.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:ae.object({compressionThreshold:Ze.optional(),cors:ye.optional(),corsAccessList:Nd.optional(),headersTimeout:Ze.min(1).optional(),port:Ze.min(0).optional().empty(null),securePort:Ze.min(0).optional().empty(null),maxHeaderSize:Ze.optional(),mtls:ae.alternatives([ye.optional(),ae.object({user:tr.optional(),certificateAuthority:i,required:ye.optional()})]),threadRange:ae.alternatives([Nd.optional(),tr.optional()])}).required(),threads:ae.alternatives(n.optional(),ae.object({count:n.optional(),debug:ae.alternatives(ye.optional(),ae.object({startingPort:Ze.min(1).optional(),host:tr.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:Ze.min(0).optional()})),storage:ae.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:ae.alternatives([ye.optional(),ae.object({dictionary:tr.optional(),threshold:Ze.optional()})]),compactOnStart:ye.optional(),compactOnStartKeepBackup:ye.optional(),noReadAhead:ye.optional(),path:l,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:Ze.optional(),maxFreeSpaceToRetain:Ze.optional()}).required(),ignoreScripts:ye.optional(),tls:ae.alternatives([ae.array().items(u),u])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(j2,"configValidator");function Z2(e){return wC||IC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Z2,"doesPathExist");function eJ(e,t){ae.assert(e,tr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Z2(e);if(r)return t.message(r)}a(eJ,"validatePath");function tJ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(K2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Q2):e}a(tJ,"validateRotationMaxSize");function rJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(W2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(z2):e}a(rJ,"validateRotationInterval");function nJ(e,t){let r=t.state.path.join("."),n=k2.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||bC();return i=Math.round(Math.min(i,bC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),V2.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(nJ,"setDefaultThreads");function ll(e,t){let r=t.state.path.join(".");if(!Id.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Id.isEmpty(ss))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return to.join(ss,Y2);case"logging.root":return to.join(ss,NC);case"clustering.leafServer.streams.path":return to.join(ss,"clustering","leaf");case"storage.path":let n=to.join(ss,yC.LEGACY_DATABASES_DIR_NAME);return IC.existsSync(n)?n:to.join(ss,yC.DATABASES_DIR_NAME);case"logging.rotation.path":return to.join(ss,NC);case"operationsApi.network.domainSocket":return r==null?null:to.join(ss,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ll,"setDefaultRoot");function sJ(e){let t=ae.object({routes:wd});return $2.validateBySchema({routes:e},t)}a(sJ,"routesValidator")});var Rr=g((M_e,xC)=>{"use strict";var Wr=U(),Ht=J(),Nt=K(),{configValidator:iJ,routesValidator:DC}=Zp(),gr=require("fs-extra"),oJ=require("yaml"),Bn=require("path"),aJ=require("is-number"),MC=require("properties-reader"),cJ=require("lodash"),{handleHDBError:lJ}=se(),{HTTP_STATUS_CODES:uJ,HDB_ERROR_MSGS:Cd}=vr(),L_e=require("minimist"),{server:_J}=(ur(),ie(Bi)),{DATABASES_PARAM_CONFIG:ul,CONFIG_PARAMS:Kr,CONFIG_PARAM_MAP:Hn}=Wr,dJ="Unable to get config value because config is uninitialized",fJ="Config successfully initialized",EJ="Error backing up config file",hJ="Empty parameter sent to getConfigValue",PC=Bn.join(Wr.PACKAGE_ROOT,"config","yaml",Wr.HDB_DEFAULT_CONFIG_FILE),mJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",LC={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"},Dd,It,Ld;xC.exports={createConfigFile:pJ,getDefaultConfig:SJ,getConfigValue:vC,initConfig:tS,flattenConfig:la,updateConfigValue:BC,updateConfigObject:gJ,getConfiguration:OJ,setConfiguration:bJ,readConfigFile:nS,getClusteringRoutes:yJ,initOldConfig:HC,getConfigFromFile:NJ,getConfigFilePath:no,addConfig:IJ,deleteConfigFromFile:wJ,getConfigObj:CJ};function pJ(e,t=!1){let r=di(PC);Dd=la(r.toJSON());let n;for(let c in e){let l=Hn[c.toLowerCase()];if(l===Kr.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let _=l.split("_"),u=eS(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Nt.error(d)}}}n&&UC(r,n),rS(r,t);let s=r.toJSON();It=la(s);let i=r.getIn(["rootPath"]),o=Bn.join(i,Wr.HDB_CONFIG_FILE);gr.createFileSync(o),gr.writeFileSync(o,String(r)),Nt.trace(`Config file written to ${o}`)}a(pJ,"createConfigFile");function UC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ht.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(ul.TABLES))for(let i in n[s][ul.TABLES])for(let o in n[s][ul.TABLES][i]){let c=n[s][ul.TABLES][i][o],l=[Kr.DATABASES,s,ul.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[Kr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Nt.error("Error parsing schemas CLI/env config arguments",n)}}a(UC,"setSchemasConfig");function SJ(e){if(Dd===void 0){let r=di(PC);Dd=la(r.toJSON())}let t=Hn[e.toLowerCase()];if(t!==void 0)return Dd[t.toLowerCase()]}a(SJ,"getDefaultConfig");function vC(e){if(e==null){Nt.error(hJ);return}if(It===void 0){Nt.trace(dJ);return}let t=Hn[e.toLowerCase()];if(t!==void 0)return It[t.toLowerCase()]}a(vC,"getConfigValue");function no(e=Ht.getPropsFilePath()){let t=Ht.getEnvCliRootPath();return t?Bn.join(t,Wr.HDB_CONFIG_FILE):MC(e).get(Wr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(no,"getConfigFilePath");function tS(e=!1){if(It===void 0||e){let t;if(!Ht.noBootFile()){t=Ht.getPropsFilePath();try{gr.accessSync(t,gr.constants.F_OK|gr.constants.R_OK)}catch(i){throw Nt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=no(t),n;if(r.includes("config/settings.js"))try{HC(r);return}catch(i){if(i.code!==Wr.NODE_ERROR_CODES.ENOENT)throw i}try{n=di(r)}catch(i){if(i.code===Wr.NODE_ERROR_CODES.ENOENT){Nt.trace(`HarperDB config file not found at ${r}.
|
|
9
9
|
This can occur during early stages of install where the config file has not yet been created`);return}else throw Nt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}TJ(n,r),rS(n);let s=n.toJSON();if(_J.config=s,It=la(s),It.logging_rotation_rotate)for(let i in LC)It[i]&&Nt.error(`Config ${LC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Nt.trace(fJ)}}a(tS,"initConfig");function TJ(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Bn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Bn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Bn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(Nt.trace("Updating config file with missing config params"),gr.writeFileSync(t,String(e)))}a(TJ,"checkForUpdatedConfig");function rS(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=iJ(r,t);if(n.error)throw Cd.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(rS,"validateConfig");function gJ(e,t){It===void 0&&(It={});let r=Hn[e.toLowerCase()];if(r===void 0){Nt.trace(`Unable to update config object because config param '${e}' does not exist`);return}It[r.toLowerCase()]=t}a(gJ,"updateConfigObject");function BC(e,t,r=void 0,n=!1,s=!1,i=!1){It===void 0&&tS();let o=vC(Hn.hdb_root),c=Bn.join(o,Wr.HDB_CONFIG_FILE),l=di(c),_;if(r===void 0&&e.toLowerCase()===Kr.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=Hn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=eS(E,t);l.setIn([...f],h)}else for(let E in r){let f=Hn[E.toLowerCase()];if(f===Kr.HTTP_SECUREPORT&&r[E]===It[Kr.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===Kr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===It[Kr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===Kr.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),p=Wr.LEGACY_CONFIG_PARAMS[E.toUpperCase()];p&&p.startsWith("customFunctions")&&l.hasIn(p.split("_"))&&(f=p,h=p.split("_"));let S=eS(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(T){Nt.error(T)}}}_&&UC(l,_),rS(l);let u=l.getIn(["rootPath"]),d=Bn.join(u,Wr.HDB_CONFIG_FILE);n===!0&&RJ(c,u),gr.writeFileSync(d,String(l)),s&&(It=la(l.toJSON())),Nt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(BC,"updateConfigValue");function RJ(e,t){try{let r=Bn.join(t,"backup",`${Wr.HDB_CONFIG_FILE}.bak`);gr.copySync(e,r),Nt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Nt.error(EJ),Nt.error(r)}}a(RJ,"backupConfigFile");var AJ=["databases"];function la(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)),Ld=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])&&!AJ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Kr[l.toUpperCase()]&&Hn[l]&&(s[Hn[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(la,"flattenConfig");function eS(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(aJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ht.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Ht.autoCast(t)}a(eS,"castConfigValue");function OJ(){let e=Ht.getPropsFilePath(),t=no(e);return di(t).toJSON()}a(OJ,"getConfiguration");async function bJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return BC(void 0,void 0,s,!0),mJ}catch(i){throw typeof i=="string"||i instanceof String?lJ(i,i,uJ.BAD_REQUEST,void 0,void 0,!0):i}}a(bJ,"setConfiguration");function nS(){let e=Ht.getPropsFilePath();try{gr.accessSync(e,gr.constants.F_OK|gr.constants.R_OK)}catch(n){if(!Ht.noBootFile())throw Nt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=no(e);return di(t).toJSON()}a(nS,"readConfigFile");function di(e){return oJ.parseDocument(gr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(di,"parseYamlDoc");function yJ(){let e=nS(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ht.isEmptyOrZeroLength(t)?[]:t;let r=DC(t);if(r)throw Cd.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ht.isEmptyOrZeroLength(n)?[]:n;let s=DC(n);if(s)throw Cd.CONFIG_VALIDATION(s.message);if(!Ht.isEmptyOrZeroLength(n)&&!Ht.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Ht.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Cd.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(yJ,"getClusteringRoutes");function HC(e){let t=MC(e);It={};for(let r in Hn){let n=t.get(r.toUpperCase());if(Ht.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Hn[r].toLowerCase();s===Kr.LOGGING_ROOT?It[s]=Bn.dirname(n):It[s]=n}return It}a(HC,"initOldConfig");function NJ(e){let t=nS();return cJ.get(t,e.replaceAll("_","."))}a(NJ,"getConfigFromFile");async function IJ(e,t){let r=di(no());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await gr.writeFile(no(),String(r))}a(IJ,"addConfig");function wJ(e){let t=no(Ht.getPropsFilePath()),r=di(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Bn.join(n,Wr.HDB_CONFIG_FILE);gr.writeFileSync(s,String(r))}a(wJ,"deleteConfigFromFile");function CJ(){return Ld||(tS(),Ld)}a(CJ,"getConfigObj")});var FC=g((U_e,GC)=>{"use strict";var Md=U(),Pd=class{static{a(this,"BaseLicense")}constructor(t=0,r=Md.RAM_ALLOCATION_ENUM.DEFAULT,n=Md.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},sS=class extends Pd{static{a(this,"ExtendedLicense")}constructor(t=0,r=Md.RAM_ALLOCATION_ENUM.DEFAULT,n=Md.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};GC.exports={BaseLicense:Pd,ExtendedLicense:sS}});var so=g((B_e,KC)=>{"use strict";var _a=require("fs-extra"),kC=yd(),VC=require("crypto"),DJ=require("moment"),LJ=require("uuid").v4,rr=K(),oS=require("path"),MJ=J(),fi=U(),{totalmem:qC}=require("os"),PJ=FC().ExtendedLicense,ua="invalid license key format",UJ="061183",vJ="mofi25",BJ="aes-256-cbc",HJ=16,xJ=32,$C=ne();$C.initSync();var iS;KC.exports={validateLicense:YC,generateFingerPrint:FJ,licenseSearch:lS,getLicense:VJ,checkMemoryLimit:$J};function aS(){return oS.join($C.getHdbBasePath(),fi.LICENSE_KEY_DIR_NAME,fi.LICENSE_FILE_NAME)}a(aS,"getLicenseDirPath");function GJ(){let e=aS();return oS.join(e,fi.LICENSE_FILE_NAME)}a(GJ,"getLicenseFilePath");function cS(){let e=aS();return oS.join(e,fi.REG_KEY_FILE_NAME)}a(cS,"getFingerPrintFilePath");async function FJ(){let e=cS();try{return await _a.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await qJ();throw rr.error(`Error writing fingerprint file to ${e}`),rr.error(t),new Error("There was an error generating the fingerprint")}}a(FJ,"generateFingerPrint");async function qJ(){let e=LJ(),t=kC.hash(e),r=cS();try{await _a.mkdirp(aS()),await _a.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw rr.error(`Error writing fingerprint file to ${r}`),rr.error(n),new Error("There was an error generating the fingerprint")}return t}a(qJ,"writeFingerprint");function YC(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:fi.RAM_ALLOCATION_ENUM.DEFAULT,version:fi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return rr.error("empty license key passed to validate."),r;let n=cS(),s=!1;try{s=_a.statSync(n)}catch(i){rr.error(i)}if(s){let i;try{i=_a.readFileSync(n,"utf8")}catch{rr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(vJ),c=o[1];c=Buffer.concat([Buffer.from(c)],HJ);let l=Buffer.concat([Buffer.from(i)],xJ),_=VC.createDecipheriv(BJ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let f=kJ(o[0],i);if(f)u=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ua),rr.error(ua),new Error(ua)}let d;if(isNaN(u))try{d=JSON.parse(u),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(ua),rr.error(ua),new Error(ua)}else r.exp_date=u;r.exp_date<DJ().valueOf()&&(r.valid_date=!1),kC.validate(o[1],`${UJ}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||rr.error("Invalid licence"),r}a(YC,"validateLicense");function kJ(e,t){try{let r=VC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{rr.warn("Check old license failed")}}a(kJ,"checkOldLicense");function lS(){let e=new PJ,t=[];try{t=_a.readFileSync(GJ(),"utf-8").split(fi.NEW_LINE)}catch(r){r.code==="ENOENT"?rr.info("no license file found"):rr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(MJ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=YC(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){rr.error("There was an error parsing the license string."),rr.error(s),e.ram_allocation=fi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return iS=e,e}a(lS,"licenseSearch");async function VJ(){return iS||await lS(),iS}a(VJ,"getLicense");function $J(){let e=lS().ram_allocation,t=process.constrainedMemory?.()||qC();if(t=Math.round(Math.min(t,qC())/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($J,"checkMemoryLimit")});var En=g((q_e,cD)=>{"use strict";var JC="username is required",XC="nothing to update, must supply active, role or password to update",jC="password cannot be an empty string",ZC="If role is specified, it cannot be empty.",eD="active must be true or false";cD.exports={addUser:ZJ,alterUser:e4,dropUser:r4,getSuperUser:o4,userInfo:n4,listUsers:vd,listUsersExternal:s4,setUsersToGlobal:fa,findAndValidateUser:oD,getClusterUser:a4,USERNAME_REQUIRED:JC,ALTERUSER_NOTHING_TO_UPDATE:XC,EMPTY_PASSWORD:jC,EMPTY_ROLE:ZC,ACTIVE_BOOLEAN:eD};var tD=fn(),YJ=eo(),dS=yd(),rD=TC(),nD=Yr(),fS=ys(),Qr=J(),sD=require("validate.js"),Oe=K(),{promisify:KJ}=require("util"),ES=Cs(),WC=U(),QC=at(),WJ=Rr(),x_e=ne(),G_e=so(),QJ=Vi(),{table:F_e}=(Ae(),ie(ke)),{handleHDBError:is,hdb_errors:zJ}=se(),{HTTP_STATUS_CODES:os,AUTHENTICATION_ERROR_MSGS:uS,HDB_ERROR_MSGS:da}=zJ,{UserEventMsg:hS}=Ln(),_S=require("lodash"),{server:mS}=(ur(),ie(Bi)),JJ=K();mS.getUser=(e,t)=>oD(e,t,t!=null);var iD={username:!0,active:!0,role:!0,password:!0},zC=new Map,Ud=nD.searchByValue,XJ=nD.searchByHash,jJ=KJ(YJ.delete);async function ZJ(e){let t=sD.cleanAttributes(e,iD),r=rD.addUserValidation(t);if(r)throw is(new Error,r.message,os.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await Ud(n),s=s&&Array.from(s)}catch(l){throw Oe.error("There was an error searching for a role in add user"),Oe.error(l),l}if(!s||s.length<1)throw is(new Error,da.ROLE_NAME_NOT_FOUND(t.role),os.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw is(new Error,da.DUP_ROLES_FOUND(t.role),os.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=ES.encrypt(t.password)),t.password=dS.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await tD.insert(i)}catch(l){throw Oe.error("There was an error searching for a user."),Oe.error(l),l}Oe.debug(o);try{await fa()}catch(l){throw Oe.error("Got an error setting users to global"),Oe.error(l),l}if(o.skipped_hashes.length===1)throw is(new Error,da.USER_ALREADY_EXISTS(t.username),os.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],fS.signalUserChange(new hS(process.pid)),`${c.username} successfully added`}a(ZJ,"addUser");async function e4(e){let t=sD.cleanAttributes(e,iD);if(Qr.isEmptyOrZeroLength(t.username))throw new Error(JC);if(Qr.isEmptyOrZeroLength(t.password)&&Qr.isEmptyOrZeroLength(t.role)&&Qr.isEmptyOrZeroLength(t.active))throw new Error(XC);if(!Qr.isEmpty(t.password)&&Qr.isEmptyOrZeroLength(t.password.trim()))throw new Error(jC);if(!Qr.isEmpty(t.active)&&!Qr.isBoolean(t.active))throw new Error(eD);let r=t4(t.username);if(!Qr.isEmpty(t.password)&&!Qr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=ES.encrypt(t.password)),t.password=dS.hash(t.password)),t.role==="")throw new Error(ZC);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 Ud(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=da.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),is(new Error,c,os.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=da.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),is(new Error,c,os.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await tD.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await fa()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return fS.signalUserChange(new hS(process.pid)),s}a(e4,"alterUser");function t4(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(t4,"isClusterUser");async function r4(e){try{let t=rD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Qr.isEmpty(global.hdb_users.get(e.username)))throw is(new Error,da.USER_NOT_EXIST(e.username),os.NOT_FOUND,void 0,void 0,!0);let n;try{n=await jJ(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await fa()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return fS.signalUserChange(new hS(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(r4,"dropUser");async function n4(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=_S.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await XJ(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(n4,"userInfo");async function s4(){let e;try{e=await vd()}catch(t){throw Oe.error("Got an error listing users."),Oe.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(s4,"listUsersExternal");async function vd(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Ud(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.error(o),o}let r={};for(let o of t)r[o.id]=_S.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 Ud(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=_S.cloneDeep(o),o.role=r[o.role],i4(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),Qr.errorizeMessage(e)}return null}a(vd,"listUsers");function i4(e){try{if(!e){Oe.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(QJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(i4,"appendSystemTablesToRole");async function fa(){try{let e=await vd();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(fa,"setUsersToGlobal");async function oD(e,t,r=!0){global.hdb_users||await fa();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw is(new Error,uS.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw is(new Error,uS.USER_INACTIVE,os.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(zC.get(t)===n.password)return s;if(dS.validate(n.password,t))zC.set(t,n.password);else throw is(new Error,uS.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0)}return s}a(oD,"findAndValidateUser");async function o4(){global.hdb_users||await fa();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(o4,"getSuperUser");async function a4(){let e=await vd(),t=WJ.getConfigFromFile(WC.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Qr.isEmpty(r)&&r?.role?.role===WC.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=ES.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+QC.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+QC.SERVER_SUFFIX.ADMIN,r}a(a4,"getClusterUser");var aD=[];mS.invalidateUser=function(e){for(let t of aD)try{t(e)}catch(r){JJ.error("Error invalidating user",r)}};mS.onInvalidatedUser=function(e){aD.push(e)}});var dl=g((Y_e,dD)=>{"use strict";var io=K(),zr=U(),c4=py(),V_e=li(),$_e=ci(),l4=En(),{validateEvent:lD}=Ln(),_l=Un(),u4=require("process"),{resetDatabases:_4}=(Ae(),ie(ke)),d4={[zr.ITC_EVENT_TYPES.SCHEMA]:f4,[zr.ITC_EVENT_TYPES.USER]:_D};async function f4(e){let t=lD(e);if(t){io.error(t);return}io.trace("ITC schemaHandler received schema event:",e),await c4(e.message),await E4(e.message)}a(f4,"schemaHandler");async function E4(e){try{_l.resetReadTxn(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),_l.resetReadTxn(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),_l.resetReadTxn(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=_4();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){io.error(t)}}a(E4,"syncSchemaMetadata");var uD=[];async function _D(e){try{try{_l.resetReadTxn(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),_l.resetReadTxn(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){io.warn(r)}let t=lD(e);if(t){io.error(t);return}io.trace(`ITC userHandler ${zr.HDB_ITC_CLIENT_PREFIX}${u4.pid} received user event:`,e),await l4.setUsersToGlobal();for(let r of uD)r()}catch(t){io.error(t)}}a(_D,"userHandler");_D.addListener=function(e){uD.push(e)};dD.exports=d4});var Ln=g((X_e,ED)=>{"use strict";var W_e=K(),pS=J(),h4=U(),{ITC_ERRORS:fl}=vr(),{parentPort:Q_e,threadId:m4,isMainThread:p4,workerData:z_e}=require("worker_threads"),{onMessageFromWorkers:S4,broadcast:J_e,broadcastWithAcknowledgement:T4}=it();ED.exports={sendItcEvent:g4,validateEvent:fD,SchemaEventMsg:R4,UserEventMsg:A4};var Bd;S4(async(e,t)=>{Bd=Bd||dl(),fD(e),Bd[e.type]&&await Bd[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function g4(e){return!p4&&e.message&&(e.message.originator=m4),T4(e)}a(g4,"sendItcEvent");function fD(e){if(typeof e!="object")return fl.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||pS.isEmpty(e.type))return fl.MISSING_TYPE;if(!e.hasOwnProperty("message")||pS.isEmpty(e.message))return fl.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||pS.isEmpty(e.message.originator))return fl.MISSING_ORIGIN;if(h4.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return fl.INVALID_EVENT(e.type)}a(fD,"validateEvent");function R4(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(R4,"SchemaEventMsg");function A4(e){this.originator=e}a(A4,"UserEventMsg")});var ys=g((ede,SD)=>{"use strict";var hD=U(),Z_e=J(),Hd=K(),mD=Zb(),Ea,{sendItcEvent:pD}=Ln();function O4(e){try{Hd.trace("signalSchemaChange called with message:",e),Ea=Ea||dl();let t=new mD(hD.ITC_EVENT_TYPES.SCHEMA,e);return Ea.schema(t),pD(t)}catch(t){Hd.error(t)}}a(O4,"signalSchemaChange");function b4(e){try{Hd.trace("signalUserChange called with message:",e),Ea=Ea||dl();let t=new mD(hD.ITC_EVENT_TYPES.USER,e);return Ea.user(t),pD(t)}catch(t){Hd.error(t)}}a(b4,"signalUserChange");SD.exports={signalSchemaChange:O4,signalUserChange:b4}});var Sl={};qe(Sl,{addAnalyticsListener:()=>pl,recordAction:()=>nr,recordActionBinary:()=>Jr,setAnalyticsEnabled:()=>y4});function y4(e){ID=e}function nr(e,t,r,n,s){if(!ID)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Fd.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Fd.set(i,o)}xd||N4()}function Jr(e,t,r,n,s){nr(!!e,t,r,n,s)}function pl(e){DD.push(e)}function N4(){xd=performance.now(),setTimeout(async()=>{let e=performance.now()-xd;xd=0;let t=[],r={time:Date.now(),period:e,threadId:oo.threadId,metrics:t};for(let[s,i]of Fd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of LD){let E=Math.floor(c*d),f=o[E-1];if(E>l){let h=E-l;if(f===u){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:f,count:h}:f),u=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await MD()}let n=process.memoryUsage();t.push({metric:"memory",threadId:oo.threadId,byThread:!0,...n});for(let s of DD)s(t);Fd=new Map,oo.parentPort?oo.parentPort.postMessage({type:CD,report:r}):vD({report:r})},wD).unref()}async function I4(e,t=6e4){let r=gS(),n=PD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,El.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,El.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;u=p;let{metrics:T,threadId:A}=S;for(let N of T||[]){let{path:b,method:v,type:P,metric:q,count:M,total:Q,distribution:z,threads:j,...oe}=N;M||(M=1);let le=q+(b?"-"+b:"");v!==void 0&&(le+="-"+v),P!==void 0&&(le+="-"+P);let ue=c.get(le);if(ue){if(ue.threads){let Ne=ue.threads[A];if(Ne)ue=Ne;else{ue.threads[A]=Object.assign({},oe);continue}}ue.count||(ue.count=1);let Be=ue.count;for(let Ne in oe){let He=oe[Ne];typeof He=="number"&&(ue[Ne]=(ue[Ne]*Be+He*M)/(Be+M))}ue.count+=M,Q>=0&&(ue.total+=Q,ue.ratio=ue.total/ue.count)}else ue=Object.assign({period:t},N),delete ue.distribution,c.set(le,ue),ue.byThread&&(ue.threads=[],ue.threads[A]=Object.assign({},oe),_.push(ue));if(z){z=z.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Be=l.get(le);Be?Be.push(...z):l.set(le,z)}}await MD()}for(let p of _){let{path:S,method:T,type:A,metric:N,count:b,total:v,distribution:P,threads:q,...M}=p;q=q.filter(Q=>Q);for(let Q in M){if(typeof p[Q]!="number")continue;let z=0;for(let j of q){let oe=j[Q];typeof oe=="number"&&(z+=oe)}p[Q]=z}p.count=q.length,delete p.threads,delete p.byThread}for(let[p,S]of l){let T=c.get(p);S.sort((Ne,He)=>Ne.value>He.value?1:-1);let A=T.count-1,N=[],b=0,v=0,P;for(let Ne of LD){let He=A*Ne;for(;b<He;)P=S[v++],b+=P.count,v===1&&b--;let zu=S[v>1?v-2:0];P||(P=S[0]),N.push(P.value-(P.value-zu.value)*(b-He)/P.count)}let[q,M,Q,z,j,oe,le,ue,Be]=N;Object.assign(T,{p1:q,p10:M,p25:Q,median:z,p75:j,p90:oe,p95:le,p99:ue,p999:Be})}let d;for(let[p,S]of c)S.id=(0,Gd.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let p=(0,Gd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:f-TD,active:h-gD,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}TD=f,gD=h}async function RD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function gS(){return AD||(AD=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function PD(){return OD||(OD=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function D4(){UD=!0;let e=(0,ml.get)(TS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await I4(wD,e),await RD(gS(),w4),await RD(PD(),C4)},Math.min(e/2,2147483647)).unref()}function vD(e,t){let r=e.report;r.threadId=t?.threadId||oo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(bD+=n.mean*n.count);r.totalBytesProcessed=bD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(yD.get(t))}),yD.set(t,t.performance.eventLoopUtilization())),r.id=(0,Gd.getNextMonotonicTime)(),gS().primaryStore.put(r.id,r),UD||D4(),L4&&(BD=P4(r))}async function P4(e){if(await BD,!Ei){let r=(0,hl.dirname)((0,El.getLogFilePath)());try{Ei=await(0,SS.open)((0,hl.join)(r,"analytics.log"),"r+")}catch{Ei=await(0,SS.open)((0,hl.join)(r,"analytics.log"),"w+")}}let t=(await Ei.stat()).size;if(t>M4){let r=Buffer.alloc(t);await Ei.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Ei.write(r,{position:0}),await Ei.truncate(r.length),t=r.length}await Ei.write(JSON.stringify(e)+`
|
|
10
|
-
`,t)}var oo,ND,El,hl,SS,Gd,ml,TS,Fd,ID,xd,wD,CD,DD,LD,TD,gD,MD,w4,C4,AD,OD,UD,bD,yD,L4,BD,Ei,M4,Ds=Re(()=>{oo=require("worker_threads"),ND=x(it());Ae();El=x(K()),hl=require("path"),SS=require("fs/promises"),Gd=x(Br()),ml=x(ne()),TS=x(U());ur();(0,ml.initSync)();Fd=new Map,ID=(0,ml.get)(TS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(y4,"setAnalyticsEnabled");a(nr,"recordAction");st.recordAnalytics=nr;a(Jr,"recordActionBinary");xd=0,wD=1e3,CD="analytics-report",DD=[];a(pl,"addAnalyticsListener");LD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(N4,"sendAnalytics");a(I4,"aggregation");TD=0,gD=0,MD=a(()=>new Promise(setImmediate),"rest");a(RD,"cleanup");w4=36e5,C4=31536e6;a(gS,"getRawAnalyticsTable");a(PD,"getAnalyticsTable");(0,ND.setChildListenerByType)(CD,vD);a(D4,"startScheduledTasks");bD=0,yD=new Map,L4=!1;a(vD,"recordAnalytics");M4=1e6;a(P4,"logAnalytics")});var HD={};qe(HD,{Headers:()=>hi,appendHeader:()=>qd});function qd(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var hi,Tl=Re(()=>{hi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(qd,"appendHeader")});var bS={};qe(bS,{coerceType:()=>kd,makeTable:()=>Yd,setServerUtilities:()=>k4,updateResource:()=>Vd});function Yd(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]);let T=Zh(i,n,l),A=0,N,b,v={},P=Promise.resolve(),q,M,Q;for(let Y of S)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(q=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(M=Y),Y.expiresAt&&(Q=Y),Y.isPrimaryKey&&(v=Y);let z,j=[],oe=[],le=1,ue=2,Be={},Ne={},He=864e5,zu,Ju,Qs,XA=!1,Rh,Ah,zG=i.getRange({start:!1,end:!1}).constructor,JG=10,XG=6;h&&eO();class Ye extends Yt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=q;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=u;static schemaDefined=_;static sourcedFrom(m,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),b=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let D=a(L=>{let I=this.sources.slice(0,-1);if(I=I.filter(B=>B[L]&&(!B[L].reliesOnPrototype||B.prototype[L])),I.length>0)if(I.length===1){let B=I[0];return(F,C,G)=>{if(F?.source!==B)return B[L](C,G,F)}}else return(B,F,C)=>{let G=[];for(let H of I){if(B?.source===H)break;G.push(H[L](F,C,B))}return Promise.all(G)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],y=a(L=>{if(R[L]&&(!R[L].reliesOnPrototype||R.prototype[L]))return(I,B,F)=>{if(!I?.source)return R[L](B,F,I)}},"getApplyToCanonicalSource");return Be={put:y("put"),patch:y("patch"),delete:y("delete"),publish:y("publish")},Ne={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let L=!1,I=a(async(B,F)=>{let C=B.value,G=B.table?ct[c][B.table]:Ye;if(c===Gn.SYSTEM_SCHEMA_NAME&&(B.table===Gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||B.table===Gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),B.id===void 0&&(B.id=C[G.primaryKey],B.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(B));B.source=m;let H=await G.getResource(B.id,F,ha);switch(B.type){case"put":return H._writeUpdate(C,!0,ha);case"patch":return H._writeUpdate(C,!1,ha);case"delete":return H._writeDelete(ha);case"publish":return H._writePublish(C,ha);case"invalidate":return H.invalidate(ha);default:et.error("Unknown operation",B.type,B.id)}},"writeUpdate");try{let B=m.subscribe;B&&p==null&&(p=!0);let F=m.subscribeOnThisThread?m.subscribeOnThisThread((0,co.getWorkerIndex)()):(0,co.getWorkerIndex)()===0,C=B&&F&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let H of C)try{if(!(H.type==="transaction"?H.writes[0]:H)){et.error("Bad subscription event",H);continue}if(H.source=m,G)if(H.beginTxn)G.resolve();else{I(H,G);continue}if(H.type==="end_txn")continue;let _e=je(H,()=>{if(H.type==="transaction"){let re=[];for(let Ue of H.writes)try{re.push(I(Ue,H))}catch(ce){throw ce.message+=" writing "+JSON.stringify(Ue)+" of event "+JSON.stringify(H),ce}return Promise.all(re)}else if(H.type==="define_schema"){let re=this.attributes.slice(0),Ue;for(let ce of H.attributes)re.find(De=>De.name===ce.name)||(re.push(ce),Ue=!0);Ue&&(Et({table:s,database:c,attributes:re,origin:"cluster"}),yl.signalSchemaChange(new Nl.SchemaEventMsg(process.pid,Gn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return H.beginTxn?(G=H,I(H,H),new Promise(re=>{G.resolve=re})):I(H,H)});L&&(await _e,yl.signalUserChange(new Nl.UserEventMsg(process.pid))),H.onCommit&&(_e?.then?_e.then(H.onCommit):H.onCommit())}catch(Z){et.error("error in subscription handler",Z)}}}catch(B){et.error(B)}})(),this}static get isCaching(){return b}static getResource(m,O,D){let R=super.getResource(m,O,D);if(m!=null){uc(m);try{if(R.hasOwnProperty(fe))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let y=!D?.async||i.cache?.get(m),L=bn(O),I=L.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Oh(m,O,{transaction:I},y,B=>{if(B?Vd(R,B):R[fe]=null,O.onlyIfCached&&O.noCacheStore){if(!R.doesExist())throw new Or.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let F=bh(m,B,O,R);if(F)return L?.disregardReadTxn(),R[RS]=!0,OS(F,C=>(Vd(R,C),R))}return R})}catch(y){throw y.message.includes("Unable to serialize object")&&(y.message+=": "+JSON.stringify(m)),y}}return R}ensureLoaded(){let m=bh(this[Me],this[Ar],this[be]);if(m)return this[RS]=!0,OS(m,O=>{this[Ar]=O,this[fe]=O.value,this[Ol]=O.version})}static setTTLExpiration(m){if(typeof m=="number")E=m*1e3,f||(f=0);else if(m&&typeof m=="object")E=m.expiration*1e3,f=(m.eviction||0)*1e3,He=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");He=He||(E+f)/4,Zu()}static enableAuditing(m=!0){h=m,m&&eO(),Ye.audit=m}static coerceId(m){return m===""?null:kd(m,v)}static async dropTable(){if(delete ct[c][s],c===o){for(let m of S)u.remove(Ye.tableName+"/"+m.name),r[m.name]?.drop();u.remove(Ye.tableName+"/"),i.drop(),await u.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));yl.signalSchemaChange(new Nl.SchemaEventMsg(process.pid,Gn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[wn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let O=Ye.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(m,O){let D=ju(m);if(D?.read){if(D.isSuperUser)return!0;let R=D.attribute_permissions,y=O?.select;if(R?.length>0||XA&&y){if(O||(O={}),y){let L=R?.length>0&&AS(R,"read");O.select=y.map(I=>{let B=I.name||I;if(!L||L[B]){let F=Qs[B]?.definition?.tableClass;if(F){if(I.name||(I={name:I}),!F.prototype.allowRead.call(null,m,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else O.select=R.filter(L=>L.read&&!Qs[L.attribute_name]).map(L=>L.attribute_name);return O}else return!0}}allowUpdate(m,O){let D=ju(m);if(D?.update){let R=D.attribute_permissions;if(R?.length>0){let y=AS(R,"update");for(let L in O)if(!y[L])return!1;for(let L of R){let I=L.attribute_name;!L.update&&!(I in O)&&(O[I]=this.getProperty(I))}}return!0}}allowCreate(m,O){if(this[wn]){let D=ju(m);if(D?.insert){let R=D.attribute_permissions;if(R?.length>0){let y=AS(R,"insert");for(let L in O)if(!y[L])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return ju(m)?.delete}update(m,O){if(!bn(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;return typeof m=="object"&&m&&(O?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[fe]={},this[Tt]=m):(R=this[Tt],R&&(m=Object.assign(R,m)),this[Tt]=R=m)),this._writeUpdate(this[Tt],O),this}addTo(m,O){if(typeof O=="number"||typeof O=="bigint")this[gl]===GD?this.set(m,(+this.getProperty(m)||0)+O):(this[gl]||this.update(),this.set(m,new U_(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,O){if(typeof O=="number")return this.addTo(m,-O);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Ar]}invalidate(m){let O=this[be],D=this[Me];uc(D),bn(this[be]).addWrite({key:D,store:i,invalidated:!0,entry:this[Ar],nodeName:this[be]?.nodeName,before:Be.invalidate?.bind(this,O,D),beforeIntermediate:Ne.invalidate?.bind(this,O,D),commit:(y,L)=>{if(L?.version>y)return;let I=null;for(let B in r)I||(I={}),I[B]=this.getProperty(B);T(D,I,this[Ar],y,Rl,h,this[be],0,"invalidate")}})}static evict(m,O,D){let R=this.Source,y;if(!((b||h)&&(!O||(y=i.getEntry(m),!y||!O)||y.version!==D))){if(b){if(i.hasLock(m,y.version))return;let L;for(let I in r)L||(L={}),L[I]=O[I];if(L)return T(m,L,y,D,Al,null,null,0,null,!0)}return i.ifVersion(m,D,()=>{Xu(m,O,null)}),h?T(m,null,y,D,Al,null,null,0,null,!0):i.remove(m,D)}}lock(){throw new Error("Not yet implemented")}static operation(m,O){return m.table||=s,m.schema||=c,WD.operation(m,O)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,O,D){let R=this[be],y=bn(R),L=this[Me];uc(L);let I=this[Ar];this[gl]=O?GD:G4;let B={key:L,store:i,entry:I,nodeName:R?.nodeName,validate:F=>{m||(m=this[Tt]),O||m&&M_(this[Tt]===m?this:m)?R?.source||(y.checkOverloaded(),this.validate(m,!O),M&&(m[M.name]=M.type==="Date"?new Date(F):M.type==="String"?new Date(F).toISOString():F),O&&(t&&m[t]!==L&&(m[t]=L),q&&(I?.value?m[q.name]=I?.value[q.name]:m[q.name]=q.type==="Date"?new Date(F):q.type==="String"?new Date(F).toISOString():F),m=Fi(m))):y.removeWrite(B)},before:O?Be.put?()=>Be.put(R,L,m):null:Be.patch?()=>Be.patch(R,L,m):Be.put?()=>Be.put(R,L,Fi(this)):null,beforeIntermediate:O?Ne.put?()=>Ne.put(R,L,m):null:Ne.patch?()=>Ne.patch(R,L,m):Ne.put?()=>Ne.put(R,L,Fi(this)):null,commit:(F,C,G)=>{if(G){if(R&&C?.version>(R.lastModified||0)&&(R.lastModified=C.version),this[Ar]=C,C?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");O||(this[fe]=C?.value??null)}this[Tt]=void 0,this[Ol]=F;let H=C?.value,Z=m;if(this[gl]=0,C?.version>=F)if(h){let ce=C.localTime,De=C.version;for(;Z&&(ce>F||De>=F&&ce>0);){let te=l.get(ce);if(!te)break;let X=Bt(te);if(De=X.version,De>F){if(X.type==="patch"){let Se=X.getValue(i);Z=D_(Z,Se)}else if(X.type==="put"||X.type==="delete")return}else if(De===F)return;ce=X.previousLocalTime}}else{if(O)return;Z=D_(Z,H)}let _e;if(O?_e=Z:(this[fe]=H,_e=O?Z:Fi(this,Z)),this[fe]=_e,_e?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let re;O||(re=m),Xu(L,H,_e);let Ue=O?"put":"patch";T(L,_e,C,F,0,h,R,R.expiresAt||(E?E+Date.now():0),Ue,!1,re),R.expiresAt&&Zu()}};y.addWrite(B)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[wn]){for await(let O of this.search(m))(await Ye.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[fe]?this._writeDelete(m):!1}_writeDelete(m){let O=bn(this[be]),D=this[Me];uc(D);let R=this[be];return O.addWrite({key:D,store:i,resource:this,nodeName:R?.nodeName,before:Be.delete?.bind(this,R,D),beforeIntermediate:Ne.delete?.bind(this,R,D),commit:(y,L,I)=>{let B=L?.value;I&&(R&&L?.version>(R.lastModified||0)&&(R.lastModified=L.version),Vd(this,L)),!(L?.version>y)&&(Xu(this[Me],B),et.trace("Write delete entry",D,y),h||p?(T(D,null,this[Ar],y,0,h,this[be],0,"delete"),h||Zu()):i.remove(this[Me]))}}),!0}search(m){let O=this[be],D=bn(O);if(!m)throw new Error("No query provided");let R=m.conditions;R?R.length===void 0&&(R=R[Symbol.iterator]?Array.from(R):[R]):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(R=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(R));let y,L={};function I(X,Se){let xe;switch(Se){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');xe=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Se)}let Kn=xe&&{},zs;for(let Ke of X){if(Ke.conditions){Ke.conditions=I(Ke.conditions,Ke.operator);continue}let Vt=Ke[0]??Ke.attribute,sn=Vt==null?v:As(S,Vt);if(sn){if(xe){let Wn=In(Vt),$t=Kn[Wn];$t?($t.push(Ke),zs=!0):Kn[Wn]=[Ke]}(sn.type||_m[Ke.comparator])&&(Ke[1]===void 0?Ke.value=F(Ke.value,sn):Ke[1]=F(Ke[1],sn))}else if(Vt!=null)throw(0,Or.handleHDBError)(new Error,`${Vt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(zs)for(let Ke in Kn){let Vt=Kn[Ke],sn=Vt.length;if(sn>1)for(let Wn=0;Wn<sn;Wn++){let $t=Vt[Wn];if($t.comparator==="ge"||$t.comparator==="greater_than_equal")for(let Js=0;Js<sn;Js++){let Go=Vt[Js];(Go.comparator==="le"||Go.comparator==="less_than_equal")&&($t.comparator="between",$t.value=[$t.value,Go.value],X.splice(X.indexOf(Go),1))}if($t.comparator==="equals"||!$t.comparator){for(let Js=0;Js<sn;Js++)if(Js!==Wn){let Go=Vt[Js];X.splice(X.indexOf(Go),1)}break}}}return X}a(I,"prepareConditions");function B(X,Se){if(m.enforceExecutionOrder)return X;for(let xe of X)xe.conditions&&(xe.conditions=B(xe.conditions,xe.operator));return X.length>1&&Se!=="or"?(0,YD.sortBy)(X,F_(Ye)):X}a(B,"orderConditions");function F(X,Se){return Array.isArray(X)?X.map(xe=>kd(xe,Se)):kd(X,Se)}a(F,"coerceTypedValues");let C=m.operator;(R.length>0||C)&&(R=I(R,C));let G=typeof m.sort=="object"&&m.sort,H;if(G&&C!=="or"){let X=G.attribute;if(X==null)throw new Or.ClientError("Sort requires an attribute");if(y=R.find(Se=>In(Se.attribute)===In(X)),!y){let Se=As(S,X);if(!Se)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);if(Se.indexed)y={attribute:X,comparator:"sort"},R.push(y);else if(R.length===0&&!m.allowFullScan)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not indexed and not combined with any other conditions`,404)}y&&(y.descending=!!G.descending)}R=B(R,C),G&&(y&&R[0]===y?G.next&&(H={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(y&&R.splice(R.indexOf(y),1),H=G));let Z=m.select;if(R.length===0&&(R=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:R,operator:C,postOrdering:H,selectApplied:!!Z};let _e=D.useReadTxn(),re=dm(R,C,Ye,_e,m,O,(X,Se)=>jA(X,Z,O,_e,Se),L),Ue=m.ensureLoaded!==!1;H||(re=te(re));let ce=Ye.transformEntryForSelect(Z,O,_e,L,Ue,!0),De=Ye.transformToOrderedSelect(re,Z,H,_e,O,ce);function te(X){return m.offset||m.limit!==void 0?X.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):X}return a(te,"applyOffset"),H&&(De=te(De)),De.onDone=()=>{De.onDone=null,D.doneReadTxn()},De.selectApplied=!0,De.getColumns=()=>{if(Z){let X=[];for(let Se of Z)Se==="*"?X.push(...S.map(xe=>xe.name)):X.push(Se.name||Se);return X}return S.map(X=>X.name)},De}static transformToOrderedSelect(m,O,D,R,y,L){let I=new zG;if(D){m=jA(m,O,R,y,null);let B;I.iterate=function(){let C,G=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),H,Z=D.dbOrderedAttribute,_e,re,Ue=!0;function ce(te){let X=te.next&&ce(te.next),Se=te.descending;return(xe,Kn)=>{let zs=yh(xe,te.attribute,R),Ke=yh(Kn,te.attribute,R),Vt=Se?(0,lo.compareKeys)(Ke,zs):(0,lo.compareKeys)(zs,Ke);return Vt===0?X?.(xe,Kn)||0:Vt}}a(ce,"createComparator");let De=ce(D);return{async next(){let te;if(C)if(te=C.next(),te.done){if(H)return I.onDone&&I.onDone(),te}else return{value:await L.call(this,te.value)};B=[],_e&&B.push(_e);do if(te=await G.next(),te.done){if(H=!0,B.length)break;return I.onDone&&I.onDone(),te}else{let X=te.value;if(X?.then&&(X=await X),Z){let Se=yh(X,Z,R);if(Ue)Ue=!1,re=Se;else if(Se!==re){re=Se,_e=X;break}}B.push(X)}while(!0);return D.isGrouped,B.sort(De),C=B[Symbol.iterator](),te=C.next(),te.done?(I.onDone&&I.onDone(),te):{value:await L.call(this,te.value)}},return(){I.onDone&&I.onDone(),G.return()},throw(){I.onDone&&I.onDone(),G.throw()}}};let F=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let G=0;G<O.length;G++){let H=O[G],Z;if(H.name===C.attribute[0]){for(Z=H.sort||(H.sort={});Z.next;)Z=Z.next;Z.attribute=C.attribute.slice(1),Z.descending=C.descending}else H===C.attribute[0]&&(O[G]=Z={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&F(C.next)},"applySortingOnSelect");F(D)}else I.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),I=I.map(L);return I}static transformEntryForSelect(m,O,D,R,y,L){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(G=>(O?.transaction?.stale&&(O.transaction.stale=!1),G?.key??G),"transform");return m===t?C:m.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let I;y&&b&&!m?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(I=!0);let B,F=a(function(C){let G;if(O?.transaction?.stale&&(O.transaction.stale=!1),C!=null){if(Rh=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Oh(C.key??C,O,{transaction:D,lazy:m?.length<4},this?.isSync,H=>H),C?.then)return C.then(F.bind(this));G=C?.value}if(I&&C?.metadataFlags&(Rl|Al)||C?.expiresAt&&C?.expiresAt<Date.now()){if(O.onlyIfCached&&O.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let H=bh(C.key??C,C,O);if(H?.then)return H.then(F)}}if(G==null)return L?ao.SKIP:G;if(m&&!(m[0]==="*"&&m.length===1)){let H,Z=a((re,Ue)=>{let ce;typeof re=="object"?ce=re.name:ce=re;let De=Qs?.[ce],te;if(De){let X=R?.[ce];if(X)if(X.hasMappings){let xe=De.from?G[De.from]:In(C.key);te=X.get(xe),te||(te=[])}else te=X.fromRecord?.(G);else te=De(G,O,C);let Se=a(xe=>{if(xe&&typeof xe=="object"){let Kn=De.definition?.tableClass||Ye;B||(B={});let zs=B[ce]||(B[ce]=Kn.transformEntryForSelect(ce===re?null:re.select||(Array.isArray(re)?re:null),O,D,X,y));if(Array.isArray(xe)){let Ke=[],Vt=Kn.transformToOrderedSelect(xe,re.select,typeof re.sort=="object"&&re.sort,O,D,zs)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),sn=a($t=>{for(;!$t.done;){if($t?.then)return $t.then(sn);Ke.push($t.value),$t=Vt.next()}Ue(Ke,ce)},"nextValue"),Wn=sn(Vt.next());Wn&&(H||(H=[]),H.push(Wn));return}else if(xe=zs.call(this,xe),xe?.then){H||(H=[]),H.push(xe.then(Ke=>Ue(Ke,ce)));return}}Ue(xe,ce)},"handleResolvedValue");te?.then?(H||(H=[]),H.push(te.then(Se))):Se(te);return}else te=G[ce],te&&typeof te=="object"&&ce!==re&&(te=Ye.transformEntryForSelect(re.select||re,O,D,null)({value:te}));Ue(te,ce)},"selectAttribute"),_e;if(typeof m=="string")Z(m,re=>{_e=re});else if(Array.isArray(m))if(m.asArray)_e=[],m.forEach((re,Ue)=>{re==="*"?m[Ue]=G:Z(re,ce=>_e[Ue]=ce)});else{_e={};let re=m.forceNulls;for(let Ue of m)if(Ue==="*")for(let ce in G)_e[ce]=G[ce];else Z(Ue,(ce,De)=>{ce===void 0&&re&&(ce=null),_e[De]=ce})}else throw new Or.ClientError("Invalid select"+m);return H?Promise.all(H).then(()=>_e):_e}return G},"transform");return F}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let O=!m.rawEvents,D=[],R=zb(Ye,this[Me]??null,function(L,I,B,F){try{let C=I.getValue?.(i,O);if(!C&&I.type==="patch"&&O){let H=i.getEntry(L);H?.version===I.version?C=H.value:C=I.getValue?.(i,!0,B),I.type="put"}let G={id:L,timestamp:B,value:C,version:I.version,type:I.type,beginTxn:F};D?D.push(G):this.send(G)}catch(C){et.error(C)}},m.startTime||0,m),y=(async()=>{this[wn]&&(R.includeDescendants=!0,m.onlyChildren&&(R.onlyChildren=!0)),m.supportsTransactions&&(R.supportsTransactions=!0);let L=this[Me],I=m.previousCount;I>1e3&&(I=1e3);let B=m.startTime;if(this[wn]){if(B){if(I)throw new Or.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:F,value:C}of l.getRange({start:B,exclusiveStart:!0,snapshot:!1})){let G=Bt(C);if(G.tableId!==n)continue;let H=G.recordId;if(L==null||VD(L,H)){let Z=G.getValue(i,O,F);if(R.send({id:H,timestamp:F,value:Z,version:G.version,type:G.type}),R.queue?.length>qD&&await R.waitForDrain()===!1)return}R.startTime=F}}else if(I){let F=[];for(let{key:C,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let H=Bt(G);if(H.tableId!==n)continue;let Z=H.recordId;if(L==null||VD(L,Z)){let _e=H.getValue(i,O,C);if(F.push({id:Z,timestamp:C,value:_e,version:H.version,type:H.type}),--I<=0)break}}catch(H){et.error("Error getting history entry",C,H)}for(let C=F.length;C>0;)R.send(F[--C]);F[0]&&(R.startTime=F[0].timestamp)}else if(!m.omitCurrent){for(let{key:F,value:C,version:G,localTime:H}of i.getRange({start:L??!1,end:L==null?void 0:[L,lo.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(R.send({id:F,timestamp:H,value:C,version:G,type:"put"}),R.queue?.length>qD&&await R.waitForDrain()===!1))return}}else{I&&!B&&(B=0);let F=this[Ar]?.localTime;if(F===jh&&(i.cache?.delete(L),this[Ar]=i.getEntry(L),et.trace("re-retrieved record",F,this[Ar]?.localTime),F=this[Ar]?.localTime),et.trace("Subscription from",B,"from",L,F),B<F){let C=[],G=F;do{let H=l.get(G);if(H){m.omitCurrent=!0;let Z=Bt(H),_e=Z.getValue(i,O,G);O&&(Z.type="put"),C.push({id:L,value:_e,timestamp:G,...Z}),G=Z.previousLocalTime}else break;I&&I--}while(G>B&&I!==0);for(let H=C.length;H>0;)R.send(C[--H]);R.startTime=F}!m.omitCurrent&&this.doesExist()&&R.send({id:L,timestamp:F,value:this[fe],version:this[Ol],type:"put"})}for(let F of D)R.send(F);D=null})();return m.listener&&R.on("data",m.listener),R}doesExist(){return!!(this[fe]||this[gl])}publish(m,O){this._writePublish(m,O)}_writePublish(m,O){let D=bn(this[be]),R=this[Me]||null;uc(R);let y=this[be];D.addWrite({key:R,store:i,entry:this[Ar],nodeName:y?.nodeName,validate:()=>{y?.source||(D.checkOverloaded(),this.validate(m))},before:Be.publish?.bind(this,y,R,m),beforeIntermediate:Ne.publish?.bind(this,y,R,m),commit:(L,I,B)=>{I===void 0&&p&&!h&&Zu(),T(R,I?.value??null,I,I?.version||L,0,!0,y,I?.expiresAt,"message",!1,m)}})}validate(m,O){let D,R=a((y,L,I)=>{if(L.type&&y!=null)if(O&&y.__op__&&(y=y.value),L.properties){typeof y!="object"&&(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be an object${L.type?" ("+L.type+")":""}`);let B=L.properties;for(let F=0,C=B.length;F<C;F++){let G=B[F],H=R(y[G.name],G,I+"."+G.name);H&&(y[G.name]=H)}if(L.sealed&&y!=null&&typeof y=="object")for(let F in y)B.find(C=>C.name===F)||(D||(D=[])).push(`Property ${F} is not allowed within object in property ${I}`)}else switch(L.type){case"Int":(typeof y!="number"||y>>0!==y)&&(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof y!="number"||!(Math.floor(y)===y&&Math.abs(y)<=9007199254740992))&&(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof y!="number"&&(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a number`);break;case"ID":typeof y=="string"||y?.length>0&&y.every?.(B=>typeof B=="string")||(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof y!="string"&&(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a string`);break;case"Boolean":typeof y!="boolean"&&(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a boolean`);break;case"Date":if(!(y instanceof Date)){if(typeof y=="string"||typeof y=="number")return new Date(y);(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof y!="bigint"){if(typeof y=="string"||typeof y=="number")return BigInt(y);(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a bigint`)}break;case"Bytes":y instanceof Uint8Array||(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(y)){if(L.elements)for(let B=0,F=y.length;B<F;B++){let C=y[B],G=R(C,L.elements,I+"[*]");G&&(y[B]=G)}}else(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a Buffer or Uint8Array`);break}L.nullable===!1&&y==null&&(D||(D=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let y=0,L=S.length;y<L;y++){let I=S[y];if(!I.relationship&&(!O||I.name in m)){let B=R(m[I.name],I,I.name);B&&(m[I.name]=B)}}if(d)for(let y in m)S.find(L=>L.name===y)||(D||(D=[])).push(`Property ${y} is not allowed`);if(D)throw new Or.ClientError(D.join(". "))}getUpdatedTime(){return this[Ol]}wasLoadedFromSource(){return b?!!this[RS]:void 0}static async addAttributes(m){let O=S.slice(0);for(let D of m){if(!D.name)throw new Or.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Or.ClientError("Attribute names cannot include backticks or forward slashes");(0,KD.validateAttribute)(D.name),O.push(D)}return Et({table:s,database:c,schemaDefined:_,attributes:O}),Ye.indexingOperation}static async removeAttributes(m){let O=S.filter(D=>!m.includes(D.name));return Et({table:s,database:c,schemaDefined:_,attributes:O}),Ye.indexingOperation}static getRecordCount(m){let O=i.getStats().entryCount,D=1e3/2,R=performance.now(),y=Math.floor(O/2),L=m?.exactCount,I=0,B=0,F;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&I++,B++,!L&&B<y&&performance.now()-R>D){F=B;break}if(F){let C=I;I=0;for(let{value:te}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:F}))te!=null&&I++;let G=F*2,H=(I+C)/G,Z=Math.pow((I-C+1)/F/2,2)+H*(1-H)/G,_e=Math.max(Math.sqrt(Z)*O,1),re=Math.round(H*O),Ue=Math.max(re-1.96*_e,I+C),ce=Math.min(re+1.96*_e,O),De=Math.pow(10,Math.round(Math.log10(_e)));return De>re&&(De=De/10),I=Math.round(re/De)*De,{recordCount:I,estimatedRange:[Math.round(Ue),Math.round(ce)]}}return{recordCount:I}}static updatedAttributes(){Qs=this.propertyResolvers={$id:(m,O,D)=>({value:D.key}),$updatedtime:(m,O,D)=>D.version,$record:(m,O,D)=>D?{value:m}:m};for(let m of this.attributes){m.resolve=null;let O=m.relationship;if(O)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),XA=!0,O.to)m.elements?.definition?(Qs[m.name]=m.resolve=(D,R,y)=>{let L=D[O.from?O.from:t],I=m.elements.definition.tableClass;return y?Qo({attribute:O.to,value:L},bn(R).getReadTxn(),!1,I,!1).asArray:I.search([{attribute:O.to,value:L}],R).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,O.from&&(m.resolve.from=O.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(O.from){let D=m.definition||m.elements?.definition;D?(Qs[m.name]=m.resolve=(R,y,L)=>{let I=R[O.from];if(I!==void 0){if(m.elements){let B,F=I.map(C=>{let G=L?D.tableClass.primaryStore.getEntry(C,{transaction:bn(y).getReadTxn()}):D.tableClass.get(C,y);return G?.then&&(B=!0),G});return O.filterMissing?B?Promise.all(F).then(C=>C.filter($D)):F.filter($D):B?Promise.all(F):F}return L?D.tableClass.primaryStore.getEntry(I,{transaction:bn(y).getReadTxn()}):D.tableClass.get(I,y)}},m.set=(R,y)=>{if(Array.isArray(y)){let L=y.map(I=>I[Me]||I[D.tableClass.primaryKey]);R[O.from]=L}else{let L=y[Me]||y[D.tableClass.primaryKey];R[O.from]=L}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=O.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`)}v_(this,this)}static async deleteHistory(m=0,O=!1){let D;for(let{key:R,value:y}of l.getRange({start:0,end:m}))await ma(),Bt(y).tableId===n&&(D=I_(l,R,y));if(O)for(let{key:R,value:y,localTime:L}of i.getRange({start:0,versions:!0}))await ma(),y===null&&L<m&&(D=i.remove(R));await D}static async*getHistory(m=0,O=1/0){for(let{key:D,value:R}of l.getRange({start:m||1,end:O})){await ma();let y=Bt(R);y.tableId===n&&(yield{id:y.recordId,localTime:D,version:y.version,type:y.type,value:y.getValue(i,!0,D),user:y.user})}}static async getHistoryOfRecord(m){let O=[];if(m==null)throw new Error("An id is required");let D=i.getEntry(m);if(!D)return O;let R=D.localTime;if(!R)throw new Error("The entry does not have a local audit time");let y=0;do{await ma();let L=l.get(R);if(L){let I=Bt(L);O.push({id:I.recordId,localTime:R,version:I.version,type:I.type,value:I.getValue(i,!0,R),user:I.user}),R=I.previousLocalTime}else break}while(y<1e3&&R);return O.reverse()}static cleanup(){z?.remove()}}Ye.updatedAttributes();let jG=Ye.prototype;return jG[x4]=!0,E&&Ye.setTTLExpiration(E/1e3),Q&&ZG(),Ye;function Xu(Y,m,O){let D;for(let R in r){let y=r[R],L=y.isIndexing,I=O?.[R],B=m?.[R];if(I===B&&!L)continue;D=!0;let F=y.indexNulls,C=(0,bl.getIndexedValues)(I,F),G=(0,bl.getIndexedValues)(B,F);if(G?.length>0){let H=new Set(G);if(C=C?C.filter(Z=>{if(H.has(Z))H.delete(Z);else return!0}):[],G=Array.from(H),(G.length>0||C.length>0)&&xD){let Z=G.concat(C).map(_e=>({key:_e,value:Y}));y.prefetch(Z,kD)}for(let Z=0,_e=G.length;Z<_e;Z++)y.remove(G[Z],Y)}else C?.length>0&&xD&&y.prefetch(C.map(H=>({key:H,value:Y})),kD);if(C)for(let H=0,Z=C.length;H<Z;H++)y.put(C[H],Y)}return D}a(Xu,"updateIndices");function uc(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>FD)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,lo.writeKey)(Y,F4,0)>FD)throw new Error("Primary key size is too large: "+Y.length);return!0}a(uc,"checkValidId");function Oh(Y,m,O,D,R){let y=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),O.transaction?.isDone)return R(null,Y);let L=i.getEntry(Y,O);return L&&m&&(L?.version>(m.lastModified||0)&&(m.lastModified=L.version),L?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=L.localTime)),R(L,Y)},"whenPrefetched");return D?y():le>0?(le--,y()):new Promise((L,I)=>{le===0?(le--,i.prefetch([Y],()=>{B(),F()})):(j.push(Y),oe.push(F),j.length>XG&&(le--,B()));function B(){if(j.length>0){let C=oe;i.prefetch(j,()=>{le===-1?B():le++;for(let G of C)G()}),j=[],oe=[],ue>2&&ue--}else le=ue,ue<JG&&ue++}a(B,"prefetch");function F(){try{L(y())}catch(C){I(C)}}a(F,"load")})}a(Oh,"loadLocalRecord");function ju(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return q4;let O=m[c],D,R=O?.tables;if(R)return R[s];if(c==="data"&&(D=m[s])&&!D.tables)return D}a(ju,"getTablePermissions");function bh(Y,m,O,D){if(b){let R;if(O.noCache?R=!0:(m?(!m.value||m.metadataFlags&(Rl|Al)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,Jr(!R,"cache-hit",s)),R){let y=ZA(Y,m,O).then(L=>(L?.value?.[fe]&&et.error("Can not assign a record with a record property"),O&&(L?.version>(O.lastModified||0)&&(O.lastModified=L.version),O.lastRefreshed=Date.now()),L));if(O?.onlyIfCached||m?.value&&D?.allowStaleWhileRevalidate?.(m,Y)){if(y.catch(L=>et.warn(L)),O?.onlyIfCached&&!D.doesExist())throw new Or.ServerError("Entry is not cached",504);return}else return y}}else if(m?.value&&m.expiresAt&&m.expiresAt<Date.now())return Ye.evict(m.key,m.value,m.version),m.value=null,{then(R){return R(m)}}}a(bh,"ensureLoadedFromSource");function bn(Y){let m=Y?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let O=m.next;if(!O)return m=m.next=new qi,m.lmdbDb=i,m;m=O}while(!0)}else return new x_}a(bn,"txnForContext");function yh(Y,m,O){if(!Y)return;Rh=Y;let D=Y.value||Y.deref?.()||(Rh=i.getEntry(Y.key))?.value;if(typeof m=="object"){let y=Qs,L=D;for(let I=0,B=m.length;I<B;I++){let F=m[I],C=y?.[F];L=C&&L?C(L,O,!0)?.value:L?.[F],y=C?.definition?.tableClass?.propertyResolvers}return L}let R=Qs[m];return R?R(D,O):D[m]}a(yh,"getAttributeValue");function jA(Y,m,O,D,R){let y=R?.length,L={transaction:D,lazy:y>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},I;function B(F,C){let G=F?.value;if(!G)return ao.SKIP;for(let H=0;H<y;H++)if(!I?.includes(H)&&!R[H](G,F))return ao.SKIP;return C!==void 0&&(F.key=C),F}if(a(B,"processEntry"),y>0||!Y.hasEntries){let F=Y.map(C=>{if(I=null,typeof C=="object"&&C?.key!==void 0)return y>0?B(C):C;if(C==null)return ao.SKIP;for(let G=0;G<y;G++){let Z=R[G].idFilter;if(Z){if(!Z(C))return ao.SKIP;I||(I=[]),I.push(G)}}return Oh(C,O,L,!1,B)});return Array.isArray(Y)&&(F=F.filter(C=>C!==ao.SKIP)),F.hasEntries=!0,F}return Y}a(jA,"transformToEntries");async function ZA(Y,m,O){let D=m?.metadataFlags,R=m?.version,y,L;if(!i.attemptLock(Y,R,()=>{clearTimeout(L);let C=i.getEntry(Y);!C||!C.value||C.metadataFlags&(Rl|Al)?y(ZA(Y,i.getEntry(Y),O)):y(C)}))return new Promise(C=>{y=C,L=setTimeout(()=>{i.unlock(Y,R)},H4)});let I=m?.value,B={requestContext:O,replacingRecord:I,replacingVersion:R,noCacheStore:!1,source:null,resourceCache:O?.resourceCache},F=O?.responseHeaders;return new Promise((C,G)=>{let H;OS(je(B,async Z=>{let _e=performance.now(),re,Ue,ce;try{for(let Se of Ye.sources)if(Se.get&&(!Se.get.reliesOnPrototype||Se.prototype.get)&&(B.source=Se,re=await Se.get(Y,B),re))break;ce=D&Rl;let te=B.lastModified||ce&&R;Ue=ce||te>R||!I,te||(te=(0,bl.getNextMonotonicTime)());let X=performance.now()-_e;if(nr(X,"cache-resolution",s,null,"success"),F&&qd(F,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),Z.timestamp=te,E&&!B.expiresAt&&(B.expiresAt=Date.now()+E),re){if(typeof re!="object")throw new Error("Only objects can be cached and stored in tables");typeof re.toJSON=="function"&&(re=re.toJSON()),t&&re[t]!==Y&&(re[t]=Y)}H=!0,C({version:te,value:re})}catch(te){te.message+=` while resolving record ${Y} for ${s}`,I&&((te.code==="ECONNRESET"||te.code==="ECONNREFUSED"||te.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(te.statusCode===500||te.statusCode===502||te.statusCode===503||te.statusCode===504))?(C({version:R,value:I}),et.trace(te.message,"(returned stale record)")):G(te);let X=performance.now()-_e;nr(X,"cache-resolution",s,null,"fail"),F&&qd(F,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),B.transaction.abort();return}if(O?.noCacheStore||B.noCacheStore){B.transaction.abort();return}bn(B).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(te,X)=>{if(X?.version!==R)return;let Se=Xu(Y,I,re);re?(Ne.put?.(B,Y,re),T(Y,re,X,te,0,h&&Ue||null,B,B.expiresAt,"put",!!ce)):(Ne.delete?.(B,Y),h||p?T(Y,null,X,te,0,h&&Ue||null,B,0,"delete",!!ce):i.remove(Y,R))}})}),()=>{i.unlock(Y,R)},Z=>{i.unlock(Y,R),H&&et.error("Error committing cache update",Z)})})}a(ZA,"getFromSource");function Zu(){if(He!==zu&&(zu=He,(0,co.getWorkerIndex)()===(0,co.getWorkerCount)()-1)){if(Ju&&clearTimeout(Ju),!He)return;let Y=new Date;Y.setMonth(0),Y.setDate(1),Y.setHours(0),Y.setMinutes(0),Y.setSeconds(0);let m=Math.ceil((Date.now()-Y.getTime())/He)*He+Y.getTime(),O=a(D=>{et.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),Ju=setTimeout(()=>P=P.then(async()=>{if(O(Math.max(D+He,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ju);return}let R=50,y=new Array(R),L=0;et.trace(`Starting cleanup scan for ${s}`);try{let I=0;for(let{key:B,value:F,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;F===null&&!h&&C+B4<Date.now()?H=i.remove(B,C):G&&G+f<Date.now()&&(H=Ye.evict(B,F,C),I++),H&&(await y[L],y[L]=H.catch(Z=>{et.error("Cleanup error",Z)}),++L>=R&&(L=0)),await ma()}et.trace(`Finished cleanup scan for ${s}, evicted ${I} entries`)}catch(I){et.trace(`Error in cleanup scan for ${s}:`,I)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");O(m)}}a(Zu,"scheduleCleanup");function eO(){z=l?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(eO,"addDeleteRemoval");function ZG(){(0,co.getWorkerIndex)()===0&&setInterval(async()=>{if(!Ah){Ah=!0;try{let Y=Q.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let O of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of m.getValues(O)){let R=i.getEntry(D);R?.value?R.value[Y]<Date.now()&&Ye.evict(D,R.value,R.version):i.ifVersion(D,R?.version,()=>m.remove(O,D))}await ma()}}catch(Y){et.error("Error in evicting old records",Y)}finally{Ah=!1}}},v4).unref()}a(ZG,"runRecordExpirationEviction")}function AS(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 kD(){}function k4(e){WD=e}function kd(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(V4.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,$d.autoCast)(e);default:return e}}function VD(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 OS(e,t,r){return e?.then?e.then(t,r):t(e)}function Vd(e,t){e[Ar]=t,e[fe]=t?.value??null,e[Ol]=t?.version}function $D(e){return e!=null}function xn(e){try{return JSON.stringify(e)}catch{return e}}var Gn,ao,bl,YD,KD,Il,Or,yl,Nl,et,lo,co,$d,U4,WD,v4,B4,xD,H4,Ol,x4,Ar,gl,GD,G4,RS,ha,Rl,Al,F4,FD,qD,q4,Ide,V4,ma,Kd=Re(()=>{Gn=x(U()),ao=require("lmdb"),bl=x(Br()),YD=require("lodash"),KD=x(Nc());ln();lm();Il=x(ne());Xb();Or=x(se()),yl=x(ys()),Nl=x(Ln());Ae();k_();et=x(K());H_();ki();lo=require("ordered-binary"),co=x(it());ei();$d=x(J());Lc();Ds();w_();Tl();U4=new Uint8Array(9);U4[8]=192;v4=6e4,B4=864e5;Il.initSync();xD=Il.get(Gn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),H4=1e4,Ol=Symbol.for("version"),x4=Symbol.for("incremental-update"),Ar=Symbol("entry"),gl=Symbol("is-saving"),GD=1,G4=2,RS=Symbol("loaded-from-source"),ha={isNotification:!0,ensureLoaded:!1},Rl=1,Al=8,F4=Buffer.allocUnsafeSlow(8192),FD=1978,qD=100,q4={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Ide=(0,$d.convertToMS)(Il.get(Gn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Yd,"makeTable");a(AS,"attributesAsObject");a(kD,"noop");a(k4,"setServerUtilities");V4=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(kd,"coerceType");a(VD,"isDescendantId");ma=a(()=>new Promise(setImmediate),"rest");a(OS,"when");a(Vd,"updateResource");a($D,"exists");a(xn,"stringify")});var ke={};qe(ke,{database:()=>oa,databases:()=>ct,dropDatabase:()=>vp,dropTableMeta:()=>Q4,getDatabases:()=>Sr,getDefaultCompression:()=>Zd,getTables:()=>$4,onUpdatedTable:()=>CS,readMetaDb:()=>wl,resetDatabases:()=>Ll,table:()=>Et,tables:()=>jr});function $4(){return Xd||Sr(),jr||{}}function Sr(){if(Xd)return ct;Xd=!0,Ta=new Map;let e=(0,ht.getHdbBasePath)()&&(0,tt.join)((0,ht.getHdbBasePath)(),wt.DATABASES_DIR_NAME),t=(0,ht.get)(wt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Xr.existsSync)(e)?e:(0,tt.join)((0,ht.getHdbBasePath)(),wt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Xr.existsSync)(e))for(let r of(0,Xr.readdirSync)(e,{withFileTypes:!0})){let n=(0,tt.basename)(r.name,".mdb");r.isFile()&&(0,tt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&wl((0,tt.join)(e,r.name),null,n)}if((0,Xr.existsSync)((0,Sa.getBaseSchemaPath)())){for(let r of(0,Xr.readdirSync)((0,Sa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,tt.join)((0,Sa.getBaseSchemaPath)(),r.name),s=(0,tt.join)((0,Sa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Xr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,tt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,tt.join)(s,i.name);wl((0,tt.join)(n,i.name),(0,tt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Xr.existsSync)(s))for(let o of(0,Xr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,tt.extname)(o.name).toLowerCase()===".mdb"&&wl((0,tt.join)(s,o.name),(0,tt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,tt.join)(c.path,(0,tt.basename)(o+".mdb"));(0,Xr.existsSync)(l)&&wl(l,o,r,null,!0)}}for(let r in ct){let n=Ta.get(r);if(n){let s=ct[r];r.includes("delete")&&hn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(hn.trace(`delete table class ${i}`),delete s[i])}else if(delete ct[r],r==="data"){for(let s in jr)delete jr[s];delete jr[jd]}}return Ta=null,ct}}function Ll(){Xd=!1;for(let[,e]of mi)e.needsDeletion=!0;Sr();for(let[e,t]of mi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),mi.delete(e));return ct}function wl(e,t,r=IS,n,s){let i=new yS.default(e,!1);try{let o=mi.get(e);o?o.needsDeletion=!1:(o=(0,Qd.open)(i),mi.set(e,o));let c=new uo.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(Wd.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Xr.existsSync)(n)&&(i.path=n,_=(0,Qd.open)(i),_.isLegacy=!0):_=N_(o));let u=XD(r),d=u[jd],E=new Map;for(let{key:f,value:h}of l.getRange({start:!1})){let[p,S]=f.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=E.get(p);T||E.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:S}=h;if(!S){for(let j of p)if(j.is_hash_attribute||j.isPrimaryKey){S=j;break}if(!S){hn.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`);continue}}let T=u[f],A={},N=[],b,v,P=typeof S.audit=="boolean"?S.audit:(0,ht.get)(wt.CONFIG_PARAMS.LOGGING_AUDITLOG),q=S.trackDeletes,M=S.expiration,Q=S.eviction,z=S.sealed;if(T)A=T.indices,N=T.attributes,T.schemaVersion++;else{b=S.tableId,b?b>=(l.get(pa)||0)&&l.putSync(pa,b+1):(S.tableId=b=l.get(pa),b||(b=1),l.putSync(pa,b+1),l.putSync(S.key,S));let j=new uo.default(!S.is_hash_attribute,S.is_hash_attribute);if(j.compression=S.compression,j.compression){let oe=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||JD;j.compression.threshold=oe}v=g_(o.openDB(S.key,j)),v.rootStore=o,v.tableId=b}for(let j of p){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!A[j.name]){let le=new uo.default(!j.is_hash_attribute,j.is_hash_attribute);A[j.name]=o.openDB(j.key,le),A[j.name].indexNulls=j.indexNulls}let oe=N.find(le=>le.name===j.name);oe?N.splice(N.indexOf(oe),1,j):N.push(j)}}catch(oe){hn.error("Error trying to update attribute",j,N,A,oe)}}if(!T){T=jD(u,f,Yd({primaryStore:v,auditStore:_,audit:P,sealed:z,expirationMS:M&&M*1e3,evictionMS:Q&&Q*1e3,trackDeletes:q,tableName:f,tableId:b,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:A,attributes:p,schemaDefined:S.schemaDefined,dbisDB:l})),T.schemaVersion=1;for(let j of wS)j(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function XD(e){let t=ct[e];if(t||(e==="data"?t=ct[e]=jr:e==="system"?Object.defineProperty(ct,"system",{value:t=Object.create(null),configurable:!0}):t=ct[e]=Object.create(null)),Ta&&!Ta.has(e)){let r=new Set;t[jd]=r,Ta.set(e,r)}return t}function jD(e,t,r){return e[t]=r,r}function oa({database:e,table:t}){e||(e=IS),Sr();let r=XD(e),n=(0,tt.join)((0,ht.getHdbBasePath)(),wt.DATABASES_DIR_NAME),s=(0,ht.get)(wt.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_PATH)||((0,Xr.existsSync)(n)?n:(0,tt.join)((0,ht.getHdbBasePath)(),wt.LEGACY_DATABASES_DIR_NAME));let o=(0,tt.join)(n,(i?t:e)+".mdb"),c=mi.get(o);if(!c){let l=new yS.default(o,!1);c=(0,Qd.open)(l),mi.set(o,c)}return c}async function vp(e){if(!ct[e])throw new Error("Schema does not exist");let t=ct[e],r;for(let n in t)r=t[n].primaryStore.rootStore,mi.delete(r.path),r.status==="open"&&(await r.close(),await Cl.remove(r.path));if(r||(r=oa({database:e,table:null}),r.status==="open"&&(await r.close(),await Cl.remove(r.path))),e==="data"){for(let n in jr)delete jr[n];delete jr[jd]}delete ct[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=IS);let d=oa({database:t,table:e}),E=ct[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let A=new uo.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let N,b;if(f){if(h=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let M=d.auditStore;M||(M=N_(d)),p=i.find(oe=>oe.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=p.isPrimaryKey=!0,p.schemaDefined=_,p.compression=Zd(),l&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,ht.get)(wt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),n&&(p.eviction=n),typeof c=="boolean"&&(p.sealed=c),u&&(p.origins?p.origins.includes(u)||p.origins.push(u):p.origins=[u]),hn.trace(`${e} table loading, opening primary store`);let Q=new uo.default(!1,!0);Q.compression=p.compression;let z=e+"/",j=g_(d.openDB(z,Q));j.rootStore=d,T=d.dbisDb=d.openDB(Wd.INTERNAL_DBIS_NAME,A),j.tableId=T.get(pa),j.tableId||(j.tableId=1),T.putSync(pa,j.tableId+1),p.tableId=j.tableId,f=jD(E,e,Yd({primaryStore:j,auditStore:M,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:j.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),f.schemaVersion=1,N=!0,q(),T.put(z,p)}S=f.indices,T=T||(d.dbisDb=d.openDB(Wd.INTERNAL_DBIS_NAME,A)),f.dbisDB=T;let v=[];for(let{key:M,value:Q}of T.getRange({start:!0})){let[z,j]=M.toString().split("/");if(j===""&&(j=Q.name),j){if(z!==e)continue}else continue;let oe=i.find(ue=>ue.name===j),le=!oe?.indexed&&Q.indexed&&!Q.isPrimaryKey;if((!oe||le)&&(q(),N=!0,oe||T.remove(M),le)){let ue=f.indices[z];ue&&v.push(ue)}}let P=[];try{for(let M of i||[]){if(M.relationship)continue;let Q=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:Q,configurable:!0});let z=T.get(Q);if(M.isPrimaryKey){if(z=z||T.get(Q=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let oe=Object.assign({},z);typeof o=="boolean"&&(o&&f.enableAuditing(o),oe.audit=o),r&&(oe.expiration=+r),n&&(oe.eviction=+n),c!==void 0&&(oe.sealed=c),N=!0,q(),T.put(Q,oe)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let j=!z||z.type!==M.type||z.indexed!==M.indexed||z.nullable!==M.nullable||JSON.stringify(z.properties)!==JSON.stringify(M.properties)||JSON.stringify(z.elements)!==JSON.stringify(M.elements);if(M.indexed){let oe=new uo.default(!0,!1),le=d.openDB(Q,oe);(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Dl.workerData?.restartNumber)&&(N=!0,q(),z=T.get(Q),(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Dl.workerData?.restartNumber)&&(N=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=z?.lastIndexedKey||!1,M.indexingPID=process.pid,le.isIndexing=!0,Object.defineProperty(M,"dbi",{value:le}),P.push(M))),T.put(Q,M)),z?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),le.indexNulls=M.indexNulls,S[M.name]=le}else j&&(N=!0,q(),T.put(Q,M))}}finally{b&&b()}if(N&&(f.schemaVersion++,f.updatedAttributes()),hn.trace(`${e} table loading, running index`),P.length>0||v.length>0?f.indexingOperation=W4(f,P,v):N&&zd.signalSchemaChange(new Jd.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=u,N)for(let M of wS)M(f,u!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),hn.trace(`${e} table loaded`),f;function q(){b||d.transactionSync(()=>({then(M){b=M}}))}a(q,"startTxn")}async function W4(e,t,r){try{let n=e.schemaVersion;await zd.signalSchemaChange(new Jd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,QD.getIndexedValues)(u[h]);if(p)for(let S=0,T=p.length;S<T;S++)f.dbi.put(p[S],_)}}),s.then(()=>l--,E=>{l--,hn.error(E)}),Dl.workerData&&Dl.workerData.restartNumber!==zD.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}l>Y4?await s:l>K4&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await zd.signalSchemaChange(new Jd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){hn.error("Error in indexing",n)}}function Q4({table:e,database:t}){let r=oa({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 CS(e){wS.push(e)}function Zd(){let e=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||JD,n={startingOffset:32};return t&&(n.dictionary=Cl.readFileSync(t)),r&&(n.threshold=r),e&&n}var ht,Wd,Qd,tt,Xr,Sa,uo,yS,wt,Cl,NS,QD,zd,Jd,Dl,hn,zD,IS,jd,JD,jr,ct,pa,wS,Xd,mi,Ta,Y4,K4,Ae=Re(()=>{ht=x(ne()),Wd=x(dt()),Qd=require("lmdb"),tt=require("path"),Xr=require("fs"),Sa=x(ze());Kd();uo=x(xc()),yS=x(Gc()),wt=x(U()),Cl=x(require("fs-extra")),NS=require("../index"),QD=x(Br()),zd=x(ys()),Jd=x(Ln()),Dl=require("worker_threads"),hn=x(K()),zD=x(it());ei();Lc();IS="data",jd=Symbol("defined-tables"),JD=((0,ht.get)(wt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,ht.initSync)();jr=Object.create(null),ct=Object.create(null);(0,NS._assignPackageExport)("databases",ct);(0,NS._assignPackageExport)("tables",jr);pa=Symbol.for("next-table-id"),wS=[],mi=new Map;a($4,"getTables");a(Sr,"getDatabases");a(Ll,"resetDatabases");a(wl,"readMetaDb");a(XD,"ensureDB");a(jD,"setTable");a(oa,"database");a(vp,"dropDatabase");a(Et,"table");Y4=1e3,K4=10;a(W4,"runIndexing");a(Q4,"dropTableMeta");a(CS,"onUpdatedTable");a(Zd,"getDefaultCompression")});var J=g((Bde,dL)=>{"use strict";var pi=require("path"),nL=require("fs-extra"),br=K(),ZD=require("fs-extra"),ef=require("os"),z4=require("net"),J4=require("recursive-iterator"),lt=U(),X4=PO(),eL=require("papaparse"),tf=require("moment"),{inspect:j4}=require("util"),tL=require("is-number"),vde=require("lodash"),Z4=require("minimist"),e3=require("https"),t3=require("http"),{hdb_errors:rf}=se(),r3=/^((\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)))$/,sL=require("util").promisify(setTimeout),n3=100,s3=5,i3="",o3=4,rL={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};dL.exports={isEmpty:Zr,isEmptyOrZeroLength:as,arrayHasEmptyValues:l3,arrayHasEmptyOrZeroLengthValues:u3,buildFolderPath:_3,isBoolean:iL,errorizeMessage:a3,stripFileExtension:f3,autoCast:E3,autoCastJSON:oL,autoCastJSONDeep:LS,removeDir:h3,compareVersions:m3,isCompatibleDataVersion:p3,escapeRawValue:S3,unescapeValue:T3,stringifyProps:g3,timeoutPromise:A3,isClusterOperation:b3,getClusterUser:N3,checkGlobalSchemaTable:y3,getHomeDir:cL,getPropsFilePath:R3,promisifyPapaParse:I3,removeBOM:lL,createEventPromise:w3,checkProcessRunning:C3,checkSchemaTableExist:D3,checkSchemaExists:uL,checkTableExists:_L,getStartOfTomorrowInSeconds:L3,getLimitKey:M3,isObject:d3,isNotEmptyAndHasValue:c3,autoCasterIsNumberCheck:aL,backtickASTSchemaItems:P3,isPortTaken:O3,createForkArgs:U3,autoCastBoolean:v3,async_set_timeout:sL,getTableHashAttribute:B3,doesSchemaExist:H3,doesTableExist:x3,stringifyObj:G3,ms_to_time:F3,changeExtension:q3,getEnvCliRootPath:MS,noBootFile:k3,httpRequest:V3,transformReq:$3,convertToMS:Y3,PACKAGE_ROOT:lt.PACKAGE_ROOT};function a3(e){return e instanceof Error?e:new Error(e)}a(a3,"errorizeMessage");function Zr(e){return e==null}a(Zr,"isEmpty");function c3(e){return!Zr(e)&&(e||e===0||e===""||iL(e))}a(c3,"isNotEmptyAndHasValue");function as(e){return Zr(e)||e.length===0||e.size===0}a(as,"isEmptyOrZeroLength");function l3(e){if(Zr(e))return!0;for(let t=0;t<e.length;t++)if(Zr(e[t]))return!0;return!1}a(l3,"arrayHasEmptyValues");function u3(e){if(as(e))return!0;for(let t=0;t<e.length;t++)if(as(e[t]))return!0;return!1}a(u3,"arrayHasEmptyOrZeroLengthValues");function _3(...e){try{return e.join(pi.sep)}catch{console.error(e)}}a(_3,"buildFolderPath");function iL(e){return Zr(e)?!1:e===!0||e===!1}a(iL,"isBoolean");function d3(e){return Zr(e)?!1:typeof e=="object"}a(d3,"isObject");function f3(e){return as(e)?i3:e.slice(0,-o3)}a(f3,"stripFileExtension");function E3(e){return Zr(e)||e===""||typeof e!="string"?e:rL[e]!==void 0?rL[e]:aL(e)===!0?Number(e):r3.test(e)?new Date(e):e}a(E3,"autoCast");function oL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(oL,"autoCastJSON");function LS(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=LS(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=LS(r);n!==r&&(e[t]=n)}return e}else return oL(e)}a(LS,"autoCastJSONDeep");function aL(e){if(e.startsWith("0.")&&tL(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&tL(e))}a(aL,"autoCasterIsNumberCheck");async function h3(e){if(as(e))throw new Error(`Directory path: ${e} does not exist`);try{await ZD.emptyDir(e),await ZD.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(h3,"removeDir");function m3(e,t){if(as(e)){br.info("Invalid current version sent as parameter.");return}if(as(t)){br.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(m3,"compareVersions");function p3(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(p3,"isCompatibleDataVersion");function S3(e){if(Zr(e))return e;let t=String(e);return t==="."?lt.UNICODE_PERIOD:t===".."?lt.UNICODE_PERIOD+lt.UNICODE_PERIOD:t.replace(lt.FORWARD_SLASH_REGEX,lt.UNICODE_FORWARD_SLASH)}a(S3,"escapeRawValue");function T3(e){if(Zr(e))return e;let t=String(e);return t===lt.UNICODE_PERIOD?".":t===lt.UNICODE_PERIOD+lt.UNICODE_PERIOD?"..":String(e).replace(lt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(T3,"unescapeValue");function g3(e,t){if(Zr(e))return br.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+ef.EOL}!as(n)&&n[0]===";"?r+=" "+n+s+ef.EOL:as(n)||(r+=n+"="+s+ef.EOL)}catch{br.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(g3,"stringifyProps");function cL(){let e;try{e=ef.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(cL,"getHomeDir");function R3(){let e=pi.join(cL(),lt.HDB_HOME_DIR_NAME,lt.BOOT_PROPS_FILE_NAME);return nL.existsSync(e)||(e=pi.join(__dirname,"../","hdb_boot_properties.file")),e}a(R3,"getPropsFilePath");function A3(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(A3,"timeoutPromise");async function O3(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=z4.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(O3,"isPortTaken");function b3(e){try{return lt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(b3,"isClusterOperation");function y3(e,t){let r=(Ae(),ie(ke)).getDatabases();if(!r[e])return rf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return rf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(y3,"checkGlobalSchemaTable");function N3(e,t){if(Zr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Zr(e)||as(e)){br.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){br.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(N3,"getClusterUser");function I3(){eL.parsePromise=function(e,t,r){return new Promise(function(n,s){eL.parse(e,{header:!0,transformHeader:lL,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(I3,"promisifyPapaParse");function lL(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(lL,"removeBOM");function w3(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;br.info(`Got cluster status event response: ${j4(s)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}n(s)})})}a(w3,"createEventPromise");async function C3(e){let t=!0,r=0;do await sL(n3*r++),(await X4.findPs(e)).length>0&&(t=!1);while(t&&r<s3);if(t)throw new Error(`process ${e} was not started`)}a(C3,"checkProcessRunning");function D3(e,t){let r=uL(e);if(r)return r;let n=_L(e,t);if(n)return n}a(D3,"checkSchemaTableExist");function uL(e){let{getDatabases:t}=(Ae(),ie(ke));if(!t()[e])return rf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(uL,"checkSchemaExists");function _L(e,t){let{getDatabases:r}=(Ae(),ie(ke));if(!r()[e][t])return rf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(_L,"checkTableExists");function L3(){let e=tf().utc().add(1,lt.MOMENT_DAYS_TAG).startOf(lt.MOMENT_DAYS_TAG).unix(),t=tf().utc().unix();return e-t}a(L3,"getStartOfTomorrowInSeconds");function M3(){return tf().utc().format("DD-MM-YYYY")}a(M3,"getLimitKey");function P3(e){try{let t=new J4(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){br.error("Got an error back ticking items."),br.error(t)}}a(P3,"backtickASTSchemaItems");function U3(e){return[e]}a(U3,"createForkArgs");function v3(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(v3,"autoCastBoolean");function B3(e,t){let{getDatabases:r}=(Ae(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(B3,"getTableHashAttribute");function H3(e){let{getDatabases:t}=(Ae(),ie(ke));return t()[e]!==void 0}a(H3,"doesSchemaExist");function x3(e,t){let{getDatabases:r}=(Ae(),ie(ke));return r()[e]?.[t]!==void 0}a(x3,"doesTableExist");function G3(e){try{return JSON.stringify(e)}catch{return e}}a(G3,"stringifyObj");function F3(e){let t=tf.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(F3,"ms_to_time");function q3(e,t){let r=pi.basename(e,pi.extname(e));return pi.join(pi.dirname(e),r+t)}a(q3,"changeExtension");function MS(){if(process.env[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Z4(process.argv);if(e[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(MS,"getEnvCliRootPath");var DS;function k3(){if(DS)return DS;let e=MS();if(MS()&&nL.pathExistsSync(pi.join(e,lt.HDB_CONFIG_FILE)))return DS=!0,!0}a(k3,"noBootFile");function V3(e,t){let r;return e.protocol==="http:"?r=t3:r=e3,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(V3,"httpRequest");function $3(e){if(!e.schema&&!e.database){e.schema=lt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a($3,"transformReq");function Y3(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(Y3,"convertToMS")});var ne=g((xde,pL)=>{"use strict";var PS=require("fs-extra"),_o=require("path"),fL=require("os"),K3=require("properties-reader"),Pl=K(),Ml=J(),de=U(),nf=Rr(),W3="Error initializing environment manager",sf="BOOT_PROPS_FILE_PATH",EL=!1,Q3={[de.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ls={};pL.exports={BOOT_PROPS_FILE_PATH:sf,getHdbBasePath:z3,setHdbBasePath:J3,get:hL,initSync:j3,setProperty:Pe,initTestEnvironment:eX,setCloneVar:Z3};function z3(){return Ls[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(z3,"getHdbBasePath");function J3(e){Ls[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(J3,"setHdbBasePath");function hL(e){let t=nf.getConfigValue(e);return t===void 0?Ls[e]:t}a(hL,"get");function Pe(e,t){Q3[e]&&(Ls[e]=t),nf.updateConfigObject(e,t)}a(Pe,"setProperty");function X3(){let e;try{e=Ml.getPropsFilePath(),PS.accessSync(e,PS.constants.F_OK|PS.constants.R_OK),EL=!0;let t=K3(e);return Ls[de.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(de.HDB_SETTINGS_NAMES.INSTALL_USER),Ls[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ls[sf]=e,!0}catch{return Pl.trace(`Environment manager found no properties file at ${e}`),!1}}a(X3,"doesPropFileExist");function j3(e=!1){try{(EL||X3()||Ml.noBootFile())&&!mL&&(nf.initConfig(e),Ls[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=nf.getConfigValue(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Pl.error(W3),Pl.error(t),console.error(t),process.exit(1)}}a(j3,"initSync");var mL=!1;function Z3(e){mL=e}a(Z3,"setCloneVar");function eX(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=_o.join(__dirname,"../../","unitTests");Ls[sf]=_o.join(l,"hdb_boot_properties.file"),Pe(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,_o.join(l,"settings.test")),Pe(de.HDB_SETTINGS_NAMES.INSTALL_USER,fL.userInfo()?fL.userInfo().username:void 0),Pe(de.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Pe(de.HDB_SETTINGS_NAMES.LOG_PATH_KEY,_o.join(l,"envDir","log")),Pe(de.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Pe(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,_o.join(l,"envDir")),Pe(de.CONFIG_PARAMS.STORAGE_PATH,_o.join(l,"envDir")),s&&(Pe(de.CONFIG_PARAMS.HTTP_SECUREPORT,hL(de.CONFIG_PARAMS.HTTP_PORT)),Pe(de.CONFIG_PARAMS.HTTP_PORT,null)),Pe(de.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Pe(de.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Pe(de.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ml.isEmpty(i)?!1:i),Pe(de.CONFIG_PARAMS.HTTP_CORS,Ml.isEmpty(i)?!1:i),Pe(de.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Pe(de.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,_o.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Pe(de.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ml.isEmpty(c)?!1:c),o&&(Pe("CORS_ACCESSLIST",o),Pe(de.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Pe(de.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Pe(de.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Pe(de.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${sf}. Please check your boot props and settings files`;Pl.fatal(r),Pl.error(t)}}a(eX,"initTestEnvironment")});var BS={};qe(BS,{loadGQLSchema:()=>nX,start:()=>vS,startOnMainThread:()=>rX});function vS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let v=function(P){if(P.kind==="NonNullType"){let Q=v(P.type);return Q.nullable=!1,Q}if(P.kind==="ListType")return{type:"array",elements:v(P.type)};let M={type:P.name?.value};return Object.defineProperty(M,"location",{value:P.loc.startToken}),M};a(v,"getProperty");let T=S.name.value,A=[],N={table:null,database:null,properties:A};E.set(T,N);for(let P of S.directives){if(P.name.value==="table"){for(let q of P.arguments)N[q.name.value]=q.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=T),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,f.push(N)}if(P.name.value==="sealed"&&(N.sealed=!0),P.name.value==="export"){N.export=!0;for(let q of P.arguments)q.name.value==="name"&&(N.export={name:q.value.value})}}let b=!1;for(let P of S.fields){let q=v(P.type);q.name=P.name.value,A.push(q);for(let M of P.directives)if(M.name.value==="primaryKey")b?console.warn("Can not define two attributes as a primary key"):(q.isPrimaryKey=!0,b=!0);else if(M.name.value==="indexed")q.indexed=!0;else if(M.name.value==="relationship"){let Q={};for(let z of M.arguments)Q[z.name.value]=z.value.value;q.relationship=Q}else if(M.name.value==="createdTime")q.assignCreatedTime=!0;else if(M.name.value==="updatedTime")q.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")q.expiresAt=!0;else if(M.name.value==="allow"){let Q=q.authorizedRoles=[];for(let z of M.arguments)z.name.value==="role"&&Q.push(z.value.value)}}N.type=T,T==="Query"&&(h=N)}function p(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):tX.includes(S.type)||(0,SL.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of E.values())for(let T of S.properties)p(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,US.dirname)(n),S.tableClass):i.set((0,US.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var US,SL,tX,rX,nX,TL=Re(()=>{US=require("path");Ae();SL=x(it()),tX=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(vS,"start");rX=vS,nX=vS({ensureTable:Et}).handleFile});async function of(e){let t=(0,AL.pathToFileURL)(e).toString();return sX?(Ul||(Ul=iX(aX)),(await(await Ul).import(t)).namespace):import(t)}async function iX(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ul=new Compartment({console,Math,Date,fetch:oX,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,RL.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Yt,tables:jr,databases:ct})}};let n=await(0,gL.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Ul}function oX(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 aX(){return{Resource:Yt,tables:jr}}var gL,RL,AL,sX,Ul,HS=Re(()=>{ln();Ae();gL=require("fs/promises"),RL=require("path"),AL=require("url"),sX=!1;a(of,"secureImport");a(iX,"getCompartment");a(oX,"secureOnlyFetch");a(aX,"getGlobalVars")});var GS={};qe(GS,{handleFile:()=>cX});async function cX(e,t,r,n){let s=new Map,i=await of(r);c(i.default)&&n.set((0,xS.dirname)(t),i.default),o(i,(0,xS.dirname)(t));function o(l,_){for(let u in l){let d=l[u];c(d)?n.set(_+"/"+u,d):typeof d=="object"&&o(d,_+"/"+u)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var xS,OL=Re(()=>{HS();xS=require("path");a(cX,"handleFile")});var qS={};qe(qS,{start:()=>lX});function lX({resources:e}){e.set("login",FS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var FS,bL=Re(()=>{ln();a(lX,"start");FS=class extends Yt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var LL={};qe(LL,{parse:()=>VS,streamAsJSON:()=>vl,stringify:()=>fo});function vl(e){return new kS({value:e})}function yL(e){return console.error(e),JSON.stringify(e.toString())}function NL(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function fo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===CL)return DL(e);if(t.resolution)return t.resolution.then(()=>fo(e));throw t}}function DL(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+=DL(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+fo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function VS(e){return dX.test(e)?uX.parse(e):JSON.parse(e)}var IL,wL,uX,_X,CL,kS,dX,$S=Re(()=>{IL=require("stream"),wL=x(require("json-bigint-fixes")),uX=(0,wL.default)({useNativeBigInt:!0}),_X=1e4,CL={};BigInt.prototype.toJSON=function(){throw CL};a(vl,"streamAsJSON");kS=class extends IL.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),yL)}catch(s){yield yL(s)}else yield fo(t)}else yield fo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);NL(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>_X?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 NL(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(yL,"handleError");a(NL,"when");a(fo,"stringify");a(DL,"jsStringify");dX=/[[,:]\s*-?\d{16,}/;a(VS,"parse")});var af=g((Xde,ML)=>{"use strict";var fX=Un();ML.exports={writeTransaction:EX};function EX(e,t,r){return fX.writeTransaction(e,t,r)}a(EX,"writeTransaction")});var BL=g((efe,vL)=>{"use strict";var hX=Yr(),mX=li(),PL=K(),pX=fn(),Zde=af(),SX=require("clone"),KS=require("alasql"),TX=hd(),UL=require("util"),gX=UL.promisify(mX.getTableSchema),RX=UL.promisify(hX.search),AX=U(),YS=J();TX(KS);vL.exports={update:bX};var OX="There was a problem performing this update. Please check the logs and try again.";async function bX({statement:e,hdb_user:t}){let r=await gX(e.table.databaseid,e.table.tableid),n=yX(e.columns);YS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=SX(s),c=YS.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=KS.parse(l).statements[0],u=await RX(_),d=NX(n,u);return IX(o,d,t)}a(bX,"update");function yX(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=KS.compile(`SELECT ${r.expression.toString()} AS [${AX.FUNC_VAL}] FROM ?`)}),t}catch(t){throw PL.error(t),new Error(OX)}}a(yX,"createUpdateRecord");function NX(e,t){return YS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(NX,"buildUpdateRecords");async function IX(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await pX.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){PL.error(`Error delete new_attributes from update response: ${i}`)}return s}a(IX,"updateRecords")});var xL=g((sfe,HL)=>{var wX=require("alasql"),CX=Yr(),DX=K(),LX=Un(),QS=require("util"),WS=J(),MX=U(),PX=li(),rfe=af(),nfe=fn(),UX="record",vX="successfully deleted",BX=QS.callbackify(FX),HX=QS.promisify(CX.search),xX=QS.promisify(PX.getTableSchema);HL.exports={convertDelete:BX};function GX(e){return`${e.deleted_hashes.length} ${UX}${e.deleted_hashes.length===1?"":"s"} ${vX}`}a(GX,"generateReturnMessage");async function FX({statement:e,hdb_user:t}){let r=await xX(e.table.databaseid,e.table.tableid);WS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=WS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=wX.parse(o).statements[0],l={operation:MX.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await HX(c);let _=await LX.deleteRecords(l);return WS.isEmptyOrZeroLength(_.message)&&(_.message=GX(_)),delete _.txn_time,_}catch(_){throw DX.error(_),_.hdb_code?_.message:_}}a(FX,"convertDelete")});var VL=g((ofe,kL)=>{"use strict";var qX=ci(),{hdb_errors:GL}=se(),{getDatabases:FL}=(Ae(),ie(ke));kL.exports={checkSchemaExists:qL,checkSchemaTableExists:kX,schema_describe:qX};async function qL(e){if(!FL()[e])return GL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(qL,"checkSchemaExists");async function kX(e,t){let r=await qL(e);if(r)return r;if(!FL()[e][t])return GL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(kX,"checkSchemaTableExists")});var Bl=g((cfe,VX)=>{VX.exports={name:"harperdb",version:"4.3.40",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var ZS=g((dfe,tM)=>{"use strict";var{decode:$X}=require("msgpackr"),{isMainThread:lfe,parentPort:ufe,threadId:_fe}=require("worker_threads"),uf=Ct(),ga=at(),XS=U(),sr=K(),JS=ne(),YX=U(),{onMessageByType:KX}=it(),WL=Cs(),{recordAction:$L,recordActionBinary:WX}=(Ds(),ie(Sl)),{publishToStream:QX}=uf,{ConsumerEvents:YL}=require("nats"),zX=Yr(),{promisify:JX}=require("util"),QL=JX(setTimeout),_f=1e4,df,lf,XX,jX,zL,Hl=new Map,Ra=new Map;tM.exports={initialize:JL,ingestConsumer:jS,setSubscription:ZX,setIgnoreOrigin:rj,getDatabaseSubscriptions:tj,updateConsumer:XL};async function JL(){KX(XS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await XL(n)}),zL=!0,sr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await uf.getNATSReferences();df=e,lf=e.info.server_name,XX=t,jX=r}a(JL,"initialize");async function XL(e){if(e.status==="start"){let{js:t,jsm:r}=await jL(e.node_domain_name);jS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Hl.get(e.stream_name+e.node_domain_name);t&&(sr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Hl.set(e.stream_name+e.node_domain_name,"close")),Ra.get(e.node_domain_name)==="failed"&&Ra.set(e.node_domain_name,"close")}}a(XL,"updateConsumer");var ff=new Map;function ZX(e,t,r){let n=ff.get(e);n||ff.set(e,n=new Map),n.set(t,r),zL||JL().then(ej)}a(ZX,"setSubscription");async function ej(){let e=await zX.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+ga.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await jL(r),!n))break;let{schema:o,table:c}=i,l=WL.createNatsTableStreamName(o,c);jS(l,n,s,r)}}}a(ej,"accessConsumers");async function jL(e){let t,r,n=1;for(;!r;)try{t=await df.jetstream({domain:e}),r=await df.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Ra.get(e)==="close")break;Ra.set(e,"failed"),n%10===1&&sr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<_f?n++*100:_f;await QL(i)}return{js:t,jsm:r}}a(jL,"connectToRemoteJS");function tj(){return ff}a(tj,"getDatabaseSubscriptions");var ZL;function rj(e){ZL=e}a(rj,"setIgnoreOrigin");var eM=100,KL=new Array(eM),cf=0;async function jS(e,t,r,n){let{connection:s}=await uf.getNATSReferences();df=s,lf=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,lf),sr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Ra.get(n)==="close")break;o%10===1&&sr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(sr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await uf.createConsumer(r,e,lf,new Date(Date.now()).toISOString()));let u=o++*100<_f?o++*100:_f;await QL(u)}let c=!1,l;for(;!c;){if(Hl.get(e+n)==="close"||Ra.get(n)==="close"){Hl.delete(e+n),c=!0;continue}l=await i.consume({max_messages:JS.get(XS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Hl.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===YL.ConsumerDeleted&&(await l.close(),c=!0),u.type===YL.HeartbeatsMissed){let d=u.data;sr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(sr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await KL[cf],KL[cf]=nj(u).catch(d=>{sr.error(d)}),++cf>=eM&&(cf=0)}catch(u){u.message==="consumer deleted"?(sr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):sr.error("Error consuming clustering ingest, restarting consumer",u)}}}a(jS,"ingestConsumer");async function nj(e){let t=$X(e.data);$L(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),sr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=JS.get(XS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(ga.MSG_HEADERS.TRANSACTED_NODES)&&r.values(ga.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(ga.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!ZL),WX(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(ga.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:E,expiresAt:f}=t;sr.trace("processing message:",o,c,_,(u?"records: "+u.map(v=>v?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),sr.trace(`messageProcessor nats msg id: ${e.headers.get(ga.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let p=new Promise(v=>h=v),{timestamp:S,user:T,node_name:A}=E||{},N=ff.get(c)?.get(_);if(!N)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,N.send(t);else if(u.length===1&&!l)N.send({type:zS(o),value:u[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:T,nodeName:A});else{let v=u.map((P,q)=>({type:zS(o),value:P,expiresAt:f,id:d?.[q],table:_}));for(;l;)v.push({type:zS(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;N.send({type:"transaction",writes:v,table:_,timestamp:S,onCommit:h,user:T,nodeName:A})}JS.get(YX.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&QX(e.subject.split(".").slice(0,-1).join("."),WL.createNatsTableStreamName(c,_),e.headers,e.data),await p;let b=Date.now()-S;S&&$L(b,"replication-latency",e.subject,o,"ingest")}catch(o){sr.error(o)}e.ack()}a(nj,"messageProcessor");function zS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(zS,"convertOperation")});var Ct=g((Tfe,SM)=>{"use strict";var xt=ne();xt.initSync();var sj=require("fs-extra"),ij=require("semver"),Fl=require("path"),{monotonicFactory:oj}=require("ulidx"),nM=oj(),aj=require("util"),sM=require("child_process"),cj=aj.promisify(sM.exec),lj=sM.spawn,Wt=at(),Ie=U(),Ef=J(),Fn=K(),hf=Cs(),uj=af(),xl=Rr(),{broadcast:_j,onMessageByType:dj,getWorkerIndex:fj}=it(),{isMainThread:iM}=require("worker_threads"),{Encoder:Ej,decode:nT}=require("msgpackr"),oM=new Ej,{isEmpty:po}=Ef,aM=En(),Efe=48*36e11;iM&&dj(Ie.ITC_EVENT_TYPES.RESTART,()=>{ir=void 0,mo=void 0});var{connect:hj,StorageType:mj,RetentionPolicy:pj,AckPolicy:sT,DeliverPolicy:iT,DiscardPolicy:Sj,NatsConnection:hfe,JetStreamManager:mfe,JetStreamClient:pfe,StringCodec:Sfe,JSONCodec:Tj,createInbox:oT,headers:gj,ErrorCode:rM}=require("nats"),{PACKAGE_ROOT:Rj}=U(),Aj=Bl(),{recordAction:Oj}=(Ds(),ie(Sl)),cM=Tj(),bj="clustering",yj=Aj.engines[Wt.NATS_SERVER_NAME],Nj=Fl.join(Rj,"dependencies"),rT=Fl.join(Nj,`${process.platform}-${process.arch}`,Wt.NATS_BINARY_NAME),eT,tT,Gl,Eo,ho;SM.exports={runCommand:lM,checkNATSServerInstalled:Ij,createConnection:aT,getConnection:ql,getJetStreamManager:kl,getJetStream:_M,getNATSReferences:cs,getServerList:Cj,createLocalStream:cT,listStreams:dM,deleteLocalStream:Dj,getServerConfig:Aa,listRemoteStreams:Lj,viewStream:Mj,viewStreamIterator:Pj,publishToStream:Uj,request:Hj,reloadNATS:lT,reloadNATSHub:xj,reloadNATSLeaf:Gj,extractServerName:Bj,requestErrorHandler:Fj,createLocalTableStream:mM,createTableStreams:Vj,purgeTableStream:pM,purgeSchemaTableStreams:$j,getStreamInfo:Yj,updateLocalStreams:Wj,closeConnection:wj,getJsmServerName:mf,addNatsMsgHeader:fM,clearClientCache:uM,updateRemoteConsumer:qj,createConsumer:EM,updateConsumerIterator:kj};async function lM(e,t=void 0){let{stdout:r,stderr:n}=await cj(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
10
|
+
`,t)}var oo,ND,El,hl,SS,Gd,ml,TS,Fd,ID,xd,wD,CD,DD,LD,TD,gD,MD,w4,C4,AD,OD,UD,bD,yD,L4,BD,Ei,M4,Ds=Re(()=>{oo=require("worker_threads"),ND=x(it());Ae();El=x(K()),hl=require("path"),SS=require("fs/promises"),Gd=x(Br()),ml=x(ne()),TS=x(U());ur();(0,ml.initSync)();Fd=new Map,ID=(0,ml.get)(TS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(y4,"setAnalyticsEnabled");a(nr,"recordAction");st.recordAnalytics=nr;a(Jr,"recordActionBinary");xd=0,wD=1e3,CD="analytics-report",DD=[];a(pl,"addAnalyticsListener");LD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(N4,"sendAnalytics");a(I4,"aggregation");TD=0,gD=0,MD=a(()=>new Promise(setImmediate),"rest");a(RD,"cleanup");w4=36e5,C4=31536e6;a(gS,"getRawAnalyticsTable");a(PD,"getAnalyticsTable");(0,ND.setChildListenerByType)(CD,vD);a(D4,"startScheduledTasks");bD=0,yD=new Map,L4=!1;a(vD,"recordAnalytics");M4=1e6;a(P4,"logAnalytics")});var HD={};qe(HD,{Headers:()=>hi,appendHeader:()=>qd});function qd(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var hi,Tl=Re(()=>{hi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(qd,"appendHeader")});var bS={};qe(bS,{coerceType:()=>kd,makeTable:()=>Yd,setServerUtilities:()=>k4,updateResource:()=>Vd});function Yd(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]);let T=Zh(i,n,l),A=0,N,b,v={},P=Promise.resolve(),q,M,Q;for(let Y of S)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(q=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(M=Y),Y.expiresAt&&(Q=Y),Y.isPrimaryKey&&(v=Y);let z,j=[],oe=[],le=1,ue=2,Be={},Ne={},He=864e5,zu,Ju,Qs,XA=!1,Rh,Ah,zG=i.getRange({start:!1,end:!1}).constructor,JG=10,XG=6;h&&eO();class Ye extends Yt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=q;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=u;static schemaDefined=_;static sourcedFrom(m,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),b=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let D=a(L=>{let I=this.sources.slice(0,-1);if(I=I.filter(B=>B[L]&&(!B[L].reliesOnPrototype||B.prototype[L])),I.length>0)if(I.length===1){let B=I[0];return(F,C,G)=>{if(F?.source!==B)return B[L](C,G,F)}}else return(B,F,C)=>{let G=[];for(let H of I){if(B?.source===H)break;G.push(H[L](F,C,B))}return Promise.all(G)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],y=a(L=>{if(R[L]&&(!R[L].reliesOnPrototype||R.prototype[L]))return(I,B,F)=>{if(!I?.source)return R[L](B,F,I)}},"getApplyToCanonicalSource");return Be={put:y("put"),patch:y("patch"),delete:y("delete"),publish:y("publish")},Ne={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let L=!1,I=a(async(B,F)=>{let C=B.value,G=B.table?ct[c][B.table]:Ye;if(c===Gn.SYSTEM_SCHEMA_NAME&&(B.table===Gn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||B.table===Gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),B.id===void 0&&(B.id=C[G.primaryKey],B.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(B));B.source=m;let H=await G.getResource(B.id,F,ha);switch(B.type){case"put":return H._writeUpdate(C,!0,ha);case"patch":return H._writeUpdate(C,!1,ha);case"delete":return H._writeDelete(ha);case"publish":return H._writePublish(C,ha);case"invalidate":return H.invalidate(ha);default:et.error("Unknown operation",B.type,B.id)}},"writeUpdate");try{let B=m.subscribe;B&&p==null&&(p=!0);let F=m.subscribeOnThisThread?m.subscribeOnThisThread((0,co.getWorkerIndex)()):(0,co.getWorkerIndex)()===0,C=B&&F&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let H of C)try{if(!(H.type==="transaction"?H.writes[0]:H)){et.error("Bad subscription event",H);continue}if(H.source=m,G)if(H.beginTxn)G.resolve();else{I(H,G);continue}if(H.type==="end_txn")continue;let _e=je(H,()=>{if(H.type==="transaction"){let re=[];for(let Ue of H.writes)try{re.push(I(Ue,H))}catch(ce){throw ce.message+=" writing "+JSON.stringify(Ue)+" of event "+JSON.stringify(H),ce}return Promise.all(re)}else if(H.type==="define_schema"){let re=this.attributes.slice(0),Ue;for(let ce of H.attributes)re.find(De=>De.name===ce.name)||(re.push(ce),Ue=!0);Ue&&(Et({table:s,database:c,attributes:re,origin:"cluster"}),yl.signalSchemaChange(new Nl.SchemaEventMsg(process.pid,Gn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return H.beginTxn?(G=H,I(H,H),new Promise(re=>{G.resolve=re})):I(H,H)});L&&(await _e,yl.signalUserChange(new Nl.UserEventMsg(process.pid))),H.onCommit&&(_e?.then?_e.then(H.onCommit):H.onCommit())}catch(Z){et.error("error in subscription handler",Z)}}}catch(B){et.error(B)}})(),this}static get isCaching(){return b}static getResource(m,O,D){let R=super.getResource(m,O,D);if(m!=null){uc(m);try{if(R.hasOwnProperty(fe))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let y=!D?.async||i.cache?.get(m),L=bn(O),I=L.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Oh(m,O,{transaction:I},y,B=>{if(B?Vd(R,B):R[fe]=null,O.onlyIfCached&&O.noCacheStore){if(!R.doesExist())throw new Or.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let F=bh(m,B,O,R);if(F)return L?.disregardReadTxn(),R[RS]=!0,OS(F,C=>(Vd(R,C),R))}return R})}catch(y){throw y.message.includes("Unable to serialize object")&&(y.message+=": "+JSON.stringify(m)),y}}return R}ensureLoaded(){let m=bh(this[Me],this[Ar],this[be]);if(m)return this[RS]=!0,OS(m,O=>{this[Ar]=O,this[fe]=O.value,this[Ol]=O.version})}static setTTLExpiration(m){if(typeof m=="number")E=m*1e3,f||(f=0);else if(m&&typeof m=="object")E=m.expiration*1e3,f=(m.eviction||0)*1e3,He=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");He=He||(E+f)/4,Zu()}static enableAuditing(m=!0){h=m,m&&eO(),Ye.audit=m}static coerceId(m){return m===""?null:kd(m,v)}static async dropTable(){if(delete ct[c][s],c===o){for(let m of S)u.remove(Ye.tableName+"/"+m.name),r[m.name]?.drop();u.remove(Ye.tableName+"/"),i.drop(),await u.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));yl.signalSchemaChange(new Nl.SchemaEventMsg(process.pid,Gn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[wn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let O=Ye.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(m,O){let D=ju(m);if(D?.read){if(D.isSuperUser)return!0;let R=D.attribute_permissions,y=O?.select;if(R?.length>0||XA&&y){if(O||(O={}),y){let L=R?.length>0&&AS(R,"read");O.select=y.map(I=>{let B=I.name||I;if(!L||L[B]){let F=Qs[B]?.definition?.tableClass;if(F){if(I.name||(I={name:I}),!F.prototype.allowRead.call(null,m,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else O.select=R.filter(L=>L.read&&!Qs[L.attribute_name]).map(L=>L.attribute_name);return O}else return!0}}allowUpdate(m,O){let D=ju(m);if(D?.update){let R=D.attribute_permissions;if(R?.length>0){let y=AS(R,"update");for(let L in O)if(!y[L])return!1;for(let L of R){let I=L.attribute_name;!L.update&&!(I in O)&&(O[I]=this.getProperty(I))}}return!0}}allowCreate(m,O){if(this[wn]){let D=ju(m);if(D?.insert){let R=D.attribute_permissions;if(R?.length>0){let y=AS(R,"insert");for(let L in O)if(!y[L])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return ju(m)?.delete}update(m,O){if(!bn(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;return typeof m=="object"&&m&&(O?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[fe]={},this[Tt]=m):(R=this[Tt],R&&(m=Object.assign(R,m)),this[Tt]=R=m)),this._writeUpdate(this[Tt],O),this}addTo(m,O){if(typeof O=="number"||typeof O=="bigint")this[gl]===GD?this.set(m,(+this.getProperty(m)||0)+O):(this[gl]||this.update(),this.set(m,new U_(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,O){if(typeof O=="number")return this.addTo(m,-O);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Ar]}invalidate(m){let O=this[be],D=this[Me];uc(D),bn(this[be]).addWrite({key:D,store:i,invalidated:!0,entry:this[Ar],nodeName:this[be]?.nodeName,before:Be.invalidate?.bind(this,O,D),beforeIntermediate:Ne.invalidate?.bind(this,O,D),commit:(y,L)=>{if(L?.version>y)return;let I=null;for(let B in r)I||(I={}),I[B]=this.getProperty(B);T(D,I,this[Ar],y,Rl,h,this[be],0,"invalidate")}})}static evict(m,O,D){let R=this.Source,y;if(!((b||h)&&(!O||(y=i.getEntry(m),!y||!O)||y.version!==D))){if(b){if(i.hasLock(m,y.version))return;let L;for(let I in r)L||(L={}),L[I]=O[I];if(L)return T(m,L,y,D,Al,null,null,0,null,!0)}return i.ifVersion(m,D,()=>{Xu(m,O,null)}),h?T(m,null,y,D,Al,null,null,0,null,!0):i.remove(m,D)}}lock(){throw new Error("Not yet implemented")}static operation(m,O){return m.table||=s,m.schema||=c,WD.operation(m,O)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,O,D){let R=this[be],y=bn(R),L=this[Me];uc(L);let I=this[Ar];this[gl]=O?GD:G4;let B={key:L,store:i,entry:I,nodeName:R?.nodeName,validate:F=>{m||(m=this[Tt]),O||m&&M_(this[Tt]===m?this:m)?R?.source||(y.checkOverloaded(),this.validate(m,!O),M&&(m[M.name]=M.type==="Date"?new Date(F):M.type==="String"?new Date(F).toISOString():F),O&&(t&&m[t]!==L&&(m[t]=L),q&&(I?.value?m[q.name]=I?.value[q.name]:m[q.name]=q.type==="Date"?new Date(F):q.type==="String"?new Date(F).toISOString():F),m=Fi(m))):y.removeWrite(B)},before:O?Be.put?()=>Be.put(R,L,m):null:Be.patch?()=>Be.patch(R,L,m):Be.put?()=>Be.put(R,L,Fi(this)):null,beforeIntermediate:O?Ne.put?()=>Ne.put(R,L,m):null:Ne.patch?()=>Ne.patch(R,L,m):Ne.put?()=>Ne.put(R,L,Fi(this)):null,commit:(F,C,G)=>{if(G){if(R&&C?.version>(R.lastModified||0)&&(R.lastModified=C.version),this[Ar]=C,C?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");O||(this[fe]=C?.value??null)}this[Tt]=void 0,this[Ol]=F;let H=C?.value,Z=m;if(this[gl]=0,C?.version>=F)if(h){let ce=C.localTime,De=C.version;for(;Z&&(ce>F||De>=F&&ce>0);){let te=l.get(ce);if(!te)break;let X=Bt(te);if(De=X.version,De>F){if(X.type==="patch"){let Se=X.getValue(i);Z=D_(Z,Se)}else if(X.type==="put"||X.type==="delete")return}else if(De===F)return;ce=X.previousLocalTime}}else{if(O)return;Z=D_(Z,H)}let _e;if(O?_e=Z:(this[fe]=H,_e=O?Z:Fi(this,Z)),this[fe]=_e,_e?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let re;O||(re=m),Xu(L,H,_e);let Ue=O?"put":"patch";T(L,_e,C,F,0,h,R,R.expiresAt||(E?E+Date.now():0),Ue,!1,re),R.expiresAt&&Zu()}};y.addWrite(B)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[wn]){for await(let O of this.search(m))(await Ye.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[fe]?this._writeDelete(m):!1}_writeDelete(m){let O=bn(this[be]),D=this[Me];uc(D);let R=this[be];return O.addWrite({key:D,store:i,resource:this,nodeName:R?.nodeName,before:Be.delete?.bind(this,R,D),beforeIntermediate:Ne.delete?.bind(this,R,D),commit:(y,L,I)=>{let B=L?.value;I&&(R&&L?.version>(R.lastModified||0)&&(R.lastModified=L.version),Vd(this,L)),!(L?.version>y)&&(Xu(this[Me],B),et.trace("Write delete entry",D,y),h||p?(T(D,null,this[Ar],y,0,h,this[be],0,"delete"),h||Zu()):i.remove(this[Me]))}}),!0}search(m){let O=this[be],D=bn(O);if(!m)throw new Error("No query provided");let R=m.conditions;R?R.length===void 0&&(R=R[Symbol.iterator]?Array.from(R):[R]):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(R=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(R));let y,L={};function I(X,Se){let xe;switch(Se){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');xe=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Se)}let Kn=xe&&{},zs;for(let Ke of X){if(Ke.conditions){Ke.conditions=I(Ke.conditions,Ke.operator);continue}let Vt=Ke[0]??Ke.attribute,sn=Vt==null?v:As(S,Vt);if(sn){if(xe){let Wn=In(Vt),$t=Kn[Wn];$t?($t.push(Ke),zs=!0):Kn[Wn]=[Ke]}(sn.type||_m[Ke.comparator])&&(Ke[1]===void 0?Ke.value=F(Ke.value,sn):Ke[1]=F(Ke[1],sn))}else if(Vt!=null)throw(0,Or.handleHDBError)(new Error,`${Vt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(zs)for(let Ke in Kn){let Vt=Kn[Ke],sn=Vt.length;if(sn>1)for(let Wn=0;Wn<sn;Wn++){let $t=Vt[Wn];if($t.comparator==="ge"||$t.comparator==="greater_than_equal")for(let Js=0;Js<sn;Js++){let Go=Vt[Js];(Go.comparator==="le"||Go.comparator==="less_than_equal")&&($t.comparator="between",$t.value=[$t.value,Go.value],X.splice(X.indexOf(Go),1))}if($t.comparator==="equals"||!$t.comparator){for(let Js=0;Js<sn;Js++)if(Js!==Wn){let Go=Vt[Js];X.splice(X.indexOf(Go),1)}break}}}return X}a(I,"prepareConditions");function B(X,Se){if(m.enforceExecutionOrder)return X;for(let xe of X)xe.conditions&&(xe.conditions=B(xe.conditions,xe.operator));return X.length>1&&Se!=="or"?(0,YD.sortBy)(X,F_(Ye)):X}a(B,"orderConditions");function F(X,Se){return Array.isArray(X)?X.map(xe=>kd(xe,Se)):kd(X,Se)}a(F,"coerceTypedValues");let C=m.operator;(R.length>0||C)&&(R=I(R,C));let G=typeof m.sort=="object"&&m.sort,H;if(G&&C!=="or"){let X=G.attribute;if(X==null)throw new Or.ClientError("Sort requires an attribute");if(y=R.find(Se=>In(Se.attribute)===In(X)),!y){let Se=As(S,X);if(!Se)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);if(Se.indexed)y={attribute:X,comparator:"sort"},R.push(y);else if(R.length===0&&!m.allowFullScan)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not indexed and not combined with any other conditions`,404)}y&&(y.descending=!!G.descending)}R=B(R,C),G&&(y&&R[0]===y?G.next&&(H={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(y&&R.splice(R.indexOf(y),1),H=G));let Z=m.select;if(R.length===0&&(R=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:R,operator:C,postOrdering:H,selectApplied:!!Z};let _e=D.useReadTxn(),re=dm(R,C,Ye,_e,m,O,(X,Se)=>jA(X,Z,O,_e,Se),L),Ue=m.ensureLoaded!==!1;H||(re=te(re));let ce=Ye.transformEntryForSelect(Z,O,_e,L,Ue,!0),De=Ye.transformToOrderedSelect(re,Z,H,_e,O,ce);function te(X){return m.offset||m.limit!==void 0?X.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):X}return a(te,"applyOffset"),H&&(De=te(De)),De.onDone=()=>{De.onDone=null,D.doneReadTxn()},De.selectApplied=!0,De.getColumns=()=>{if(Z){let X=[];for(let Se of Z)Se==="*"?X.push(...S.map(xe=>xe.name)):X.push(Se.name||Se);return X}return S.map(X=>X.name)},De}static transformToOrderedSelect(m,O,D,R,y,L){let I=new zG;if(D){m=jA(m,O,R,y,null);let B;I.iterate=function(){let C,G=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),H,Z=D.dbOrderedAttribute,_e,re,Ue=!0;function ce(te){let X=te.next&&ce(te.next),Se=te.descending;return(xe,Kn)=>{let zs=yh(xe,te.attribute,R),Ke=yh(Kn,te.attribute,R),Vt=Se?(0,lo.compareKeys)(Ke,zs):(0,lo.compareKeys)(zs,Ke);return Vt===0?X?.(xe,Kn)||0:Vt}}a(ce,"createComparator");let De=ce(D);return{async next(){let te;if(C)if(te=C.next(),te.done){if(H)return I.onDone&&I.onDone(),te}else return{value:await L.call(this,te.value)};B=[],_e&&B.push(_e);do if(te=await G.next(),te.done){if(H=!0,B.length)break;return I.onDone&&I.onDone(),te}else{let X=te.value;if(X?.then&&(X=await X),Z){let Se=yh(X,Z,R);if(Ue)Ue=!1,re=Se;else if(Se!==re){re=Se,_e=X;break}}B.push(X)}while(!0);return D.isGrouped,B.sort(De),C=B[Symbol.iterator](),te=C.next(),te.done?(I.onDone&&I.onDone(),te):{value:await L.call(this,te.value)}},return(){I.onDone&&I.onDone(),G.return()},throw(){I.onDone&&I.onDone(),G.throw()}}};let F=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let G=0;G<O.length;G++){let H=O[G],Z;if(H.name===C.attribute[0]){for(Z=H.sort||(H.sort={});Z.next;)Z=Z.next;Z.attribute=C.attribute.slice(1),Z.descending=C.descending}else H===C.attribute[0]&&(O[G]=Z={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&F(C.next)},"applySortingOnSelect");F(D)}else I.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),I=I.map(L);return I}static transformEntryForSelect(m,O,D,R,y,L){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(G=>(O?.transaction?.stale&&(O.transaction.stale=!1),G?.key??G),"transform");return m===t?C:m.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let I;y&&b&&!m?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(I=!0);let B,F=a(function(C){let G;if(O?.transaction?.stale&&(O.transaction.stale=!1),C!=null){if(Rh=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Oh(C.key??C,O,{transaction:D,lazy:m?.length<4},this?.isSync,H=>H),C?.then)return C.then(F.bind(this));G=C?.value}if(I&&C?.metadataFlags&(Rl|Al)||C?.expiresAt&&C?.expiresAt<Date.now()){if(O.onlyIfCached&&O.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let H=bh(C.key??C,C,O);if(H?.then)return H.then(F)}}if(G==null)return L?ao.SKIP:G;if(m&&!(m[0]==="*"&&m.length===1)){let H,Z=a((re,Ue)=>{let ce;typeof re=="object"?ce=re.name:ce=re;let De=Qs?.[ce],te;if(De){let X=R?.[ce];if(X)if(X.hasMappings){let xe=De.from?G[De.from]:In(C.key);te=X.get(xe),te||(te=[])}else te=X.fromRecord?.(G);else te=De(G,O,C);let Se=a(xe=>{if(xe&&typeof xe=="object"){let Kn=De.definition?.tableClass||Ye;B||(B={});let zs=B[ce]||(B[ce]=Kn.transformEntryForSelect(ce===re?null:re.select||(Array.isArray(re)?re:null),O,D,X,y));if(Array.isArray(xe)){let Ke=[],Vt=Kn.transformToOrderedSelect(xe,re.select,typeof re.sort=="object"&&re.sort,O,D,zs)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),sn=a($t=>{for(;!$t.done;){if($t?.then)return $t.then(sn);Ke.push($t.value),$t=Vt.next()}Ue(Ke,ce)},"nextValue"),Wn=sn(Vt.next());Wn&&(H||(H=[]),H.push(Wn));return}else if(xe=zs.call(this,xe),xe?.then){H||(H=[]),H.push(xe.then(Ke=>Ue(Ke,ce)));return}}Ue(xe,ce)},"handleResolvedValue");te?.then?(H||(H=[]),H.push(te.then(Se))):Se(te);return}else te=G[ce],te&&typeof te=="object"&&ce!==re&&(te=Ye.transformEntryForSelect(re.select||re,O,D,null)({value:te}));Ue(te,ce)},"selectAttribute"),_e;if(typeof m=="string")Z(m,re=>{_e=re});else if(Array.isArray(m))if(m.asArray)_e=[],m.forEach((re,Ue)=>{re==="*"?m[Ue]=G:Z(re,ce=>_e[Ue]=ce)});else{_e={};let re=m.forceNulls;for(let Ue of m)if(Ue==="*")for(let ce in G)_e[ce]=G[ce];else Z(Ue,(ce,De)=>{ce===void 0&&re&&(ce=null),_e[De]=ce})}else throw new Or.ClientError("Invalid select"+m);return H?Promise.all(H).then(()=>_e):_e}return G},"transform");return F}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let O=!m.rawEvents,D=[],R=zb(Ye,this[Me]??null,function(L,I,B,F){try{let C=I.getValue?.(i,O);if(!C&&I.type==="patch"&&O){let H=i.getEntry(L);H?.version===I.version?C=H.value:C=I.getValue?.(i,!0,B),I.type="put"}let G={id:L,timestamp:B,value:C,version:I.version,type:I.type,beginTxn:F};D?D.push(G):this.send(G)}catch(C){et.error(C)}},m.startTime||0,m),y=(async()=>{this[wn]&&(R.includeDescendants=!0,m.onlyChildren&&(R.onlyChildren=!0)),m.supportsTransactions&&(R.supportsTransactions=!0);let L=this[Me],I=m.previousCount;I>1e3&&(I=1e3);let B=m.startTime;if(this[wn]){if(B){if(I)throw new Or.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:F,value:C}of l.getRange({start:B,exclusiveStart:!0,snapshot:!1})){let G=Bt(C);if(G.tableId!==n)continue;let H=G.recordId;if(L==null||VD(L,H)){let Z=G.getValue(i,O,F);if(R.send({id:H,timestamp:F,value:Z,version:G.version,type:G.type}),R.queue?.length>qD&&await R.waitForDrain()===!1)return}R.startTime=F}}else if(I){let F=[];for(let{key:C,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let H=Bt(G);if(H.tableId!==n)continue;let Z=H.recordId;if(L==null||VD(L,Z)){let _e=H.getValue(i,O,C);if(F.push({id:Z,timestamp:C,value:_e,version:H.version,type:H.type}),--I<=0)break}}catch(H){et.error("Error getting history entry",C,H)}for(let C=F.length;C>0;)R.send(F[--C]);F[0]&&(R.startTime=F[0].timestamp)}else if(!m.omitCurrent){for(let{key:F,value:C,version:G,localTime:H}of i.getRange({start:L??!1,end:L==null?void 0:[L,lo.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(R.send({id:F,timestamp:H,value:C,version:G,type:"put"}),R.queue?.length>qD&&await R.waitForDrain()===!1))return}}else{I&&!B&&(B=0);let F=this[Ar]?.localTime;if(F===jh&&(i.cache?.delete(L),this[Ar]=i.getEntry(L),et.trace("re-retrieved record",F,this[Ar]?.localTime),F=this[Ar]?.localTime),et.trace("Subscription from",B,"from",L,F),B<F){let C=[],G=F;do{let H=l.get(G);if(H){m.omitCurrent=!0;let Z=Bt(H),_e=Z.getValue(i,O,G);O&&(Z.type="put"),C.push({id:L,value:_e,timestamp:G,...Z}),G=Z.previousLocalTime}else break;I&&I--}while(G>B&&I!==0);for(let H=C.length;H>0;)R.send(C[--H]);R.startTime=F}!m.omitCurrent&&this.doesExist()&&R.send({id:L,timestamp:F,value:this[fe],version:this[Ol],type:"put"})}for(let F of D)R.send(F);D=null})();return m.listener&&R.on("data",m.listener),R}doesExist(){return!!(this[fe]||this[gl])}publish(m,O){this._writePublish(m,O)}_writePublish(m,O){let D=bn(this[be]),R=this[Me]||null;uc(R);let y=this[be];D.addWrite({key:R,store:i,entry:this[Ar],nodeName:y?.nodeName,validate:()=>{y?.source||(D.checkOverloaded(),this.validate(m))},before:Be.publish?.bind(this,y,R,m),beforeIntermediate:Ne.publish?.bind(this,y,R,m),commit:(L,I,B)=>{I===void 0&&p&&!h&&Zu(),T(R,I?.value??null,I,I?.version||L,0,!0,y,I?.expiresAt,"message",!1,m)}})}validate(m,O){let D,R=a((y,L,I)=>{if(L.type&&y!=null)if(O&&y.__op__&&(y=y.value),L.properties){typeof y!="object"&&(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be an object${L.type?" ("+L.type+")":""}`);let B=L.properties;for(let F=0,C=B.length;F<C;F++){let G=B[F],H=R(y[G.name],G,I+"."+G.name);H&&(y[G.name]=H)}if(L.sealed&&y!=null&&typeof y=="object")for(let F in y)B.find(C=>C.name===F)||(D||(D=[])).push(`Property ${F} is not allowed within object in property ${I}`)}else switch(L.type){case"Int":(typeof y!="number"||y>>0!==y)&&(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof y!="number"||!(Math.floor(y)===y&&Math.abs(y)<=9007199254740992))&&(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof y!="number"&&(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a number`);break;case"ID":typeof y=="string"||y?.length>0&&y.every?.(B=>typeof B=="string")||(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof y!="string"&&(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a string`);break;case"Boolean":typeof y!="boolean"&&(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a boolean`);break;case"Date":if(!(y instanceof Date)){if(typeof y=="string"||typeof y=="number")return new Date(y);(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof y!="bigint"){if(typeof y=="string"||typeof y=="number")return BigInt(y);(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a bigint`)}break;case"Bytes":y instanceof Uint8Array||(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(y)){if(L.elements)for(let B=0,F=y.length;B<F;B++){let C=y[B],G=R(C,L.elements,I+"[*]");G&&(y[B]=G)}}else(D||(D=[])).push(`Value ${xn(y)} in property ${I} must be a Buffer or Uint8Array`);break}L.nullable===!1&&y==null&&(D||(D=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let y=0,L=S.length;y<L;y++){let I=S[y];if(!I.relationship&&(!O||I.name in m)){let B=R(m[I.name],I,I.name);B&&(m[I.name]=B)}}if(d)for(let y in m)S.find(L=>L.name===y)||(D||(D=[])).push(`Property ${y} is not allowed`);if(D)throw new Or.ClientError(D.join(". "))}getUpdatedTime(){return this[Ol]}wasLoadedFromSource(){return b?!!this[RS]:void 0}static async addAttributes(m){let O=S.slice(0);for(let D of m){if(!D.name)throw new Or.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Or.ClientError("Attribute names cannot include backticks or forward slashes");(0,KD.validateAttribute)(D.name),O.push(D)}return Et({table:s,database:c,schemaDefined:_,attributes:O}),Ye.indexingOperation}static async removeAttributes(m){let O=S.filter(D=>!m.includes(D.name));return Et({table:s,database:c,schemaDefined:_,attributes:O}),Ye.indexingOperation}static getRecordCount(m){let O=i.getStats().entryCount,D=1e3/2,R=performance.now(),y=Math.floor(O/2),L=m?.exactCount,I=0,B=0,F;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&I++,B++,!L&&B<y&&performance.now()-R>D){F=B;break}if(F){let C=I;I=0;for(let{value:te}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:F}))te!=null&&I++;let G=F*2,H=(I+C)/G,Z=Math.pow((I-C+1)/F/2,2)+H*(1-H)/G,_e=Math.max(Math.sqrt(Z)*O,1),re=Math.round(H*O),Ue=Math.max(re-1.96*_e,I+C),ce=Math.min(re+1.96*_e,O),De=Math.pow(10,Math.round(Math.log10(_e)));return De>re&&(De=De/10),I=Math.round(re/De)*De,{recordCount:I,estimatedRange:[Math.round(Ue),Math.round(ce)]}}return{recordCount:I}}static updatedAttributes(){Qs=this.propertyResolvers={$id:(m,O,D)=>({value:D.key}),$updatedtime:(m,O,D)=>D.version,$record:(m,O,D)=>D?{value:m}:m};for(let m of this.attributes){m.resolve=null;let O=m.relationship;if(O)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),XA=!0,O.to)m.elements?.definition?(Qs[m.name]=m.resolve=(D,R,y)=>{let L=D[O.from?O.from:t],I=m.elements.definition.tableClass;return y?Qo({attribute:O.to,value:L},bn(R).getReadTxn(),!1,I,!1).asArray:I.search([{attribute:O.to,value:L}],R).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,O.from&&(m.resolve.from=O.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(O.from){let D=m.definition||m.elements?.definition;D?(Qs[m.name]=m.resolve=(R,y,L)=>{let I=R[O.from];if(I!==void 0){if(m.elements){let B,F=I.map(C=>{let G=L?D.tableClass.primaryStore.getEntry(C,{transaction:bn(y).getReadTxn()}):D.tableClass.get(C,y);return G?.then&&(B=!0),G});return O.filterMissing?B?Promise.all(F).then(C=>C.filter($D)):F.filter($D):B?Promise.all(F):F}return L?D.tableClass.primaryStore.getEntry(I,{transaction:bn(y).getReadTxn()}):D.tableClass.get(I,y)}},m.set=(R,y)=>{if(Array.isArray(y)){let L=y.map(I=>I[Me]||I[D.tableClass.primaryKey]);R[O.from]=L}else{let L=y[Me]||y[D.tableClass.primaryKey];R[O.from]=L}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=O.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`)}v_(this,this)}static async deleteHistory(m=0,O=!1){let D;for(let{key:R,value:y}of l.getRange({start:0,end:m}))await ma(),Bt(y).tableId===n&&(D=I_(l,R,y));if(O)for(let{key:R,value:y,localTime:L}of i.getRange({start:0,versions:!0}))await ma(),y===null&&L<m&&(D=i.remove(R));await D}static async*getHistory(m=0,O=1/0){for(let{key:D,value:R}of l.getRange({start:m||1,end:O})){await ma();let y=Bt(R);y.tableId===n&&(yield{id:y.recordId,localTime:D,version:y.version,type:y.type,value:y.getValue(i,!0,D),user:y.user})}}static async getHistoryOfRecord(m){let O=[];if(m==null)throw new Error("An id is required");let D=i.getEntry(m);if(!D)return O;let R=D.localTime;if(!R)throw new Error("The entry does not have a local audit time");let y=0;do{await ma();let L=l.get(R);if(L){let I=Bt(L);O.push({id:I.recordId,localTime:R,version:I.version,type:I.type,value:I.getValue(i,!0,R),user:I.user}),R=I.previousLocalTime}else break}while(y<1e3&&R);return O.reverse()}static cleanup(){z?.remove()}}Ye.updatedAttributes();let jG=Ye.prototype;return jG[x4]=!0,E&&Ye.setTTLExpiration(E/1e3),Q&&ZG(),Ye;function Xu(Y,m,O){let D;for(let R in r){let y=r[R],L=y.isIndexing,I=O?.[R],B=m?.[R];if(I===B&&!L)continue;D=!0;let F=y.indexNulls,C=(0,bl.getIndexedValues)(I,F),G=(0,bl.getIndexedValues)(B,F);if(G?.length>0){let H=new Set(G);if(C=C?C.filter(Z=>{if(H.has(Z))H.delete(Z);else return!0}):[],G=Array.from(H),(G.length>0||C.length>0)&&xD){let Z=G.concat(C).map(_e=>({key:_e,value:Y}));y.prefetch(Z,kD)}for(let Z=0,_e=G.length;Z<_e;Z++)y.remove(G[Z],Y)}else C?.length>0&&xD&&y.prefetch(C.map(H=>({key:H,value:Y})),kD);if(C)for(let H=0,Z=C.length;H<Z;H++)y.put(C[H],Y)}return D}a(Xu,"updateIndices");function uc(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>FD)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,lo.writeKey)(Y,F4,0)>FD)throw new Error("Primary key size is too large: "+Y.length);return!0}a(uc,"checkValidId");function Oh(Y,m,O,D,R){let y=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),O.transaction?.isDone)return R(null,Y);let L=i.getEntry(Y,O);return L&&m&&(L?.version>(m.lastModified||0)&&(m.lastModified=L.version),L?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=L.localTime)),R(L,Y)},"whenPrefetched");return D?y():le>0?(le--,y()):new Promise((L,I)=>{le===0?(le--,i.prefetch([Y],()=>{B(),F()})):(j.push(Y),oe.push(F),j.length>XG&&(le--,B()));function B(){if(j.length>0){let C=oe;i.prefetch(j,()=>{le===-1?B():le++;for(let G of C)G()}),j=[],oe=[],ue>2&&ue--}else le=ue,ue<JG&&ue++}a(B,"prefetch");function F(){try{L(y())}catch(C){I(C)}}a(F,"load")})}a(Oh,"loadLocalRecord");function ju(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return q4;let O=m[c],D,R=O?.tables;if(R)return R[s];if(c==="data"&&(D=m[s])&&!D.tables)return D}a(ju,"getTablePermissions");function bh(Y,m,O,D){if(b){let R;if(O.noCache?R=!0:(m?(!m.value||m.metadataFlags&(Rl|Al)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,Jr(!R,"cache-hit",s)),R){let y=ZA(Y,m,O).then(L=>(L?.value?.[fe]&&et.error("Can not assign a record with a record property"),O&&(L?.version>(O.lastModified||0)&&(O.lastModified=L.version),O.lastRefreshed=Date.now()),L));if(O?.onlyIfCached||m?.value&&D?.allowStaleWhileRevalidate?.(m,Y)){if(y.catch(L=>et.warn(L)),O?.onlyIfCached&&!D.doesExist())throw new Or.ServerError("Entry is not cached",504);return}else return y}}else if(m?.value&&m.expiresAt&&m.expiresAt<Date.now())return Ye.evict(m.key,m.value,m.version),m.value=null,{then(R){return R(m)}}}a(bh,"ensureLoadedFromSource");function bn(Y){let m=Y?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let O=m.next;if(!O)return m=m.next=new qi,m.lmdbDb=i,m;m=O}while(!0)}else return new x_}a(bn,"txnForContext");function yh(Y,m,O){if(!Y)return;Rh=Y;let D=Y.value||Y.deref?.()||(Rh=i.getEntry(Y.key))?.value;if(typeof m=="object"){let y=Qs,L=D;for(let I=0,B=m.length;I<B;I++){let F=m[I],C=y?.[F];L=C&&L?C(L,O,!0)?.value:L?.[F],y=C?.definition?.tableClass?.propertyResolvers}return L}let R=Qs[m];return R?R(D,O):D[m]}a(yh,"getAttributeValue");function jA(Y,m,O,D,R){let y=R?.length,L={transaction:D,lazy:y>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},I;function B(F,C){let G=F?.value;if(!G)return ao.SKIP;for(let H=0;H<y;H++)if(!I?.includes(H)&&!R[H](G,F))return ao.SKIP;return C!==void 0&&(F.key=C),F}if(a(B,"processEntry"),y>0||!Y.hasEntries){let F=Y.map(C=>{if(I=null,typeof C=="object"&&C?.key!==void 0)return y>0?B(C):C;if(C==null)return ao.SKIP;for(let G=0;G<y;G++){let Z=R[G].idFilter;if(Z){if(!Z(C))return ao.SKIP;I||(I=[]),I.push(G)}}return Oh(C,O,L,!1,B)});return Array.isArray(Y)&&(F=F.filter(C=>C!==ao.SKIP)),F.hasEntries=!0,F}return Y}a(jA,"transformToEntries");async function ZA(Y,m,O){let D=m?.metadataFlags,R=m?.version,y,L;if(!i.attemptLock(Y,R,()=>{clearTimeout(L);let C=i.getEntry(Y);!C||!C.value||C.metadataFlags&(Rl|Al)?y(ZA(Y,i.getEntry(Y),O)):y(C)}))return new Promise(C=>{y=C,L=setTimeout(()=>{i.unlock(Y,R)},H4)});let I=m?.value,B={requestContext:O,replacingRecord:I,replacingVersion:R,noCacheStore:!1,source:null,resourceCache:O?.resourceCache},F=O?.responseHeaders;return new Promise((C,G)=>{let H;OS(je(B,async Z=>{let _e=performance.now(),re,Ue,ce;try{for(let Se of Ye.sources)if(Se.get&&(!Se.get.reliesOnPrototype||Se.prototype.get)&&(B.source=Se,re=await Se.get(Y,B),re))break;ce=D&Rl;let te=B.lastModified||ce&&R;Ue=ce||te>R||!I,te||(te=(0,bl.getNextMonotonicTime)());let X=performance.now()-_e;if(nr(X,"cache-resolution",s,null,"success"),F&&qd(F,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),Z.timestamp=te,E&&!B.expiresAt&&(B.expiresAt=Date.now()+E),re){if(typeof re!="object")throw new Error("Only objects can be cached and stored in tables");typeof re.toJSON=="function"&&(re=re.toJSON()),t&&re[t]!==Y&&(re[t]=Y)}H=!0,C({version:te,value:re})}catch(te){te.message+=` while resolving record ${Y} for ${s}`,I&&((te.code==="ECONNRESET"||te.code==="ECONNREFUSED"||te.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(te.statusCode===500||te.statusCode===502||te.statusCode===503||te.statusCode===504))?(C({version:R,value:I}),et.trace(te.message,"(returned stale record)")):G(te);let X=performance.now()-_e;nr(X,"cache-resolution",s,null,"fail"),F&&qd(F,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),B.transaction.abort();return}if(O?.noCacheStore||B.noCacheStore){B.transaction.abort();return}bn(B).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(te,X)=>{if(X?.version!==R)return;let Se=Xu(Y,I,re);re?(Ne.put?.(B,Y,re),T(Y,re,X,te,0,h&&Ue||null,B,B.expiresAt,"put",!!ce)):(Ne.delete?.(B,Y),h||p?T(Y,null,X,te,0,h&&Ue||null,B,0,"delete",!!ce):i.remove(Y,R))}})}),()=>{i.unlock(Y,R)},Z=>{i.unlock(Y,R),H&&et.error("Error committing cache update",Z)})})}a(ZA,"getFromSource");function Zu(){if(He!==zu&&(zu=He,(0,co.getWorkerIndex)()===(0,co.getWorkerCount)()-1)){if(Ju&&clearTimeout(Ju),!He)return;let Y=new Date;Y.setMonth(0),Y.setDate(1),Y.setHours(0),Y.setMinutes(0),Y.setSeconds(0);let m=Math.ceil((Date.now()-Y.getTime())/He)*He+Y.getTime(),O=a(D=>{et.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),Ju=setTimeout(()=>P=P.then(async()=>{if(O(Math.max(D+He,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ju);return}let R=50,y=new Array(R),L=0;et.trace(`Starting cleanup scan for ${s}`);try{let I=0;for(let{key:B,value:F,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;F===null&&!h&&C+B4<Date.now()?H=i.remove(B,C):G&&G+f<Date.now()&&(H=Ye.evict(B,F,C),I++),H&&(await y[L],y[L]=H.catch(Z=>{et.error("Cleanup error",Z)}),++L>=R&&(L=0)),await ma()}et.trace(`Finished cleanup scan for ${s}, evicted ${I} entries`)}catch(I){et.trace(`Error in cleanup scan for ${s}:`,I)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");O(m)}}a(Zu,"scheduleCleanup");function eO(){z=l?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(eO,"addDeleteRemoval");function ZG(){(0,co.getWorkerIndex)()===0&&setInterval(async()=>{if(!Ah){Ah=!0;try{let Y=Q.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let O of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of m.getValues(O)){let R=i.getEntry(D);R?.value?R.value[Y]<Date.now()&&Ye.evict(D,R.value,R.version):i.ifVersion(D,R?.version,()=>m.remove(O,D))}await ma()}}catch(Y){et.error("Error in evicting old records",Y)}finally{Ah=!1}}},v4).unref()}a(ZG,"runRecordExpirationEviction")}function AS(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 kD(){}function k4(e){WD=e}function kd(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(V4.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,$d.autoCast)(e);default:return e}}function VD(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 OS(e,t,r){return e?.then?e.then(t,r):t(e)}function Vd(e,t){e[Ar]=t,e[fe]=t?.value??null,e[Ol]=t?.version}function $D(e){return e!=null}function xn(e){try{return JSON.stringify(e)}catch{return e}}var Gn,ao,bl,YD,KD,Il,Or,yl,Nl,et,lo,co,$d,U4,WD,v4,B4,xD,H4,Ol,x4,Ar,gl,GD,G4,RS,ha,Rl,Al,F4,FD,qD,q4,Ide,V4,ma,Kd=Re(()=>{Gn=x(U()),ao=require("lmdb"),bl=x(Br()),YD=require("lodash"),KD=x(Nc());ln();lm();Il=x(ne());Xb();Or=x(se()),yl=x(ys()),Nl=x(Ln());Ae();k_();et=x(K());H_();ki();lo=require("ordered-binary"),co=x(it());ei();$d=x(J());Lc();Ds();w_();Tl();U4=new Uint8Array(9);U4[8]=192;v4=6e4,B4=864e5;Il.initSync();xD=Il.get(Gn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),H4=1e4,Ol=Symbol.for("version"),x4=Symbol.for("incremental-update"),Ar=Symbol("entry"),gl=Symbol("is-saving"),GD=1,G4=2,RS=Symbol("loaded-from-source"),ha={isNotification:!0,ensureLoaded:!1},Rl=1,Al=8,F4=Buffer.allocUnsafeSlow(8192),FD=1978,qD=100,q4={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Ide=(0,$d.convertToMS)(Il.get(Gn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Yd,"makeTable");a(AS,"attributesAsObject");a(kD,"noop");a(k4,"setServerUtilities");V4=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(kd,"coerceType");a(VD,"isDescendantId");ma=a(()=>new Promise(setImmediate),"rest");a(OS,"when");a(Vd,"updateResource");a($D,"exists");a(xn,"stringify")});var ke={};qe(ke,{database:()=>oa,databases:()=>ct,dropDatabase:()=>vp,dropTableMeta:()=>Q4,getDatabases:()=>Sr,getDefaultCompression:()=>Zd,getTables:()=>$4,onUpdatedTable:()=>CS,readMetaDb:()=>wl,resetDatabases:()=>Ll,table:()=>Et,tables:()=>jr});function $4(){return Xd||Sr(),jr||{}}function Sr(){if(Xd)return ct;Xd=!0,Ta=new Map;let e=(0,ht.getHdbBasePath)()&&(0,tt.join)((0,ht.getHdbBasePath)(),wt.DATABASES_DIR_NAME),t=(0,ht.get)(wt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Xr.existsSync)(e)?e:(0,tt.join)((0,ht.getHdbBasePath)(),wt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Xr.existsSync)(e))for(let r of(0,Xr.readdirSync)(e,{withFileTypes:!0})){let n=(0,tt.basename)(r.name,".mdb");r.isFile()&&(0,tt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&wl((0,tt.join)(e,r.name),null,n)}if((0,Xr.existsSync)((0,Sa.getBaseSchemaPath)())){for(let r of(0,Xr.readdirSync)((0,Sa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,tt.join)((0,Sa.getBaseSchemaPath)(),r.name),s=(0,tt.join)((0,Sa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Xr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,tt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,tt.join)(s,i.name);wl((0,tt.join)(n,i.name),(0,tt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Xr.existsSync)(s))for(let o of(0,Xr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,tt.extname)(o.name).toLowerCase()===".mdb"&&wl((0,tt.join)(s,o.name),(0,tt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,tt.join)(c.path,(0,tt.basename)(o+".mdb"));(0,Xr.existsSync)(l)&&wl(l,o,r,null,!0)}}for(let r in ct){let n=Ta.get(r);if(n){let s=ct[r];r.includes("delete")&&hn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(hn.trace(`delete table class ${i}`),delete s[i])}else if(delete ct[r],r==="data"){for(let s in jr)delete jr[s];delete jr[jd]}}return Ta=null,ct}}function Ll(){Xd=!1;for(let[,e]of mi)e.needsDeletion=!0;Sr();for(let[e,t]of mi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),mi.delete(e));return ct}function wl(e,t,r=IS,n,s){let i=new yS.default(e,!1);try{let o=mi.get(e);o?o.needsDeletion=!1:(o=(0,Qd.open)(i),mi.set(e,o));let c=new uo.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(Wd.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Xr.existsSync)(n)&&(i.path=n,_=(0,Qd.open)(i),_.isLegacy=!0):_=N_(o));let u=XD(r),d=u[jd],E=new Map;for(let{key:f,value:h}of l.getRange({start:!1})){let[p,S]=f.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=E.get(p);T||E.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:S}=h;if(!S){for(let j of p)if(j.is_hash_attribute||j.isPrimaryKey){S=j;break}if(!S){hn.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`);continue}}let T=u[f],A={},N=[],b,v,P=typeof S.audit=="boolean"?S.audit:(0,ht.get)(wt.CONFIG_PARAMS.LOGGING_AUDITLOG),q=S.trackDeletes,M=S.expiration,Q=S.eviction,z=S.sealed;if(T)A=T.indices,N=T.attributes,T.schemaVersion++;else{b=S.tableId,b?b>=(l.get(pa)||0)&&l.putSync(pa,b+1):(S.tableId=b=l.get(pa),b||(b=1),l.putSync(pa,b+1),l.putSync(S.key,S));let j=new uo.default(!S.is_hash_attribute,S.is_hash_attribute);if(j.compression=S.compression,j.compression){let oe=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||JD;j.compression.threshold=oe}v=g_(o.openDB(S.key,j)),v.rootStore=o,v.tableId=b}for(let j of p){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!A[j.name]){let le=new uo.default(!j.is_hash_attribute,j.is_hash_attribute);A[j.name]=o.openDB(j.key,le),A[j.name].indexNulls=j.indexNulls}let oe=N.find(le=>le.name===j.name);oe?N.splice(N.indexOf(oe),1,j):N.push(j)}}catch(oe){hn.error("Error trying to update attribute",j,N,A,oe)}}if(!T){T=jD(u,f,Yd({primaryStore:v,auditStore:_,audit:P,sealed:z,expirationMS:M&&M*1e3,evictionMS:Q&&Q*1e3,trackDeletes:q,tableName:f,tableId:b,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:A,attributes:p,schemaDefined:S.schemaDefined,dbisDB:l})),T.schemaVersion=1;for(let j of wS)j(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function XD(e){let t=ct[e];if(t||(e==="data"?t=ct[e]=jr:e==="system"?Object.defineProperty(ct,"system",{value:t=Object.create(null),configurable:!0}):t=ct[e]=Object.create(null)),Ta&&!Ta.has(e)){let r=new Set;t[jd]=r,Ta.set(e,r)}return t}function jD(e,t,r){return e[t]=r,r}function oa({database:e,table:t}){e||(e=IS),Sr();let r=XD(e),n=(0,tt.join)((0,ht.getHdbBasePath)(),wt.DATABASES_DIR_NAME),s=(0,ht.get)(wt.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_PATH)||((0,Xr.existsSync)(n)?n:(0,tt.join)((0,ht.getHdbBasePath)(),wt.LEGACY_DATABASES_DIR_NAME));let o=(0,tt.join)(n,(i?t:e)+".mdb"),c=mi.get(o);if(!c){let l=new yS.default(o,!1);c=(0,Qd.open)(l),mi.set(o,c)}return c}async function vp(e){if(!ct[e])throw new Error("Schema does not exist");let t=ct[e],r;for(let n in t)r=t[n].primaryStore.rootStore,mi.delete(r.path),r.status==="open"&&(await r.close(),await Cl.remove(r.path));if(r||(r=oa({database:e,table:null}),r.status==="open"&&(await r.close(),await Cl.remove(r.path))),e==="data"){for(let n in jr)delete jr[n];delete jr[jd]}delete ct[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=IS);let d=oa({database:t,table:e}),E=ct[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let A=new uo.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let N,b;if(f){if(h=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let M=d.auditStore;M||(M=N_(d)),p=i.find(oe=>oe.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=p.isPrimaryKey=!0,p.schemaDefined=_,p.compression=Zd(),l&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,ht.get)(wt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),n&&(p.eviction=n),typeof c=="boolean"&&(p.sealed=c),u&&(p.origins?p.origins.includes(u)||p.origins.push(u):p.origins=[u]),hn.trace(`${e} table loading, opening primary store`);let Q=new uo.default(!1,!0);Q.compression=p.compression;let z=e+"/",j=g_(d.openDB(z,Q));j.rootStore=d,T=d.dbisDb=d.openDB(Wd.INTERNAL_DBIS_NAME,A),j.tableId=T.get(pa),j.tableId||(j.tableId=1),T.putSync(pa,j.tableId+1),p.tableId=j.tableId,f=jD(E,e,Yd({primaryStore:j,auditStore:M,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:j.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),f.schemaVersion=1,N=!0,q(),T.put(z,p)}S=f.indices,T=T||(d.dbisDb=d.openDB(Wd.INTERNAL_DBIS_NAME,A)),f.dbisDB=T;let v=[];for(let{key:M,value:Q}of T.getRange({start:!0})){let[z,j]=M.toString().split("/");if(j===""&&(j=Q.name),j){if(z!==e)continue}else continue;let oe=i.find(ue=>ue.name===j),le=!oe?.indexed&&Q.indexed&&!Q.isPrimaryKey;if((!oe||le)&&(q(),N=!0,oe||T.remove(M),le)){let ue=f.indices[z];ue&&v.push(ue)}}let P=[];try{for(let M of i||[]){if(M.relationship)continue;let Q=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:Q,configurable:!0});let z=T.get(Q);if(M.isPrimaryKey){if(z=z||T.get(Q=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let oe=Object.assign({},z);typeof o=="boolean"&&(o&&f.enableAuditing(o),oe.audit=o),r&&(oe.expiration=+r),n&&(oe.eviction=+n),c!==void 0&&(oe.sealed=c),N=!0,q(),T.put(Q,oe)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let j=!z||z.type!==M.type||z.indexed!==M.indexed||z.nullable!==M.nullable||JSON.stringify(z.properties)!==JSON.stringify(M.properties)||JSON.stringify(z.elements)!==JSON.stringify(M.elements);if(M.indexed){let oe=new uo.default(!0,!1),le=d.openDB(Q,oe);(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Dl.workerData?.restartNumber)&&(N=!0,q(),z=T.get(Q),(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Dl.workerData?.restartNumber)&&(N=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=z?.lastIndexedKey||!1,M.indexingPID=process.pid,le.isIndexing=!0,Object.defineProperty(M,"dbi",{value:le}),P.push(M))),T.put(Q,M)),z?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),le.indexNulls=M.indexNulls,S[M.name]=le}else j&&(N=!0,q(),T.put(Q,M))}}finally{b&&b()}if(N&&(f.schemaVersion++,f.updatedAttributes()),hn.trace(`${e} table loading, running index`),P.length>0||v.length>0?f.indexingOperation=W4(f,P,v):N&&zd.signalSchemaChange(new Jd.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=u,N)for(let M of wS)M(f,u!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),hn.trace(`${e} table loaded`),f;function q(){b||d.transactionSync(()=>({then(M){b=M}}))}a(q,"startTxn")}async function W4(e,t,r){try{let n=e.schemaVersion;await zd.signalSchemaChange(new Jd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,QD.getIndexedValues)(u[h]);if(p)for(let S=0,T=p.length;S<T;S++)f.dbi.put(p[S],_)}}),s.then(()=>l--,E=>{l--,hn.error(E)}),Dl.workerData&&Dl.workerData.restartNumber!==zD.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}l>Y4?await s:l>K4&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await zd.signalSchemaChange(new Jd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){hn.error("Error in indexing",n)}}function Q4({table:e,database:t}){let r=oa({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 CS(e){wS.push(e)}function Zd(){let e=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,ht.get)(wt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||JD,n={startingOffset:32};return t&&(n.dictionary=Cl.readFileSync(t)),r&&(n.threshold=r),e&&n}var ht,Wd,Qd,tt,Xr,Sa,uo,yS,wt,Cl,NS,QD,zd,Jd,Dl,hn,zD,IS,jd,JD,jr,ct,pa,wS,Xd,mi,Ta,Y4,K4,Ae=Re(()=>{ht=x(ne()),Wd=x(dt()),Qd=require("lmdb"),tt=require("path"),Xr=require("fs"),Sa=x(ze());Kd();uo=x(xc()),yS=x(Gc()),wt=x(U()),Cl=x(require("fs-extra")),NS=require("../index"),QD=x(Br()),zd=x(ys()),Jd=x(Ln()),Dl=require("worker_threads"),hn=x(K()),zD=x(it());ei();Lc();IS="data",jd=Symbol("defined-tables"),JD=((0,ht.get)(wt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,ht.initSync)();jr=Object.create(null),ct=Object.create(null);(0,NS._assignPackageExport)("databases",ct);(0,NS._assignPackageExport)("tables",jr);pa=Symbol.for("next-table-id"),wS=[],mi=new Map;a($4,"getTables");a(Sr,"getDatabases");a(Ll,"resetDatabases");a(wl,"readMetaDb");a(XD,"ensureDB");a(jD,"setTable");a(oa,"database");a(vp,"dropDatabase");a(Et,"table");Y4=1e3,K4=10;a(W4,"runIndexing");a(Q4,"dropTableMeta");a(CS,"onUpdatedTable");a(Zd,"getDefaultCompression")});var J=g((Bde,dL)=>{"use strict";var pi=require("path"),nL=require("fs-extra"),br=K(),ZD=require("fs-extra"),ef=require("os"),z4=require("net"),J4=require("recursive-iterator"),lt=U(),X4=PO(),eL=require("papaparse"),tf=require("moment"),{inspect:j4}=require("util"),tL=require("is-number"),vde=require("lodash"),Z4=require("minimist"),e3=require("https"),t3=require("http"),{hdb_errors:rf}=se(),r3=/^((\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)))$/,sL=require("util").promisify(setTimeout),n3=100,s3=5,i3="",o3=4,rL={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};dL.exports={isEmpty:Zr,isEmptyOrZeroLength:as,arrayHasEmptyValues:l3,arrayHasEmptyOrZeroLengthValues:u3,buildFolderPath:_3,isBoolean:iL,errorizeMessage:a3,stripFileExtension:f3,autoCast:E3,autoCastJSON:oL,autoCastJSONDeep:LS,removeDir:h3,compareVersions:m3,isCompatibleDataVersion:p3,escapeRawValue:S3,unescapeValue:T3,stringifyProps:g3,timeoutPromise:A3,isClusterOperation:b3,getClusterUser:N3,checkGlobalSchemaTable:y3,getHomeDir:cL,getPropsFilePath:R3,promisifyPapaParse:I3,removeBOM:lL,createEventPromise:w3,checkProcessRunning:C3,checkSchemaTableExist:D3,checkSchemaExists:uL,checkTableExists:_L,getStartOfTomorrowInSeconds:L3,getLimitKey:M3,isObject:d3,isNotEmptyAndHasValue:c3,autoCasterIsNumberCheck:aL,backtickASTSchemaItems:P3,isPortTaken:O3,createForkArgs:U3,autoCastBoolean:v3,async_set_timeout:sL,getTableHashAttribute:B3,doesSchemaExist:H3,doesTableExist:x3,stringifyObj:G3,ms_to_time:F3,changeExtension:q3,getEnvCliRootPath:MS,noBootFile:k3,httpRequest:V3,transformReq:$3,convertToMS:Y3,PACKAGE_ROOT:lt.PACKAGE_ROOT};function a3(e){return e instanceof Error?e:new Error(e)}a(a3,"errorizeMessage");function Zr(e){return e==null}a(Zr,"isEmpty");function c3(e){return!Zr(e)&&(e||e===0||e===""||iL(e))}a(c3,"isNotEmptyAndHasValue");function as(e){return Zr(e)||e.length===0||e.size===0}a(as,"isEmptyOrZeroLength");function l3(e){if(Zr(e))return!0;for(let t=0;t<e.length;t++)if(Zr(e[t]))return!0;return!1}a(l3,"arrayHasEmptyValues");function u3(e){if(as(e))return!0;for(let t=0;t<e.length;t++)if(as(e[t]))return!0;return!1}a(u3,"arrayHasEmptyOrZeroLengthValues");function _3(...e){try{return e.join(pi.sep)}catch{console.error(e)}}a(_3,"buildFolderPath");function iL(e){return Zr(e)?!1:e===!0||e===!1}a(iL,"isBoolean");function d3(e){return Zr(e)?!1:typeof e=="object"}a(d3,"isObject");function f3(e){return as(e)?i3:e.slice(0,-o3)}a(f3,"stripFileExtension");function E3(e){return Zr(e)||e===""||typeof e!="string"?e:rL[e]!==void 0?rL[e]:aL(e)===!0?Number(e):r3.test(e)?new Date(e):e}a(E3,"autoCast");function oL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(oL,"autoCastJSON");function LS(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=LS(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=LS(r);n!==r&&(e[t]=n)}return e}else return oL(e)}a(LS,"autoCastJSONDeep");function aL(e){if(e.startsWith("0.")&&tL(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&tL(e))}a(aL,"autoCasterIsNumberCheck");async function h3(e){if(as(e))throw new Error(`Directory path: ${e} does not exist`);try{await ZD.emptyDir(e),await ZD.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(h3,"removeDir");function m3(e,t){if(as(e)){br.info("Invalid current version sent as parameter.");return}if(as(t)){br.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(m3,"compareVersions");function p3(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(p3,"isCompatibleDataVersion");function S3(e){if(Zr(e))return e;let t=String(e);return t==="."?lt.UNICODE_PERIOD:t===".."?lt.UNICODE_PERIOD+lt.UNICODE_PERIOD:t.replace(lt.FORWARD_SLASH_REGEX,lt.UNICODE_FORWARD_SLASH)}a(S3,"escapeRawValue");function T3(e){if(Zr(e))return e;let t=String(e);return t===lt.UNICODE_PERIOD?".":t===lt.UNICODE_PERIOD+lt.UNICODE_PERIOD?"..":String(e).replace(lt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(T3,"unescapeValue");function g3(e,t){if(Zr(e))return br.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+ef.EOL}!as(n)&&n[0]===";"?r+=" "+n+s+ef.EOL:as(n)||(r+=n+"="+s+ef.EOL)}catch{br.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(g3,"stringifyProps");function cL(){let e;try{e=ef.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(cL,"getHomeDir");function R3(){let e=pi.join(cL(),lt.HDB_HOME_DIR_NAME,lt.BOOT_PROPS_FILE_NAME);return nL.existsSync(e)||(e=pi.join(__dirname,"../","hdb_boot_properties.file")),e}a(R3,"getPropsFilePath");function A3(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(A3,"timeoutPromise");async function O3(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=z4.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(O3,"isPortTaken");function b3(e){try{return lt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(b3,"isClusterOperation");function y3(e,t){let r=(Ae(),ie(ke)).getDatabases();if(!r[e])return rf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return rf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(y3,"checkGlobalSchemaTable");function N3(e,t){if(Zr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Zr(e)||as(e)){br.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){br.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(N3,"getClusterUser");function I3(){eL.parsePromise=function(e,t,r){return new Promise(function(n,s){eL.parse(e,{header:!0,transformHeader:lL,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(I3,"promisifyPapaParse");function lL(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(lL,"removeBOM");function w3(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;br.info(`Got cluster status event response: ${j4(s)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}n(s)})})}a(w3,"createEventPromise");async function C3(e){let t=!0,r=0;do await sL(n3*r++),(await X4.findPs(e)).length>0&&(t=!1);while(t&&r<s3);if(t)throw new Error(`process ${e} was not started`)}a(C3,"checkProcessRunning");function D3(e,t){let r=uL(e);if(r)return r;let n=_L(e,t);if(n)return n}a(D3,"checkSchemaTableExist");function uL(e){let{getDatabases:t}=(Ae(),ie(ke));if(!t()[e])return rf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(uL,"checkSchemaExists");function _L(e,t){let{getDatabases:r}=(Ae(),ie(ke));if(!r()[e][t])return rf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(_L,"checkTableExists");function L3(){let e=tf().utc().add(1,lt.MOMENT_DAYS_TAG).startOf(lt.MOMENT_DAYS_TAG).unix(),t=tf().utc().unix();return e-t}a(L3,"getStartOfTomorrowInSeconds");function M3(){return tf().utc().format("DD-MM-YYYY")}a(M3,"getLimitKey");function P3(e){try{let t=new J4(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){br.error("Got an error back ticking items."),br.error(t)}}a(P3,"backtickASTSchemaItems");function U3(e){return[e]}a(U3,"createForkArgs");function v3(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(v3,"autoCastBoolean");function B3(e,t){let{getDatabases:r}=(Ae(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(B3,"getTableHashAttribute");function H3(e){let{getDatabases:t}=(Ae(),ie(ke));return t()[e]!==void 0}a(H3,"doesSchemaExist");function x3(e,t){let{getDatabases:r}=(Ae(),ie(ke));return r()[e]?.[t]!==void 0}a(x3,"doesTableExist");function G3(e){try{return JSON.stringify(e)}catch{return e}}a(G3,"stringifyObj");function F3(e){let t=tf.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(F3,"ms_to_time");function q3(e,t){let r=pi.basename(e,pi.extname(e));return pi.join(pi.dirname(e),r+t)}a(q3,"changeExtension");function MS(){if(process.env[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Z4(process.argv);if(e[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(MS,"getEnvCliRootPath");var DS;function k3(){if(DS)return DS;let e=MS();if(MS()&&nL.pathExistsSync(pi.join(e,lt.HDB_CONFIG_FILE)))return DS=!0,!0}a(k3,"noBootFile");function V3(e,t){let r;return e.protocol==="http:"?r=t3:r=e3,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(V3,"httpRequest");function $3(e){if(!e.schema&&!e.database){e.schema=lt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a($3,"transformReq");function Y3(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(Y3,"convertToMS")});var ne=g((xde,pL)=>{"use strict";var PS=require("fs-extra"),_o=require("path"),fL=require("os"),K3=require("properties-reader"),Pl=K(),Ml=J(),de=U(),nf=Rr(),W3="Error initializing environment manager",sf="BOOT_PROPS_FILE_PATH",EL=!1,Q3={[de.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ls={};pL.exports={BOOT_PROPS_FILE_PATH:sf,getHdbBasePath:z3,setHdbBasePath:J3,get:hL,initSync:j3,setProperty:Pe,initTestEnvironment:eX,setCloneVar:Z3};function z3(){return Ls[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(z3,"getHdbBasePath");function J3(e){Ls[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(J3,"setHdbBasePath");function hL(e){let t=nf.getConfigValue(e);return t===void 0?Ls[e]:t}a(hL,"get");function Pe(e,t){Q3[e]&&(Ls[e]=t),nf.updateConfigObject(e,t)}a(Pe,"setProperty");function X3(){let e;try{e=Ml.getPropsFilePath(),PS.accessSync(e,PS.constants.F_OK|PS.constants.R_OK),EL=!0;let t=K3(e);return Ls[de.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(de.HDB_SETTINGS_NAMES.INSTALL_USER),Ls[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ls[sf]=e,!0}catch{return Pl.trace(`Environment manager found no properties file at ${e}`),!1}}a(X3,"doesPropFileExist");function j3(e=!1){try{(EL||X3()||Ml.noBootFile())&&!mL&&(nf.initConfig(e),Ls[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=nf.getConfigValue(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Pl.error(W3),Pl.error(t),console.error(t),process.exit(1)}}a(j3,"initSync");var mL=!1;function Z3(e){mL=e}a(Z3,"setCloneVar");function eX(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=_o.join(__dirname,"../../","unitTests");Ls[sf]=_o.join(l,"hdb_boot_properties.file"),Pe(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,_o.join(l,"settings.test")),Pe(de.HDB_SETTINGS_NAMES.INSTALL_USER,fL.userInfo()?fL.userInfo().username:void 0),Pe(de.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Pe(de.HDB_SETTINGS_NAMES.LOG_PATH_KEY,_o.join(l,"envDir","log")),Pe(de.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Pe(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,_o.join(l,"envDir")),Pe(de.CONFIG_PARAMS.STORAGE_PATH,_o.join(l,"envDir")),s&&(Pe(de.CONFIG_PARAMS.HTTP_SECUREPORT,hL(de.CONFIG_PARAMS.HTTP_PORT)),Pe(de.CONFIG_PARAMS.HTTP_PORT,null)),Pe(de.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Pe(de.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Pe(de.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ml.isEmpty(i)?!1:i),Pe(de.CONFIG_PARAMS.HTTP_CORS,Ml.isEmpty(i)?!1:i),Pe(de.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Pe(de.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,_o.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Pe(de.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ml.isEmpty(c)?!1:c),o&&(Pe("CORS_ACCESSLIST",o),Pe(de.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Pe(de.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Pe(de.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Pe(de.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${sf}. Please check your boot props and settings files`;Pl.fatal(r),Pl.error(t)}}a(eX,"initTestEnvironment")});var BS={};qe(BS,{loadGQLSchema:()=>nX,start:()=>vS,startOnMainThread:()=>rX});function vS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let v=function(P){if(P.kind==="NonNullType"){let Q=v(P.type);return Q.nullable=!1,Q}if(P.kind==="ListType")return{type:"array",elements:v(P.type)};let M={type:P.name?.value};return Object.defineProperty(M,"location",{value:P.loc.startToken}),M};a(v,"getProperty");let T=S.name.value,A=[],N={table:null,database:null,properties:A};E.set(T,N);for(let P of S.directives){if(P.name.value==="table"){for(let q of P.arguments)N[q.name.value]=q.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=T),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,f.push(N)}if(P.name.value==="sealed"&&(N.sealed=!0),P.name.value==="export"){N.export=!0;for(let q of P.arguments)q.name.value==="name"&&(N.export={name:q.value.value})}}let b=!1;for(let P of S.fields){let q=v(P.type);q.name=P.name.value,A.push(q);for(let M of P.directives)if(M.name.value==="primaryKey")b?console.warn("Can not define two attributes as a primary key"):(q.isPrimaryKey=!0,b=!0);else if(M.name.value==="indexed")q.indexed=!0;else if(M.name.value==="relationship"){let Q={};for(let z of M.arguments)Q[z.name.value]=z.value.value;q.relationship=Q}else if(M.name.value==="createdTime")q.assignCreatedTime=!0;else if(M.name.value==="updatedTime")q.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")q.expiresAt=!0;else if(M.name.value==="allow"){let Q=q.authorizedRoles=[];for(let z of M.arguments)z.name.value==="role"&&Q.push(z.value.value)}}N.type=T,T==="Query"&&(h=N)}function p(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):tX.includes(S.type)||(0,SL.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of E.values())for(let T of S.properties)p(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,US.dirname)(n),S.tableClass):i.set((0,US.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var US,SL,tX,rX,nX,TL=Re(()=>{US=require("path");Ae();SL=x(it()),tX=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(vS,"start");rX=vS,nX=vS({ensureTable:Et}).handleFile});async function of(e){let t=(0,AL.pathToFileURL)(e).toString();return sX?(Ul||(Ul=iX(aX)),(await(await Ul).import(t)).namespace):import(t)}async function iX(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ul=new Compartment({console,Math,Date,fetch:oX,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,RL.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Yt,tables:jr,databases:ct})}};let n=await(0,gL.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Ul}function oX(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 aX(){return{Resource:Yt,tables:jr}}var gL,RL,AL,sX,Ul,HS=Re(()=>{ln();Ae();gL=require("fs/promises"),RL=require("path"),AL=require("url"),sX=!1;a(of,"secureImport");a(iX,"getCompartment");a(oX,"secureOnlyFetch");a(aX,"getGlobalVars")});var GS={};qe(GS,{handleFile:()=>cX});async function cX(e,t,r,n){let s=new Map,i=await of(r);c(i.default)&&n.set((0,xS.dirname)(t),i.default),o(i,(0,xS.dirname)(t));function o(l,_){for(let u in l){let d=l[u];c(d)?n.set(_+"/"+u,d):typeof d=="object"&&o(d,_+"/"+u)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var xS,OL=Re(()=>{HS();xS=require("path");a(cX,"handleFile")});var qS={};qe(qS,{start:()=>lX});function lX({resources:e}){e.set("login",FS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var FS,bL=Re(()=>{ln();a(lX,"start");FS=class extends Yt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var LL={};qe(LL,{parse:()=>VS,streamAsJSON:()=>vl,stringify:()=>fo});function vl(e){return new kS({value:e})}function yL(e){return console.error(e),JSON.stringify(e.toString())}function NL(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function fo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===CL)return DL(e);if(t.resolution)return t.resolution.then(()=>fo(e));throw t}}function DL(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+=DL(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+fo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function VS(e){return dX.test(e)?uX.parse(e):JSON.parse(e)}var IL,wL,uX,_X,CL,kS,dX,$S=Re(()=>{IL=require("stream"),wL=x(require("json-bigint-fixes")),uX=(0,wL.default)({useNativeBigInt:!0}),_X=1e4,CL={};BigInt.prototype.toJSON=function(){throw CL};a(vl,"streamAsJSON");kS=class extends IL.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),yL)}catch(s){yield yL(s)}else yield fo(t)}else yield fo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);NL(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>_X?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 NL(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(yL,"handleError");a(NL,"when");a(fo,"stringify");a(DL,"jsStringify");dX=/[[,:]\s*-?\d{16,}/;a(VS,"parse")});var af=g((Xde,ML)=>{"use strict";var fX=Un();ML.exports={writeTransaction:EX};function EX(e,t,r){return fX.writeTransaction(e,t,r)}a(EX,"writeTransaction")});var BL=g((efe,vL)=>{"use strict";var hX=Yr(),mX=li(),PL=K(),pX=fn(),Zde=af(),SX=require("clone"),KS=require("alasql"),TX=hd(),UL=require("util"),gX=UL.promisify(mX.getTableSchema),RX=UL.promisify(hX.search),AX=U(),YS=J();TX(KS);vL.exports={update:bX};var OX="There was a problem performing this update. Please check the logs and try again.";async function bX({statement:e,hdb_user:t}){let r=await gX(e.table.databaseid,e.table.tableid),n=yX(e.columns);YS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=SX(s),c=YS.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=KS.parse(l).statements[0],u=await RX(_),d=NX(n,u);return IX(o,d,t)}a(bX,"update");function yX(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=KS.compile(`SELECT ${r.expression.toString()} AS [${AX.FUNC_VAL}] FROM ?`)}),t}catch(t){throw PL.error(t),new Error(OX)}}a(yX,"createUpdateRecord");function NX(e,t){return YS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(NX,"buildUpdateRecords");async function IX(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await pX.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){PL.error(`Error delete new_attributes from update response: ${i}`)}return s}a(IX,"updateRecords")});var xL=g((sfe,HL)=>{var wX=require("alasql"),CX=Yr(),DX=K(),LX=Un(),QS=require("util"),WS=J(),MX=U(),PX=li(),rfe=af(),nfe=fn(),UX="record",vX="successfully deleted",BX=QS.callbackify(FX),HX=QS.promisify(CX.search),xX=QS.promisify(PX.getTableSchema);HL.exports={convertDelete:BX};function GX(e){return`${e.deleted_hashes.length} ${UX}${e.deleted_hashes.length===1?"":"s"} ${vX}`}a(GX,"generateReturnMessage");async function FX({statement:e,hdb_user:t}){let r=await xX(e.table.databaseid,e.table.tableid);WS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=WS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=wX.parse(o).statements[0],l={operation:MX.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await HX(c);let _=await LX.deleteRecords(l);return WS.isEmptyOrZeroLength(_.message)&&(_.message=GX(_)),delete _.txn_time,_}catch(_){throw DX.error(_),_.hdb_code?_.message:_}}a(FX,"convertDelete")});var VL=g((ofe,kL)=>{"use strict";var qX=ci(),{hdb_errors:GL}=se(),{getDatabases:FL}=(Ae(),ie(ke));kL.exports={checkSchemaExists:qL,checkSchemaTableExists:kX,schema_describe:qX};async function qL(e){if(!FL()[e])return GL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(qL,"checkSchemaExists");async function kX(e,t){let r=await qL(e);if(r)return r;if(!FL()[e][t])return GL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(kX,"checkSchemaTableExists")});var Bl=g((cfe,VX)=>{VX.exports={name:"harperdb",version:"4.3.41",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.5",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var ZS=g((dfe,tM)=>{"use strict";var{decode:$X}=require("msgpackr"),{isMainThread:lfe,parentPort:ufe,threadId:_fe}=require("worker_threads"),uf=Ct(),ga=at(),XS=U(),sr=K(),JS=ne(),YX=U(),{onMessageByType:KX}=it(),WL=Cs(),{recordAction:$L,recordActionBinary:WX}=(Ds(),ie(Sl)),{publishToStream:QX}=uf,{ConsumerEvents:YL}=require("nats"),zX=Yr(),{promisify:JX}=require("util"),QL=JX(setTimeout),_f=1e4,df,lf,XX,jX,zL,Hl=new Map,Ra=new Map;tM.exports={initialize:JL,ingestConsumer:jS,setSubscription:ZX,setIgnoreOrigin:rj,getDatabaseSubscriptions:tj,updateConsumer:XL};async function JL(){KX(XS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await XL(n)}),zL=!0,sr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await uf.getNATSReferences();df=e,lf=e.info.server_name,XX=t,jX=r}a(JL,"initialize");async function XL(e){if(e.status==="start"){let{js:t,jsm:r}=await jL(e.node_domain_name);jS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Hl.get(e.stream_name+e.node_domain_name);t&&(sr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Hl.set(e.stream_name+e.node_domain_name,"close")),Ra.get(e.node_domain_name)==="failed"&&Ra.set(e.node_domain_name,"close")}}a(XL,"updateConsumer");var ff=new Map;function ZX(e,t,r){let n=ff.get(e);n||ff.set(e,n=new Map),n.set(t,r),zL||JL().then(ej)}a(ZX,"setSubscription");async function ej(){let e=await zX.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+ga.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await jL(r),!n))break;let{schema:o,table:c}=i,l=WL.createNatsTableStreamName(o,c);jS(l,n,s,r)}}}a(ej,"accessConsumers");async function jL(e){let t,r,n=1;for(;!r;)try{t=await df.jetstream({domain:e}),r=await df.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Ra.get(e)==="close")break;Ra.set(e,"failed"),n%10===1&&sr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<_f?n++*100:_f;await QL(i)}return{js:t,jsm:r}}a(jL,"connectToRemoteJS");function tj(){return ff}a(tj,"getDatabaseSubscriptions");var ZL;function rj(e){ZL=e}a(rj,"setIgnoreOrigin");var eM=100,KL=new Array(eM),cf=0;async function jS(e,t,r,n){let{connection:s}=await uf.getNATSReferences();df=s,lf=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,lf),sr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Ra.get(n)==="close")break;o%10===1&&sr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(sr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await uf.createConsumer(r,e,lf,new Date(Date.now()).toISOString()));let u=o++*100<_f?o++*100:_f;await QL(u)}let c=!1,l;for(;!c;){if(Hl.get(e+n)==="close"||Ra.get(n)==="close"){Hl.delete(e+n),c=!0;continue}l=await i.consume({max_messages:JS.get(XS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Hl.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===YL.ConsumerDeleted&&(await l.close(),c=!0),u.type===YL.HeartbeatsMissed){let d=u.data;sr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(sr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await KL[cf],KL[cf]=nj(u).catch(d=>{sr.error(d)}),++cf>=eM&&(cf=0)}catch(u){u.message==="consumer deleted"?(sr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):sr.error("Error consuming clustering ingest, restarting consumer",u)}}}a(jS,"ingestConsumer");async function nj(e){let t=$X(e.data);$L(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),sr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=JS.get(XS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(ga.MSG_HEADERS.TRANSACTED_NODES)&&r.values(ga.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(ga.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!ZL),WX(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(ga.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:E,expiresAt:f}=t;sr.trace("processing message:",o,c,_,(u?"records: "+u.map(v=>v?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),sr.trace(`messageProcessor nats msg id: ${e.headers.get(ga.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let p=new Promise(v=>h=v),{timestamp:S,user:T,node_name:A}=E||{},N=ff.get(c)?.get(_);if(!N)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,N.send(t);else if(u.length===1&&!l)N.send({type:zS(o),value:u[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:T,nodeName:A});else{let v=u.map((P,q)=>({type:zS(o),value:P,expiresAt:f,id:d?.[q],table:_}));for(;l;)v.push({type:zS(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;N.send({type:"transaction",writes:v,table:_,timestamp:S,onCommit:h,user:T,nodeName:A})}JS.get(YX.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&QX(e.subject.split(".").slice(0,-1).join("."),WL.createNatsTableStreamName(c,_),e.headers,e.data),await p;let b=Date.now()-S;S&&$L(b,"replication-latency",e.subject,o,"ingest")}catch(o){sr.error(o)}e.ack()}a(nj,"messageProcessor");function zS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(zS,"convertOperation")});var Ct=g((Tfe,SM)=>{"use strict";var xt=ne();xt.initSync();var sj=require("fs-extra"),ij=require("semver"),Fl=require("path"),{monotonicFactory:oj}=require("ulidx"),nM=oj(),aj=require("util"),sM=require("child_process"),cj=aj.promisify(sM.exec),lj=sM.spawn,Wt=at(),Ie=U(),Ef=J(),Fn=K(),hf=Cs(),uj=af(),xl=Rr(),{broadcast:_j,onMessageByType:dj,getWorkerIndex:fj}=it(),{isMainThread:iM}=require("worker_threads"),{Encoder:Ej,decode:nT}=require("msgpackr"),oM=new Ej,{isEmpty:po}=Ef,aM=En(),Efe=48*36e11;iM&&dj(Ie.ITC_EVENT_TYPES.RESTART,()=>{ir=void 0,mo=void 0});var{connect:hj,StorageType:mj,RetentionPolicy:pj,AckPolicy:sT,DeliverPolicy:iT,DiscardPolicy:Sj,NatsConnection:hfe,JetStreamManager:mfe,JetStreamClient:pfe,StringCodec:Sfe,JSONCodec:Tj,createInbox:oT,headers:gj,ErrorCode:rM}=require("nats"),{PACKAGE_ROOT:Rj}=U(),Aj=Bl(),{recordAction:Oj}=(Ds(),ie(Sl)),cM=Tj(),bj="clustering",yj=Aj.engines[Wt.NATS_SERVER_NAME],Nj=Fl.join(Rj,"dependencies"),rT=Fl.join(Nj,`${process.platform}-${process.arch}`,Wt.NATS_BINARY_NAME),eT,tT,Gl,Eo,ho;SM.exports={runCommand:lM,checkNATSServerInstalled:Ij,createConnection:aT,getConnection:ql,getJetStreamManager:kl,getJetStream:_M,getNATSReferences:cs,getServerList:Cj,createLocalStream:cT,listStreams:dM,deleteLocalStream:Dj,getServerConfig:Aa,listRemoteStreams:Lj,viewStream:Mj,viewStreamIterator:Pj,publishToStream:Uj,request:Hj,reloadNATS:lT,reloadNATSHub:xj,reloadNATSLeaf:Gj,extractServerName:Bj,requestErrorHandler:Fj,createLocalTableStream:mM,createTableStreams:Vj,purgeTableStream:pM,purgeSchemaTableStreams:$j,getStreamInfo:Yj,updateLocalStreams:Wj,closeConnection:wj,getJsmServerName:mf,addNatsMsgHeader:fM,clearClientCache:uM,updateRemoteConsumer:qj,createConsumer:EM,updateConsumerIterator:kj};async function lM(e,t=void 0){let{stdout:r,stderr:n}=await cj(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
11
11
|
`,""));return r.replace(`
|
|
12
12
|
`,"")}a(lM,"runCommand");async function Ij(){try{await sj.access(rT)}catch{return!1}let e=await lM(`${rT} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return ij.eq(t,yj)}a(Ij,"checkNATSServerInstalled");async function aT(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await aM.getClusterUser();if(po(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Fn.trace("create nats connection called");let i=await hj({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Fn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Fn.error("Error with Nats client connection, connection closed",o),i===ir&&uM()}),i}a(aT,"createConnection");function uM(){ir=void 0,Eo=void 0,ho=void 0,mo=void 0}a(uM,"clearClientCache");async function wj(){ir&&(await ir.drain(),ir=void 0,Eo=void 0,ho=void 0,mo=void 0)}a(wj,"closeConnection");var ir,mo;async function ql(){return mo||(mo=aT(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ir=await mo),ir||mo}a(ql,"getConnection");async function kl(){if(Eo)return Eo;po(ir)&&await ql();let{domain:e}=Aa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(po(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Eo=await ir.jetstreamManager({domain:e,timeout:6e4}),Eo}a(kl,"getJetStreamManager");async function _M(){if(ho)return ho;po(ir)&&await ql();let{domain:e}=Aa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(po(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ho=ir.jetstream({domain:e,timeout:6e4}),ho}a(_M,"getJetStream");async function cs(){let e=ir||await ql(),t=Eo||await kl(),r=ho||await _M();return{connection:e,jsm:t,js:r}}a(cs,"getNATSReferences");async function Cj(e){let t=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await aM.getClusterUser(),s=await aT(t,r,n),i=oT(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=cM.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await Ef.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(Cj,"getServerList");async function cT(e,t){let{jsm:r}=await cs(),n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:mj.File,retention:pj.Limits,subjects:t,discard:Sj.Old,max_msgs:s,max_bytes:i,max_age:n})}a(cT,"createLocalStream");async function dM(){let{jsm:e}=await cs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(dM,"listStreams");async function Dj(e){let{jsm:t}=await cs();await t.streams.delete(e)}a(Dj,"deleteLocalStream");async function Lj(e){let{connection:t}=await cs(),r=[],n=oT(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(cM.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(Lj,"listRemoteStreams");async function Mj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await cs(),i=nM(),o={durable_name:i,ack_policy:sT.Explicit};t&&(o.deliver_policy=iT.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=nT(u.data),E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(E.origin=u.headers.get(Wt.MSG_HEADERS.ORIGIN)),_.push(E),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(Mj,"viewStream");async function*Pj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await cs(),i=nM(),o={durable_name:i,ack_policy:sT.Explicit};t&&(o.deliver_policy=iT.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=nT(_.data);u[0]||(u=[u]);for(let d of u){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(Wt.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(Pj,"viewStreamIterator");async function Uj(e,t,r,n){Fn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=fM(n,r);let{js:s}=await cs(),i=await mf(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:oM.encode(n);try{Fn.trace(`publishToStream publishing to subject: ${o}`),Oj(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return hM(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Fn.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await cT(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Uj,"publishToStream");function fM(e,t){t===void 0&&(t=gj());let r=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Wt.MSG_HEADERS.ORIGIN)&&r&&t.append(Wt.MSG_HEADERS.ORIGIN,r),t}a(fM,"addNatsMsgHeader");function Aa(e){e=e.toLowerCase();let t=Fl.join(xt.get(Ie.CONFIG_PARAMS.ROOTPATH),bj);if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return po(tT)&&(tT={port:xl.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:xl.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wt.SERVER_SUFFIX.HUB,config_file:Wt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Fl.join(t,Wt.PID_FILES.HUB),hdb_nats_path:t}),tT;if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return po(eT)&&(eT={port:xl.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:xl.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wt.SERVER_SUFFIX.LEAF,config_file:Wt.NATS_CONFIG_FILES.LEAF_SERVER,domain:xl.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wt.SERVER_SUFFIX.LEAF,pid_file_path:Fl.join(t,Wt.PID_FILES.LEAF),hdb_nats_path:t}),eT;Fn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Aa,"getServerConfig");async function EM(e,t,r,n){try{await e.consumers.add(t,{ack_policy:sT.Explicit,durable_name:r,deliver_policy:iT.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(EM,"createConsumer");async function vj(e,t,r){await e.consumers.delete(t,r)}a(vj,"removeConsumer");function Bj(e){return e.split(".")[1]}a(Bj,"extractServerName");async function Hj(e,t,r=6e4,n=oT()){if(!Ef.isObject(t))throw new Error("data param must be an object");let s=oM.encode(t),{connection:i}=await cs(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return nT(c.data)}a(Hj,"request");function lT(e){return new Promise(async(t,r)=>{let n=lj(rT,["--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(lT,"reloadNATS");async function xj(){let{pid_file_path:e}=Aa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await lT(e)}a(xj,"reloadNATSHub");async function Gj(){let{pid_file_path:e}=Aa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await lT(e)}a(Gj,"reloadNATSLeaf");function Fj(e,t,r){let n;switch(e.code){case rM.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case rM.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Fj,"requestErrorHandler");async function qj(e,t){let r=t+Wt.SERVER_SUFFIX.LEAF,{connection:n}=await cs(),{jsm:s}=await zj(r),{schema:i,table:o}=e,c=hf.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await hM(async()=>{if(e.subscribe===!0)await EM(s,c,n.info.server_name,l);else try{await vj(s,c,n.info.server_name)}catch(_){Fn.trace(_)}})}a(qj,"updateRemoteConsumer");async function kj(e,t,r,n){let s=hf.createNatsTableStreamName(e,t),i=r+Wt.SERVER_SUFFIX.LEAF,o={type:Ie.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!iM&&fj()<xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=ZS();await c(o)}await _j(o),n==="stop"&&await Ef.async_set_timeout(1e3)}a(kj,"updateConsumerIterator");function hM(e){return uj.writeTransaction(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(hM,"exclusiveLock");async function mM(e,t){let r=hf.createNatsTableStreamName(e,t),n=await mf(),s=Kj(e,t,n);await cT(r,[s])}a(mM,"createLocalTableStream");async function Vj(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await mM(n,s)}}a(Vj,"createTableStreams");async function pM(e,t,r=void 0){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=hf.createNatsTableStreamName(e,t),{domain:s}=Aa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await ql()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Fn.warn(n);else throw n}}a(pM,"purgeTableStream");async function $j(e,t){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await pM(e,t[r])}a($j,"purgeSchemaTableStreams");async function Yj(e){return(await kl()).streams.info(e)}a(Yj,"getStreamInfo");function Kj(e,t,r){return`${Wt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Kj,"createSubjectName");async function mf(){if(Gl)return Gl;if(Gl=(await kl())?.nc?.info?.server_name,Gl===void 0)throw new Error("Unable to get jetstream manager server name");return Gl}a(mf,"getJsmServerName");async function Wj(){let e=await kl(),t=await mf(),r=await dM();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Qj(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");Fn.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(Wj,"updateLocalStreams");function Qj(e){let{config:t}=e,r=!1,n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Qj,"updateStreamLimits");async function zj(e){let t,r;try{t=await ir.jetstream({domain:e}),r=await ir.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Fn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(zj,"connectToRemoteJS")});var gf=g((Afe,AM)=>{"use strict";var Oa=ed(),ba=VL(),Jj=K(),Xj=require("uuid").v4,Rfe=require("clone"),Sf=ys(),ya=U(),jj=require("util"),Si=Un(),{handleHDBError:yr,hdb_errors:Zj}=se(),{HDB_ERROR_MSGS:pf,HTTP_STATUS_CODES:Nr}=Zj,{SchemaEventMsg:Tf}=Ln(),TM=Ct(),{getDatabases:eZ}=(Ae(),ie(ke)),{transformReq:Na}=J();AM.exports={createSchema:tZ,createSchemaStructure:gM,createTable:rZ,createTableStructure:RM,createAttribute:aZ,dropSchema:nZ,dropTable:sZ,dropAttribute:iZ,getBackup:cZ};async function tZ(e){let t=await gM(e);return Sf.signalSchemaChange(new Tf(process.pid,e.operation,e.schema)),t}a(tZ,"createSchema");async function gM(e){let t=Oa.schema_object(e);if(t)throw yr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);if(Na(e),!await ba.checkSchemaExists(e.schema))throw yr(new Error,pf.SCHEMA_EXISTS_ERR(e.schema),Nr.BAD_REQUEST,ya.LOG_LEVELS.ERROR,pf.SCHEMA_EXISTS_ERR(e.schema),!0);return await Si.createSchema(e),`database '${e.schema}' successfully created`}a(gM,"createSchemaStructure");async function rZ(e){return Na(e),e.hash_attribute=e.primary_key??e.hash_attribute,await RM(e)}a(rZ,"createTable");async function RM(e){let t=Oa.create_table_object(e);if(t)throw yr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);if(Oa.validateTableResidence(e.residence),!await ba.checkSchemaTableExists(e.schema,e.table))throw yr(new Error,pf.TABLE_EXISTS_ERR(e.schema,e.table),Nr.BAD_REQUEST,ya.LOG_LEVELS.ERROR,pf.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Xj(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Si.createTable(n,e);else throw yr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Nr.BAD_REQUEST);else await Si.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(RM,"createTableStructure");async function nZ(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Oa.schema_object(e),n=t??r;if(n)throw yr(n,n.message,Nr.BAD_REQUEST,void 0,void 0,!0);Na(e);let s=await ba.checkSchemaExists(e.schema);if(s)throw yr(new Error,s,Nr.NOT_FOUND,ya.LOG_LEVELS.ERROR,s,!0);let i=await ba.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Si.dropSchema(e),Sf.signalSchemaChange(new Tf(process.pid,e.operation,e.schema)),await TM.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(nZ,"dropSchema");async function sZ(e){let t=Oa.table_object(e);if(t)throw yr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);Na(e);let r=await ba.checkSchemaTableExists(e.schema,e.table);if(r)throw yr(new Error,r,Nr.NOT_FOUND,ya.LOG_LEVELS.ERROR,r,!0);return await Si.dropTable(e),await TM.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(sZ,"dropTable");async function iZ(e){let t=Oa.attribute_object(e);if(t)throw yr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);Na(e);let r=await ba.checkSchemaTableExists(e.schema,e.table);if(r)throw yr(new Error,r,Nr.NOT_FOUND,ya.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw yr(new Error,"You cannot drop a hash attribute",Nr.BAD_REQUEST,void 0,void 0,!0);if(ya.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw yr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Nr.BAD_REQUEST,void 0,void 0,!0);try{return await Si.dropAttribute(e),oZ(e),Sf.signalSchemaChange(new Tf(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Jj.error(`Got an error deleting attribute ${jj.inspect(e)}.`),n}}a(iZ,"dropAttribute");function oZ(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(oZ,"dropAttributeFromGlobal");async function aZ(e){Na(e);let t=eZ()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw yr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Nr.BAD_REQUEST,void 0,void 0,!0);return await Si.createAttribute(e),Sf.signalSchemaChange(new Tf(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(aZ,"createAttribute");function cZ(e){return Si.getBackup(e)}a(cZ,"getBackup")});var bM=g((bfe,OM)=>{"use strict";var{OPERATIONS_ENUM:lZ}=U(),uT=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=lZ.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};OM.exports=uT});var _T=g((Ife,CM)=>{"use strict";var uZ=Un(),Nfe=bM(),Rf=J(),Af=U(),_Z=ne(),{handleHDBError:yM,hdb_errors:dZ}=se(),{HDB_ERROR_MSGS:NM,HTTP_STATUS_CODES:IM}=dZ,fZ=Object.values(Af.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),wM="To use this operation audit log must be enabled in harperdb-config.yaml";CM.exports=EZ;async function EZ(e){if(Rf.isEmpty(e.schema))throw new Error(NM.SCHEMA_REQUIRED_ERR);if(Rf.isEmpty(e.table))throw new Error(NM.TABLE_REQUIRED_ERR);if(!_Z.get(Af.CONFIG_PARAMS.LOGGING_AUDITLOG))throw yM(new Error,wM,IM.BAD_REQUEST,Af.LOG_LEVELS.ERROR,wM,!0);let t=Rf.checkSchemaTableExist(e.schema,e.table);if(t)throw yM(new Error,t,IM.NOT_FOUND,Af.LOG_LEVELS.ERROR,t,!0);if(!Rf.isEmpty(e.search_type)&&fZ.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await uZ.readAuditLog(e)}a(EZ,"readAuditLog")});var LM=g((Cfe,DM)=>{"use strict";var{OPERATIONS_ENUM:hZ}=U(),dT=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=hZ.GET_BACKUP,this.schema=t,this.table=r}};DM.exports=dT});var UM=g((Pfe,PM)=>{"use strict";var mZ=Un(),Lfe=LM(),fT=J(),pZ=U(),Mfe=ne(),{handleHDBError:SZ,hdb_errors:TZ}=se(),{HDB_ERROR_MSGS:MM,HTTP_STATUS_CODES:gZ}=TZ;PM.exports=RZ;async function RZ(e){if(fT.isEmpty(e.schema))throw new Error(MM.SCHEMA_REQUIRED_ERR);if(fT.isEmpty(e.table))throw new Error(MM.TABLE_REQUIRED_ERR);let t=fT.checkSchemaTableExist(e.schema,e.table);if(t)throw SZ(new Error,t,gZ.NOT_FOUND,pZ.LOG_LEVELS.ERROR,t,!0);return await mZ.getBackup(read_audit_log_object)}a(RZ,"getBackup")});var FM=g((vfe,GM)=>{var Ti=require("validate.js"),BM=ot(),Ia=U(),{handleHDBError:AZ,hdb_errors:OZ}=se(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:bZ}=OZ,ET=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),yZ={STRUCTURE_USER:"structure_user"},vM=Object.values(Ia.ROLE_TYPES_ENUM),NZ="attribute_permissions",IZ="attribute_name",{PERMS_CRUD_ENUM:wa}=Ia,wZ=[NZ,...Object.values(wa)],HM=[wa.READ,wa.INSERT,wa.UPDATE],CZ=[IZ,...HM];function DZ(e){let t=ET();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,xM(e,t)}a(DZ,"addRoleValidation");function LZ(e){let t=ET();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,xM(e,t)}a(LZ,"alterRoleValidation");function MZ(e){let t=ET();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,BM.validateObject(e,t)}a(MZ,"dropRoleValidation");var PZ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function xM(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)PZ.includes(n[o])||s.push(n[o]);s.length>0&&At(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=BM.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=UZ(e);o&&At(o,r),vM.forEach(c=>{e.permission[c]&&!Ti.isBoolean(e.permission[c])&&At(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(vM.indexOf(o)<0){if(o===yZ.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||At(mt.SCHEMA_NOT_FOUND(d),r)}continue}At(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(mt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){At(mt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{wZ.includes(u)||At(mt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(wa).forEach(u=>{Ti.isDefined(_[u])?Ti.isBoolean(_[u])||At(mt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):At(mt.TABLE_PERM_MISSING(u),r,o,l)}),Ti.isDefined(_.attribute_permissions)){if(!Ti.isArray(_.attribute_permissions)){At(mt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{At(mt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!CZ.includes(p)&&p!==wa.DELETE&&At(mt.INVALID_ATTR_PERM_KEY(p),r,o,l)}),!Ti.isDefined(f.attribute_name)){At(mt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=f.attribute_name;if(!u.includes(h)){At(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}HM.forEach(p=>{Ti.isDefined(f[p])?Ti.isBoolean(f[p])||At(mt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,l):At(mt.ATTR_PERM_MISSING(p,h),r,o,l)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${l}`;At(mt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,l)}}}}return vZ(r)}a(xM,"customValidate");GM.exports={addRoleValidation:DZ,alterRoleValidation:LZ,dropRoleValidation:MZ};function UZ(e){let{operation:t,permission:r}=e;if(t===Ia.OPERATIONS_ENUM.ADD_ROLE||t===Ia.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Ia.ROLE_TYPES_ENUM.SUPER_USER:Ia.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(UZ,"validateNoSUPerms");function vZ(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return AZ(new Error,n,bZ.BAD_REQUEST)}else return null}a(vZ,"generateRolePermResponse");function At(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(At,"addPermError")});var gT=g((Hfe,$M)=>{"use strict";var qM=fn(),kM=Yr(),BZ=eo(),mT=FM(),pT=ys(),HZ=require("uuid").v4,xZ=require("util"),Of=U(),GZ=J(),ST=kM.searchByValue,FZ=kM.searchByHash,qZ=xZ.promisify(BZ.delete),kZ=es(),VZ=sa(),{hdb_errors:$Z,handleHDBError:So}=se(),{HDB_ERROR_MSGS:VM,HTTP_STATUS_CODES:Vl}=$Z,{UserEventMsg:TT}=Ln();$M.exports={addRole:YZ,alterRole:KZ,dropRole:WZ,listRoles:QZ};function hT(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(hT,"scrubRoleDetails");async function YZ(e){let t=mT.addRoleValidation(e);if(t)throw t;e=hT(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 ST(r)||[])}catch(i){throw So(i)}if(n&&n.length>0)throw So(new Error,VM.ROLE_ALREADY_EXISTS(e.role),Vl.CONFLICT,void 0,void 0,!0);e.id||(e.id=HZ());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await qM.insert(s),pT.signalUserChange(new TT(process.pid)),e=hT(e),e}a(YZ,"addRole");async function KZ(e){let t=mT.alterRoleValidation(e);if(t)throw t;e=hT(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await qM.update(r)}catch(s){throw So(s)}if(n&&n?.message==="updated 0 of 1 records")throw So(new Error,"Invalid role id",Vl.BAD_REQUEST,void 0,void 0,!0);return await pT.signalUserChange(new TT(process.pid)),e}a(KZ,"alterRole");async function WZ(e){let t=mT.dropRoleValidation(e);if(t)throw So(new Error,t,Vl.BAD_REQUEST,void 0,void 0,!0);let r=new VZ(Of.SYSTEM_SCHEMA_NAME,Of.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await FZ(r));if(n.length===0)throw So(new Error,VM.ROLE_NOT_FOUND,Vl.NOT_FOUND,void 0,void 0,!0);let s=new kZ(Of.SYSTEM_SCHEMA_NAME,Of.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await ST(s)),o=!1;if(GZ.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw So(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Vl.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await qZ(c),pT.signalUserChange(new TT(process.pid)),`${n[0].role} successfully deleted`}a(WZ,"dropRole");async function QZ(){return ST({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(QZ,"listRoles")});var QM=g((Gfe,WM)=>{"use strict";var zZ=ne(),gi=require("joi"),JZ=ot(),YM=require("moment"),XZ=require("fs-extra"),RT=require("path"),jZ=require("lodash"),$l=U(),{LOG_LEVELS:To}=U(),ZZ="YYYY-MM-DD hh:mm:ss",e5=RT.resolve(__dirname,"../logs");WM.exports=function(e){return JZ.validateBySchema(e,t5)};var t5=gi.object({from:gi.custom(KM),until:gi.custom(KM),level:gi.valid(To.NOTIFY,To.FATAL,To.ERROR,To.WARN,To.INFO,To.DEBUG,To.TRACE),order:gi.valid("asc","desc"),limit:gi.number().min(1),start:gi.number().min(0),log_name:gi.custom(r5)});function KM(e,t){if(YM(e,YM.ISO_8601).format(ZZ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(KM,"validateDatetime");function r5(e,t){if(jZ.invert($l.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=zZ.get($l.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?$l.LOG_NAMES.HDB:e,i=s===$l.LOG_NAMES.INSTALL?RT.join(e5,$l.LOG_NAMES.INSTALL):RT.join(n,s);return XZ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(r5,"validateReadLogPath")});var OT=g((qfe,JM)=>{"use strict";var bf=U(),n5=K(),s5=ne(),i5=QM(),AT=require("path"),zM=require("fs-extra"),{once:o5}=require("events"),{handleHDBError:a5,hdb_errors:c5}=se(),{PACKAGE_ROOT:l5}=U(),u5=AT.join(l5,"logs"),_5=1e3,d5=200;JM.exports=f5;async function f5(e){let t=i5(e);if(t)throw a5(t,t.message,c5.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=s5.get(bf.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?bf.LOG_NAMES.HDB:e.log_name,s=n===bf.LOG_NAMES.INSTALL?AT.join(u5,bf.LOG_NAMES.INSTALL):AT.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?_5:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!l&&!u&&(p=Math.max(zM.statSync(s).size-(h+5)*d5,0));let S=zM.createReadStream(s,{start:p});S.on("error",P=>{n5.error(P)});let T=0,A=[],N="",b;S.on("data",P=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;P=N+P;let M=0,Q;for(;(Q=q.exec(P))&&!S.destroyed;){b&&(b.message=P.slice(M,Q.index),v(b));let[z,j,oe]=Q,le=oe.split("] ["),ue=le[0],Be=le[1];le.splice(0,2),b={timestamp:j,thread:ue,level:Be,tags:le,message:""},M=Q.index+z.length}N=P.slice(M)}),S.on("end",P=>{S.destroyed||b&&(b.message=N.trim(),v(b))}),S.resume();function v(P){let q,M,Q;switch(!0){case(i&&c&&_):q=new Date(P.timestamp),M=new Date(l),Q=new Date(u),P.level===o&&q>=M&&q<=Q&&T<f?T++:P.level===o&&q>=M&&q<=Q&&(Ri(P,E,A),T++,T===h&&S.destroy());break;case(i&&c):q=new Date(P.timestamp),M=new Date(l),P.level===o&&q>=M&&T<f?T++:P.level===o&&q>=M&&(Ri(P,E,A),T++,T===h&&S.destroy());break;case(i&&_):q=new Date(P.timestamp),Q=new Date(u),P.level===o&&q<=Q&&T<f?T++:P.level===o&&q<=Q&&(Ri(P,E,A),T++,T===h&&S.destroy());break;case(c&&_):q=new Date(P.timestamp),M=new Date(l),Q=new Date(u),q>=M&&q<=Q&&T<f?T++:q>=M&&q<=Q&&(Ri(P,E,A),T++,T===h&&S.destroy());break;case i:P.level===o&&T<f?T++:P.level===o&&(Ri(P,E,A),T++,T===h&&S.destroy());break;case c:q=new Date(P.timestamp),M=new Date(l),q>=M&&T<f?T++:q>=M&&T>=f&&(Ri(P,E,A),T++,T===h&&S.destroy());break;case _:q=new Date(P.timestamp),Q=new Date(u),q<=Q&&T<f?T++:q<=Q&&T>=f&&(Ri(P,E,A),T++,T===h&&S.destroy());break;default:T<f?T++:(Ri(P,E,A),T++,T===h&&S.destroy())}}return a(v,"onLogMessage"),await o5(S,"close"),A}a(f5,"readLog");function Ri(e,t,r){t==="desc"?E5(e,r):t==="asc"?h5(e,r):r.push(e)}a(Ri,"pushLineToResult");function E5(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(E5,"insertDescending");function h5(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(h5,"insertAscending")});var yf=g((Kfe,eP)=>{"use strict";var bT=require("joi"),{string:Yl,boolean:XM,date:m5}=bT.types(),p5=ot(),{validateSchemaExists:Vfe,validateTableExists:$fe,validateSchemaName:Yfe}=jn(),S5=U(),T5=at(),jM=ne();jM.initSync();var g5=Yl.invalid(jM.get(S5.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(T5.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(),ZM={operation:Yl.valid("add_node","update_node","set_node_replication"),node_name:g5,subscriptions:bT.array().items({table:Yl.optional(),schema:Yl.optional(),database:Yl.optional(),subscribe:XM.required(),publish:XM.required().custom(A5),start_time:m5.iso()}).min(1).required()};function R5(e){return p5.validateBySchema(e,bT.object(ZM))}a(R5,"addUpdateNodeValidator");function A5(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(A5,"checkForFalsy");eP.exports={addUpdateNodeValidator:R5,validation_schema:ZM}});var rP=g((Qfe,tP)=>{var O5=ot(),b5={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};tP.exports=function(e){return O5.validateObject(e,b5)}});var NT=g((zfe,nP)=>{"use strict";var y5=U().OPERATIONS_ENUM,yT=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=y5.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};nP.exports=yT});var iP=g((Xfe,sP)=>{"use strict";var N5={OPERATION:"operation",REFRESH:"refresh"},IT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},wT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};sP.exports={JWTTokens:IT,TOKEN_TYPE_ENUM:N5,JWTRSAKeys:wT}});var Ql=g((Zfe,lP)=>{"use strict";var Wl=require("jsonwebtoken"),CT=require("fs-extra"),DT=J(),mn=U(),{handleHDBError:Ir,hdb_errors:I5}=se(),{HTTP_STATUS_CODES:wr,AUTHENTICATION_ERROR_MSGS:Cr}=I5,Kl=K(),oP=yd(),PT=En(),w5=fn().update,C5=NT(),D5=ys(),{UserEventMsg:L5}=Ln(),Ai=ne();Ai.initSync();var LT=require("path"),{JWTTokens:M5,JWTRSAKeys:P5,TOKEN_TYPE_ENUM:Nf}=iP(),U5=Ai.get(mn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ai.get(mn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",v5=Ai.get(mn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ai.get(mn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",If="RS256",MT;lP.exports={createTokens:B5,validateOperationToken:x5,refreshOperationToken:H5,validateRefreshToken:cP};async function B5(e){if(DT.isEmpty(e)||typeof e!="object")throw Ir(new Error,Cr.INVALID_AUTH_OBJECT,wr.BAD_REQUEST,void 0,void 0,!0);if(DT.isEmpty(e.username))throw Ir(new Error,Cr.USERNAME_REQUIRED,wr.BAD_REQUEST,void 0,void 0,!0);if(DT.isEmpty(e.password))throw Ir(new Error,Cr.PASSWORD_REQUIRED,wr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await PT.findAndValidateUser(e.username,e.password),!t)throw Ir(new Error,Cr.INVALID_CREDENTIALS,wr.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Kl.error(E),Ir(new Error,Cr.INVALID_CREDENTIALS,wr.UNAUTHORIZED,void 0,void 0,!0)}let r=await wf(),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 aP(i,r.private_key,r.passphrase),c=await Wl.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:v5,algorithm:If,subject:Nf.REFRESH}),l=oP.hash(c),_=new C5(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await w5(_)}catch(E){Kl.error(E),d=E}if(d!==void 0||u.skipped_hashes.length>0)throw Ir(new Error,Cr.REFRESH_TOKEN_SAVE_FAILED,wr.INTERNAL_SERVER_ERROR);return D5.signalUserChange(new L5(process.pid)),new M5(o,c)}a(B5,"createTokens");async function aP(e,t,r){return await Wl.sign(e,{key:t,passphrase:r},{expiresIn:U5,algorithm:If,subject:Nf.OPERATION})}a(aP,"signOperationToken");async function wf(){if(MT===void 0)try{let e=LT.join(Ai.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=LT.join(Ai.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=LT.join(Ai.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await CT.readFile(e)).toString(),s=(await CT.readFile(t)).toString(),i=(await CT.readFile(r)).toString();MT=new P5(i,s,n)}catch(e){throw Kl.error(e),Ir(new Error,Cr.NO_ENCRYPTION_KEYS,wr.INTERNAL_SERVER_ERROR)}return MT}a(wf,"getJWTRSAKeys");async function H5(e){if(!e)throw Ir(new Error,Cr.INVALID_BODY,wr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ir(new Error,Cr.REFRESH_TOKEN_REQUIRED,wr.BAD_REQUEST,void 0,void 0,!0);await cP(e.refresh_token);let t=await wf(),r=await Wl.decode(e.refresh_token);return{operation_token:await aP({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(H5,"refreshOperationToken");async function x5(e){try{let t=await wf(),r=await Wl.verify(e,t.public_key,{algorithms:If,subject:Nf.OPERATION});return await PT.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Kl.warn(t),t.name&&t.name==="TokenExpiredError"?Ir(new Error,Cr.TOKEN_EXPIRED,wr.FORBIDDEN):Ir(new Error,Cr.INVALID_TOKEN,wr.UNAUTHORIZED)}}a(x5,"validateOperationToken");async function cP(e){let t;try{let r=await wf(),n=await Wl.verify(e,r.public_key,{algorithms:If,subject:Nf.REFRESH});t=await PT.findAndValidateUser(n.username,void 0,!1)}catch(r){throw Kl.warn(r),r.name&&r.name==="TokenExpiredError"?Ir(new Error,Cr.TOKEN_EXPIRED,wr.FORBIDDEN):Ir(new Error,Cr.INVALID_TOKEN,wr.UNAUTHORIZED)}if(!oP.validate(t.refresh_token,e))throw Ir(new Error,Cr.INVALID_TOKEN,wr.UNAUTHORIZED);return t}a(cP,"validateRefreshToken")});var UT=g((rEe,dP)=>{"use strict";var G5=rP(),Ca=require("passport"),F5=require("passport-local").Strategy,q5=require("passport-http").BasicStrategy,k5=require("util"),V5=En(),_P=k5.callbackify(V5.findAndValidateUser),tEe=vr(),$5=U(),uP=Ql();Ca.use(new F5(function(e,t,r){_P(e,t,r)}));Ca.use(new q5(function(e,t,r){_P(e,t,r)}));Ca.serializeUser(function(e,t){t(null,e)});Ca.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":Ca.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===$5.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?uP.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):uP.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ca.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Y5,"authorize");function K5(e,t){let r=G5(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(K5,"checkPermissions");dP.exports={authorize:Y5,checkPermissions:K5}});var Da=g((sEe,fP)=>{"use strict";var vT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},BT=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};fP.exports={Node:vT,NodeSubscription:BT}});var hP=g((oEe,EP)=>{"use strict";var W5=U().OPERATIONS_ENUM,HT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=W5.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};EP.exports=HT});var zl=g((cEe,mP)=>{"use strict";var xT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},GT=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)}};mP.exports={RemotePayloadObject:xT,RemotePayloadSubscription:GT}});var SP=g((uEe,pP)=>{"use strict";var FT=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}};pP.exports=FT});var RP=g((hEe,gP)=>{"use strict";var Q5=SP(),dEe=dt(),TP=We(),z5=K(),{getSchemaPath:fEe,getTransactionAuditStorePath:EEe}=ze(),{getDatabases:J5}=(Ae(),ie(ke));gP.exports=X5;async function X5(e){let t=new Q5;try{let r=J5()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await TP.environmentDataSize(schema_path,e.name),o=await TP.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){z5.warn(`unable to stat table dbi due to ${r}`)}return t}a(X5,"lmdbGetTableSize")});var OP=g((pEe,AP)=>{"use strict";var qT=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}};AP.exports=qT});var La=g((OEe,IP)=>{"use strict";var j5=require("fs-extra"),Z5=require("path"),or=require("systeminformation"),Oi=K(),bP=Ct(),TEe=at(),Df=U(),e8=RP(),t8=ci(),{getThreadInfo:yP}=it(),jT=ne();jT.initSync();var r8=OP(),{openEnvironment:gEe}=We(),{getSchemaPath:REe}=ze(),{database:AEe,databases:kT}=(Ae(),ie(ke)),Cf;IP.exports={getHDBProcessInfo:KT,getNetworkInfo:QT,getDiskInfo:WT,getMemoryInfo:YT,getCPUInfo:$T,getTimeInfo:VT,getSystemInformation:zT,systemInformation:n8,getTableSize:JT,getMetrics:XT};function VT(){return or.time()}a(VT,"getTimeInfo");async function $T(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await or.cpu();u.cpu_speed=await or.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...A}=await or.currentLoad();return A.cpus=[],T.forEach(N=>{let{raw_load:b,raw_load_idle:v,raw_load_irq:P,raw_load_nice:q,raw_load_system:M,raw_load_user:Q,...z}=N;A.cpus.push(z)}),u.current_load=A,u}catch(e){return Oi.error(`error in getCPUInfo: ${e}`),{}}}a($T,"getCPUInfo");async function YT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await or.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Oi.error(`error in getMemoryInfo: ${e}`),{}}}a(YT,"getMemoryInfo");async function KT(){let e={core:[],clustering:[]};try{let t=await or.processes(),r;try{r=Number.parseInt(await j5.readFile(Z5.join(jT.get(Df.CONFIG_PARAMS.ROOTPATH),Df.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Df.NODE_ERROR_CODES.ENOENT)Oi.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return Oi.error(`error in getHDBProcessInfo: ${t}`),e}}a(KT,"getHDBProcessInfo");async function WT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await or.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await or.fsStats();return e.read_write=_,e.size=await or.fsSize(),e}catch(t){return Oi.error(`error in getDiskInfo: ${t}`),e}}a(WT,"getDiskInfo");async function QT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await or.networkInterfaceDefault(),e.latency=await or.inetChecksite("google.com"),(await or.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await or.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return Oi.error(`error in getNetworkInfo: ${t}`),e}}a(QT,"getNetworkInfo");async function zT(){if(Cf!==void 0)return Cf;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await or.osInfo();e=c;let l=await or.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,Cf=e,Cf}catch(t){return Oi.error(`error in getSystemInformation: ${t}`),e}}a(zT,"getSystemInformation");async function JT(){let e=[],t=await t8.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await e8(n));return e}a(JT,"getTableSize");async function XT(){let e={};for(let t in kT){let r=e[t]={},n=r.tables={};for(let s in kT[t])try{let i=kT[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[_,u,d]=l.trim().split(" ");return{pid:_,thread:u,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Oi.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(XT,"getMetrics");async function NP(){if(jT.get(Df.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await bP.getNATSReferences(),t=await bP.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(NP,"getNatsStreamInfo");async function n8(e){let t=new r8;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await zT(),t.time=VT(),t.cpu=await $T(),t.memory=await YT(),t.disk=await WT(),t.network=await QT(),t.harperdb_processes=await KT(),t.table_size=await JT(),t.metrics=await XT(),t.threads=await yP(),t.replication=await NP(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await zT();break;case"time":t.time=VT();break;case"cpu":t.cpu=await $T();break;case"memory":t.memory=await YT();break;case"disk":t.disk=await WT();break;case"network":t.network=await QT();break;case"harperdb_processes":t.harperdb_processes=await KT();break;case"table_size":t.table_size=await JT();break;case"database_metrics":case"metrics":t.metrics=await XT();break;case"threads":t.threads=await yP();break;case"replication":t.replication=await NP();break;default:break}return t}a(n8,"systemInformation")});var Mf=g((yEe,wP)=>{"use strict";wP.exports={version:s8,printVersion:i8};var Lf=Bl();function s8(){if(Lf)return Lf.version}a(s8,"version");function i8(){Lf&&console.log(`HarperDB Version ${Lf.version}`)}a(i8,"printVersion")});var Ms=g((CEe,MP)=>{"use strict";var o8=fn(),ZT=J(),a8=require("util"),go=U(),CP=ne();CP.initSync();var c8=UT(),DP=Yr(),{Node:IEe,NodeSubscription:wEe}=Da(),l8=sa(),u8=hP(),{RemotePayloadObject:_8,RemotePayloadSubscription:d8}=zl(),{handleHDBError:f8,hdb_errors:E8}=se(),{HTTP_STATUS_CODES:h8,HDB_ERROR_MSGS:m8}=E8,p8=es(),S8=La(),T8=Mf(),{getDatabases:g8}=(Ae(),ie(ke)),R8=a8.promisify(c8.authorize),A8=DP.searchByHash,O8=DP.searchByValue;MP.exports={authHeaderToUser:b8,isEmpty:y8,getNodeRecord:N8,upsertNodeRecord:I8,buildNodePayloads:w8,checkClusteringEnabled:C8,getAllNodeRecords:D8,getSystemInfo:L8,reverseSubscription:LP};async function b8(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await R8(t,null),e}a(b8,"authHeaderToUser");function y8(e){return e==null}a(y8,"isEmpty");async function N8(e){let t=new l8(go.SYSTEM_SCHEMA_NAME,go.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return A8(t)}a(N8,"getNodeRecord");async function I8(e){let t=new u8(go.SYSTEM_SCHEMA_NAME,go.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return o8.upsert(t)}a(I8,"upsertNodeRecord");function LP(e){if(ZT.isEmpty(e.subscribe)||ZT.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(LP,"reverseSubscription");function w8(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=ZT.getTableHashAttribute(l,_),{subscribe:d,publish:E}=LP(c),f=g8()[l]?.[_],h=new d8(l,_,u,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new _8(r,t,s,n)}a(w8,"buildNodePayloads");function C8(){if(!CP.get(go.CONFIG_PARAMS.CLUSTERING_ENABLED))throw f8(new Error,m8.CLUSTERING_NOT_ENABLED,h8.BAD_REQUEST,void 0,void 0,!0)}a(C8,"checkClusteringEnabled");async function D8(){let e=new p8(go.SYSTEM_SCHEMA_NAME,go.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await O8(e))}a(D8,"getAllNodeRecords");async function L8(){let e=await S8.getSystemInformation();return{hdb_version:T8.version(),node_version:e.node_version,platform:e.platform}}a(L8,"getSystemInfo")});var eg=g((LEe,FP)=>{"use strict";var Pf=Ct(),PP=J(),UP=at(),vP=U(),Uf=K(),BP=gf(),M8=hp(),{RemotePayloadObject:P8}=zl(),{handleHDBError:HP,hdb_errors:U8}=se(),{HTTP_STATUS_CODES:xP}=U8,{NodeSubscription:GP}=Da();FP.exports=v8;async function v8(e,t){let r;try{r=await Pf.request(`${t}.${UP.REQUEST_SUFFIX}`,new P8(vP.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Uf.trace("Response from remote describe all request:",r)}catch(o){Uf.error(`addNode received error from describe all request to remote node: ${o}`);let c=Pf.requestErrorHandler(o,"add_node",t);throw HP(new Error,c,xP.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===UP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw HP(new Error,o,xP.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===vP.SYSTEM_SCHEMA_NAME){await Pf.createLocalTableStream(l,c);let h=new GP(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=PP.doesSchemaExist(l),u=n[l]!==void 0,d=c?PP.doesTableExist(l,c):!0,E=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!E){s.push(o);continue}if(!_&&u&&(Uf.trace(`addNode creating schema: ${l}`),await BP.createSchema({operation:"create_schema",schema:l})),!d&&E){Uf.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new M8(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await BP.createTable(h)}await Pf.createLocalTableStream(l,c);let f=new GP(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(v8,"reviewSubscriptions")});var xf=g((PEe,VP)=>{"use strict";var{handleHDBError:vf,hdb_errors:B8}=se(),{HTTP_STATUS_CODES:Bf}=B8,{addUpdateNodeValidator:H8}=yf(),Hf=K(),kP=U(),qP=at(),x8=J(),Jl=Ct(),Xl=Ms(),G8=ne(),F8=eg(),{Node:q8,NodeSubscription:k8}=Da(),{broadcast:V8}=it(),$8="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Y8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",K8=G8.get(kP.CONFIG_PARAMS.CLUSTERING_NODENAME);VP.exports=W8;async function W8(e,t=!1){Hf.trace("addNode called with:",e),Xl.checkClusteringEnabled();let r=H8(e);if(r)throw vf(r,r.message,Bf.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Xl.getNodeRecord(n);if(!x8.isEmptyOrZeroLength(d))throw vf(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Bf.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await F8(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=$8,o;let c=Xl.buildNodePayloads(s,K8,kP.OPERATIONS_ENUM.ADD_NODE,await Xl.getSystemInfo()),l=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new k8(f.schema,f.table,f.publish,f.subscribe))}Hf.trace("addNode sending remote payload:",c);let _;try{_=await Jl.request(`${n}.${qP.REQUEST_SUFFIX}`,c)}catch(d){Hf.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let p=s[f];p.publish=!1,p.subscribe=!1,await Jl.updateRemoteConsumer(p,n)}let E=Jl.requestErrorHandler(d,"add_node",n);throw vf(new Error,E,Bf.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===qP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw vf(new Error,d,Bf.INTERNAL_SERVER_ERROR,"error",d)}Hf.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await Jl.updateRemoteConsumer(f,n),f.subscribe===!0&&await Jl.updateConsumerIterator(f.schema,f.table,n,"start")}let u=new q8(n,l,_.system_info);return await Xl.upsertNodeRecord(u),V8({type:"nats_update"}),i.length>0?o.message=Y8:o.message=`Successfully added '${n}' to manifest`,o}a(W8,"addNode")});var ng=g((BEe,KP)=>{"use strict";var{handleHDBError:tg,hdb_errors:Q8}=se(),{HTTP_STATUS_CODES:rg}=Q8,{addUpdateNodeValidator:z8}=yf(),jl=K(),YP=U(),$P=at(),vEe=J(),Zl=Ct(),eu=Ms(),J8=ne(),{cloneDeep:X8}=require("lodash"),j8=eg(),{Node:Z8,NodeSubscription:e6}=Da(),{broadcast:t6}=it(),r6="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",n6="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",s6=J8.get(YP.CONFIG_PARAMS.CLUSTERING_NODENAME);KP.exports=i6;async function i6(e){jl.trace("updateNode called with:",e),eu.checkClusteringEnabled();let t=z8(e);if(t)throw tg(t,t.message,rg.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await eu.getNodeRecord(r);s.length>0&&(n=X8(s));let{added:i,skipped:o}=await j8(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=r6,c;let l=eu.buildNodePayloads(i,s6,YP.OPERATIONS_ENUM.UPDATE_NODE,await eu.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let E=i[u];jl.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[u].start_time===void 0&&delete i[u].start_time}jl.trace("updateNode sending remote payload:",l);let _;try{_=await Zl.request(`${r}.${$P.REQUEST_SUFFIX}`,l)}catch(u){jl.error(`updateNode received error from request: ${u}`);let d=Zl.requestErrorHandler(u,"update_node",r);throw tg(new Error,d,rg.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===$P.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw tg(new Error,u,rg.INTERNAL_SERVER_ERROR,"error",u)}jl.trace(_);for(let u=0,d=i.length;u<d;u++){let E=i[u];await Zl.updateRemoteConsumer(E,r),E.subscribe===!0?await Zl.updateConsumerIterator(E.schema,E.table,r,"start"):await Zl.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new Z8(r,[],_.system_info)]),await o6(n[0],i,_.system_info),o.length>0?c.message=n6:c.message=`Successfully updated '${r}'`,c}a(i6,"updateNode");async function o6(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new e6(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await eu.upsertNodeRecord(n),t6({type:"nats_update"})}a(o6,"updateNodeTable")});var XP=g((xEe,JP)=>{"use strict";var zP=require("joi"),{string:WP}=zP.types(),a6=ot(),QP=U(),c6=ne(),l6=at();JP.exports=u6;function u6(e){let t=WP.invalid(c6.get(QP.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(l6.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=zP.object({operation:WP.valid(QP.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return a6.validateBySchema(e,r)}a(u6,"removeNodeValidator")});var Ff=g((FEe,rU)=>{"use strict";var{handleHDBError:jP,hdb_errors:_6}=se(),{HTTP_STATUS_CODES:ZP}=_6,d6=XP(),tu=K(),eU=Ms(),f6=J(),Gf=U(),tU=at(),sg=Ct(),E6=ne(),{RemotePayloadObject:h6}=zl(),{NodeSubscription:m6}=Da(),p6=el(),S6=eo(),{broadcast:T6}=it(),g6=E6.get(Gf.CONFIG_PARAMS.CLUSTERING_NODENAME);rU.exports=R6;async function R6(e){tu.trace("removeNode called with:",e),eU.checkClusteringEnabled();let t=d6(e);if(t)throw jP(t,t.message,ZP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await eU.getNodeRecord(r);if(f6.isEmptyOrZeroLength(n))throw jP(new Error,`Node '${r}' was not found.`,ZP.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new h6(Gf.OPERATIONS_ENUM.REMOVE_NODE,g6,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await sg.updateConsumerIterator(u.schema,u.table,r,"stop");try{await sg.updateRemoteConsumer(new m6(u.schema,u.table,!1,!1),r)}catch(d){tu.error(d)}}try{i=await sg.request(`${r}.${tU.REQUEST_SUFFIX}`,s),tu.trace("Remove node reply from remote node:",r,i)}catch(l){tu.error("removeNode received error from request:",l),o=!0}let c=new p6(Gf.SYSTEM_SCHEMA_NAME,Gf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await S6.deleteRecord(c),T6({type:"nats_update"}),i?.status===tU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(tu.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 iU=g((kEe,sU)=>{"use strict";var nU=require("joi"),{string:A6,array:O6}=nU.types(),b6=ot(),y6=yf();sU.exports=N6;function N6(e){let t=nU.object({operation:A6.valid("configure_cluster").required(),connections:O6.items(y6.validation_schema).required()});return b6.validateBySchema(e,t)}a(N6,"configureClusterValidator")});var ig=g(($Ee,uU)=>{"use strict";var I6=U(),qf=K(),w6=J(),C6=Ff(),D6=xf(),oU=Ms(),L6=iU(),{handleHDBError:aU,hdb_errors:M6}=se(),{HTTP_STATUS_CODES:cU}=M6,P6="Configure cluster complete.",U6="Failed to configure the cluster. Check the logs for more details.",v6="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";uU.exports=B6;async function B6(e){qf.trace("configure cluster called with:",e),oU.checkClusteringEnabled();let t=L6(e);if(t)throw aU(t,t.message,cU.BAD_REQUEST,void 0,void 0,!0);let r=await oU.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let E=await lU(C6,{operation:I6.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[u].name},r[u].name);n.push(E)}qf.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let u=0;u<i;u++){let d=e.connections[u],E=await lU(D6,d,d.node_name);s.push(E)}qf.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,_=n.concat(s);for(let u=0,d=_.length;u<d;u++){let E=_[u];E.status==="rejected"&&(qf.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(l=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(w6.isEmptyOrZeroLength(o))return{message:P6,connections:c};if(l)return{message:v6,failed_nodes:o,connections:c};throw aU(new Error,U6,cU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(B6,"configureCluster");async function lU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(lU,"functionWrapper")});var EU=g((KEe,fU)=>{"use strict";var ru=require("joi"),H6=ot(),{validateSchemaExists:_U,validateTableExists:x6,validateSchemaName:dU}=jn(),G6=ru.object({operation:ru.string().valid("purge_stream"),schema:ru.string().custom(_U).custom(dU).optional(),database:ru.string().custom(_U).custom(dU).optional(),table:ru.string().custom(x6).required()});function F6(e){return H6.validateBySchema(e,G6)}a(F6,"purgeStreamValidator");fU.exports=F6});var og=g((QEe,hU)=>{"use strict";var{handleHDBError:q6,hdb_errors:k6}=se(),{HTTP_STATUS_CODES:V6}=k6,$6=EU(),Y6=Ct(),K6=Ms();hU.exports=W6;async function W6(e){e.schema=e.schema??e.database;let t=$6(e);if(t)throw q6(t,t.message,V6.BAD_REQUEST,void 0,void 0,!0);K6.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Y6.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(W6,"purgeStream")});var lg=g((JEe,RU)=>{"use strict";var cg=Ms(),Q6=Ct(),SU=ne(),kf=U(),Ro=at(),z6=J(),ag=K(),{RemotePayloadObject:J6}=zl(),{ErrorCode:mU}=require("nats"),pU=SU.get(kf.CONFIG_PARAMS.CLUSTERING_ENABLED),TU=SU.get(kf.CONFIG_PARAMS.CLUSTERING_NODENAME);RU.exports={clusterStatus:X6,buildNodeStatus:gU};async function X6(){let e={node_name:TU,is_enabled:pU,connections:[]};if(!pU)return e;let t=await cg.getAllNodeRecords();if(z6.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(gU(t[n],e.connections));return await Promise.allSettled(r),e}a(X6,"clusterStatus");async function gU(e,t){let r=e.name,n=new J6(kf.OPERATIONS_ENUM.CLUSTER_STATUS,TU,void 0,await cg.getSystemInfo()),s,i,o=Ro.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Q6.request(Ro.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Ro.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ro.CLUSTER_STATUS_STATUSES.CLOSED,ag.error(`Error getting node status from ${r} `,s))}catch(l){ag.warn(`Error getting node status from ${r}`,l),l.code===mU.NoResponders?o=Ro.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===mU.Timeout?o=Ro.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ro.CLUSTER_STATUS_STATUSES.CLOSED}let c=new j6(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==kf.PRE_4_0_0_VERSION&&await cg.upsertNodeRecord(l)}catch(l){ag.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(gU,"buildNodeStatus");function j6(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(j6,"NodeStatusObject")});var _g=g((jEe,AU)=>{"use strict";var{handleHDBError:Z6,hdb_errors:e9}=se(),{HTTP_STATUS_CODES:t9}=e9,r9=Ct(),n9=Ms(),ug=J(),Vf=require("joi"),s9=ot(),i9=2e3,o9=Vf.object({timeout:Vf.number().min(1),connected_nodes:Vf.boolean(),routes:Vf.boolean()});AU.exports=a9;async function a9(e){n9.checkClusteringEnabled();let t=s9.validateBySchema(e,o9);if(t)throw Z6(t,t.message,t9.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||ug.autoCastBoolean(n),o=s===void 0||ug.autoCastBoolean(s),c={nodes:[]},l=await r9.getServerList(r??i9),_={};if(i)for(let u=0,d=l.length;u<d;u++){let E=l[u].statsz;E&&(_[l[u].server.name]=E.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let E=l[u].server,f=l[u].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:ug.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(a9,"clusterNetwork")});var NU=g((ehe,yU)=>{"use strict";var dg=require("joi"),OU=ot(),{route_constraints:bU}=Zp();yU.exports={setRoutesValidator:c9,deleteRoutesValidator:l9};function c9(e){let t=dg.object({server:dg.valid("hub","leaf").required(),routes:bU.required()});return OU.validateBySchema(e,t)}a(c9,"setRoutesValidator");function l9(e){let t=dg.object({routes:bU.required()});return OU.validateBySchema(e,t)}a(l9,"deleteRoutesValidator")});var Eg=g((rhe,DU)=>{"use strict";var Ao=Rr(),fg=J(),$f=U(),IU=NU(),{handleHDBError:wU,hdb_errors:u9}=se(),{HTTP_STATUS_CODES:CU}=u9,_9="cluster routes successfully set",d9="cluster routes successfully deleted";DU.exports={setRoutes:f9,getRoutes:E9,deleteRoutes:h9};function f9(e){let t=IU.setRoutesValidator(e);if(t)throw wU(t,t.message,CU.BAD_REQUEST,void 0,void 0,!0);let r=Ao.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=fg.autoCast(_.port);let u=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Ao.updateConfigValue($f.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Ao.updateConfigValue($f.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:_9,set:o,skipped:i}}a(f9,"setRoutes");function E9(){let e=Ao.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(E9,"getRoutes");function h9(e){let t=IU.deleteRoutesValidator(e);if(t)throw wU(t,t.message,CU.BAD_REQUEST,void 0,void 0,!0);let r=Ao.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let p=n[f];if(d.host===p.host&&d.port===p.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=fg.isEmptyOrZeroLength(n)?null:n,Ao.updateConfigValue($f.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=fg.isEmptyOrZeroLength(s)?null:s,Ao.updateConfigValue($f.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:d9,deleted:i,skipped:o}}a(h9,"deleteRoutes")});var MU=g((she,LU)=>{"use strict";var nu=require("alasql"),Oo=require("recursive-iterator"),qn=K(),m9=J(),su=U(),hg=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,S9(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=>su.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=>!su.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][su.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=p9(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!su.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new nu.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function p9(e){return e.filter(t=>t[su.PERMS_CRUD_ENUM.READ])}a(p9,"filterReadRestrictedAttrs");function S9(e,t,r,n,s){T9(e,t,r,n,s)}a(S9,"interpretAST");function iu(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(iu,"addSchemaTableToMap");function T9(e,t,r,n,s){if(!e){qn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof nu.yy.Insert?O9(e,t,r):e instanceof nu.yy.Select?g9(e,t,r,n,s):e instanceof nu.yy.Update?R9(e,t,r):e instanceof nu.yy.Delete?A9(e,t,r):qn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(T9,"getRecordAttributesAST");function g9(e,t,r,n,s){if(!e){qn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(m9.isEmptyOrZeroLength(i)){qn.error("No schema specified");return}e.from.forEach(c=>{iu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),iu(c.table,t,r,n,s)});let o=new Oo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{qn.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new Oo(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{qn.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Oo(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{qn.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new Oo(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{qn.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(g9,"getSelectAttributes");function R9(e,t,r){if(!e){qn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Oo(e.columns),s=e.table.databaseid;iu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&mg(e.table.tableid,s,i.columnid,t,r)}a(R9,"getUpdateAttributes");function A9(e,t,r){if(!e){qn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Oo(e.where),s=e.table.databaseid;iu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&mg(e.table.tableid,s,i.columnid,t,r)}a(A9,"getDeleteAttributes");function O9(e,t,r){if(!e){qn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Oo(e.columns),s=e.into.databaseid;iu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&mg(e.into.tableid,s,i.columnid,t,r)}a(O9,"getInsertAttributes");function mg(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(mg,"pushAttribute");LU.exports=hg});var Tg=g((ohe,BU)=>{var Yf=so(),PU=require("chalk"),en=K(),UU=require("prompt"),{promisify:b9}=require("util"),pg=U(),y9=require("fs-extra"),N9=require("path"),I9=J(),w9=Mf(),vU=ne();vU.initSync();var C9=require("moment"),D9=b9(UU.get),L9=N9.join(vU.getHdbBasePath(),pg.LICENSE_KEY_DIR_NAME,pg.LICENSE_FILE_NAME,pg.LICENSE_FILE_NAME);BU.exports={getFingerprint:P9,setLicense:M9,parseLicense:Sg,register:U9,getRegistrationInfo:B9};async function M9(e){if(e&&e.key&&e.company){try{en.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await Sg(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw en.error(r),en.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(M9,"setLicense");async function P9(){let e={};try{e=await Yf.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw en.error(r),en.error(t),new Error(r)}return e}a(P9,"getFingerprint");async function Sg(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");en.info("Validating license input...");let r=Yf.validateLicense(e,t);if(en.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(en.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(en.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{en.info("writing license to disk"),await y9.writeFile(L9,JSON.stringify({license_key:e,company:t}))}catch(n){throw en.error("Failed to write License"),n}return"Registration successful."}a(Sg,"parseLicense");async function U9(){let e=await v9();return Sg(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(U9,"register");async function v9(){let e=await Yf.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:PU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:PU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{UU.start()}catch(n){en.error(n)}let r;try{r=await D9(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(v9,"promptForRegistration");async function B9(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Yf.getLicense()}catch(r){throw en.error(`There was an error when searching licenses due to: ${r.message}`),r}if(I9.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=w9.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=C9.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(B9,"getRegistrationInfo")});var xU=g((che,HU)=>{"use strict";var H9=at(),gg=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+H9.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};HU.exports=gg});var qU=g((uhe,FU)=>{"use strict";var GU=at(),Rg=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+GU.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+GU.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};FU.exports=Rg});var VU=g((dhe,kU)=>{"use strict";var Ag=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};kU.exports=Ag});var YU=g((Ehe,$U)=>{"use strict";var x9=at(),Og=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+x9.SERVER_SUFFIX.ADMIN,this.password=r}};$U.exports=Og});var Ng=g((mhe,QU)=>{"use strict";var Ma=require("path"),Qf=require("fs-extra"),G9=xU(),F9=qU(),q9=VU(),k9=YU(),bg=En(),Ua=J(),Dr=Rr(),Wf=U(),ou=at(),{CONFIG_PARAMS:pt}=Wf,va=K(),au=ne(),KU=Cs(),yg=Ct(),Pa="clustering",V9=1e4,WU=50;QU.exports={generateNatsConfig:Y9,removeNatsConfig:K9,getHubConfigPath:$9};function $9(){let e=au.get(pt.ROOTPATH);return Ma.join(e,Pa,ou.NATS_CONFIG_FILES.HUB_SERVER)}a($9,"getHubConfigPath");async function Y9(e=!1,t=void 0){au.initSync();let r=au.get(pt.ROOTPATH),n=Ma.join(r,Pa,ou.PID_FILES.HUB),s=Ma.join(r,Pa,ou.PID_FILES.LEAF),i=Dr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Ma.join(r,Pa,ou.NATS_CONFIG_FILES.HUB_SERVER),c=Ma.join(r,Pa,ou.NATS_CONFIG_FILES.LEAF_SERVER),l=Dr.getConfigFromFile(pt.CLUSTERING_TLS_CERTIFICATE),_=Dr.getConfigFromFile(pt.CLUSTERING_TLS_PRIVATEKEY),u=Dr.getConfigFromFile(pt.CLUSTERING_TLS_CERT_AUTH),d=Dr.getConfigFromFile(pt.CLUSTERING_TLS_INSECURE),E=Dr.getConfigFromFile(pt.CLUSTERING_TLS_VERIFY),f=Dr.getConfigFromFile(pt.CLUSTERING_NODENAME),h=Dr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await yg.checkNATSServerInstalled()||zf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await bg.listUsers(),S=Dr.getConfigFromFile(pt.CLUSTERING_USER),T=await bg.getClusterUser();(Ua.isEmpty(T)||T.active!==!0)&&zf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Kf(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Kf(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Kf(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Kf(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],N=[];for(let[z,j]of p.entries())j.role?.role===Wf.ROLE_TYPES_ENUM.CLUSTER_USER&&j.active&&(A.push(new k9(j.username,KU.decrypt(j.hash))),N.push(new q9(j.username,KU.decrypt(j.hash))));let b=[],{hub_routes:v}=Dr.getClusteringRoutes();if(!Ua.isEmptyOrZeroLength(v))for(let z of v)b.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let P=new G9(Dr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,l,_,u,d,E,h,Dr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Dr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),b,A,N);u==null&&(delete P.tls.ca_file,delete P.leafnodes.tls.ca_file),t=Ua.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Wf.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Qf.writeJson(o,P),va.trace(`Hub server config written to ${o}`));let q=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=new F9(Dr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[q],[M],A,N,l,_,u,d);u==null&&delete Q.tls.ca_file,(t===void 0||t===Wf.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Qf.writeJson(c,Q),va.trace(`Leaf server config written to ${c}`))}a(Y9,"generateNatsConfig");async function Kf(e){let t=au.get(e);return Ua.isEmpty(t)&&zf(`port undefined for '${e}'`),await Ua.isPortTaken(t)&&zf(`'${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(Kf,"isPortAvailable");function zf(e){let t=`Error generating clustering config: ${e}`;va.error(t),console.error(t),process.exit(1)}a(zf,"generateNatsConfigError");async function K9(e){let{port:t,config_file:r}=yg.getServerConfig(e),{username:n,decrypt_hash:s}=await bg.getClusterUser(),i=0,o=2e3;for(;i<WU;){try{let u=await yg.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){va.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=WU)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&&va.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Ua.async_set_timeout(_)}let c="0".repeat(V9),l=Ma.join(au.get(pt.ROOTPATH),Pa,r);await Qf.writeFile(l,c),await Qf.remove(l),va.notify(e,"started.")}a(K9,"removeNatsConfig")});var ev=g((She,ZU)=>{"use strict";var tn=ne(),W9=so(),pe=U(),cu=at(),Ps=require("path"),{PACKAGE_ROOT:Xf}=U(),zU=ne(),Jf=J(),Ba="/dev/null",Q9=Ps.join(Xf,"launchServiceScripts"),JU=Ps.join(Xf,"utility/scripts"),z9=Ps.join(JU,pe.HDB_RESTART_SCRIPT),XU=Ps.resolve(Xf,"dependencies",`${process.platform}-${process.arch}`,cu.NATS_BINARY_NAME);function jU(){let t=W9.licenseSearch().ram_allocation||pe.RAM_ALLOCATION_ENUM.DEFAULT,r=pe.MEM_SETTING_KEY+t,n={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Jf.noBootFile()&&(n[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Jf.getEnvCliRootPath()),{name:pe.PROCESS_DESCRIPTORS.HDB,script:pe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Xf}}a(jU,"generateMainServerConfig");var J9=9930;function X9(){tn.initSync(!0);let e=tn.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ps.join(e,"clustering",cu.NATS_CONFIG_FILES.HUB_SERVER),r=Ps.join(tn.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=zU.get(pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=cu.LOG_LEVEL_FLAGS[tn.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==J9?"-"+n:""),script:XU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return tn.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ba,i.error_file=Ba),i}a(X9,"generateNatsHubServerConfig");var j9=9940;function Z9(){tn.initSync(!0);let e=tn.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ps.join(e,"clustering",cu.NATS_CONFIG_FILES.LEAF_SERVER),r=Ps.join(tn.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=zU.get(pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=cu.LOG_LEVEL_FLAGS[tn.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==j9?"-"+n:""),script:XU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return tn.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ba,i.error_file=Ba),i}a(Z9,"generateNatsLeafServerConfig");function e7(){tn.initSync();let e=Ps.join(tn.get(pe.CONFIG_PARAMS.LOGGING_ROOT),pe.LOG_NAMES.HDB),t={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:pe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Q9,autorestart:!1};return tn.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Ba,t.error_file=Ba),t}a(e7,"generateClusteringUpgradeV4ServiceConfig");function t7(){let e={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.RESTART_HDB};return Jf.noBootFile()&&(e[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Jf.getEnvCliRootPath()),{...{name:pe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:JU},script:z9}}a(t7,"generateRestart");function r7(){return{apps:[jU()]}}a(r7,"generateAllServiceConfigs");ZU.exports={generateAllServiceConfigs:r7,generateMainServerConfig:jU,generateRestart:t7,generateNatsHubServerConfig:X9,generateNatsLeafServerConfig:Z9,generateClusteringUpgradeV4ServiceConfig:e7}});var hv=g((Rhe,Ev)=>{"use strict";var ve=U(),n7=J(),vs=Ng(),jf=Ct(),Us=at(),bi=ev(),Zf=ne(),yi=K(),s7=Ms(),{startWorker:tv,onMessageFromWorkers:i7}=it(),o7=La(),ghe=require("util"),a7=require("child_process"),c7=require("fs"),{execFile:l7}=a7,we;Ev.exports={enterPM2Mode:u7,start:Ni,stop:Ig,reload:nv,restart:sv,list:wg,describe:av,connect:Bs,kill:h7,startAllServices:m7,startService:Cg,getUniqueServicesList:cv,restartAllServices:p7,isServiceRegistered:lv,reloadStopStart:uv,restartHdb:ov,deleteProcess:f7,startClusteringProcesses:dv,startClusteringThreads:fv,isHdbRestartRunning:E7,isClusteringRunning:T7,stopClustering:S7,reloadClustering:g7,expectedRestartOfChildren:iv};var lu=!1;i7(e=>{e.type==="restart"&&Zf.initSync(!0)});function u7(){lu=!0}a(u7,"enterPM2Mode");function Bs(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{yi.setupConsoleLogging(),r&&t(r),e(n)})})}a(Bs,"connect");var ar,_7=10,rv;function Ni(e,t=!1){if(lu)return d7(e);let r=l7(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=ar.indexOf(r);o>-1&&ar.splice(o,1),!rv&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<_7&&(c7.existsSync(vs.getHubConfigPath())?Ni(e):(await vs.generateNatsConfig(!0),Ni(e),await new Promise(c=>setTimeout(c,3e3)),await vs.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await vs.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Zf.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&Us.LOG_LEVEL_HIERARCHY[o]>=Us.LOG_LEVEL_HIERARCHY[u||"info"]){let f=u===Us.LOG_LEVELS.ERR||u===Us.LOG_LEVELS.WRN?yi.OUTPUTS.STDERR:yi.OUTPUTS.STDOUT;yi.logCustomLevel(u||"info",f,n,i.slice(_,l.index).trim())}let[d,E]=l;_=l.index+d.length,u=Us.LOG_LEVELS[E]}if(Us.LOG_LEVEL_HIERARCHY[o]>=Us.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Us.LOG_LEVELS.ERR||u===Us.LOG_LEVELS.WRN?yi.OUTPUTS.STDERR:yi.OUTPUTS.STDOUT;yi.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!ar&&(ar=[],!t)){let i=a(()=>{rv=!0,ar&&(ar.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}ar.push(r)}a(Ni,"start");function d7(e){return new Promise(async(t,r)=>{try{await Bs()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(d7,"startWithPM2");function Ig(e){if(!lu){for(let t of ar||[])t.name===e&&(ar.splice(ar.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Bs()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(Ig,"stop");function nv(e){return new Promise(async(t,r)=>{try{await Bs()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(nv,"reload");function sv(e){if(!lu){iv();for(let t of ar||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Bs()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(sv,"restart");function iv(){for(let e of ar||[])e.config&&(e.config.restarts=0)}a(iv,"expectedRestartOfChildren");function f7(e){return new Promise(async(t,r)=>{try{await Bs()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(f7,"deleteProcess");async function ov(){await Ni(bi.generateRestart())}a(ov,"restartHdb");async function E7(){let e=await wg();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(E7,"isHdbRestartRunning");function wg(){return new Promise(async(e,t)=>{try{await Bs()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(wg,"list");function av(e){return new Promise(async(t,r)=>{try{await Bs()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(av,"describe");function h7(){if(!lu){for(let e of ar||[])e.kill();ar=[];return}return new Promise(async(e,t)=>{try{await Bs()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(h7,"kill");async function m7(){try{await dv(),await fv(),await Ni(bi.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(m7,"startAllServices");async function Cg(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=bi.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=bi.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=bi.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=bi.generateNatsHubServerConfig(),await Ni(r,t),await vs.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=bi.generateNatsLeafServerConfig(),await Ni(r,t),await vs.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=bi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ni(r)}catch(r){throw we?.disconnect(),r}}a(Cg,"startService");async function cv(){try{let e=await wg(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw we?.disconnect(),e}}a(cv,"getUniqueServicesList");async function p7(e=[]){try{let t=!1,r=await cv();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 sv(o))}t&&await uv(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(p7,"restartAllServices");async function lv(e){if(ar?.find(r=>r.name===e))return!0;let t=await o7.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(lv,"isServiceRegistered");async function uv(e){let t=Zf.get(ve.CONFIG_PARAMS.THREADS_COUNT)??Zf.get(ve.CONFIG_PARAMS.THREADS),r=await av(e),n=n7.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await Ig(e),await Cg(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await ov():await nv(e)}a(uv,"reloadStopStart");var _v;async function dv(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await Cg(r,e)}}a(dv,"startClusteringProcesses");async function fv(){_v=tv(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await jf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await jf.updateLocalStreams();let e=await s7.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){yi.info("Starting clustering upgrade 4.0.0 process"),tv(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(fv,"startClusteringThreads");async function S7(){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 _v.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await Ig(t)}}a(S7,"stopClustering");async function T7(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await lv(t)===!1)return!1}return!0}a(T7,"isClusteringRunning");async function g7(){await vs.generateNatsConfig(!0),await jf.reloadNATSHub(),await jf.reloadNATSLeaf(),await vs.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await vs.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(g7,"reloadClustering")});var Av={};qe(Av,{compactOnStart:()=>R7,copyDb:()=>Rv});async function R7(){Ii.notify("Running compact on start"),console.log("Running compact on start");let e=(0,Dg.get)(wi.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Sr();try{for(let n in r){if(n==="system")continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,eE.join)(e,"backup",n+".mdb"),o=(0,eE.join)(e,wi.DATABASES_DIR_NAME,n+"-copy.mdb"),c=0;try{c=await mv(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Ii.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await Rv(n,o),console.log("Backing up",n,"to",i),await(0,bo.move)(s,i,{overwrite:!0})}try{Ll()}catch(n){Ii.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,bo.move)(i,s,{overwrite:!0}),await(0,bo.remove)((0,eE.join)(e,wi.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));try{Ll()}catch(n){Ii.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Ii.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,Lg.updateConfigValue)(wi.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,bo.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ll(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await mv(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
13
13
|
Total record count before compaction: ${i}, total after: ${c}.
|