harperdb 4.3.0-beta.3 → 4.3.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/lite.js CHANGED
@@ -5,7 +5,7 @@ var eF=Object.create;var za=Object.defineProperty;var tF=Object.getOwnPropertyDe
5
5
  `),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
6
6
  `)},$z="certificate.pem",Yz="privateKey.pem",Kz="ca.pem";GI.exports={CERTIFICATE_VALUES:Vz,CERTIFICATE_PEM_NAME:$z,PRIVATEKEY_PEM_NAME:Yz,CA_PEM_NAME:Kz}});var Lp=T((Ule,WI)=>{"use strict";var KI=require("fs-extra"),ue=require("joi"),Wz=require("os"),{boolean:Le,string:Mr,number:Dt,array:Dp}=ue.types(),{totalmem:VI}=require("os"),Wi=require("path"),Qz=W(),Z_=J(),Mle=kI(),$I=U(),zz=Ze(),YI="log",Jz="components",Xz="Invalid logging.rotation.maxSize unit. Available units are G, M or K",jz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Zz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",eJ="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",tJ="rootPath config parameter is undefined",rJ="clustering.enabled config parameter is undefined",Qi=Dt.min(0).required(),ed=Dp.items({host:Mr.required(),port:Qi}).empty(null),Jn;WI.exports={configValidator:nJ,routesValidator:uJ,route_constraints:ed};function nJ(e){if(Jn=e.rootPath,Z_.isEmpty(Jn))throw tJ;let t=Le.required(),r=Dt.min(0).max(1e3).empty(null).default(cJ),n=Mr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wc),s=Mr.optional().empty(null),i=Mr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(Wc),c=ue.custom(iJ).empty(null).default(Wc),u=e.clustering?.enabled;if(Z_.isEmpty(u))throw rJ;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:Qi,routes:ed}).required()}).required(),leafNodes:ue.object({network:ue.object({port:Qi}).required()}).required(),network:ue.object({port:Qi}).required()}).required(),leafServer:ue.object({network:ue.object({port:Qi,routes:ed}).required(),streams:ue.object({maxAge:Dt.min(120).allow(null).optional(),maxBytes:Dt.min(1).allow(null).optional(),maxMsgs:Dt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Le.optional(),databaseLevel:Le.optional(),tls:ue.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Le.required(),verify:Le.optional()}),user:Mr.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Le.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:Le,cacheTTL:Dt.required(),enableSessions:Le}),analytics:ue.object({aggregatePeriod:Dt}),componentsRoot:n.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:Le,logSuccessful:Le}),file:Le.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:Le.optional(),compress:Le.optional(),interval:Mr.custom(aJ).optional().empty(null),maxSize:Mr.custom(oJ).optional().empty(null),path:Mr.optional().empty(null).default(Wc)}).required(),root:n,stdStreams:Le.required(),auditLog:Le.required()}).required(),operationsApi:ue.object({network:ue.object({cors:Le.optional(),corsAccessList:Dp.optional(),headersTimeout:Dt.min(1).optional(),keepAliveTimeout:Dt.min(1).optional(),port:Dt.optional().empty(null),domainSocket:ue.optional().empty("hdb/operations-server").default(Wc),securePort:Dt.optional().empty(null),timeout:Dt.min(1).optional()}).optional(),tls:ue.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:Mr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:Qi,securePort:Qi,mtls:ue.alternatives([Le.optional(),ue.object({user:Mr.optional(),certificateAuthority:s,required:Le.optional()})])}).required(),webSocket:Le.optional(),requireAuthentication:Le.optional()}),http:ue.object({compressionThreshold:Dt.optional(),cors:Le.optional(),corsAccessList:Dp.optional(),headersTimeout:Dt.min(1).optional(),port:Dt.min(0).optional().empty(null),securePort:Dt.min(0).optional().empty(null),mtls:ue.alternatives([Le.optional(),ue.object({user:Mr.optional(),certificateAuthority:s,required:Le.optional()})])}).required(),threads:r.optional(),maxHeapMemory:Dt.min(0).optional(),storage:ue.object({writeAsync:Le.required(),overlappingSync:Le.optional(),caching:Le.optional(),compression:Le.optional(),noReadAhead:Le.optional(),path:c,prefetchWrites:Le.optional()}).required(),ignoreScripts:Le.optional(),tls:ue.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:Mr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(nJ,"configValidator");function sJ(e){return KI.existsSync(e)?null:`Specified path ${e} does not exist.`}a(sJ,"doesPathExist");function iJ(e,t){ue.assert(e,Mr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=sJ(e);if(r)return t.message(r)}a(iJ,"validatePath");function oJ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Xz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Zz):e}a(oJ,"validateRotationMaxSize");function aJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(jz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(eJ):e}a(aJ,"validateRotationInterval");function cJ(e,t){let r=t.state.path.join("."),n=Wz.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||VI();return i=Math.round(Math.min(i,VI())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Qz.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(cJ,"setDefaultThreads");function Wc(e,t){let r=t.state.path.join(".");if(!Z_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Z_.isEmpty(Jn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Wi.join(Jn,Jz);case"logging.root":return Wi.join(Jn,YI);case"clustering.leafServer.streams.path":return Wi.join(Jn,"clustering","leaf");case"storage.path":let n=Wi.join(Jn,$I.LEGACY_DATABASES_DIR_NAME);return KI.existsSync(n)?n:Wi.join(Jn,$I.DATABASES_DIR_NAME);case"logging.rotation.path":return Wi.join(Jn,YI);case"operationsApi.network.domainSocket":return r==null?null:Wi.join(Jn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wc,"setDefaultRoot");function uJ(e){let t=ue.object({routes:ed});return zz.validateBySchema({routes:e},t)}a(uJ,"routesValidator")});var vr=T((Ble,rC)=>{"use strict";var Pr=U(),Lt=J(),Rt=W(),{configValidator:lJ,routesValidator:QI}=Lp(),sr=require("fs-extra"),_J=require("yaml"),Dn=require("path"),dJ=require("is-number"),JI=require("properties-reader"),fJ=require("lodash"),{handleHDBError:EJ}=ee(),{HTTP_STATUS_CODES:hJ,HDB_ERROR_MSGS:td}=br(),vle=require("minimist"),{server:mJ}=(zt(),te(yi)),{DATABASES_PARAM_CONFIG:Qc,CONFIG_PARAMS:Ur,CONFIG_PARAM_MAP:Ln}=Pr,pJ="Unable to get config value because config is uninitialized",SJ="Config successfully initialized",TJ="Error backing up config file",gJ="Empty parameter sent to getConfigValue",XI=Dn.join(Pr.PACKAGE_ROOT,"config","yaml",Pr.HDB_DEFAULT_CONFIG_FILE),RJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",zI={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"},rd,At,nd;rC.exports={createConfigFile:AJ,getDefaultConfig:OJ,getConfigValue:ZI,initConfig:Up,flattenConfig:ta,updateConfigValue:eC,updateConfigObject:NJ,getConfiguration:IJ,setConfiguration:CJ,readConfigFile:vp,getClusteringRoutes:DJ,initOldConfig:tC,getConfigFromFile:LJ,getConfigFilePath:zi,addConfig:MJ,deleteConfigFromFile:UJ,getConfigObj:PJ};function AJ(e){let t=ri(XI);rd=ta(t.toJSON());let r;for(let o in e){let c=Ln[o.toLowerCase()];if(c===Ur.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Mp(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Rt.error(l)}}}r&&jI(t,r),Pp(t);let n=t.toJSON();At=ta(n);let s=t.getIn(["rootPath"]),i=Dn.join(s,Pr.HDB_CONFIG_FILE);sr.createFileSync(i),sr.writeFileSync(i,String(t)),Rt.trace(`Config file written to ${i}`)}a(AJ,"createConfigFile");function jI(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Lt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Qc.TABLES))for(let i in n[s][Qc.TABLES])for(let o in n[s][Qc.TABLES][i]){let c=n[s][Qc.TABLES][i][o],u=[Ur.DATABASES,s,Qc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[Ur.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Rt.error("Error parsing schemas CLI/env config arguments",n)}}a(jI,"setSchemasConfig");function OJ(e){if(rd===void 0){let r=ri(XI);rd=ta(r.toJSON())}let t=Ln[e.toLowerCase()];if(t!==void 0)return rd[t.toLowerCase()]}a(OJ,"getDefaultConfig");function ZI(e){if(e==null){Rt.error(gJ);return}if(At===void 0){Rt.trace(pJ);return}let t=Ln[e.toLowerCase()];if(t!==void 0)return At[t.toLowerCase()]}a(ZI,"getConfigValue");function zi(e=Lt.getPropsFilePath()){let t=Lt.getEnvCliRootPath();return t?Dn.join(t,Pr.HDB_CONFIG_FILE):JI(e).get(Pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(zi,"getConfigFilePath");function Up(e=!1){if(At===void 0||e){let t;if(!Lt.noBootFile()){t=Lt.getPropsFilePath();try{sr.accessSync(t,sr.constants.F_OK|sr.constants.R_OK)}catch(i){throw Rt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=zi(t),n;if(r.includes("config/settings.js"))try{tC(r);return}catch(i){if(i.code!==Pr.NODE_ERROR_CODES.ENOENT)throw i}try{n=ri(r)}catch(i){if(i.code===Pr.NODE_ERROR_CODES.ENOENT){Rt.trace(`HarperDB config file not found at ${r}.
7
7
  This can occur during early stages of install where the config file has not yet been created`);return}else throw Rt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}bJ(n,r),Pp(n);let s=n.toJSON();if(mJ.config=s,At=ta(s),At.logging_rotation_rotate)for(let i in zI)At[i]&&Rt.error(`Config ${zI[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Rt.trace(SJ)}}a(Up,"initConfig");function bJ(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Dn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Dn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Dn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Rt.trace("Updating config file with missing config params"),sr.writeFileSync(t,String(e)))}a(bJ,"checkForUpdatedConfig");function Pp(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=lJ(t);if(r.error)throw td.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(Pp,"validateConfig");function NJ(e,t){At===void 0&&(At={});let r=Ln[e.toLowerCase()];if(r===void 0){Rt.trace(`Unable to update config object because config param '${e}' does not exist`);return}At[r.toLowerCase()]=t}a(NJ,"updateConfigObject");function eC(e,t,r=void 0,n=!1,s=!1,i=!1){At===void 0&&Up();let o=ZI(Ln.hdb_root),c=Dn.join(o,Pr.HDB_CONFIG_FILE),u=ri(c),_;if(r===void 0&&e.toLowerCase()===Ur.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Ln[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Mp(f,t);u.setIn([...E],h)}else for(let f in r){let E=Ln[f.toLowerCase()];if(E===Ur.HTTP_SECUREPORT&&r[f]===At[Ur.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Ur.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===At[Ur.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Ur.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Pr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Mp(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(O){Rt.error(O)}}}_&&jI(u,_),Pp(u);let l=u.getIn(["rootPath"]),d=Dn.join(l,Pr.HDB_CONFIG_FILE);n===!0&&yJ(c,l),sr.writeFileSync(d,String(u)),s&&(At=ta(u.toJSON())),Rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(eC,"updateConfigValue");function yJ(e,t){try{let r=Dn.join(t,"backup",`${Pr.HDB_CONFIG_FILE}.bak`);sr.copySync(e,r),Rt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Rt.error(TJ),Rt.error(r)}}a(yJ,"backupConfigFile");var wJ=["databases"];function ta(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)),nd=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])&&!wJ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Ur[u.toUpperCase()]&&Ln[u]&&(s[Ln[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(ta,"flattenConfig");function Mp(e,t){if(e===Ur.CLUSTERING_NODENAME||e===Ur.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(dJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Lt.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 Lt.autoCast(t)}a(Mp,"castConfigValue");function IJ(){let e=Lt.getPropsFilePath(),t=zi(e);return ri(t).toJSON()}a(IJ,"getConfiguration");async function CJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return eC(void 0,void 0,s,!0),RJ}catch(i){throw typeof i=="string"||i instanceof String?EJ(i,i,hJ.BAD_REQUEST,void 0,void 0,!0):i}}a(CJ,"setConfiguration");function vp(){let e=Lt.getPropsFilePath();try{sr.accessSync(e,sr.constants.F_OK|sr.constants.R_OK)}catch(n){if(!Lt.noBootFile())throw Rt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=zi(e);return ri(t).toJSON()}a(vp,"readConfigFile");function ri(e){return _J.parseDocument(sr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ri,"parseYamlDoc");function DJ(){let e=vp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Lt.isEmptyOrZeroLength(t)?[]:t;let r=QI(t);if(r)throw td.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Lt.isEmptyOrZeroLength(n)?[]:n;let s=QI(n);if(s)throw td.CONFIG_VALIDATION(s.message);if(!Lt.isEmptyOrZeroLength(n)&&!Lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw td.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(DJ,"getClusteringRoutes");function tC(e){let t=JI(e);At={};for(let r in Ln){let n=t.get(r.toUpperCase());if(Lt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Ln[r].toLowerCase();s===Ur.LOGGING_ROOT?At[s]=Dn.dirname(n):At[s]=n}return At}a(tC,"initOldConfig");function LJ(e){let t=vp();return fJ.get(t,e.replaceAll("_","."))}a(LJ,"getConfigFromFile");async function MJ(e,t){let r=ri(zi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await sr.writeFile(zi(),String(r))}a(MJ,"addConfig");function UJ(e){let t=zi(Lt.getPropsFilePath()),r=ri(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Dn.join(n,Pr.HDB_CONFIG_FILE);sr.writeFileSync(s,String(r))}a(UJ,"deleteConfigFromFile");function PJ(){return nd||(Up(),nd)}a(PJ,"getConfigObj")});var sC=T((xle,nC)=>{"use strict";var sd=U(),id=class{static{a(this,"BaseLicense")}constructor(t=0,r=sd.RAM_ALLOCATION_ENUM.DEFAULT,n=sd.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Bp=class extends id{static{a(this,"ExtendedLicense")}constructor(t=0,r=sd.RAM_ALLOCATION_ENUM.DEFAULT,n=sd.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};nC.exports={BaseLicense:id,ExtendedLicense:Bp}});var Ji=T((qle,lC)=>{"use strict";var na=require("fs-extra"),oC=j_(),aC=require("crypto"),vJ=require("moment"),BJ=require("uuid").v4,Yt=W(),xp=require("path"),HJ=J(),ni=U(),{totalmem:iC}=require("os"),xJ=sC().ExtendedLicense,ra="invalid license key format",FJ="061183",qJ="mofi25",GJ="aes-256-cbc",kJ=16,VJ=32,cC=Z();cC.initSync();var Hp;lC.exports={validateLicense:uC,generateFingerPrint:YJ,licenseSearch:Gp,getLicense:QJ,checkMemoryLimit:zJ};function Fp(){return xp.join(cC.getHdbBasePath(),ni.LICENSE_KEY_DIR_NAME,ni.LICENSE_FILE_NAME)}a(Fp,"getLicenseDirPath");function $J(){let e=Fp();return xp.join(e,ni.LICENSE_FILE_NAME)}a($J,"getLicenseFilePath");function qp(){let e=Fp();return xp.join(e,ni.REG_KEY_FILE_NAME)}a(qp,"getFingerPrintFilePath");async function YJ(){let e=qp();try{return await na.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await KJ();throw Yt.error(`Error writing fingerprint file to ${e}`),Yt.error(t),new Error("There was an error generating the fingerprint")}}a(YJ,"generateFingerPrint");async function KJ(){let e=BJ(),t=oC.hash(e),r=qp();try{await na.mkdirp(Fp()),await na.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Yt.error(`Error writing fingerprint file to ${r}`),Yt.error(n),new Error("There was an error generating the fingerprint")}return t}a(KJ,"writeFingerprint");function uC(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ni.RAM_ALLOCATION_ENUM.DEFAULT,version:ni.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yt.error("empty license key passed to validate."),r;let n=qp(),s=!1;try{s=na.statSync(n)}catch(i){Yt.error(i)}if(s){let i;try{i=na.readFileSync(n,"utf8")}catch{Yt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(qJ),c=o[1];c=Buffer.concat([Buffer.from(c)],kJ);let u=Buffer.concat([Buffer.from(i)],VJ),_=aC.createDecipheriv(GJ,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=WJ(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ra),Yt.error(ra),new Error(ra)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(ra),Yt.error(ra),new Error(ra)}else r.exp_date=l;r.exp_date<vJ().valueOf()&&(r.valid_date=!1),oC.validate(o[1],`${FJ}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Yt.error("Invalid licence"),r}a(uC,"validateLicense");function WJ(e,t){try{let r=aC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Yt.warn("Check old license failed")}}a(WJ,"checkOldLicense");function Gp(){let e=new xJ,t=[];try{t=na.readFileSync($J(),"utf-8").split(ni.NEW_LINE)}catch(r){r.code==="ENOENT"?Yt.info("no license file found"):Yt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(HJ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=uC(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){Yt.error("There was an error parsing the license string."),Yt.error(s),e.ram_allocation=ni.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Hp=e,e}a(Gp,"licenseSearch");async function QJ(){return Hp||await Gp(),Hp}a(QJ,"getLicense");function zJ(){let e=Gp().ram_allocation,t=process.constrainedMemory?.()||iC();if(t=Math.round(Math.min(t,iC())/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(zJ,"checkMemoryLimit")});var nn=T((Yle,yC)=>{"use strict";var EC="username is required",hC="nothing to update, must supply active, role or password to update",mC="password cannot be an empty string",pC="If role is specified, it cannot be empty.",SC="active must be true or false";yC.exports={addUser:s2,alterUser:i2,dropUser:a2,getSuperUser:_2,userInfo:c2,listUsers:ad,listUsersExternal:u2,setUsersToGlobal:ia,findAndValidateUser:bC,getClusterUser:d2,USERNAME_REQUIRED:EC,ALTERUSER_NOTHING_TO_UPDATE:hC,EMPTY_PASSWORD:mC,EMPTY_ROLE:pC,ACTIVE_BOOLEAN:SC};var TC=rn(),JJ=Ki(),$p=j_(),gC=xI(),RC=tn(),Yp=Ts(),Br=J(),AC=require("validate.js"),Ae=W(),{promisify:XJ}=require("util"),Kp=Os(),_C=U(),dC=et(),jJ=vr(),kle=Z(),Vle=Ji(),ZJ=Pi(),{table:$le}=(Ne(),te(qe)),{handleHDBError:Xn,hdb_errors:e2}=ee(),{HTTP_STATUS_CODES:jn,AUTHENTICATION_ERROR_MSGS:kp,HDB_ERROR_MSGS:sa}=e2,{UserEventMsg:Wp}=bn(),Vp=require("lodash"),{server:Qp}=(zt(),te(yi)),t2=W();Qp.getUser=(e,t)=>bC(e,t,t!=null);var OC={username:!0,active:!0,role:!0,password:!0},fC=new Map,od=RC.searchByValue,r2=RC.searchByHash,n2=XJ(JJ.delete);async function s2(e){let t=AC.cleanAttributes(e,OC),r=gC.addUserValidation(t);if(r)throw Xn(new Error,r.message,jn.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 od(n),s=s&&Array.from(s)}catch(u){throw Ae.error("There was an error searching for a role in add user"),Ae.error(u),u}if(!s||s.length<1)throw Xn(new Error,sa.ROLE_NAME_NOT_FOUND(t.role),jn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Xn(new Error,sa.DUP_ROLES_FOUND(t.role),jn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Kp.encrypt(t.password)),t.password=$p.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await TC.insert(i)}catch(u){throw Ae.error("There was an error searching for a user."),Ae.error(u),u}Ae.debug(o);try{await ia()}catch(u){throw Ae.error("Got an error setting users to global"),Ae.error(u),u}if(o.skipped_hashes.length===1)throw Xn(new Error,sa.USER_ALREADY_EXISTS(t.username),jn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Yp.signalUserChange(new Wp(process.pid)),`${c.username} successfully added`}a(s2,"addUser");async function i2(e){let t=AC.cleanAttributes(e,OC);if(Br.isEmptyOrZeroLength(t.username))throw new Error(EC);if(Br.isEmptyOrZeroLength(t.password)&&Br.isEmptyOrZeroLength(t.role)&&Br.isEmptyOrZeroLength(t.active))throw new Error(hC);if(!Br.isEmpty(t.password)&&Br.isEmptyOrZeroLength(t.password.trim()))throw new Error(mC);if(!Br.isEmpty(t.active)&&!Br.isBoolean(t.active))throw new Error(SC);let r=o2(t.username);if(!Br.isEmpty(t.password)&&!Br.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Kp.encrypt(t.password)),t.password=$p.hash(t.password)),t.role==="")throw new Error(pC);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 od(i)||[])}catch(c){throw Ae.error("Got an error searching for a role."),Ae.error(c),c}if(!o||o.length===0){let c=sa.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ae.error(c),Xn(new Error,c,jn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=sa.ALTER_USER_DUP_ROLES(t.role);throw Ae.error(c),Xn(new Error,c,jn.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 TC.update(n)}catch(i){throw Ae.error("Error during update."),Ae.error(i),i}try{await ia()}catch(i){throw Ae.error("Got an error setting users to global"),Ae.error(i),i}return Yp.signalUserChange(new Wp(process.pid)),s}a(i2,"alterUser");function o2(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(o2,"isClusterUser");async function a2(e){try{let t=gC.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Br.isEmpty(global.hdb_users.get(e.username)))throw Xn(new Error,sa.USER_NOT_EXIST(e.username),jn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await n2(r)}catch(s){throw Ae.error("Got an error deleting a user."),Ae.error(s),s}Ae.debug(n);try{await ia()}catch(s){throw Ae.error("Got an error setting users to global."),Ae.error(s),s}return Yp.signalUserChange(new Wp(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(a2,"dropUser");async function c2(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Vp.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await r2(r)}catch(s){throw Ae.error("Got an error searching for a role."),Ae.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ae.error(r),r}return t}a(c2,"userInfo");async function u2(){let e;try{e=await ad()}catch(t){throw Ae.error("Got an error listing users."),Ae.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(u2,"listUsersExternal");async function ad(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await od(e)}catch(o){throw Ae.error("Got an error searching for roles."),Ae.error(o),o}let r={};for(let o of t)r[o.id]=Vp.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 od(n)}catch(o){throw Ae.error("Got an error searching for users."),Ae.error(o),o}let i=new Map;for(let o of s)o=Vp.cloneDeep(o),o.role=r[o.role],l2(o.role),i.set(o.username,o);return i}catch(e){throw Ae.error("got an error listing users"),Ae.error(e),Br.errorizeMessage(e)}return null}a(ad,"listUsers");function l2(e){try{if(!e){Ae.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(ZJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ae.error("Got an error trying to set system permissions."),Ae.error(t)}}a(l2,"appendSystemTablesToRole");async function ia(){try{let e=await ad();global.hdb_users=e}catch(e){throw Ae.error(e),e}}a(ia,"setUsersToGlobal");async function bC(e,t,r=!0){global.hdb_users||await ia();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Xn(new Error,kp.GENERIC_AUTH_FAIL,jn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Xn(new Error,kp.USER_INACTIVE,jn.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(fC.get(t)===n.password)return s;if($p.validate(n.password,t))fC.set(t,n.password);else throw Xn(new Error,kp.GENERIC_AUTH_FAIL,jn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(bC,"findAndValidateUser");async function _2(){global.hdb_users||await ia();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(_2,"getSuperUser");async function d2(){let e=await ad(),t=jJ.getConfigFromFile(_C.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Br.isEmpty(r)&&r?.role?.role===_C.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Kp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+dC.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+dC.SERVER_SUFFIX.ADMIN,r}a(d2,"getClusterUser");var NC=[];Qp.invalidateUser=function(e){for(let t of NC)try{t(e)}catch(r){t2.error("Error invalidating user",r)}};Qp.onInvalidatedUser=function(e){NC.push(e)}});var Jc=T((zle,DC)=>{"use strict";var Xi=W(),Hr=U(),f2=Ub(),Wle=Zs(),Qle=Gi(),E2=nn(),{validateEvent:wC}=bn(),zc=In(),h2=require("process"),{resetDatabases:m2}=(Ne(),te(qe)),p2={[Hr.ITC_EVENT_TYPES.SCHEMA]:S2,[Hr.ITC_EVENT_TYPES.USER]:CC};async function S2(e){let t=wC(e);if(t){Xi.error(t);return}Xi.trace("ITC schemaHandler received schema event:",e),await f2(e.message),await T2(e.message)}a(S2,"schemaHandler");async function T2(e){try{zc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),zc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),zc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=m2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Xi.error(t)}}a(T2,"syncSchemaMetadata");var IC=[];async function CC(e){try{try{zc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),zc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Xi.warn(r)}let t=wC(e);if(t){Xi.error(t);return}Xi.trace(`ITC userHandler ${Hr.HDB_ITC_CLIENT_PREFIX}${h2.pid} received user event:`,e),await E2.setUsersToGlobal();for(let r of IC)r()}catch(t){Xi.error(t)}}a(CC,"userHandler");CC.addListener=function(e){IC.push(e)};DC.exports=p2});var bn=T((t_e,MC)=>{"use strict";var Xle=W(),zp=J(),g2=U(),{ITC_ERRORS:Xc}=br(),{parentPort:jle,threadId:R2,isMainThread:A2,workerData:Zle}=require("worker_threads"),{onMessageFromWorkers:O2,broadcast:e_e,broadcastWithAcknowledgement:b2}=je();MC.exports={sendItcEvent:N2,validateEvent:LC,SchemaEventMsg:y2,UserEventMsg:w2};var cd;O2(async(e,t)=>{cd=cd||Jc(),LC(e),cd[e.type]&&await cd[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function N2(e){return!A2&&e.message&&(e.message.originator=R2),b2(e)}a(N2,"sendItcEvent");function LC(e){if(typeof e!="object")return Xc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||zp.isEmpty(e.type))return Xc.MISSING_TYPE;if(!e.hasOwnProperty("message")||zp.isEmpty(e.message))return Xc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||zp.isEmpty(e.message.originator))return Xc.MISSING_ORIGIN;if(g2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Xc.INVALID_EVENT(e.type)}a(LC,"validateEvent");function y2(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(y2,"SchemaEventMsg");function w2(e){this.originator=e}a(w2,"UserEventMsg")});var Ts=T((s_e,BC)=>{"use strict";var UC=U(),n_e=J(),ud=W(),PC=hb(),oa,{sendItcEvent:vC}=bn();function I2(e){try{ud.trace("signalSchemaChange called with message:",e),oa=oa||Jc();let t=new PC(UC.ITC_EVENT_TYPES.SCHEMA,e);return oa.schema(t),vC(t)}catch(t){ud.error(t)}}a(I2,"signalSchemaChange");function C2(e){try{ud.trace("signalUserChange called with message:",e),oa=oa||Jc();let t=new PC(UC.ITC_EVENT_TYPES.USER,e);return oa.user(t),vC(t)}catch(t){ud.error(t)}}a(C2,"signalUserChange");BC.exports={signalSchemaChange:I2,signalUserChange:C2}});var tu={};Fe(tu,{addAnalyticsListener:()=>eu,recordAction:()=>xr,recordActionBinary:()=>sn,setAnalyticsEnabled:()=>D2});function D2(e){KC=e}function xr(e,t,r,n,s){if(!KC)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=dd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},dd.set(i,o)}ld||L2()}function sn(e,t,r,n,s){xr(!!e,t,r,n,s)}function eu(e){zC.push(e)}function L2(){ld=performance.now(),setTimeout(async()=>{let e=performance.now()-ld;ld=0;let t=[],r={time:Date.now(),period:e,threadId:ji.threadId,metrics:t};for(let[s,i]of dd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of JC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await XC()}let n=process.memoryUsage();t.push({metric:"memory",threadId:ji.threadId,byThread:!0,...n});for(let s of zC)s(t);dd=new Map,ji.parentPort?ji.parentPort.postMessage({type:QC,report:r}):eD({report:r})},WC).unref()}async function M2(e,t=6e4){let r=jp(),n=jC(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:O}=p;for(let g of S||[]){let{path:R,method:B,type:H,metric:v,count:M,total:$,distribution:K,threads:z,...se}=g;M||(M=1);let Te=v+(R?"-"+R:"");B!==void 0&&(Te+="-"+B),H!==void 0&&(Te+="-"+H);let oe=o.get(Te);if(oe){if(oe.threads){let de=oe.threads[O];if(de)oe=de;else{oe.threads[O]=Object.assign({},se);continue}}oe.count||(oe.count=1);let xe=oe.count;for(let de in se){let It=se[de];typeof It=="number"&&(oe[de]=(oe[de]*xe+It*M)/(xe+M))}oe.count+=M,$>=0&&(oe.total+=$,oe.ratio=oe.total/oe.count)}else oe=Object.assign({period:t},g),delete oe.distribution,o.set(Te,oe),oe.byThread&&(oe.threads=[],oe.threads[O]=Object.assign({},se),u.push(oe));if(K){K=K.map(de=>typeof de=="number"?{value:de,count:1}:de);let xe=c.get(Te);xe?xe.push(...K):c.set(Te,K)}}await XC()}for(let h of u){let{path:p,method:S,type:O,metric:g,count:R,total:B,distribution:H,threads:v,...M}=h;v=v.filter($=>$);for(let $ in M){if(typeof h[$]!="number")continue;let K=0;for(let z of v){let se=z[$];typeof se=="number"&&(K+=se)}h[$]=K}h.count=v.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((de,It)=>de.value>It.value?1:-1);let O=S.count-1,g=[],R=0,B=0,H;for(let de of JC){let It=O*de;for(;R<It;)H=p[B++],R+=H.count,B===1&&R--;let bl=p[B>1?B-2:0];H||(H=p[0]),g.push(H.value-(H.value-bl.value)*(R-It)/H.count)}let[v,M,$,K,z,se,Te,oe,xe]=g;Object.assign(S,{p1:v,p10:M,p25:$,median:K,p75:z,p90:se,p95:Te,p99:oe,p999:xe})}let l;for(let[h,p]of o)p.id=(0,_d.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,_d.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-HC,active:E-xC,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}HC=f,xC=E}async function FC(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function jp(){return qC||(qC=at({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function jC(){return GC||(GC=at({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function v2(){ZC=!0;let e=(0,Zc.get)(Xp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await M2(WC,e),await FC(jp(),U2),await FC(jC(),P2)},Math.min(e/2,2147483647)).unref()}function eD(e,t){let r=e.report;r.threadId=t?.threadId||ji.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(kC+=n.mean*n.count);r.totalBytesProcessed=kC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(VC.get(t))}),VC.set(t,t.performance.eventLoopUtilization())),r.id=(0,_d.getNextMonotonicTime)(),jp().primaryStore.put(r.id,r),ZC||v2(),B2&&(tD=x2(r))}async function x2(e){if(await tD,!si){let r=(0,jc.dirname)((0,YC.getLogFilePath)());try{si=await(0,Jp.open)((0,jc.join)(r,"analytics.log"),"r+")}catch{si=await(0,Jp.open)((0,jc.join)(r,"analytics.log"),"w+")}}let t=(await si.stat()).size;if(t>H2){let r=Buffer.alloc(t);await si.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await si.write(r,{position:0}),await si.truncate(r.length),t=r.length}await si.write(JSON.stringify(e)+`
8
- `,t)}var ji,$C,YC,jc,Jp,_d,Zc,Xp,dd,KC,ld,WC,QC,zC,JC,HC,xC,XC,U2,P2,qC,GC,ZC,kC,VC,B2,tD,si,H2,bs=Oe(()=>{ji=require("worker_threads"),$C=x(je());Ne();YC=x(W()),jc=require("path"),Jp=require("fs/promises"),_d=x(Nr()),Zc=x(Z()),Xp=x(U());zt();(0,Zc.initSync)();dd=new Map,KC=(0,Zc.get)(Xp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(D2,"setAnalyticsEnabled");a(xr,"recordAction");Xe.recordAnalytics=xr;a(sn,"recordActionBinary");ld=0,WC=1e3,QC="analytics-report",zC=[];a(eu,"addAnalyticsListener");JC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(L2,"sendAnalytics");a(M2,"aggregation");HC=0,xC=0,XC=a(()=>new Promise(setImmediate),"rest");a(FC,"cleanup");U2=36e5,P2=31536e6;a(jp,"getRawAnalyticsTable");a(jC,"getAnalyticsTable");(0,$C.setChildListenerByType)(QC,eD);a(v2,"startScheduledTasks");kC=0,VC=new Map,B2=!1;a(eD,"recordAnalytics");H2=1e6;a(x2,"logAnalytics")});var rS={};Fe(rS,{coerceType:()=>fd,makeTable:()=>md,setServerUtilities:()=>W2,updateResource:()=>Ed});function md(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),db(i,u);let S=Rh(i,n,u),O=0,g,R,B={},H=Promise.resolve(),v,M,$;for(let Y of p)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(v=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(M=Y),Y.expiresAt&&($=Y),Y.isPrimaryKey&&(B=Y);let K,z=[],se=[],Te=1,oe=2,xe={},de={},It=864e5,bl,Nl,ks,AA=!1,$E,zx=i.getRange({start:!1,end:!1}).constructor,Jx=10,Xx=6;E&&NA();class We extends vt{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=v;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),R=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let I=a(w=>{let y=this.sources.slice(0,-1);if(y=y.filter(P=>P[w]&&(!P[w].reliesOnPrototype||P.prototype[w])),y.length>0)if(y.length===1){let P=y[0];return(L,D,F)=>{if(L?.source!==P)return P[w](D,F,L)}}else return(P,L,D)=>{let F=[];for(let G of y){if(P?.source===G)break;F.push(G[w](L,D,P))}return Promise.all(F)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1],N=a(w=>{if(b[w]&&(!b[w].reliesOnPrototype||b.prototype[w]))return(y,P,L)=>{if(!y?.source)return b[w](P,L,y)}},"getApplyToCanonicalSource");return xe={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},de={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let w=!1,y=a(async(P,L)=>{let D=P.value,F=P.table?tt[c][P.table]:We;if(c===Mn.SYSTEM_SCHEMA_NAME&&(P.table===Mn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||P.table===Mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(w=!0),P.id===void 0&&(P.id=D[F.primaryKey],P.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(P));P.source=m;let G=await F.getResource(P.id,L,aa);switch(P.type){case"put":return G._writeUpdate(D,!0,aa);case"patch":return G._writeUpdate(D,!1,aa);case"delete":return G._writeDelete(aa);case"publish":return G._writePublish(D,aa);case"invalidate":return G.invalidate(aa);default:ze.error("Unknown operation",P.type,P.id)}},"writeUpdate");try{let P=m.subscribe;P&&h==null&&(h=!0);let L=m.subscribeOnThisThread?m.subscribeOnThisThread((0,eo.getWorkerIndex)()):(0,eo.getWorkerIndex)()===0,D=P&&L&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(D){let F;for await(let G of D)try{if(!(G.type==="transaction"?G.writes[0]:G)){ze.error("Bad subscription event",G);continue}if(G.source=m,F)if(G.beginTxn)F.resolve();else{y(G,F);continue}if(G.type==="end_txn")continue;let ae=Ke(G,()=>{if(G.type==="transaction"){let re=[];for(let ce of G.writes)try{re.push(y(ce,G))}catch(ve){throw ve.message+=" writing "+JSON.stringify(ce)+" of event "+JSON.stringify(G),ve}return Promise.all(re)}else if(G.type==="define_schema"){let re=this.attributes.slice(0),ce;for(let ve of G.attributes)re.find(ne=>ne.name===ve.name)||(re.push(ve),ce=!0);ce&&(at({table:s,database:c,attributes:re,origin:"cluster"}),cu.signalSchemaChange(new uu.SchemaEventMsg(process.pid,Mn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return G.beginTxn?(F=G,y(G,G),new Promise(re=>{F.resolve=re})):y(G,G)});w&&(await ae,cu.signalUserChange(new uu.UserEventMsg(process.pid))),G.onCommit&&(ae?.then?ae.then(G.onCommit):G.onCommit())}catch(ie){ze.error("error in subscription handler",ie)}}}catch(P){ze.error(P)}})(),this}static getResource(m,A,I){let b=super.getResource(m,A,I);if(m!=null){Qa(m);try{if(b.hasOwnProperty(he))return b;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!I?.async||i.cache?.get(m),w=gr(A),y=w.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return YE(m,A,{transaction:y},N,P=>{if(P?Ed(b,P):b[he]=null,A.onlyIfCached&&A.noCacheStore){if(!b.doesExist())throw new on.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let L=KE(m,P,A,b);if(L)return w?.disregardReadTxn(),b[Zp]=!0,tS(L,D=>(Ed(b,D),b))}return b})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return b}ensureLoaded(){let m=KE(this[De],this[Fr],this[be]);if(m)return this[Zp]=!0,tS(m,A=>{this[Fr]=A,this[he]=A.value,this[ou]=A.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,It=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");It=It||(d+f)/4,QE()}static enableAuditing(m=!0){E=m,m&&NA(),We.audit=m}static coerceId(m){return m===""?null:fd(m,B)}static async dropTable(){if(delete tt[c][s],c===o){for(let m of p)l.remove(We.tableName+"/"+m.name),r[m.name]?.drop();l.remove(We.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));cu.signalSchemaChange(new uu.SchemaEventMsg(process.pid,Mn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[Zr])return this.search(m);if(this[De]===null){if(m?.conditions)return this.search(m);let A=We.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(m,A){let I=wl(m);if(I?.read){if(I.isSuperUser)return!0;let b=I.attribute_permissions,N=A?.select;if(b?.length>0||AA&&N){if(A||(A={}),N){let w=b?.length>0&&eS(b,"read");A.select=N.map(y=>{let P=y.name||y;if(!w||w[P]){let L=ks[P]?.definition?.tableClass;if(L){if(y.name||(y={name:y}),!L.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else A.select=b.filter(w=>w.read&&!ks[w.attribute_name]).map(w=>w.attribute_name);return A}else return!0}}allowUpdate(m,A){let I=wl(m);if(I?.update){let b=I.attribute_permissions;if(b?.length>0){let N=eS(b,"update");for(let w in A)if(!N[w])return!1;for(let w of b){let y=w.attribute_name;!w.update&&!(y in A)&&(A[y]=this.getProperty(y))}}return!0}}allowCreate(m,A){if(this[Zr]){let I=wl(m);if(I?.insert){let b=I.attribute_permissions;if(b?.length>0){let N=eS(b,"insert");for(let w in A)if(!N[w])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return wl(m)?.delete}update(m,A){if(!gr(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let b;return typeof m=="object"&&m&&(A?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[he]={},this[gt]=m):(b=this[gt],b&&(m=Object.assign(b,m)),this[gt]=b=m)),this._writeUpdate(this[gt],A),this}addTo(m,A){if(typeof A=="number")this[ru]===nD?this.set(m,(+this.getProperty(m)||0)+A):(this[ru]||this.update(),this.set(m,new r_(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,A){if(typeof A=="number")return this.addTo(m,-A);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let A=this[be],I=this[De];Qa(I),gr(this[be]).addWrite({key:I,store:i,invalidated:!0,entry:this[Fr],nodeName:this[be]?.nodeName,before:xe.invalidate?.bind(this,A,I),beforeIntermediate:de.invalidate?.bind(this,A,I),commit:(N,w)=>{if(w?.version>N)return;let y=null;for(let P in r)y||(y={}),y[P]=this.getProperty(P);S(I,y,this[Fr],N,nu,E,this[be],0,"invalidate")}})}static evict(m,A,I){let b=this.Source,N;if(!((R||E)&&(!A||(N=i.getEntry(m),!N||!A)||N.version!==I))){if(R){if(i.hasLock(m,N.version))return;let w;for(let y in r)w||(w={}),w[y]=A[y];if(w)return S(m,w,N,I,su,null,null,0,null,!0)}return i.ifVersion(I,()=>{yl(m,A,null)}),E?S(m,null,N,I,su,null,null,0,null,!0):i.remove(m,I)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=s,m.schema||=c,uD.operation(m,A)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,A,I){let b=this[be],N=gr(b),w=this[De];Qa(w);let y=this[Fr];this[ru]=A?nD:$2;let P={key:w,store:i,entry:y,nodeName:b?.nodeName,validate:L=>{m||(m=this[gt]),A||m&&e_(m)?(this.validate(m,!A),b?.source||(M&&(m[M.name]=M.type==="Date"?new Date(L):M.type==="String"?new Date(L).toISOString():L),A&&(t&&m[t]!==w&&(m[t]=w),v&&(y?.value?m[v.name]=y?.value[v.name]:m[v.name]=v.type==="Date"?new Date(L):v.type==="String"?new Date(L).toISOString():L),m=Li(m)))):N.removeWrite(P)},before:A?xe.put?()=>xe.put(b,w,m):null:xe.patch?()=>xe.patch(b,w,m):xe.put?()=>xe.put(b,w,Li(this)):null,beforeIntermediate:A?de.put?()=>de.put(b,w,m):null:de.patch?()=>de.patch(b,w,m):de.put?()=>de.put(b,w,Li(this)):null,commit:(L,D,F)=>{if(F){if(b&&D?.version>(b.lastModified||0)&&(b.lastModified=D.version),this[Fr]=D,D?.value?.[he])throw new Error("Can not assign a record to a record, check for circular references");A||(this[he]=D?.value??null)}this[gt]=m,this[ou]=L;let G=D?.value,ie=m;if(this[ru]=0,D?.version>=L)if(E){let ve=D.localTime,ne=D.version;for(;ie&&(ve>L||ne>=L&&ve>0);){let fe=u.get(ve),j=Ct(fe);if(ne=j.version,ne>L){if(j.type==="patch"){let le=j.getValue(i);ie=jl(ie,le)}else if(j.type==="put"||j.type==="delete")return}else if(ne===L)return;ve=j.previousLocalTime}}else{if(A)return;ie=jl(ie,G)}let ae;if(A?ae=ie:(this[he]=G,ae=A?ie:Li(this,ie)),this[he]=ae,ae?.[he])throw new Error("Can not assign a record to a record, check for circular references");let re;A||(re=m),yl(w,G,ae);let ce=A?"put":"patch";S(w,ae,D,L,0,E,b,b.expiresAt||(d?d+Date.now():0),ce,!1,re)}};N.addWrite(P)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[Zr]){for await(let A of this.search(m))(await We.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[he]?this._writeDelete(m):!1}_writeDelete(m){let A=gr(this[be]),I=this[De];Qa(I);let b=this[be];return A.addWrite({key:I,store:i,resource:this,nodeName:b?.nodeName,before:xe.delete?.bind(this,b,I),beforeIntermediate:de.delete?.bind(this,b,I),commit:(N,w,y)=>{let P=w?.value;y&&(b&&w?.version>(b.lastModified||0)&&(b.lastModified=w.version),Ed(this,w)),!(w?.version>N)&&(yl(this[De],P),ze.trace("Write delete entry",I,N),E||h?(S(I,null,this[Fr],N,0,E,this[be],0,"delete"),E||QE()):i.remove(this[De]))}}),!0}search(m){let A=this[be],I=gr(A);if(!m)throw new Error("No query provided");let b=m.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[De]&&(b=[{attribute:null,comparator:"prefix",value:this[De]}].concat(b));let N,w={};function y(j,le){let St;switch(le){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');St=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+le)}let Hn=St&&{},xn;for(let Qe of j){if(Qe.conditions){Qe.conditions=y(Qe.conditions,Qe.operator);continue}let Rr=Qe[0]??Qe.attribute,zr=Rr==null?B:ms(p,Rr);if(zr){if(St){let Ar=Rn(Rr),Fn=Hn[Ar];Fn?(Fn.push(Qe),xn=!0):Hn[Ar]=[Qe]}(zr.type||Ph[Qe.comparator])&&(Qe[1]===void 0?Qe.value=L(Qe.value,zr):Qe[1]=L(Qe[1],zr))}else if(Rr!=null)throw(0,on.handleHDBError)(new Error,`${Rr} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return j;if(xn)for(let Qe in Hn){let Rr=Hn[Qe],zr=Rr.length;if(zr>1)for(let Ar=0;Ar<zr;Ar++){let Fn=Rr[Ar];if(Fn.comparator==="ge"||Fn.comparator==="greater_than_equal")for(let Vs=0;Vs<zr;Vs++){let Do=Rr[Vs];(Do.comparator==="le"||Do.comparator==="less_than_equal")&&(Fn.comparator="between",Fn.value=[Fn.value,Do.value],j.splice(j.indexOf(Do),1))}if(Fn.comparator==="equals"||!Fn.comparator){for(let Vs=0;Vs<zr;Vs++)if(Vs!==Ar){let Do=Rr[Vs];j.splice(j.indexOf(Do),1)}break}}}return j}a(y,"prepareConditions");function P(j,le){if(m.enforceExecutionOrder)return j;for(let St of j)St.conditions&&(St.conditions=P(St.conditions,St.operator));return j.length>1&&le!=="or"?(0,cD.sortBy)(j,c_(We)):j}a(P,"orderConditions");function L(j,le){return Array.isArray(j)?j.map(St=>fd(St,le)):fd(j,le)}a(L,"coerceTypedValues");let D=m.operator;(b.length>0||D)&&(b=y(b,D));let F=typeof m.sort=="object"&&m.sort,G;if(F&&D!=="or"){let j=F.attribute;if(N=b.find(le=>Rn(le.attribute)===Rn(j)),!N){if(!ms(p,j))throw(0,on.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);N={attribute:j,comparator:"sort"},b.push(N)}N.descending=!!F.descending}b=P(b,D),F&&(b[0]===N?F.next&&(G={dbOrderedAttribute:F.attribute,attribute:F.next.attribute,descending:F.next.descending,next:F.next.next}):(N&&b.splice(b.indexOf(N),1),G=F));let ie=m.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:b,operator:D,postOrdering:G,selectApplied:!!ie};let ae=I.useReadTxn(),re=vh(b,D,We,ae,m,A,(j,le)=>OA(j,ie,A,le),w),ce=m.ensureLoaded!==!1;G||(re=fe(re));let ve=We.transformEntryForSelect(ie,A,w,ce,!0),ne=We.transformToOrderedSelect(re,ie,G,A,ve);function fe(j){return m.offset||m.limit!==void 0?j.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):j}return a(fe,"applyOffset"),G&&(ne=fe(ne)),ne.onDone=()=>{ne.onDone=null,I.doneReadTxn()},ne.selectApplied=!0,ne.getColumns=()=>{if(ie){let j=[];for(let le of ie)le==="*"?j.push(...p.map(St=>St.name)):j.push(le.name||le);return j}return p.map(j=>j.name)},ne}static transformToOrderedSelect(m,A,I,b,N){let w=new zx;if(I){m=OA(m,A,b,null);let y;w.iterate=function(){let L,D=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),F,G=I.dbOrderedAttribute,ie,ae,re=!0;function ce(ne){let fe=ne.next&&ce(ne.next),j=ne.descending;return(le,St)=>{let Hn=WE(le,ne.attribute,b),xn=WE(St,ne.attribute,b),Qe=j?(0,to.compareKeys)(xn,Hn):(0,to.compareKeys)(Hn,xn);return Qe===0?fe?.(le,St)||0:Qe}}a(ce,"createComparator");let ve=ce(I);return{async next(){let ne;if(L)if(ne=L.next(),ne.done){if(F)return w.onDone&&w.onDone(),ne}else return{value:await N(ne.value)};y=[],ie&&y.push(ie);do if(ne=await D.next(),ne.done){if(F=!0,y.length)break;return w.onDone&&w.onDone(),ne}else{let fe=ne.value;if(fe?.then&&(fe=await fe),G){let j=WE(fe,G,b);if(re)re=!1,ae=j;else if(j!==ae){ae=j,ie=fe;break}}y.push(fe)}while(!0);return I.isGrouped,y.sort(ve),L=y[Symbol.iterator](),ne=L.next(),ne.done?(w.onDone&&w.onDone(),ne):{value:await N(ne.value)}},return(){w.onDone&&w.onDone(),D.return()},throw(){w.onDone&&w.onDone(),D.throw()}}};let P=a(L=>{if(typeof A=="object"&&Array.isArray(L.attribute))for(let D=0;D<A.length;D++){let F=A[D],G;if(F.name===L.attribute[0]){for(G=F.sort||(F.sort={});G.next;)G=G.next;G.attribute=L.attribute.slice(1),G.descending=L.descending}else F===L.attribute[0]&&(A[D]=G={name:F,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&P(L.next)},"applySortingOnSelect");P(I)}else w.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),w=w.map(N);return w}static transformEntryForSelect(m,A,I,b,N){if(m&&(m===t||m?.length===1&&m[0]===t)){let L=a(D=>D?.key??D,"transform");return m===t?L:m.asArray?D=>[L(D)]:D=>({[t]:L(D)})}let w;b&&R&&!m?.every(L=>{let D;return typeof L=="object"?D=L.name:D=L,r[D]||D===t})&&(w=!0);let y,P=a(L=>{let D;if(L!=null){if($E=L,D=L.value||L.deref?.(),!D&&(L.key===void 0||L.deref)){if(L=YE(L.key??L,A,{transaction:gr(A).getReadTxn(),lazy:m?.length<4},!1,F=>F),L?.then)return L.then(P);D=L?.value}if(w&&(L.metadataFlags&(nu|su)||L.expiresAt&&L.expiresAt<Date.now())){let F=KE(L.key??L,L,A);if(F?.then)return F.then(P)}}if(D==null)return N?Zi.SKIP:D;if(m&&!(m[0]==="*"&&m.length===1)){let F,G=a((ae,re)=>{let ce;typeof ae=="object"?ce=ae.name:ce=ae;let ve=ks?.[ce],ne;if(ve){let fe=I?.[ce];if(fe)if(fe.hasMappings){let le=ve.from?D[ve.from]:Rn(L.key);ne=fe.get(le),ne||(ne=[])}else ne=fe.fromRecord?.(D);else ne=ve(D,A,L);let j=a(le=>{if(le&&typeof le=="object"){let St=ve.definition?.tableClass||We;y||(y={});let Hn=y[ce]||(y[ce]=St.transformEntryForSelect(ce===ae?null:ae.select||(Array.isArray(ae)?ae:null),A,fe,b));if(Array.isArray(le)){let xn=[],Qe=St.transformToOrderedSelect(le,ae.select,typeof ae.sort=="object"&&ae.sort,A,Hn)[Symbol.asyncIterator](),Rr=a(Ar=>{for(;!Ar.done;){if(Ar?.then)return Ar.then(Rr);xn.push(Ar.value),Ar=Qe.next()}re(xn,ce)},"nextValue"),zr=Rr(Qe.next());zr&&(F||(F=[]),F.push(zr));return}else if(le=Hn(le),le?.then){F||(F=[]),F.push(le.then(xn=>re(xn,ce)));return}}re(le,ce)},"handleResolvedValue");ne?.then?(F||(F=[]),F.push(ne.then(j))):j(ne);return}else ne=D[ce],ne&&typeof ne=="object"&&ce!==ae&&(ne=this.transformEntryForSelect(ae.select||ae,A,null)({value:ne}));re(ne,ce)},"selectAttribute"),ie;if(typeof m=="string")G(m,ae=>{ie=ae});else if(Array.isArray(m))if(m.asArray)ie=[],m.forEach((ae,re)=>{ae==="*"?m[re]=D:G(ae,ce=>ie[re]=ce)});else{ie={};let ae=m.forceNulls;for(let re of m)if(re==="*")for(let ce in D)ie[ce]=D[ce];else G(re,(ce,ve)=>{ce===void 0&&ae&&(ce=null),ie[ve]=ce})}else throw new on.ClientError("Invalid select"+m);return F?Promise.all(F).then(()=>ie):ie}return D},"transform");return P}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||at({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=!m.rawEvents,I=lb(We,this[De]??null,function(y,P,L,D){try{let F=P.getValue?.(i,A);if(!F&&P.type==="patch"&&A){let G=i.getEntry(y);G?.version===P.version?F=G.value:F=P.getValue?.(i,!0,L),P.type="put"}this.send({id:y,timestamp:L,value:F,version:P.version,type:P.type,beginTxn:D})}catch(F){ze.error(F)}},m.startTime||0,this[Zr]);this[Zr]&&(I.includeDescendants=!0,m.onlyChildren&&(I.onlyChildren=!0)),m.crossThreads===!1&&(I.crossThreads=!1),m.supportsTransactions&&(I.supportsTransactions=!0);let b=this[De],N=m.previousCount;N>1e3&&(N=1e3);let w=m.startTime;if(this[Zr]){if(w){if(N)throw new on.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:P}of u.getRange({start:w,exclusiveStart:!0})){let L=Ct(P);if(L.tableId!==n)continue;let D=L.recordId;(b==null||oD(b,D))&&I.send({id:D,timestamp:y,...L}),I.startTime=y}}else if(N){let y=[];for(let{key:P,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let D=Ct(L);if(D.tableId!==n)continue;let F=D.recordId;if(b==null||oD(b,F)){let G=D.getValue(i,A,P);if(y.push({id:F,timestamp:P,value:G,version:D.version,type:D.type}),--N<=0)break}}catch(D){ze.error("Error getting history entry",P,D)}for(let P=y.length;P>0;)I.send(y[--P]);y[0]&&(I.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:P,version:L,localTime:D}of i.getRange({start:b??!1,end:b==null?void 0:[b,to.MAXIMUM_KEY],versions:!0}))P&&I.send({id:y,version:L,timestamp:D,value:P})}else{N&&!w&&(w=0);let y=this[Fr]?.localTime;if(y===gh&&(i.cache?.delete(b),this[Fr]=i.getEntry(b),ze.trace("re-retrieved record",y,this[Fr]?.localTime),y=this[Fr]?.localTime),ze.trace("Subscription from",w,"from",b,y),w<y){let P=[],L=y;do{let D=u.get(L);if(D){m.omitCurrent=!0;let F=Ct(D),G=F.getValue(i,A,L);A&&(F.type="put"),P.push({id:b,value:G,timestamp:L,...F}),L=F.previousLocalTime}else break;N&&N--}while(L>w&&N!==0);for(let D=P.length;D>0;)I.send(P[--D]);I.startTime=y}!m.omitCurrent&&this.doesExist()&&I.send({id:b,version:this[ou],timestamp:y,value:this})}return m.listener&&I.on("data",m.listener),I}doesExist(){return!!(this[he]||this[ru])}publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let I=gr(this[be]),b=this[De]||null;Qa(b);let N=this[be];I.addWrite({key:b,store:i,entry:this[Fr],nodeName:N?.nodeName,validate:()=>{this.validate(m)},before:xe.publish?.bind(this,N,b,m),beforeIntermediate:de.publish?.bind(this,N,b,m),commit:(w,y,P)=>{y===void 0&&h&&!E&&QE(),S(b,y?.value??null,y,y?.version||w,0,!0,N,y?.expiresAt,"message",!1,m)}})}validate(m,A){let I,b=a((N,w,y)=>{if(w.type&&N!=null)if(A&&N.__op__&&(N=N.value),w.properties){typeof N!="object"&&(I||(I=[])).push(`Property ${y} must be an object${w.type?" ("+w.type+")":""}`);let P=w.properties;for(let L=0,D=P.length;L<D;L++){let F=P[L],G=b(N[F.name],F,y+"."+F.name);G&&(N[F.name]=G)}}else switch(w.type){case"Int":(typeof N!="number"||N>>0!==N)&&(I||(I=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(I||(I=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(I||(I=[])).push(`Property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(P=>typeof P=="string")||(I||(I=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(I||(I=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(I||(I=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(I||(I=[])).push(`Property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(I||(I=[])).push(`Property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(I||(I=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(w.elements)for(let P=0,L=N.length;P<L;P++){let D=N[P],F=b(D,w.elements,y+"[*]");F&&(N[P]=F)}}else(I||(I=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}w.nullable===!1&&N==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,w=p.length;N<w;N++){let y=p[N];if(!y.relationship&&(!A||y.name in m)){let P=b(m[y.name],y,y.name);P&&(m[y.name]=P)}}if(I)throw new on.ClientError(I.join(". "))}getUpdatedTime(){return this[ou]}wasLoadedFromSource(){return R?!!this[Zp]:void 0}static async addAttributes(m){let A=p.slice(0);for(let I of m){if(!I.name)throw new on.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new on.ClientError("Attribute names cannot include backticks or forward slashes");A.push(I)}return at({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static async removeAttributes(m){let A=p.filter(I=>!m.includes(I.name));return at({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,I=5e3,b=1e3,N;A>I&&!m?.exactCount&&(N=b);let w=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:N}))y!=null&&w++;if(N){let y=w;w=0;for(let{value:ce}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:N}))ce!=null&&w++;let P=N*2,L=(w+y)/P,D=Math.pow((w-y+1)/N/2,2)+L*(1-L)/P,F=Math.max(Math.sqrt(D)*A,1),G=Math.round(L*A),ie=Math.max(G-1.96*F,0),ae=Math.min(G+1.96*F,A),re=Math.pow(10,Math.round(Math.log10(F)));return re>G&&(re=re/10),w=Math.round(G/re)*re,{recordCount:w,estimatedRange:[Math.round(ie),Math.round(ae)]}}return{recordCount:w}}static updatedAttributes(){ks=this.propertyResolvers={$id:(m,A,I)=>({value:I.key}),$updatedtime:(m,A,I)=>I.version,$record:(m,A,I)=>I?{value:m}:m};for(let m of this.attributes){m.resolve=null;let A=m.relationship;if(A)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),AA=!0,A.to)m.elements?.definition?(ks[m.name]=m.resolve=(I,b,N)=>{let w=I[A.from?A.from:t],y=m.elements.definition.tableClass;return N?qo({attribute:A.to,value:w},gr(b).getReadTxn(),!1,y).asArray:y.search([{attribute:A.to,value:w}],b).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,A.from&&(m.resolve.from=A.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(A.from){let I=m.definition||m.elements?.definition;I?(ks[m.name]=m.resolve=(b,N,w)=>{let y=b[A.from];if(y!==void 0){if(m.elements){let P,L=y.map(D=>{let F=w?I.tableClass.primaryStore.getEntry(D,{transaction:gr(N).getReadTxn()}):I.tableClass.get(D,N);return F?.then&&(P=!0),F});return A.filterMissing?P?Promise.all(L).then(D=>D.filter(aD)):L.filter(aD):P?Promise.all(L):L}return w?I.tableClass.primaryStore.getEntry(y,{transaction:gr(N).getReadTxn()}):I.tableClass.get(y,N)}},m.set=(b,N)=>{if(Array.isArray(N)){let w=N.map(y=>y[De]||y[I.tableClass.primaryKey]);b[A.from]=w}else{let w=N[De]||N[I.tableClass.primaryKey];b[A.from]=w}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=A.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}n_(this,this)}static async deleteHistory(m=0){let A;for(let{key:I,value:b}of u.getRange({start:0,end:m}))await iu(),Ct(b).tableId===n&&(A=u.remove(I));await A}static async*getHistory(m=0,A=1/0){for(let{key:I,value:b}of u.getRange({start:m,end:A})){await iu();let N=Ct(b);N.tableId===n&&(yield{id:N.recordId,localTime:I,version:N.version,type:N.type,value:N.getValue(i,!0,I),user:N.user})}}static async getHistoryOfRecord(m){let A=[];if(m==null)throw new Error("An id is required");let I=i.getEntry(m);if(!I)return A;let b=I.localTime;if(!b)throw new Error("The entry does not have a local audit time");let N=0;do{await iu();let w=u.get(b);if(w){let y=Ct(w);A.push({id:y.recordId,localTime:b,version:y.version,type:y.type,value:y.getValue(i,!0,b),user:y.user}),b=y.previousLocalTime}else break}while(N<1e3&&b);return A.reverse()}static cleanup(){K?.remove()}}We.updatedAttributes();let jx=We.prototype;return jx[V2]=!0,d&&We.setTTLExpiration(d/1e3),$&&Zx(),We;function yl(Y,m,A){let I;for(let b in r){let N=r[b],w=N.isIndexing,y=A?.[b],P=m?.[b];if(y===P&&!w)continue;I=!0;let L=N.indexNulls,D=(0,au.getIndexedValues)(P,L);if(D){rD&&N.prefetch(D.map(F=>({key:F,value:Y})),iD);for(let F=0,G=D.length;F<G;F++)N.remove(D[F],Y)}if(D=(0,au.getIndexedValues)(y,L),D){rD&&N.prefetch(D.map(F=>({key:F,value:Y})),iD);for(let F=0,G=D.length;F<G;F++)N.put(D[F],Y)}}return I}a(yl,"updateIndices");function Qa(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>sD)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,to.writeKey)(Y,Y2,0)>sD)throw new Error("Primary key size is too large: "+Y.length);return!0}a(Qa,"checkValidId");function YE(Y,m,A,I,b){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return b(null,Y);let w=i.getEntry(Y,A);return w&&m&&(w?.version>(m.lastModified||0)&&(m.lastModified=w.version),w?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=w.localTime)),b(w,Y)},"whenPrefetched");return I?N():Te>0?(Te--,N()):new Promise((w,y)=>{Te===0?(Te--,i.prefetch([Y],()=>{P(),L()})):(z.push(Y),se.push(L),z.length>Xx&&(Te--,P()));function P(){if(z.length>0){let D=se;i.prefetch(z,()=>{Te===-1?P():Te++;for(let F of D)F()}),z=[],se=[],oe>2&&oe--}else Te=oe,oe<Jx&&oe++}a(P,"prefetch");function L(){try{w(N())}catch(D){y(D)}}a(L,"load")})}a(YE,"loadLocalRecord");function wl(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return K2;let A=m[c],I,b=A?.tables;if(b)return b[s];if(c==="data"&&(I=m[s])&&!I.tables)return I}a(wl,"getTablePermissions");function KE(Y,m,A,I){if(R){let b;if(A.noCache?b=!0:(m?(!m.value||m.metadataFlags&(nu|su)||m.expiresAt&&m.expiresAt<Date.now())&&(b=!0):b=!0,sn(!b,"cache-hit",s)),b){let N=bA(Y,m,A).then(w=>(w?.value?.[he]&&ze.error("Can not assign a record with a record property"),A&&(w?.version>(A.lastModified||0)&&(A.lastModified=w.version),A.lastRefreshed=Date.now()),w));if(A?.onlyIfCached||m?.value&&I?.allowStaleWhileRevalidate?.(m,Y)){if(N.catch(w=>ze.warn(w)),A?.onlyIfCached&&!I.doesExist())throw new on.ServerError("Entry is not cached",504);return}else return N}}}a(KE,"ensureLoadedFromSource");function gr(Y){let m=Y?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new Mi,m.lmdbDb=i,m;m=A}while(!0)}else return new o_}a(gr,"txnForContext");function WE(Y,m,A){if(!Y)return;$E=Y;let I=Y.value||Y.deref?.()||($E=i.getEntry(Y.key))?.value;if(typeof m=="object"){let N=ks,w=I;for(let y=0,P=m.length;y<P;y++){let L=m[y],D=N?.[L];w=D&&w?D(w,A,!0)?.value:w?.[L],N=D?.definition?.tableClass?.propertyResolvers}return w}let b=ks[m];return b?b(I,A):I[m]}a(WE,"getAttributeValue");function OA(Y,m,A,I){let b=gr(A).getReadTxn(),N=I?.length,w={transaction:b,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function P(L,D){let F=L?.value;if(!F)return Zi.SKIP;for(let G=0;G<N;G++)if(!y?.includes(G)&&!I[G](F,L))return Zi.SKIP;return D!==void 0&&(L.key=D),L}if(a(P,"processEntry"),N>0||!Y.hasEntries){let L=Y.map(D=>{if(y=null,typeof D=="object"&&D.key!==void 0)return N>0?P(D):D;if(D==null)return Zi.SKIP;for(let F=0;F<N;F++){let ie=I[F].idFilter;if(ie){if(!ie(D))return Zi.SKIP;y||(y=[]),y.push(F)}}return YE(D,A,w,!1,P)});return Array.isArray(Y)&&(L=L.filter(D=>D!==Zi.SKIP)),L.hasEntries=!0,L}return Y}a(OA,"transformToEntries");async function bA(Y,m,A){let I=m?.metadataFlags,b=m?.version,N,w;if(!i.attemptLock(Y,b,()=>{clearTimeout(w);let D=i.getEntry(Y);!D||!D.value||D.metadataFlags&(nu|su)?N(bA(Y,i.getEntry(Y),A)):N(D)}))return new Promise(D=>{N=D,w=setTimeout(()=>{i.unlock(Y,b)},k2)});let y=m?.value,P={requestContext:A,replacingRecord:y,replacingVersion:b,source:null,resourceCache:A?.resourceCache},L=A?.responseHeaders;return new Promise((D,F)=>{let G;tS(Ke(P,async ie=>{let ae=performance.now(),re,ce,ve;try{for(let le of We.sources)if(le.get&&(!le.get.reliesOnPrototype||le.prototype.get)&&(P.source=le,re=await le.get(Y,P),re))break;ve=I&nu;let fe=P.lastModified||ve&&b;ce=ve||fe>b||!y,fe||(fe=(0,au.getNextMonotonicTime)());let j=performance.now()-ae;if(xr(j,"cache-resolution",s),L&&L.append("Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`),ie.timestamp=fe,d&&!P.expiresAt&&(P.expiresAt=Date.now()+d),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)}G=!0,D({version:fe,value:re})}catch(fe){fe.message+=` while resolving record ${Y} for ${s}`,y&&((fe.code==="ECONNRESET"||fe.code==="ECONNREFUSED"||fe.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(fe.statusCode===500||fe.statusCode===502||fe.statusCode===503||fe.statusCode===504))?(D({version:b,value:y}),ze.trace(fe.message,"(returned stale record)")):F(fe),P.transaction.abort();return}if(A?.noCacheStore){P.transaction.abort();return}gr(P).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(fe,j)=>{if(j?.version!==b)return;let le=yl(Y,y,re);re?(de.put?.(P,Y,re),S(Y,re,j,fe,0,E&&ce||null,P,P.expiresAt,"put",!!ve)):(de.delete?.(P,Y),E||h?S(Y,null,j,fe,0,E&&ce||null,P,0,"delete",!!ve):i.remove(Y,b))}})}),()=>{i.unlock(Y,b)},ie=>{i.unlock(Y,b),G&&ze.error("Error committing cache update",ie)})})}a(bA,"getFromSource");function QE(){if(It!==bl&&(bl=It,(0,eo.getWorkerIndex)()===(0,eo.getWorkerCount)()-1)){if(Nl&&clearTimeout(Nl),!It)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())/It)*It+Y.getTime(),A=a(I=>{ze.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Nl=setTimeout(()=>H=H.then(async()=>{if(A(Math.max(I+It,Date.now())),i.rootStore.status!=="open"){clearTimeout(Nl);return}let b=50,N=new Array(b),w=0;ze.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:P,value:L,version:D,expiresAt:F}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let G;L===null&&!E&&D+G2<Date.now()?G=i.remove(P,D):F&&F+f<Date.now()&&(G=We.evict(P,L,D),y++),G&&(await N[w],N[w]=G.catch(ie=>{ze.error("Cleanup error",ie)}),++w>=b&&(w=0)),await iu()}ze.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){ze.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(QE,"scheduleCleanup");function NA(){K=u?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(NA,"addDeleteRemoval");function Zx(){(0,eo.getWorkerIndex)()===0&&setInterval(async()=>{try{let Y=$.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${$} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let I=i.getEntry(A);I?.value?.[Y]<Date.now()&&We.evict(A,I.value,I.version),await iu()}}catch(Y){ze.error("Error in evicting old records",Y)}},q2).unref()}a(Zx,"runRecordExpirationEviction")}function eS(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 iD(){}function W2(e){uD=e}function fd(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!Q2.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,hd.autoCast)(e):e}function oD(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 tS(e,t,r){return e?.then?e.then(t,r):t(e)}function Ed(e,t){e[Fr]=t,e[he]=t?.value??null,e[ou]=t?.version}function aD(e){return e!=null}var Mn,Zi,au,cD,lu,on,cu,uu,ze,to,eo,hd,F2,uD,q2,G2,rD,k2,ou,V2,Fr,ru,nD,$2,Zp,aa,nu,su,Y2,sD,K2,C_e,Q2,iu,pd=Oe(()=>{Mn=x(U()),Zi=require("lmdb"),au=x(Nr()),cD=require("lodash");gn();Mh();lu=x(Z());fb();on=x(ee()),cu=x(Ts()),uu=x(bn());Ne();l_();ze=x(W());i_();Ui();to=require("ordered-binary"),eo=x(je());Ci();hd=x(J());vo();bs();Jl();F2=new Uint8Array(9);F2[8]=192;q2=6e4,G2=864e5;lu.initSync();rD=lu.get(Mn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),k2=1e4,ou=Symbol.for("version"),V2=Symbol.for("incremental-update"),Fr=Symbol("entry"),ru=Symbol("is-saving"),nD=1,$2=2,Zp=Symbol("loaded-from-source"),aa={isNotification:!0,ensureLoaded:!1},nu=1,su=8,Y2=Buffer.allocUnsafeSlow(8192),sD=1978,K2={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},C_e=(0,hd.convertToMS)(lu.get(Mn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(md,"makeTable");a(eS,"attributesAsObject");a(iD,"noop");a(W2,"setServerUtilities");Q2=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(fd,"coerceType");a(oD,"isDescendantId");iu=a(()=>new Promise(setImmediate),"rest");a(tS,"when");a(Ed,"updateResource");a(aD,"exists")});var qe={};Fe(qe,{database:()=>kc,databases:()=>tt,dropDatabase:()=>_p,dropTableMeta:()=>e4,getDatabases:()=>yn,getTables:()=>z2,onUpdatedTable:()=>aS,readMetaDb:()=>_u,resetDatabases:()=>J2,table:()=>at,tables:()=>Gr});function z2(){return Ad||yn(),Gr||{}}function yn(){if(Ad)return tt;Ad=!0,la=new Map;let e=(0,Kt.getHdbBasePath)()&&(0,Je.join)((0,Kt.getHdbBasePath)(),kr.DATABASES_DIR_NAME),t=(0,Kt.get)(kr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Kt.get)(kr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,qr.existsSync)(e)?e:(0,Je.join)((0,Kt.getHdbBasePath)(),kr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,qr.existsSync)(e))for(let r of(0,qr.readdirSync)(e,{withFileTypes:!0})){let n=(0,Je.basename)(r.name,".mdb");r.isFile()&&(0,Je.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&_u((0,Je.join)(e,r.name),null,n)}if((0,qr.existsSync)((0,ua.getBaseSchemaPath)())){for(let r of(0,qr.readdirSync)((0,ua.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Je.join)((0,ua.getBaseSchemaPath)(),r.name),s=(0,Je.join)((0,ua.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,qr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Je.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Je.join)(s,i.name);_u((0,Je.join)(n,i.name),(0,Je.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,qr.existsSync)(s))for(let o of(0,qr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Je.extname)(o.name).toLowerCase()===".mdb"&&_u((0,Je.join)(s,o.name),(0,Je.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Je.join)(c.path,(0,Je.basename)(o+".mdb"));(0,qr.existsSync)(u)&&_u(u,o,r,null,!0)}}for(let r in tt){let n=la.get(r);if(n){let s=tt[r];r.includes("delete")&&an.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(an.trace(`delete table class ${i}`),delete s[i])}else if(delete tt[r],r==="data"){for(let s in Gr)delete Gr[s];delete Gr[Od]}}return la=null,tt}}function J2(){Ad=!1;for(let[,e]of ii)e.needsDeletion=!0;yn();for(let[e,t]of ii)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ii.delete(e));return tt}function _u(e,t,r=iS,n,s){let i=new nS.default(e,!1);try{let o=ii.get(e);o?o.needsDeletion=!1:(o=(0,Td.open)(i),ii.set(e,o));let c=new ro.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Sd.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,qr.existsSync)(n)&&(i.path=n,_=(0,Td.open)(i),_.isLegacy=!0):_=zl(o));let l=fD(r),d=l[Od],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.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 O=f.get(p);O||f.set(p,O={attributes:[]}),(S==null||h.is_hash_attribute)&&(O.primary=h),S!=null&&O.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let z of p)if(z.is_hash_attribute||z.isPrimaryKey){S=z;break}if(!S){an.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let O=l[E],g={},R=[],B,H,v=typeof S.audit=="boolean"?S.audit:(0,Kt.get)(kr.CONFIG_PARAMS.LOGGING_AUDITLOG),M=S.trackDeletes,$=S.expiration,K=S.eviction;if(O)g=O.indices,R=O.attributes,O.schemaVersion++;else{B=S.tableId,B?B>=(u.get(ca)||0)&&u.putSync(ca,B+1):(S.tableId=B=u.get(ca),B||(B=1),u.putSync(ca,B+1),u.putSync(S.key,S));let z=new ro.default(!S.is_hash_attribute,S.is_hash_attribute);H=Yl(o.openDB(S.key,z)),H.rootStore=o,H.tableId=B}for(let z of p){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!g[z.name]){let Te=new ro.default(!z.is_hash_attribute,z.is_hash_attribute);g[z.name]=o.openDB(z.key,Te),g[z.name].indexNulls=z.indexNulls}let se=R.find(Te=>Te.name===z.name);se?R.splice(R.indexOf(se),1,z):R.push(z)}}catch(se){an.error("Error trying to update attribute",z,R,g,se)}}if(!O){O=ED(l,E,md({primaryStore:H,auditStore:_,audit:v,expirationMS:$&&$*1e3,evictionMS:K&&K*1e3,trackDeletes:M,tableName:E,tableId:B,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:g,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),O.schemaVersion=1;for(let z of oS)z(O)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function fD(e){let t=tt[e];if(t||(e==="data"?t=tt[e]=Gr:e==="system"?Object.defineProperty(tt,"system",{value:t=Object.create(null),configurable:!0}):t=tt[e]=Object.create(null)),la&&!la.has(e)){let r=new Set;t[Od]=r,la.set(e,r)}return t}function ED(e,t,r){return e[t]=r,r}function kc({database:e,table:t}){e||(e=iS),yn();let r=fD(e),n=(0,Je.join)((0,Kt.getHdbBasePath)(),kr.DATABASES_DIR_NAME),s=(0,Kt.get)(kr.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,Kt.get)(kr.CONFIG_PARAMS.STORAGE_PATH)||((0,qr.existsSync)(n)?n:(0,Je.join)((0,Kt.getHdbBasePath)(),kr.LEGACY_DATABASES_DIR_NAME));let o=(0,Je.join)(n,(i?t:e)+".mdb"),c=ii.get(o);if(!c){let u=new nS.default(o,!1);c=(0,Td.open)(u),ii.set(o,c)}return c}async function _p(e){if(!tt[e])throw new Error("Schema does not exist");let t=tt[e];for(let r in t){let s=t[r].primaryStore.rootStore;ii.delete(s.path),s.status==="open"&&(await s.close(),await lD.remove(s.path))}if(e==="data"){for(let r in Gr)delete Gr[r];delete Gr[Od]}delete tt[e]}function at({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=iS);let l=kc({database:t,table:e}),d=tt[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let O=new ro.default(!1);for(let M of i)M.attribute?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let g,R;if(f){if(E=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=l.auditStore;M||(M=zl(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Kt.get)(kr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),an.trace(`${e} table loading, opening primary store`);let $=new ro.default(!1,!0),K=e+"/",z=Yl(l.openDB(K,$));z.rootStore=l,S=l.dbisDb=l.openDB(Sd.INTERNAL_DBIS_NAME,O),z.tableId=S.get(ca),z.tableId||(z.tableId=1),S.putSync(ca,z.tableId+1),h.tableId=z.tableId,f=ED(d,e,md({primaryStore:z,auditStore:M,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,g=!0,v(),S.put(K,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Sd.INTERNAL_DBIS_NAME,O)),f.dbisDB=S;let B=[];for(let{key:M,value:$}of S.getRange({start:!0})){let[K,z]=M.toString().split("/");if(z===""&&(z=$.name),z){if(K!==e)continue}else z=K;if(!i.find(Te=>Te.name===z)?.indexed&&$.indexed&&!$.isPrimaryKey){v(),g=!0,S.remove(M);let Te=f.indices[K];Te&&B.push(Te)}}let H=[];try{for(let M of i||[]){if(M.relationship)continue;let $=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:$,configurable:!0});let K=S.get($);if(M.isPrimaryKey){if(K=K||S.get($=e+"/")||{},o!==f.audit||(+r||void 0)!==(+K.expiration||void 0)||(+n||void 0)!==(+K.eviction||void 0)){let se=Object.assign({},K);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),n&&(se.eviction=+n),g=!0,v(),S.put($,se)}continue}K?.attribute&&!K.name&&(K.indexed=!0);let z=!K||K.type!==M.type||K.indexed!==M.indexed||JSON.stringify(K.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(K.elements)!==JSON.stringify(M.elements);if(M.indexed){let se=new ro.default(!0,!1),Te=l.openDB($,se);(z||K.indexingPID&&K.indexingPID!==process.pid||K.restartNumber<du.workerData?.restartNumber)&&(g=!0,v(),K=S.get($),(z||K.indexingPID&&K.indexingPID!==process.pid||K.restartNumber<du.workerData?.restartNumber)&&(g=!0,M.lastIndexedKey=K?.lastIndexedKey||!1,M.indexingPID=process.pid,Te.isIndexing=!0,Object.defineProperty(M,"dbi",{value:Te}),M.indexNulls===void 0&&(M.indexNulls=!0),H.push(M)),S.put($,M)),K?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),Te.indexNulls=M.indexNulls,p[M.name]=Te}else z&&(g=!0,v(),S.put($,M))}}finally{R&&R()}if(g&&(f.schemaVersion++,f.updatedAttributes()),an.trace(`${e} table loading, running index`),H.length>0||B.length>0?f.indexingOperation=Z2(f,H,B):g&&gd.signalSchemaChange(new Rd.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,g)for(let M of oS)M(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),an.trace(`${e} table loaded`),f;function v(){R||l.transactionSync(()=>({then(M){R=M}}))}a(v,"startTxn")}async function Z2(e,t,r){try{let n=e.schemaVersion;await gd.signalSchemaChange(new Rd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,_D.getIndexedValues)(l[h]);if(p)for(let S=0,O=p.length;S<O;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,an.error(f)}),du.workerData&&du.workerData.restartNumber!==dD.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>X2?await s:u>j2&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await gd.signalSchemaChange(new Rd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){an.error("Error in indexing",n)}}function e4({table:e,database:t}){let r=kc({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 aS(e){oS.push(e)}var Kt,Sd,Td,Je,qr,ua,ro,nS,kr,lD,sS,_D,gd,Rd,du,an,dD,iS,Od,Gr,tt,ca,oS,Ad,ii,la,X2,j2,Ne=Oe(()=>{Kt=x(Z()),Sd=x(lt()),Td=require("lmdb"),Je=require("path"),qr=require("fs"),ua=x(Ye());pd();ro=x(h_()),nS=x(p_()),kr=x(U()),lD=x(require("fs-extra")),sS=require("../index"),_D=x(Nr()),gd=x(Ts()),Rd=x(bn()),du=require("worker_threads"),an=x(W()),dD=x(je());Ci();vo();iS="data",Od=Symbol("defined-tables");(0,Kt.initSync)();Gr=Object.create(null),tt=Object.create(null);(0,sS._assignPackageExport)("databases",tt);(0,sS._assignPackageExport)("tables",Gr);ca=Symbol.for("next-table-id"),oS=[],ii=new Map;a(z2,"getTables");a(yn,"getDatabases");a(J2,"resetDatabases");a(_u,"readMetaDb");a(fD,"ensureDB");a(ED,"setTable");a(kc,"database");a(_p,"dropDatabase");a(at,"table");X2=1e3,j2=10;a(Z2,"runIndexing");a(e4,"dropTableMeta");a(aS,"onUpdatedTable")});var J=T((x_e,ID)=>{"use strict";var oi=require("path"),TD=require("fs-extra"),ir=W(),hD=require("fs-extra"),bd=require("os"),t4=require("net"),r4=require("recursive-iterator"),rt=U(),n4=sO(),mD=require("papaparse"),Nd=require("moment"),{inspect:s4}=require("util"),pD=require("is-number"),H_e=require("lodash"),i4=require("minimist"),o4=require("https"),a4=require("http"),{hdb_errors:yd}=ee(),c4=/^((\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)))$/,gD=require("util").promisify(setTimeout),u4=100,l4=5,_4="",d4=4,SD={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};ID.exports={isEmpty:Vr,isEmptyOrZeroLength:Zn,arrayHasEmptyValues:h4,arrayHasEmptyOrZeroLengthValues:m4,buildFolderPath:p4,isBoolean:RD,errorizeMessage:f4,stripFileExtension:T4,autoCast:g4,autoCastJSON:AD,autoCastJSONDeep:uS,removeDir:R4,compareVersions:A4,isCompatibleDataVersion:O4,escapeRawValue:b4,unescapeValue:N4,stringifyProps:y4,timeoutPromise:I4,isClusterOperation:D4,getClusterUser:M4,checkGlobalSchemaTable:L4,getHomeDir:bD,getPropsFilePath:w4,promisifyPapaParse:U4,removeBOM:ND,createEventPromise:P4,checkProcessRunning:v4,checkSchemaTableExist:B4,checkSchemaExists:yD,checkTableExists:wD,getStartOfTomorrowInSeconds:H4,getLimitKey:x4,isObject:S4,isNotEmptyAndHasValue:E4,autoCasterIsNumberCheck:OD,backtickASTSchemaItems:F4,isPortTaken:C4,createForkArgs:q4,autoCastBoolean:G4,async_set_timeout:gD,getTableHashAttribute:k4,doesSchemaExist:V4,doesTableExist:$4,stringifyObj:Y4,ms_to_time:K4,changeExtension:W4,getEnvCliRootPath:lS,noBootFile:Q4,httpRequest:z4,transformReq:J4,convertToMS:X4,PACKAGE_ROOT:rt.PACKAGE_ROOT};function f4(e){return e instanceof Error?e:new Error(e)}a(f4,"errorizeMessage");function Vr(e){return e==null}a(Vr,"isEmpty");function E4(e){return!Vr(e)&&(e||e===0||e===""||RD(e))}a(E4,"isNotEmptyAndHasValue");function Zn(e){return Vr(e)||e.length===0||e.size===0}a(Zn,"isEmptyOrZeroLength");function h4(e){if(Vr(e))return!0;for(let t=0;t<e.length;t++)if(Vr(e[t]))return!0;return!1}a(h4,"arrayHasEmptyValues");function m4(e){if(Zn(e))return!0;for(let t=0;t<e.length;t++)if(Zn(e[t]))return!0;return!1}a(m4,"arrayHasEmptyOrZeroLengthValues");function p4(...e){try{return e.join(oi.sep)}catch{console.error(e)}}a(p4,"buildFolderPath");function RD(e){return Vr(e)?!1:e===!0||e===!1}a(RD,"isBoolean");function S4(e){return Vr(e)?!1:typeof e=="object"}a(S4,"isObject");function T4(e){return Zn(e)?_4:e.slice(0,-d4)}a(T4,"stripFileExtension");function g4(e){return Vr(e)||e===""||typeof e!="string"?e:SD[e]!==void 0?SD[e]:OD(e)===!0?Number(e):c4.test(e)?new Date(e):e}a(g4,"autoCast");function AD(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(AD,"autoCastJSON");function uS(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=uS(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=uS(r);n!==r&&(e[t]=n)}return e}else return AD(e)}a(uS,"autoCastJSONDeep");function OD(e){if(e.startsWith("0.")&&pD(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&pD(e))}a(OD,"autoCasterIsNumberCheck");async function R4(e){if(Zn(e))throw new Error(`Directory path: ${e} does not exist`);try{await hD.emptyDir(e),await hD.remove(e)}catch(t){throw ir.error(`Error removing files in ${e} -- ${t}`),t}}a(R4,"removeDir");function A4(e,t){if(Zn(e)){ir.info("Invalid current version sent as parameter.");return}if(Zn(t)){ir.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(A4,"compareVersions");function O4(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(O4,"isCompatibleDataVersion");function b4(e){if(Vr(e))return e;let t=String(e);return t==="."?rt.UNICODE_PERIOD:t===".."?rt.UNICODE_PERIOD+rt.UNICODE_PERIOD:t.replace(rt.FORWARD_SLASH_REGEX,rt.UNICODE_FORWARD_SLASH)}a(b4,"escapeRawValue");function N4(e){if(Vr(e))return e;let t=String(e);return t===rt.UNICODE_PERIOD?".":t===rt.UNICODE_PERIOD+rt.UNICODE_PERIOD?"..":String(e).replace(rt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(N4,"unescapeValue");function y4(e,t){if(Vr(e))return ir.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+bd.EOL}!Zn(n)&&n[0]===";"?r+=" "+n+s+bd.EOL:Zn(n)||(r+=n+"="+s+bd.EOL)}catch{ir.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(y4,"stringifyProps");function bD(){let e;try{e=bd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(bD,"getHomeDir");function w4(){let e=oi.join(bD(),rt.HDB_HOME_DIR_NAME,rt.BOOT_PROPS_FILE_NAME);return TD.existsSync(e)||(e=oi.join(__dirname,"../","hdb_boot_properties.file")),e}a(w4,"getPropsFilePath");function I4(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(I4,"timeoutPromise");async function C4(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=t4.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(C4,"isPortTaken");function D4(e){try{return rt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ir.error(`Error checking operation against cluster ops ${t}`)}return!1}a(D4,"isClusterOperation");function L4(e,t){let r=(Ne(),te(qe)).getDatabases();if(!r[e])return yd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return yd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(L4,"checkGlobalSchemaTable");function M4(e,t){if(Vr(t)){ir.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Vr(e)||Zn(e)){ir.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){ir.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){ir.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(M4,"getClusterUser");function U4(){mD.parsePromise=function(e,t,r){return new Promise(function(n,s){mD.parse(e,{header:!0,transformHeader:ND,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(U4,"promisifyPapaParse");function ND(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(ND,"removeBOM");function P4(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;ir.info(`Got cluster status event response: ${s4(s)}`);try{i.cancel()}catch{ir.error("Error trying to cancel timeout.")}n(s)})})}a(P4,"createEventPromise");async function v4(e){let t=!0,r=0;do await gD(u4*r++),(await n4.findPs(e)).length>0&&(t=!1);while(t&&r<l4);if(t)throw new Error(`process ${e} was not started`)}a(v4,"checkProcessRunning");function B4(e,t){let r=yD(e);if(r)return r;let n=wD(e,t);if(n)return n}a(B4,"checkSchemaTableExist");function yD(e){let{getDatabases:t}=(Ne(),te(qe));if(!t()[e])return yd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yD,"checkSchemaExists");function wD(e,t){let{getDatabases:r}=(Ne(),te(qe));if(!r()[e][t])return yd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wD,"checkTableExists");function H4(){let e=Nd().utc().add(1,rt.MOMENT_DAYS_TAG).startOf(rt.MOMENT_DAYS_TAG).unix(),t=Nd().utc().unix();return e-t}a(H4,"getStartOfTomorrowInSeconds");function x4(){return Nd().utc().format("DD-MM-YYYY")}a(x4,"getLimitKey");function F4(e){try{let t=new r4(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){ir.error("Got an error back ticking items."),ir.error(t)}}a(F4,"backtickASTSchemaItems");function q4(e){return[e]}a(q4,"createForkArgs");function G4(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(G4,"autoCastBoolean");function k4(e,t){let{getDatabases:r}=(Ne(),te(qe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(k4,"getTableHashAttribute");function V4(e){let{getDatabases:t}=(Ne(),te(qe));return t()[e]!==void 0}a(V4,"doesSchemaExist");function $4(e,t){let{getDatabases:r}=(Ne(),te(qe));return r()[e]?.[t]!==void 0}a($4,"doesTableExist");function Y4(e){try{return JSON.stringify(e)}catch{return e}}a(Y4,"stringifyObj");function K4(e){let t=Nd.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(K4,"ms_to_time");function W4(e,t){let r=oi.basename(e,oi.extname(e));return oi.join(oi.dirname(e),r+t)}a(W4,"changeExtension");function lS(){if(process.env[rt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[rt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=i4(process.argv);if(e[rt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[rt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(lS,"getEnvCliRootPath");var cS;function Q4(){if(cS)return cS;let e=lS();lS()&&TD.pathExistsSync(oi.join(e,rt.HDB_CONFIG_FILE))&&(cS=!0)}a(Q4,"noBootFile");function z4(e,t){let r;return e.protocol==="http:"?r=a4:r=o4,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(z4,"httpRequest");function J4(e){if(!e.schema&&!e.database){e.schema=rt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(J4,"transformReq");function X4(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(X4,"convertToMS")});var Z=T((q_e,MD)=>{"use strict";var _S=require("fs-extra"),no=require("path"),CD=require("os"),j4=require("properties-reader"),Eu=W(),fu=J(),_e=U(),wd=vr(),Z4="Error initializing environment manager",Id="BOOT_PROPS_FILE_PATH",DD=!1,e3={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ns={};MD.exports={BOOT_PROPS_FILE_PATH:Id,getHdbBasePath:t3,setHdbBasePath:r3,get:LD,initSync:s3,setProperty:Me,initTestEnvironment:i3};function t3(){return Ns[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(t3,"getHdbBasePath");function r3(e){Ns[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(r3,"setHdbBasePath");function LD(e){let t=wd.getConfigValue(e);return t===void 0?Ns[e]:t}a(LD,"get");function Me(e,t){e3[e]&&(Ns[e]=t),wd.updateConfigObject(e,t)}a(Me,"setProperty");function n3(){let e;try{e=fu.getPropsFilePath(),_S.accessSync(e,_S.constants.F_OK|_S.constants.R_OK),DD=!0;let t=j4(e);return Ns[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),Ns[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ns[Id]=e,!0}catch{return Eu.trace(`Environment manager found no properties file at ${e}`),!1}}a(n3,"doesPropFileExist");function s3(e=!1){try{(DD||n3()||fu.noBootFile())&&(wd.initConfig(e),Ns[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=wd.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Eu.error(Z4),Eu.error(t),console.error(t),process.exit(1)}}a(s3,"initSync");function i3(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=no.join(__dirname,"../../","unitTests");Ns[Id]=no.join(u,"hdb_boot_properties.file"),Me(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,no.join(u,"settings.test")),Me(_e.HDB_SETTINGS_NAMES.INSTALL_USER,CD.userInfo()?CD.userInfo().username:void 0),Me(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Me(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,no.join(u,"envDir","log")),Me(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Me(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Me(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Me(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,no.join(u,"envDir")),Me(_e.CONFIG_PARAMS.STORAGE_PATH,no.join(u,"envDir")),s&&(Me(_e.CONFIG_PARAMS.HTTP_SECUREPORT,LD(_e.CONFIG_PARAMS.HTTP_PORT)),Me(_e.CONFIG_PARAMS.HTTP_PORT,null)),Me(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Me(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Me(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,fu.isEmpty(i)?!1:i),Me(_e.CONFIG_PARAMS.HTTP_CORS,fu.isEmpty(i)?!1:i),Me(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Me(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Me(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Me(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Me(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,no.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Me(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,fu.isEmpty(c)?!1:c),o&&(Me("CORS_ACCESSLIST",o),Me(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Me(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Me(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Me(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Me(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Me(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Me(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Id}. Please check your boot props and settings files`;Eu.fatal(r),Eu.error(t)}}a(i3,"initTestEnvironment")});var ES={};Fe(ES,{loadGQLSchema:()=>c3,start:()=>fS,startOnMainThread:()=>a3});function fS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let H=function(v){if(v.kind==="NonNullType"){let K=H(v.type);return K.nullable=!1,K}if(v.kind==="ListType")return{type:"array",elements:H(v.type)};let $={type:v.name?.value};return Object.defineProperty($,"location",{value:v.loc.startToken}),$};a(H,"getProperty");let O=S.name.value,g=[],R={table:null,database:null,properties:g};f.set(O,R);for(let v of S.directives){if(v.name.value==="table"){for(let M of v.arguments)R[M.name.value]=M.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=O),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(v.name.value==="sealed"&&(R.sealed=!0),v.name.value==="export"){R.export=!0;for(let M of v.arguments)M.name.value==="name"&&(R.export={name:M.value.value})}}let B=!1;for(let v of S.fields){let M=H(v.type);M.name=v.name.value,g.push(M);for(let $ of v.directives)if($.name.value==="primaryKey")B?console.warn("Can not define two attributes as a primary key"):(M.isPrimaryKey=!0,B=!0);else if($.name.value==="indexed")M.indexed=!0;else if($.name.value==="relationship"){let K={};for(let z of $.arguments)K[z.name.value]=z.value.value;M.relationship=K}else if($.name.value==="createdTime")M.assignCreatedTime=!0;else if($.name.value==="updatedTime")M.assignUpdatedTime=!0;else if($.name.value==="expiresAt")M.expiresAt=!0;else if($.name.value==="allow"){let K=M.authorizedRoles=[];for(let z of $.arguments)z.name.value==="role"&&K.push(z.value.value)}}R.type=O,O==="Query"&&(h=R)}function p(S){let O=f.get(S.type);O?(Object.defineProperty(S,"properties",{value:O.properties}),Object.defineProperty(S,"definition",{value:O})):S.type==="array"?p(S.elements):o3.includes(S.type)||(0,UD.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 f.values())for(let O of S.properties)p(O);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,dS.dirname)(n),S.tableClass):i.set((0,dS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var dS,UD,o3,a3,c3,PD=Oe(()=>{dS=require("path");Ne();UD=x(je()),o3=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(fS,"start");a3=fS,c3=fS({ensureTable:at}).handleFile});async function Cd(e){return u3?(hu||(hu=l3(d3)),(await(await hu).import(e)).namespace):import(e)}async function l3(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),hu=new Compartment({console,Math,Date,fetch:_3,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,BD.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:vt,tables:Gr,databases:tt})}};let n=await(0,vD.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),hu}function _3(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 d3(){return{Resource:vt,tables:Gr}}var vD,BD,u3,hu,hS=Oe(()=>{gn();Ne();vD=require("fs/promises"),BD=require("path"),u3=!1;a(Cd,"secureImport");a(l3,"getCompartment");a(_3,"secureOnlyFetch");a(d3,"getGlobalVars")});var pS={};Fe(pS,{handleFile:()=>f3});async function f3(e,t,r,n){let s=new Map,i=(0,HD.pathToFileURL)(r).toString(),o=await Cd(i);u(o.default)&&n.set((0,mS.dirname)(t),o.default),c(o,(0,mS.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var HD,mS,xD=Oe(()=>{HD=require("url");hS();mS=require("path");a(f3,"handleFile")});var TS={};Fe(TS,{start:()=>E3});function E3({resources:e}){e.set("login",SS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var SS,FD=Oe(()=>{gn();a(E3,"start");SS=class extends vt{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 KD={};Fe(KD,{parse:()=>RS,streamAsJSON:()=>mu,stringify:()=>so});function mu(e){return new gS({value:e})}function qD(e){return console.error(e),JSON.stringify(e.toString())}function GD(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function so(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===$D)return YD(e);if(t.resolution)return t.resolution.then(()=>so(e));throw t}}function YD(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+=YD(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+so(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function RS(e){return p3.test(e)?h3.parse(e):JSON.parse(e)}var kD,VD,h3,m3,$D,gS,p3,AS=Oe(()=>{kD=require("stream"),VD=x(require("json-bigint-fixes")),h3=(0,VD.default)({useNativeBigInt:!0}),m3=1e4,$D={};BigInt.prototype.toJSON=function(){throw $D};a(mu,"streamAsJSON");gS=class extends kD.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),qD)}catch(s){yield qD(s)}else yield so(t)}else yield so(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);GD(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>m3?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 GD(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(qD,"handleError");a(GD,"when");a(so,"stringify");a(YD,"jsStringify");p3=/-?\d{16,}/;a(RS,"parse")});var Dd=T((Z_e,WD)=>{"use strict";var S3=In();WD.exports={writeTransaction:T3};function T3(e,t,r){return S3.writeTransaction(e,t,r)}a(T3,"writeTransaction")});var XD=T((rde,JD)=>{"use strict";var g3=tn(),R3=Zs(),QD=W(),A3=rn(),tde=Dd(),O3=require("clone"),bS=require("alasql"),b3=G_(),zD=require("util"),N3=zD.promisify(R3.getTableSchema),y3=zD.promisify(g3.search),w3=U(),OS=J();b3(bS);JD.exports={update:C3};var I3="There was a problem performing this update. Please check the logs and try again.";async function C3({statement:e,hdb_user:t}){let r=await N3(e.table.databaseid,e.table.tableid),n=D3(e.columns);OS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=O3(s),c=OS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=bS.parse(u).statements[0],l=await y3(_),d=L3(n,l);return M3(o,d,t)}a(C3,"update");function D3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=bS.compile(`SELECT ${r.expression.toString()} AS [${w3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw QD.error(t),new Error(I3)}}a(D3,"createUpdateRecord");function L3(e,t){return OS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(L3,"buildUpdateRecords");async function M3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await A3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){QD.error(`Error delete new_attributes from update response: ${i}`)}return s}a(M3,"updateRecords")});var ZD=T((ode,jD)=>{var U3=require("alasql"),P3=tn(),v3=W(),B3=In(),yS=require("util"),NS=J(),H3=U(),x3=Zs(),sde=Dd(),ide=rn(),F3="record",q3="successfully deleted",G3=yS.callbackify(Y3),k3=yS.promisify(P3.search),V3=yS.promisify(x3.getTableSchema);jD.exports={convertDelete:G3};function $3(e){return`${e.deleted_hashes.length} ${F3}${e.deleted_hashes.length===1?"":"s"} ${q3}`}a($3,"generateReturnMessage");async function Y3({statement:e,hdb_user:t}){let r=await V3(e.table.databaseid,e.table.tableid);NS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=NS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=U3.parse(o).statements[0],u={operation:H3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await k3(c);let _=await B3.deleteRecords(u);return NS.isEmptyOrZeroLength(_.message)&&(_.message=$3(_)),delete _.txn_time,_}catch(_){throw v3.error(_),_.hdb_code?_.message:_}}a(Y3,"convertDelete")});var sL=T((cde,nL)=>{"use strict";var K3=Gi(),{hdb_errors:eL}=ee(),{getDatabases:tL}=(Ne(),te(qe));nL.exports={checkSchemaExists:rL,checkSchemaTableExists:W3,schema_describe:K3};async function rL(e){if(!tL()[e])return eL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(rL,"checkSchemaExists");async function W3(e,t){let r=await rL(e);if(r)return r;if(!tL()[e][t])return eL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(W3,"checkSchemaTableExists")});var pu=T((lde,Q3)=>{Q3.exports={name:"harperdb",version:"4.3.0-beta.3",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},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/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@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.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","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.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.10.0-beta.1",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},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.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",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.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",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.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Ot=T((hde,bL)=>{"use strict";var Ht=Z();Ht.initSync();var z3=require("fs-extra"),J3=require("semver"),gu=require("path"),{monotonicFactory:X3}=require("ulidx"),oL=X3(),j3=require("util"),aL=require("child_process"),Z3=j3.promisify(aL.exec),eX=aL.spawn,ye=et(),Pe=U(),DS=J(),$r=W(),Ld=Os(),tX=Dd(),Su=vr(),{onMessageByType:rX}=je(),{isMainThread:nX}=require("worker_threads"),{Encoder:sX,decode:LS}=require("msgpackr"),cL=new sX,{isEmpty:co}=DS,uL=nn(),iX=48*36e11,oX=5e9;nX&&rX(Pe.ITC_EVENT_TYPES.RESTART,()=>{cn=void 0,ao=void 0});var{connect:aX,StorageType:lL,RetentionPolicy:_L,AckPolicy:Md,DeliverPolicy:Ud,DiscardPolicy:cX,NatsConnection:_de,JetStreamManager:dde,JetStreamClient:fde,StringCodec:Ede,JSONCodec:uX,createInbox:MS,headers:lX,ErrorCode:iL}=require("nats"),{PACKAGE_ROOT:_X}=U(),dX=pu(),{recordAction:fX}=(bs(),te(tu)),dL=uX(),EX="clustering",hX=dX.engines[ye.NATS_SERVER_NAME],mX=gu.join(_X,"dependencies"),CS=gu.join(mX,`${process.platform}-${process.arch}`,ye.NATS_BINARY_NAME),wS,IS,Tu,io,oo;bL.exports={runCommand:fL,checkNATSServerInstalled:pX,createConnection:US,getConnection:Pd,getJetStreamManager:Ru,getJetStream:hL,getNATSReferences:or,getServerList:TX,createLocalStream:PS,listStreams:mL,deleteLocalStream:gX,getServerConfig:Au,listRemoteStreams:RX,viewStream:AX,viewStreamIterator:OX,publishToStream:bX,createWorkQueueStream:NX,addSourceToWorkStream:SL,request:wX,removeSourceFromWorkStream:gL,reloadNATS:vS,reloadNATSHub:IX,reloadNATSLeaf:CX,extractServerName:TL,requestErrorHandler:DX,updateWorkStream:LX,createLocalTableStream:AL,createTableStreams:MX,purgeTableStream:OL,purgeSchemaTableStreams:UX,getStreamInfo:PX,updateLocalStreams:BX,closeConnection:SX,getJsmServerName:Ou,addNatsMsgHeader:pL,updateIngestStreamConsumer:yX,clearClientCache:EL};async function fL(e,t=void 0){let{stdout:r,stderr:n}=await Z3(e,{cwd:t});if(n)throw new Error(n.replace(`
8
+ `,t)}var ji,$C,YC,jc,Jp,_d,Zc,Xp,dd,KC,ld,WC,QC,zC,JC,HC,xC,XC,U2,P2,qC,GC,ZC,kC,VC,B2,tD,si,H2,bs=Oe(()=>{ji=require("worker_threads"),$C=x(je());Ne();YC=x(W()),jc=require("path"),Jp=require("fs/promises"),_d=x(Nr()),Zc=x(Z()),Xp=x(U());zt();(0,Zc.initSync)();dd=new Map,KC=(0,Zc.get)(Xp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(D2,"setAnalyticsEnabled");a(xr,"recordAction");Xe.recordAnalytics=xr;a(sn,"recordActionBinary");ld=0,WC=1e3,QC="analytics-report",zC=[];a(eu,"addAnalyticsListener");JC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(L2,"sendAnalytics");a(M2,"aggregation");HC=0,xC=0,XC=a(()=>new Promise(setImmediate),"rest");a(FC,"cleanup");U2=36e5,P2=31536e6;a(jp,"getRawAnalyticsTable");a(jC,"getAnalyticsTable");(0,$C.setChildListenerByType)(QC,eD);a(v2,"startScheduledTasks");kC=0,VC=new Map,B2=!1;a(eD,"recordAnalytics");H2=1e6;a(x2,"logAnalytics")});var rS={};Fe(rS,{coerceType:()=>fd,makeTable:()=>md,setServerUtilities:()=>W2,updateResource:()=>Ed});function md(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),db(i,u);let S=Rh(i,n,u),O=0,g,R,B={},H=Promise.resolve(),v,M,$;for(let Y of p)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(v=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(M=Y),Y.expiresAt&&($=Y),Y.isPrimaryKey&&(B=Y);let K,z=[],se=[],Te=1,oe=2,xe={},de={},It=864e5,bl,Nl,ks,AA=!1,$E,zx=i.getRange({start:!1,end:!1}).constructor,Jx=10,Xx=6;E&&NA();class We extends vt{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=v;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),R=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let I=a(w=>{let y=this.sources.slice(0,-1);if(y=y.filter(P=>P[w]&&(!P[w].reliesOnPrototype||P.prototype[w])),y.length>0)if(y.length===1){let P=y[0];return(L,D,F)=>{if(L?.source!==P)return P[w](D,F,L)}}else return(P,L,D)=>{let F=[];for(let G of y){if(P?.source===G)break;F.push(G[w](L,D,P))}return Promise.all(F)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1],N=a(w=>{if(b[w]&&(!b[w].reliesOnPrototype||b.prototype[w]))return(y,P,L)=>{if(!y?.source)return b[w](P,L,y)}},"getApplyToCanonicalSource");return xe={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},de={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let w=!1,y=a(async(P,L)=>{let D=P.value,F=P.table?tt[c][P.table]:We;if(c===Mn.SYSTEM_SCHEMA_NAME&&(P.table===Mn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||P.table===Mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(w=!0),P.id===void 0&&(P.id=D[F.primaryKey],P.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(P));P.source=m;let G=await F.getResource(P.id,L,aa);switch(P.type){case"put":return G._writeUpdate(D,!0,aa);case"patch":return G._writeUpdate(D,!1,aa);case"delete":return G._writeDelete(aa);case"publish":return G._writePublish(D,aa);case"invalidate":return G.invalidate(aa);default:ze.error("Unknown operation",P.type,P.id)}},"writeUpdate");try{let P=m.subscribe;P&&h==null&&(h=!0);let L=m.subscribeOnThisThread?m.subscribeOnThisThread((0,eo.getWorkerIndex)()):(0,eo.getWorkerIndex)()===0,D=P&&L&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(D){let F;for await(let G of D)try{if(!(G.type==="transaction"?G.writes[0]:G)){ze.error("Bad subscription event",G);continue}if(G.source=m,F)if(G.beginTxn)F.resolve();else{y(G,F);continue}if(G.type==="end_txn")continue;let ae=Ke(G,()=>{if(G.type==="transaction"){let re=[];for(let ce of G.writes)try{re.push(y(ce,G))}catch(ve){throw ve.message+=" writing "+JSON.stringify(ce)+" of event "+JSON.stringify(G),ve}return Promise.all(re)}else if(G.type==="define_schema"){let re=this.attributes.slice(0),ce;for(let ve of G.attributes)re.find(ne=>ne.name===ve.name)||(re.push(ve),ce=!0);ce&&(at({table:s,database:c,attributes:re,origin:"cluster"}),cu.signalSchemaChange(new uu.SchemaEventMsg(process.pid,Mn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return G.beginTxn?(F=G,y(G,G),new Promise(re=>{F.resolve=re})):y(G,G)});w&&(await ae,cu.signalUserChange(new uu.UserEventMsg(process.pid))),G.onCommit&&(ae?.then?ae.then(G.onCommit):G.onCommit())}catch(ie){ze.error("error in subscription handler",ie)}}}catch(P){ze.error(P)}})(),this}static getResource(m,A,I){let b=super.getResource(m,A,I);if(m!=null){Qa(m);try{if(b.hasOwnProperty(he))return b;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!I?.async||i.cache?.get(m),w=gr(A),y=w.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return YE(m,A,{transaction:y},N,P=>{if(P?Ed(b,P):b[he]=null,A.onlyIfCached&&A.noCacheStore){if(!b.doesExist())throw new on.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let L=KE(m,P,A,b);if(L)return w?.disregardReadTxn(),b[Zp]=!0,tS(L,D=>(Ed(b,D),b))}return b})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return b}ensureLoaded(){let m=KE(this[De],this[Fr],this[be]);if(m)return this[Zp]=!0,tS(m,A=>{this[Fr]=A,this[he]=A.value,this[ou]=A.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,It=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");It=It||(d+f)/4,QE()}static enableAuditing(m=!0){E=m,m&&NA(),We.audit=m}static coerceId(m){return m===""?null:fd(m,B)}static async dropTable(){if(delete tt[c][s],c===o){for(let m of p)l.remove(We.tableName+"/"+m.name),r[m.name]?.drop();l.remove(We.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));cu.signalSchemaChange(new uu.SchemaEventMsg(process.pid,Mn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[Zr])return this.search(m);if(this[De]===null){if(m?.conditions)return this.search(m);let A=We.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(m,A){let I=wl(m);if(I?.read){if(I.isSuperUser)return!0;let b=I.attribute_permissions,N=A?.select;if(b?.length>0||AA&&N){if(A||(A={}),N){let w=b?.length>0&&eS(b,"read");A.select=N.map(y=>{let P=y.name||y;if(!w||w[P]){let L=ks[P]?.definition?.tableClass;if(L){if(y.name||(y={name:y}),!L.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else A.select=b.filter(w=>w.read&&!ks[w.attribute_name]).map(w=>w.attribute_name);return A}else return!0}}allowUpdate(m,A){let I=wl(m);if(I?.update){let b=I.attribute_permissions;if(b?.length>0){let N=eS(b,"update");for(let w in A)if(!N[w])return!1;for(let w of b){let y=w.attribute_name;!w.update&&!(y in A)&&(A[y]=this.getProperty(y))}}return!0}}allowCreate(m,A){if(this[Zr]){let I=wl(m);if(I?.insert){let b=I.attribute_permissions;if(b?.length>0){let N=eS(b,"insert");for(let w in A)if(!N[w])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return wl(m)?.delete}update(m,A){if(!gr(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let b;return typeof m=="object"&&m&&(A?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[he]={},this[gt]=m):(b=this[gt],b&&(m=Object.assign(b,m)),this[gt]=b=m)),this._writeUpdate(this[gt],A),this}addTo(m,A){if(typeof A=="number")this[ru]===nD?this.set(m,(+this.getProperty(m)||0)+A):(this[ru]||this.update(),this.set(m,new r_(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,A){if(typeof A=="number")return this.addTo(m,-A);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let A=this[be],I=this[De];Qa(I),gr(this[be]).addWrite({key:I,store:i,invalidated:!0,entry:this[Fr],nodeName:this[be]?.nodeName,before:xe.invalidate?.bind(this,A,I),beforeIntermediate:de.invalidate?.bind(this,A,I),commit:(N,w)=>{if(w?.version>N)return;let y=null;for(let P in r)y||(y={}),y[P]=this.getProperty(P);S(I,y,this[Fr],N,nu,E,this[be],0,"invalidate")}})}static evict(m,A,I){let b=this.Source,N;if(!((R||E)&&(!A||(N=i.getEntry(m),!N||!A)||N.version!==I))){if(R){if(i.hasLock(m,N.version))return;let w;for(let y in r)w||(w={}),w[y]=A[y];if(w)return S(m,w,N,I,su,null,null,0,null,!0)}return i.ifVersion(I,()=>{yl(m,A,null)}),E?S(m,null,N,I,su,null,null,0,null,!0):i.remove(m,I)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=s,m.schema||=c,uD.operation(m,A)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,A,I){let b=this[be],N=gr(b),w=this[De];Qa(w);let y=this[Fr];this[ru]=A?nD:$2;let P={key:w,store:i,entry:y,nodeName:b?.nodeName,validate:L=>{m||(m=this[gt]),A||m&&e_(m)?(this.validate(m,!A),b?.source||(M&&(m[M.name]=M.type==="Date"?new Date(L):M.type==="String"?new Date(L).toISOString():L),A&&(t&&m[t]!==w&&(m[t]=w),v&&(y?.value?m[v.name]=y?.value[v.name]:m[v.name]=v.type==="Date"?new Date(L):v.type==="String"?new Date(L).toISOString():L),m=Li(m)))):N.removeWrite(P)},before:A?xe.put?()=>xe.put(b,w,m):null:xe.patch?()=>xe.patch(b,w,m):xe.put?()=>xe.put(b,w,Li(this)):null,beforeIntermediate:A?de.put?()=>de.put(b,w,m):null:de.patch?()=>de.patch(b,w,m):de.put?()=>de.put(b,w,Li(this)):null,commit:(L,D,F)=>{if(F){if(b&&D?.version>(b.lastModified||0)&&(b.lastModified=D.version),this[Fr]=D,D?.value?.[he])throw new Error("Can not assign a record to a record, check for circular references");A||(this[he]=D?.value??null)}this[gt]=m,this[ou]=L;let G=D?.value,ie=m;if(this[ru]=0,D?.version>=L)if(E){let ve=D.localTime,ne=D.version;for(;ie&&(ve>L||ne>=L&&ve>0);){let fe=u.get(ve),j=Ct(fe);if(ne=j.version,ne>L){if(j.type==="patch"){let le=j.getValue(i);ie=jl(ie,le)}else if(j.type==="put"||j.type==="delete")return}else if(ne===L)return;ve=j.previousLocalTime}}else{if(A)return;ie=jl(ie,G)}let ae;if(A?ae=ie:(this[he]=G,ae=A?ie:Li(this,ie)),this[he]=ae,ae?.[he])throw new Error("Can not assign a record to a record, check for circular references");let re;A||(re=m),yl(w,G,ae);let ce=A?"put":"patch";S(w,ae,D,L,0,E,b,b.expiresAt||(d?d+Date.now():0),ce,!1,re)}};N.addWrite(P)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[Zr]){for await(let A of this.search(m))(await We.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[he]?this._writeDelete(m):!1}_writeDelete(m){let A=gr(this[be]),I=this[De];Qa(I);let b=this[be];return A.addWrite({key:I,store:i,resource:this,nodeName:b?.nodeName,before:xe.delete?.bind(this,b,I),beforeIntermediate:de.delete?.bind(this,b,I),commit:(N,w,y)=>{let P=w?.value;y&&(b&&w?.version>(b.lastModified||0)&&(b.lastModified=w.version),Ed(this,w)),!(w?.version>N)&&(yl(this[De],P),ze.trace("Write delete entry",I,N),E||h?(S(I,null,this[Fr],N,0,E,this[be],0,"delete"),E||QE()):i.remove(this[De]))}}),!0}search(m){let A=this[be],I=gr(A);if(!m)throw new Error("No query provided");let b=m.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[De]&&(b=[{attribute:null,comparator:"prefix",value:this[De]}].concat(b));let N,w={};function y(j,le){let St;switch(le){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');St=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+le)}let Hn=St&&{},xn;for(let Qe of j){if(Qe.conditions){Qe.conditions=y(Qe.conditions,Qe.operator);continue}let Rr=Qe[0]??Qe.attribute,zr=Rr==null?B:ms(p,Rr);if(zr){if(St){let Ar=Rn(Rr),Fn=Hn[Ar];Fn?(Fn.push(Qe),xn=!0):Hn[Ar]=[Qe]}(zr.type||Ph[Qe.comparator])&&(Qe[1]===void 0?Qe.value=L(Qe.value,zr):Qe[1]=L(Qe[1],zr))}else if(Rr!=null)throw(0,on.handleHDBError)(new Error,`${Rr} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return j;if(xn)for(let Qe in Hn){let Rr=Hn[Qe],zr=Rr.length;if(zr>1)for(let Ar=0;Ar<zr;Ar++){let Fn=Rr[Ar];if(Fn.comparator==="ge"||Fn.comparator==="greater_than_equal")for(let Vs=0;Vs<zr;Vs++){let Do=Rr[Vs];(Do.comparator==="le"||Do.comparator==="less_than_equal")&&(Fn.comparator="between",Fn.value=[Fn.value,Do.value],j.splice(j.indexOf(Do),1))}if(Fn.comparator==="equals"||!Fn.comparator){for(let Vs=0;Vs<zr;Vs++)if(Vs!==Ar){let Do=Rr[Vs];j.splice(j.indexOf(Do),1)}break}}}return j}a(y,"prepareConditions");function P(j,le){if(m.enforceExecutionOrder)return j;for(let St of j)St.conditions&&(St.conditions=P(St.conditions,St.operator));return j.length>1&&le!=="or"?(0,cD.sortBy)(j,c_(We)):j}a(P,"orderConditions");function L(j,le){return Array.isArray(j)?j.map(St=>fd(St,le)):fd(j,le)}a(L,"coerceTypedValues");let D=m.operator;(b.length>0||D)&&(b=y(b,D));let F=typeof m.sort=="object"&&m.sort,G;if(F&&D!=="or"){let j=F.attribute;if(N=b.find(le=>Rn(le.attribute)===Rn(j)),!N){if(!ms(p,j))throw(0,on.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);N={attribute:j,comparator:"sort"},b.push(N)}N.descending=!!F.descending}b=P(b,D),F&&(b[0]===N?F.next&&(G={dbOrderedAttribute:F.attribute,attribute:F.next.attribute,descending:F.next.descending,next:F.next.next}):(N&&b.splice(b.indexOf(N),1),G=F));let ie=m.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:b,operator:D,postOrdering:G,selectApplied:!!ie};let ae=I.useReadTxn(),re=vh(b,D,We,ae,m,A,(j,le)=>OA(j,ie,A,le),w),ce=m.ensureLoaded!==!1;G||(re=fe(re));let ve=We.transformEntryForSelect(ie,A,w,ce,!0),ne=We.transformToOrderedSelect(re,ie,G,A,ve);function fe(j){return m.offset||m.limit!==void 0?j.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):j}return a(fe,"applyOffset"),G&&(ne=fe(ne)),ne.onDone=()=>{ne.onDone=null,I.doneReadTxn()},ne.selectApplied=!0,ne.getColumns=()=>{if(ie){let j=[];for(let le of ie)le==="*"?j.push(...p.map(St=>St.name)):j.push(le.name||le);return j}return p.map(j=>j.name)},ne}static transformToOrderedSelect(m,A,I,b,N){let w=new zx;if(I){m=OA(m,A,b,null);let y;w.iterate=function(){let L,D=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),F,G=I.dbOrderedAttribute,ie,ae,re=!0;function ce(ne){let fe=ne.next&&ce(ne.next),j=ne.descending;return(le,St)=>{let Hn=WE(le,ne.attribute,b),xn=WE(St,ne.attribute,b),Qe=j?(0,to.compareKeys)(xn,Hn):(0,to.compareKeys)(Hn,xn);return Qe===0?fe?.(le,St)||0:Qe}}a(ce,"createComparator");let ve=ce(I);return{async next(){let ne;if(L)if(ne=L.next(),ne.done){if(F)return w.onDone&&w.onDone(),ne}else return{value:await N(ne.value)};y=[],ie&&y.push(ie);do if(ne=await D.next(),ne.done){if(F=!0,y.length)break;return w.onDone&&w.onDone(),ne}else{let fe=ne.value;if(fe?.then&&(fe=await fe),G){let j=WE(fe,G,b);if(re)re=!1,ae=j;else if(j!==ae){ae=j,ie=fe;break}}y.push(fe)}while(!0);return I.isGrouped,y.sort(ve),L=y[Symbol.iterator](),ne=L.next(),ne.done?(w.onDone&&w.onDone(),ne):{value:await N(ne.value)}},return(){w.onDone&&w.onDone(),D.return()},throw(){w.onDone&&w.onDone(),D.throw()}}};let P=a(L=>{if(typeof A=="object"&&Array.isArray(L.attribute))for(let D=0;D<A.length;D++){let F=A[D],G;if(F.name===L.attribute[0]){for(G=F.sort||(F.sort={});G.next;)G=G.next;G.attribute=L.attribute.slice(1),G.descending=L.descending}else F===L.attribute[0]&&(A[D]=G={name:F,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&P(L.next)},"applySortingOnSelect");P(I)}else w.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),w=w.map(N);return w}static transformEntryForSelect(m,A,I,b,N){if(m&&(m===t||m?.length===1&&m[0]===t)){let L=a(D=>D?.key??D,"transform");return m===t?L:m.asArray?D=>[L(D)]:D=>({[t]:L(D)})}let w;b&&R&&!m?.every(L=>{let D;return typeof L=="object"?D=L.name:D=L,r[D]||D===t})&&(w=!0);let y,P=a(L=>{let D;if(L!=null){if($E=L,D=L.value||L.deref?.(),!D&&(L.key===void 0||L.deref)){if(L=YE(L.key??L,A,{transaction:gr(A).getReadTxn(),lazy:m?.length<4},!1,F=>F),L?.then)return L.then(P);D=L?.value}if(w&&(L.metadataFlags&(nu|su)||L.expiresAt&&L.expiresAt<Date.now())){let F=KE(L.key??L,L,A);if(F?.then)return F.then(P)}}if(D==null)return N?Zi.SKIP:D;if(m&&!(m[0]==="*"&&m.length===1)){let F,G=a((ae,re)=>{let ce;typeof ae=="object"?ce=ae.name:ce=ae;let ve=ks?.[ce],ne;if(ve){let fe=I?.[ce];if(fe)if(fe.hasMappings){let le=ve.from?D[ve.from]:Rn(L.key);ne=fe.get(le),ne||(ne=[])}else ne=fe.fromRecord?.(D);else ne=ve(D,A,L);let j=a(le=>{if(le&&typeof le=="object"){let St=ve.definition?.tableClass||We;y||(y={});let Hn=y[ce]||(y[ce]=St.transformEntryForSelect(ce===ae?null:ae.select||(Array.isArray(ae)?ae:null),A,fe,b));if(Array.isArray(le)){let xn=[],Qe=St.transformToOrderedSelect(le,ae.select,typeof ae.sort=="object"&&ae.sort,A,Hn)[Symbol.asyncIterator](),Rr=a(Ar=>{for(;!Ar.done;){if(Ar?.then)return Ar.then(Rr);xn.push(Ar.value),Ar=Qe.next()}re(xn,ce)},"nextValue"),zr=Rr(Qe.next());zr&&(F||(F=[]),F.push(zr));return}else if(le=Hn(le),le?.then){F||(F=[]),F.push(le.then(xn=>re(xn,ce)));return}}re(le,ce)},"handleResolvedValue");ne?.then?(F||(F=[]),F.push(ne.then(j))):j(ne);return}else ne=D[ce],ne&&typeof ne=="object"&&ce!==ae&&(ne=this.transformEntryForSelect(ae.select||ae,A,null)({value:ne}));re(ne,ce)},"selectAttribute"),ie;if(typeof m=="string")G(m,ae=>{ie=ae});else if(Array.isArray(m))if(m.asArray)ie=[],m.forEach((ae,re)=>{ae==="*"?m[re]=D:G(ae,ce=>ie[re]=ce)});else{ie={};let ae=m.forceNulls;for(let re of m)if(re==="*")for(let ce in D)ie[ce]=D[ce];else G(re,(ce,ve)=>{ce===void 0&&ae&&(ce=null),ie[ve]=ce})}else throw new on.ClientError("Invalid select"+m);return F?Promise.all(F).then(()=>ie):ie}return D},"transform");return P}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||at({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=!m.rawEvents,I=lb(We,this[De]??null,function(y,P,L,D){try{let F=P.getValue?.(i,A);if(!F&&P.type==="patch"&&A){let G=i.getEntry(y);G?.version===P.version?F=G.value:F=P.getValue?.(i,!0,L),P.type="put"}this.send({id:y,timestamp:L,value:F,version:P.version,type:P.type,beginTxn:D})}catch(F){ze.error(F)}},m.startTime||0,this[Zr]);this[Zr]&&(I.includeDescendants=!0,m.onlyChildren&&(I.onlyChildren=!0)),m.crossThreads===!1&&(I.crossThreads=!1),m.supportsTransactions&&(I.supportsTransactions=!0);let b=this[De],N=m.previousCount;N>1e3&&(N=1e3);let w=m.startTime;if(this[Zr]){if(w){if(N)throw new on.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:P}of u.getRange({start:w,exclusiveStart:!0})){let L=Ct(P);if(L.tableId!==n)continue;let D=L.recordId;(b==null||oD(b,D))&&I.send({id:D,timestamp:y,...L}),I.startTime=y}}else if(N){let y=[];for(let{key:P,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let D=Ct(L);if(D.tableId!==n)continue;let F=D.recordId;if(b==null||oD(b,F)){let G=D.getValue(i,A,P);if(y.push({id:F,timestamp:P,value:G,version:D.version,type:D.type}),--N<=0)break}}catch(D){ze.error("Error getting history entry",P,D)}for(let P=y.length;P>0;)I.send(y[--P]);y[0]&&(I.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:P,version:L,localTime:D}of i.getRange({start:b??!1,end:b==null?void 0:[b,to.MAXIMUM_KEY],versions:!0}))P&&I.send({id:y,version:L,timestamp:D,value:P})}else{N&&!w&&(w=0);let y=this[Fr]?.localTime;if(y===gh&&(i.cache?.delete(b),this[Fr]=i.getEntry(b),ze.trace("re-retrieved record",y,this[Fr]?.localTime),y=this[Fr]?.localTime),ze.trace("Subscription from",w,"from",b,y),w<y){let P=[],L=y;do{let D=u.get(L);if(D){m.omitCurrent=!0;let F=Ct(D),G=F.getValue(i,A,L);A&&(F.type="put"),P.push({id:b,value:G,timestamp:L,...F}),L=F.previousLocalTime}else break;N&&N--}while(L>w&&N!==0);for(let D=P.length;D>0;)I.send(P[--D]);I.startTime=y}!m.omitCurrent&&this.doesExist()&&I.send({id:b,version:this[ou],timestamp:y,value:this})}return m.listener&&I.on("data",m.listener),I}doesExist(){return!!(this[he]||this[ru])}publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let I=gr(this[be]),b=this[De]||null;Qa(b);let N=this[be];I.addWrite({key:b,store:i,entry:this[Fr],nodeName:N?.nodeName,validate:()=>{this.validate(m)},before:xe.publish?.bind(this,N,b,m),beforeIntermediate:de.publish?.bind(this,N,b,m),commit:(w,y,P)=>{y===void 0&&h&&!E&&QE(),S(b,y?.value??null,y,y?.version||w,0,!0,N,y?.expiresAt,"message",!1,m)}})}validate(m,A){let I,b=a((N,w,y)=>{if(w.type&&N!=null)if(A&&N.__op__&&(N=N.value),w.properties){typeof N!="object"&&(I||(I=[])).push(`Property ${y} must be an object${w.type?" ("+w.type+")":""}`);let P=w.properties;for(let L=0,D=P.length;L<D;L++){let F=P[L],G=b(N[F.name],F,y+"."+F.name);G&&(N[F.name]=G)}}else switch(w.type){case"Int":(typeof N!="number"||N>>0!==N)&&(I||(I=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(I||(I=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(I||(I=[])).push(`Property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(P=>typeof P=="string")||(I||(I=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(I||(I=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(I||(I=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(I||(I=[])).push(`Property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(I||(I=[])).push(`Property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(I||(I=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(w.elements)for(let P=0,L=N.length;P<L;P++){let D=N[P],F=b(D,w.elements,y+"[*]");F&&(N[P]=F)}}else(I||(I=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}w.nullable===!1&&N==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,w=p.length;N<w;N++){let y=p[N];if(!y.relationship&&(!A||y.name in m)){let P=b(m[y.name],y,y.name);P&&(m[y.name]=P)}}if(I)throw new on.ClientError(I.join(". "))}getUpdatedTime(){return this[ou]}wasLoadedFromSource(){return R?!!this[Zp]:void 0}static async addAttributes(m){let A=p.slice(0);for(let I of m){if(!I.name)throw new on.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new on.ClientError("Attribute names cannot include backticks or forward slashes");A.push(I)}return at({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static async removeAttributes(m){let A=p.filter(I=>!m.includes(I.name));return at({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,I=5e3,b=1e3,N;A>I&&!m?.exactCount&&(N=b);let w=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:N}))y!=null&&w++;if(N){let y=w;w=0;for(let{value:ce}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:N}))ce!=null&&w++;let P=N*2,L=(w+y)/P,D=Math.pow((w-y+1)/N/2,2)+L*(1-L)/P,F=Math.max(Math.sqrt(D)*A,1),G=Math.round(L*A),ie=Math.max(G-1.96*F,0),ae=Math.min(G+1.96*F,A),re=Math.pow(10,Math.round(Math.log10(F)));return re>G&&(re=re/10),w=Math.round(G/re)*re,{recordCount:w,estimatedRange:[Math.round(ie),Math.round(ae)]}}return{recordCount:w}}static updatedAttributes(){ks=this.propertyResolvers={$id:(m,A,I)=>({value:I.key}),$updatedtime:(m,A,I)=>I.version,$record:(m,A,I)=>I?{value:m}:m};for(let m of this.attributes){m.resolve=null;let A=m.relationship;if(A)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),AA=!0,A.to)m.elements?.definition?(ks[m.name]=m.resolve=(I,b,N)=>{let w=I[A.from?A.from:t],y=m.elements.definition.tableClass;return N?qo({attribute:A.to,value:w},gr(b).getReadTxn(),!1,y).asArray:y.search([{attribute:A.to,value:w}],b).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,A.from&&(m.resolve.from=A.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(A.from){let I=m.definition||m.elements?.definition;I?(ks[m.name]=m.resolve=(b,N,w)=>{let y=b[A.from];if(y!==void 0){if(m.elements){let P,L=y.map(D=>{let F=w?I.tableClass.primaryStore.getEntry(D,{transaction:gr(N).getReadTxn()}):I.tableClass.get(D,N);return F?.then&&(P=!0),F});return A.filterMissing?P?Promise.all(L).then(D=>D.filter(aD)):L.filter(aD):P?Promise.all(L):L}return w?I.tableClass.primaryStore.getEntry(y,{transaction:gr(N).getReadTxn()}):I.tableClass.get(y,N)}},m.set=(b,N)=>{if(Array.isArray(N)){let w=N.map(y=>y[De]||y[I.tableClass.primaryKey]);b[A.from]=w}else{let w=N[De]||N[I.tableClass.primaryKey];b[A.from]=w}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=A.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}n_(this,this)}static async deleteHistory(m=0){let A;for(let{key:I,value:b}of u.getRange({start:0,end:m}))await iu(),Ct(b).tableId===n&&(A=u.remove(I));await A}static async*getHistory(m=0,A=1/0){for(let{key:I,value:b}of u.getRange({start:m,end:A})){await iu();let N=Ct(b);N.tableId===n&&(yield{id:N.recordId,localTime:I,version:N.version,type:N.type,value:N.getValue(i,!0,I),user:N.user})}}static async getHistoryOfRecord(m){let A=[];if(m==null)throw new Error("An id is required");let I=i.getEntry(m);if(!I)return A;let b=I.localTime;if(!b)throw new Error("The entry does not have a local audit time");let N=0;do{await iu();let w=u.get(b);if(w){let y=Ct(w);A.push({id:y.recordId,localTime:b,version:y.version,type:y.type,value:y.getValue(i,!0,b),user:y.user}),b=y.previousLocalTime}else break}while(N<1e3&&b);return A.reverse()}static cleanup(){K?.remove()}}We.updatedAttributes();let jx=We.prototype;return jx[V2]=!0,d&&We.setTTLExpiration(d/1e3),$&&Zx(),We;function yl(Y,m,A){let I;for(let b in r){let N=r[b],w=N.isIndexing,y=A?.[b],P=m?.[b];if(y===P&&!w)continue;I=!0;let L=N.indexNulls,D=(0,au.getIndexedValues)(P,L);if(D){rD&&N.prefetch(D.map(F=>({key:F,value:Y})),iD);for(let F=0,G=D.length;F<G;F++)N.remove(D[F],Y)}if(D=(0,au.getIndexedValues)(y,L),D){rD&&N.prefetch(D.map(F=>({key:F,value:Y})),iD);for(let F=0,G=D.length;F<G;F++)N.put(D[F],Y)}}return I}a(yl,"updateIndices");function Qa(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>sD)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,to.writeKey)(Y,Y2,0)>sD)throw new Error("Primary key size is too large: "+Y.length);return!0}a(Qa,"checkValidId");function YE(Y,m,A,I,b){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return b(null,Y);let w=i.getEntry(Y,A);return w&&m&&(w?.version>(m.lastModified||0)&&(m.lastModified=w.version),w?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=w.localTime)),b(w,Y)},"whenPrefetched");return I?N():Te>0?(Te--,N()):new Promise((w,y)=>{Te===0?(Te--,i.prefetch([Y],()=>{P(),L()})):(z.push(Y),se.push(L),z.length>Xx&&(Te--,P()));function P(){if(z.length>0){let D=se;i.prefetch(z,()=>{Te===-1?P():Te++;for(let F of D)F()}),z=[],se=[],oe>2&&oe--}else Te=oe,oe<Jx&&oe++}a(P,"prefetch");function L(){try{w(N())}catch(D){y(D)}}a(L,"load")})}a(YE,"loadLocalRecord");function wl(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return K2;let A=m[c],I,b=A?.tables;if(b)return b[s];if(c==="data"&&(I=m[s])&&!I.tables)return I}a(wl,"getTablePermissions");function KE(Y,m,A,I){if(R){let b;if(A.noCache?b=!0:(m?(!m.value||m.metadataFlags&(nu|su)||m.expiresAt&&m.expiresAt<Date.now())&&(b=!0):b=!0,sn(!b,"cache-hit",s)),b){let N=bA(Y,m,A).then(w=>(w?.value?.[he]&&ze.error("Can not assign a record with a record property"),A&&(w?.version>(A.lastModified||0)&&(A.lastModified=w.version),A.lastRefreshed=Date.now()),w));if(A?.onlyIfCached||m?.value&&I?.allowStaleWhileRevalidate?.(m,Y)){if(N.catch(w=>ze.warn(w)),A?.onlyIfCached&&!I.doesExist())throw new on.ServerError("Entry is not cached",504);return}else return N}}}a(KE,"ensureLoadedFromSource");function gr(Y){let m=Y?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new Mi,m.lmdbDb=i,m;m=A}while(!0)}else return new o_}a(gr,"txnForContext");function WE(Y,m,A){if(!Y)return;$E=Y;let I=Y.value||Y.deref?.()||($E=i.getEntry(Y.key))?.value;if(typeof m=="object"){let N=ks,w=I;for(let y=0,P=m.length;y<P;y++){let L=m[y],D=N?.[L];w=D&&w?D(w,A,!0)?.value:w?.[L],N=D?.definition?.tableClass?.propertyResolvers}return w}let b=ks[m];return b?b(I,A):I[m]}a(WE,"getAttributeValue");function OA(Y,m,A,I){let b=gr(A).getReadTxn(),N=I?.length,w={transaction:b,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function P(L,D){let F=L?.value;if(!F)return Zi.SKIP;for(let G=0;G<N;G++)if(!y?.includes(G)&&!I[G](F,L))return Zi.SKIP;return D!==void 0&&(L.key=D),L}if(a(P,"processEntry"),N>0||!Y.hasEntries){let L=Y.map(D=>{if(y=null,typeof D=="object"&&D.key!==void 0)return N>0?P(D):D;if(D==null)return Zi.SKIP;for(let F=0;F<N;F++){let ie=I[F].idFilter;if(ie){if(!ie(D))return Zi.SKIP;y||(y=[]),y.push(F)}}return YE(D,A,w,!1,P)});return Array.isArray(Y)&&(L=L.filter(D=>D!==Zi.SKIP)),L.hasEntries=!0,L}return Y}a(OA,"transformToEntries");async function bA(Y,m,A){let I=m?.metadataFlags,b=m?.version,N,w;if(!i.attemptLock(Y,b,()=>{clearTimeout(w);let D=i.getEntry(Y);!D||!D.value||D.metadataFlags&(nu|su)?N(bA(Y,i.getEntry(Y),A)):N(D)}))return new Promise(D=>{N=D,w=setTimeout(()=>{i.unlock(Y,b)},k2)});let y=m?.value,P={requestContext:A,replacingRecord:y,replacingVersion:b,source:null,resourceCache:A?.resourceCache},L=A?.responseHeaders;return new Promise((D,F)=>{let G;tS(Ke(P,async ie=>{let ae=performance.now(),re,ce,ve;try{for(let le of We.sources)if(le.get&&(!le.get.reliesOnPrototype||le.prototype.get)&&(P.source=le,re=await le.get(Y,P),re))break;ve=I&nu;let fe=P.lastModified||ve&&b;ce=ve||fe>b||!y,fe||(fe=(0,au.getNextMonotonicTime)());let j=performance.now()-ae;if(xr(j,"cache-resolution",s),L&&L.append("Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`),ie.timestamp=fe,d&&!P.expiresAt&&(P.expiresAt=Date.now()+d),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)}G=!0,D({version:fe,value:re})}catch(fe){fe.message+=` while resolving record ${Y} for ${s}`,y&&((fe.code==="ECONNRESET"||fe.code==="ECONNREFUSED"||fe.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(fe.statusCode===500||fe.statusCode===502||fe.statusCode===503||fe.statusCode===504))?(D({version:b,value:y}),ze.trace(fe.message,"(returned stale record)")):F(fe),P.transaction.abort();return}if(A?.noCacheStore){P.transaction.abort();return}gr(P).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(fe,j)=>{if(j?.version!==b)return;let le=yl(Y,y,re);re?(de.put?.(P,Y,re),S(Y,re,j,fe,0,E&&ce||null,P,P.expiresAt,"put",!!ve)):(de.delete?.(P,Y),E||h?S(Y,null,j,fe,0,E&&ce||null,P,0,"delete",!!ve):i.remove(Y,b))}})}),()=>{i.unlock(Y,b)},ie=>{i.unlock(Y,b),G&&ze.error("Error committing cache update",ie)})})}a(bA,"getFromSource");function QE(){if(It!==bl&&(bl=It,(0,eo.getWorkerIndex)()===(0,eo.getWorkerCount)()-1)){if(Nl&&clearTimeout(Nl),!It)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())/It)*It+Y.getTime(),A=a(I=>{ze.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Nl=setTimeout(()=>H=H.then(async()=>{if(A(Math.max(I+It,Date.now())),i.rootStore.status!=="open"){clearTimeout(Nl);return}let b=50,N=new Array(b),w=0;ze.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:P,value:L,version:D,expiresAt:F}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let G;L===null&&!E&&D+G2<Date.now()?G=i.remove(P,D):F&&F+f<Date.now()&&(G=We.evict(P,L,D),y++),G&&(await N[w],N[w]=G.catch(ie=>{ze.error("Cleanup error",ie)}),++w>=b&&(w=0)),await iu()}ze.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){ze.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(QE,"scheduleCleanup");function NA(){K=u?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(NA,"addDeleteRemoval");function Zx(){(0,eo.getWorkerIndex)()===0&&setInterval(async()=>{try{let Y=$.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${$} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let I=i.getEntry(A);I?.value?.[Y]<Date.now()&&We.evict(A,I.value,I.version),await iu()}}catch(Y){ze.error("Error in evicting old records",Y)}},q2).unref()}a(Zx,"runRecordExpirationEviction")}function eS(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 iD(){}function W2(e){uD=e}function fd(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!Q2.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,hd.autoCast)(e):e}function oD(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 tS(e,t,r){return e?.then?e.then(t,r):t(e)}function Ed(e,t){e[Fr]=t,e[he]=t?.value??null,e[ou]=t?.version}function aD(e){return e!=null}var Mn,Zi,au,cD,lu,on,cu,uu,ze,to,eo,hd,F2,uD,q2,G2,rD,k2,ou,V2,Fr,ru,nD,$2,Zp,aa,nu,su,Y2,sD,K2,C_e,Q2,iu,pd=Oe(()=>{Mn=x(U()),Zi=require("lmdb"),au=x(Nr()),cD=require("lodash");gn();Mh();lu=x(Z());fb();on=x(ee()),cu=x(Ts()),uu=x(bn());Ne();l_();ze=x(W());i_();Ui();to=require("ordered-binary"),eo=x(je());Ci();hd=x(J());vo();bs();Jl();F2=new Uint8Array(9);F2[8]=192;q2=6e4,G2=864e5;lu.initSync();rD=lu.get(Mn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),k2=1e4,ou=Symbol.for("version"),V2=Symbol.for("incremental-update"),Fr=Symbol("entry"),ru=Symbol("is-saving"),nD=1,$2=2,Zp=Symbol("loaded-from-source"),aa={isNotification:!0,ensureLoaded:!1},nu=1,su=8,Y2=Buffer.allocUnsafeSlow(8192),sD=1978,K2={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},C_e=(0,hd.convertToMS)(lu.get(Mn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(md,"makeTable");a(eS,"attributesAsObject");a(iD,"noop");a(W2,"setServerUtilities");Q2=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(fd,"coerceType");a(oD,"isDescendantId");iu=a(()=>new Promise(setImmediate),"rest");a(tS,"when");a(Ed,"updateResource");a(aD,"exists")});var qe={};Fe(qe,{database:()=>kc,databases:()=>tt,dropDatabase:()=>_p,dropTableMeta:()=>e4,getDatabases:()=>yn,getTables:()=>z2,onUpdatedTable:()=>aS,readMetaDb:()=>_u,resetDatabases:()=>J2,table:()=>at,tables:()=>Gr});function z2(){return Ad||yn(),Gr||{}}function yn(){if(Ad)return tt;Ad=!0,la=new Map;let e=(0,Kt.getHdbBasePath)()&&(0,Je.join)((0,Kt.getHdbBasePath)(),kr.DATABASES_DIR_NAME),t=(0,Kt.get)(kr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Kt.get)(kr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,qr.existsSync)(e)?e:(0,Je.join)((0,Kt.getHdbBasePath)(),kr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,qr.existsSync)(e))for(let r of(0,qr.readdirSync)(e,{withFileTypes:!0})){let n=(0,Je.basename)(r.name,".mdb");r.isFile()&&(0,Je.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&_u((0,Je.join)(e,r.name),null,n)}if((0,qr.existsSync)((0,ua.getBaseSchemaPath)())){for(let r of(0,qr.readdirSync)((0,ua.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Je.join)((0,ua.getBaseSchemaPath)(),r.name),s=(0,Je.join)((0,ua.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,qr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Je.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Je.join)(s,i.name);_u((0,Je.join)(n,i.name),(0,Je.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,qr.existsSync)(s))for(let o of(0,qr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Je.extname)(o.name).toLowerCase()===".mdb"&&_u((0,Je.join)(s,o.name),(0,Je.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Je.join)(c.path,(0,Je.basename)(o+".mdb"));(0,qr.existsSync)(u)&&_u(u,o,r,null,!0)}}for(let r in tt){let n=la.get(r);if(n){let s=tt[r];r.includes("delete")&&an.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(an.trace(`delete table class ${i}`),delete s[i])}else if(delete tt[r],r==="data"){for(let s in Gr)delete Gr[s];delete Gr[Od]}}return la=null,tt}}function J2(){Ad=!1;for(let[,e]of ii)e.needsDeletion=!0;yn();for(let[e,t]of ii)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ii.delete(e));return tt}function _u(e,t,r=iS,n,s){let i=new nS.default(e,!1);try{let o=ii.get(e);o?o.needsDeletion=!1:(o=(0,Td.open)(i),ii.set(e,o));let c=new ro.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Sd.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,qr.existsSync)(n)&&(i.path=n,_=(0,Td.open)(i),_.isLegacy=!0):_=zl(o));let l=fD(r),d=l[Od],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.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 O=f.get(p);O||f.set(p,O={attributes:[]}),(S==null||h.is_hash_attribute)&&(O.primary=h),S!=null&&O.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let z of p)if(z.is_hash_attribute||z.isPrimaryKey){S=z;break}if(!S){an.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let O=l[E],g={},R=[],B,H,v=typeof S.audit=="boolean"?S.audit:(0,Kt.get)(kr.CONFIG_PARAMS.LOGGING_AUDITLOG),M=S.trackDeletes,$=S.expiration,K=S.eviction;if(O)g=O.indices,R=O.attributes,O.schemaVersion++;else{B=S.tableId,B?B>=(u.get(ca)||0)&&u.putSync(ca,B+1):(S.tableId=B=u.get(ca),B||(B=1),u.putSync(ca,B+1),u.putSync(S.key,S));let z=new ro.default(!S.is_hash_attribute,S.is_hash_attribute);H=Yl(o.openDB(S.key,z)),H.rootStore=o,H.tableId=B}for(let z of p){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!g[z.name]){let Te=new ro.default(!z.is_hash_attribute,z.is_hash_attribute);g[z.name]=o.openDB(z.key,Te),g[z.name].indexNulls=z.indexNulls}let se=R.find(Te=>Te.name===z.name);se?R.splice(R.indexOf(se),1,z):R.push(z)}}catch(se){an.error("Error trying to update attribute",z,R,g,se)}}if(!O){O=ED(l,E,md({primaryStore:H,auditStore:_,audit:v,expirationMS:$&&$*1e3,evictionMS:K&&K*1e3,trackDeletes:M,tableName:E,tableId:B,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:g,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),O.schemaVersion=1;for(let z of oS)z(O)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function fD(e){let t=tt[e];if(t||(e==="data"?t=tt[e]=Gr:e==="system"?Object.defineProperty(tt,"system",{value:t=Object.create(null),configurable:!0}):t=tt[e]=Object.create(null)),la&&!la.has(e)){let r=new Set;t[Od]=r,la.set(e,r)}return t}function ED(e,t,r){return e[t]=r,r}function kc({database:e,table:t}){e||(e=iS),yn();let r=fD(e),n=(0,Je.join)((0,Kt.getHdbBasePath)(),kr.DATABASES_DIR_NAME),s=(0,Kt.get)(kr.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,Kt.get)(kr.CONFIG_PARAMS.STORAGE_PATH)||((0,qr.existsSync)(n)?n:(0,Je.join)((0,Kt.getHdbBasePath)(),kr.LEGACY_DATABASES_DIR_NAME));let o=(0,Je.join)(n,(i?t:e)+".mdb"),c=ii.get(o);if(!c){let u=new nS.default(o,!1);c=(0,Td.open)(u),ii.set(o,c)}return c}async function _p(e){if(!tt[e])throw new Error("Schema does not exist");let t=tt[e];for(let r in t){let s=t[r].primaryStore.rootStore;ii.delete(s.path),s.status==="open"&&(await s.close(),await lD.remove(s.path))}if(e==="data"){for(let r in Gr)delete Gr[r];delete Gr[Od]}delete tt[e]}function at({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=iS);let l=kc({database:t,table:e}),d=tt[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let O=new ro.default(!1);for(let M of i)M.attribute?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let g,R;if(f){if(E=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=l.auditStore;M||(M=zl(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Kt.get)(kr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),an.trace(`${e} table loading, opening primary store`);let $=new ro.default(!1,!0),K=e+"/",z=Yl(l.openDB(K,$));z.rootStore=l,S=l.dbisDb=l.openDB(Sd.INTERNAL_DBIS_NAME,O),z.tableId=S.get(ca),z.tableId||(z.tableId=1),S.putSync(ca,z.tableId+1),h.tableId=z.tableId,f=ED(d,e,md({primaryStore:z,auditStore:M,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,g=!0,v(),S.put(K,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Sd.INTERNAL_DBIS_NAME,O)),f.dbisDB=S;let B=[];for(let{key:M,value:$}of S.getRange({start:!0})){let[K,z]=M.toString().split("/");if(z===""&&(z=$.name),z){if(K!==e)continue}else z=K;if(!i.find(Te=>Te.name===z)?.indexed&&$.indexed&&!$.isPrimaryKey){v(),g=!0,S.remove(M);let Te=f.indices[K];Te&&B.push(Te)}}let H=[];try{for(let M of i||[]){if(M.relationship)continue;let $=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:$,configurable:!0});let K=S.get($);if(M.isPrimaryKey){if(K=K||S.get($=e+"/")||{},o!==f.audit||(+r||void 0)!==(+K.expiration||void 0)||(+n||void 0)!==(+K.eviction||void 0)){let se=Object.assign({},K);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),n&&(se.eviction=+n),g=!0,v(),S.put($,se)}continue}K?.attribute&&!K.name&&(K.indexed=!0);let z=!K||K.type!==M.type||K.indexed!==M.indexed||JSON.stringify(K.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(K.elements)!==JSON.stringify(M.elements);if(M.indexed){let se=new ro.default(!0,!1),Te=l.openDB($,se);(z||K.indexingPID&&K.indexingPID!==process.pid||K.restartNumber<du.workerData?.restartNumber)&&(g=!0,v(),K=S.get($),(z||K.indexingPID&&K.indexingPID!==process.pid||K.restartNumber<du.workerData?.restartNumber)&&(g=!0,M.lastIndexedKey=K?.lastIndexedKey||!1,M.indexingPID=process.pid,Te.isIndexing=!0,Object.defineProperty(M,"dbi",{value:Te}),M.indexNulls===void 0&&(M.indexNulls=!0),H.push(M)),S.put($,M)),K?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),Te.indexNulls=M.indexNulls,p[M.name]=Te}else z&&(g=!0,v(),S.put($,M))}}finally{R&&R()}if(g&&(f.schemaVersion++,f.updatedAttributes()),an.trace(`${e} table loading, running index`),H.length>0||B.length>0?f.indexingOperation=Z2(f,H,B):g&&gd.signalSchemaChange(new Rd.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,g)for(let M of oS)M(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),an.trace(`${e} table loaded`),f;function v(){R||l.transactionSync(()=>({then(M){R=M}}))}a(v,"startTxn")}async function Z2(e,t,r){try{let n=e.schemaVersion;await gd.signalSchemaChange(new Rd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,_D.getIndexedValues)(l[h]);if(p)for(let S=0,O=p.length;S<O;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,an.error(f)}),du.workerData&&du.workerData.restartNumber!==dD.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>X2?await s:u>j2&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await gd.signalSchemaChange(new Rd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){an.error("Error in indexing",n)}}function e4({table:e,database:t}){let r=kc({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 aS(e){oS.push(e)}var Kt,Sd,Td,Je,qr,ua,ro,nS,kr,lD,sS,_D,gd,Rd,du,an,dD,iS,Od,Gr,tt,ca,oS,Ad,ii,la,X2,j2,Ne=Oe(()=>{Kt=x(Z()),Sd=x(lt()),Td=require("lmdb"),Je=require("path"),qr=require("fs"),ua=x(Ye());pd();ro=x(h_()),nS=x(p_()),kr=x(U()),lD=x(require("fs-extra")),sS=require("../index"),_D=x(Nr()),gd=x(Ts()),Rd=x(bn()),du=require("worker_threads"),an=x(W()),dD=x(je());Ci();vo();iS="data",Od=Symbol("defined-tables");(0,Kt.initSync)();Gr=Object.create(null),tt=Object.create(null);(0,sS._assignPackageExport)("databases",tt);(0,sS._assignPackageExport)("tables",Gr);ca=Symbol.for("next-table-id"),oS=[],ii=new Map;a(z2,"getTables");a(yn,"getDatabases");a(J2,"resetDatabases");a(_u,"readMetaDb");a(fD,"ensureDB");a(ED,"setTable");a(kc,"database");a(_p,"dropDatabase");a(at,"table");X2=1e3,j2=10;a(Z2,"runIndexing");a(e4,"dropTableMeta");a(aS,"onUpdatedTable")});var J=T((x_e,ID)=>{"use strict";var oi=require("path"),TD=require("fs-extra"),ir=W(),hD=require("fs-extra"),bd=require("os"),t4=require("net"),r4=require("recursive-iterator"),rt=U(),n4=sO(),mD=require("papaparse"),Nd=require("moment"),{inspect:s4}=require("util"),pD=require("is-number"),H_e=require("lodash"),i4=require("minimist"),o4=require("https"),a4=require("http"),{hdb_errors:yd}=ee(),c4=/^((\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)))$/,gD=require("util").promisify(setTimeout),u4=100,l4=5,_4="",d4=4,SD={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};ID.exports={isEmpty:Vr,isEmptyOrZeroLength:Zn,arrayHasEmptyValues:h4,arrayHasEmptyOrZeroLengthValues:m4,buildFolderPath:p4,isBoolean:RD,errorizeMessage:f4,stripFileExtension:T4,autoCast:g4,autoCastJSON:AD,autoCastJSONDeep:uS,removeDir:R4,compareVersions:A4,isCompatibleDataVersion:O4,escapeRawValue:b4,unescapeValue:N4,stringifyProps:y4,timeoutPromise:I4,isClusterOperation:D4,getClusterUser:M4,checkGlobalSchemaTable:L4,getHomeDir:bD,getPropsFilePath:w4,promisifyPapaParse:U4,removeBOM:ND,createEventPromise:P4,checkProcessRunning:v4,checkSchemaTableExist:B4,checkSchemaExists:yD,checkTableExists:wD,getStartOfTomorrowInSeconds:H4,getLimitKey:x4,isObject:S4,isNotEmptyAndHasValue:E4,autoCasterIsNumberCheck:OD,backtickASTSchemaItems:F4,isPortTaken:C4,createForkArgs:q4,autoCastBoolean:G4,async_set_timeout:gD,getTableHashAttribute:k4,doesSchemaExist:V4,doesTableExist:$4,stringifyObj:Y4,ms_to_time:K4,changeExtension:W4,getEnvCliRootPath:lS,noBootFile:Q4,httpRequest:z4,transformReq:J4,convertToMS:X4,PACKAGE_ROOT:rt.PACKAGE_ROOT};function f4(e){return e instanceof Error?e:new Error(e)}a(f4,"errorizeMessage");function Vr(e){return e==null}a(Vr,"isEmpty");function E4(e){return!Vr(e)&&(e||e===0||e===""||RD(e))}a(E4,"isNotEmptyAndHasValue");function Zn(e){return Vr(e)||e.length===0||e.size===0}a(Zn,"isEmptyOrZeroLength");function h4(e){if(Vr(e))return!0;for(let t=0;t<e.length;t++)if(Vr(e[t]))return!0;return!1}a(h4,"arrayHasEmptyValues");function m4(e){if(Zn(e))return!0;for(let t=0;t<e.length;t++)if(Zn(e[t]))return!0;return!1}a(m4,"arrayHasEmptyOrZeroLengthValues");function p4(...e){try{return e.join(oi.sep)}catch{console.error(e)}}a(p4,"buildFolderPath");function RD(e){return Vr(e)?!1:e===!0||e===!1}a(RD,"isBoolean");function S4(e){return Vr(e)?!1:typeof e=="object"}a(S4,"isObject");function T4(e){return Zn(e)?_4:e.slice(0,-d4)}a(T4,"stripFileExtension");function g4(e){return Vr(e)||e===""||typeof e!="string"?e:SD[e]!==void 0?SD[e]:OD(e)===!0?Number(e):c4.test(e)?new Date(e):e}a(g4,"autoCast");function AD(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(AD,"autoCastJSON");function uS(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=uS(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=uS(r);n!==r&&(e[t]=n)}return e}else return AD(e)}a(uS,"autoCastJSONDeep");function OD(e){if(e.startsWith("0.")&&pD(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&pD(e))}a(OD,"autoCasterIsNumberCheck");async function R4(e){if(Zn(e))throw new Error(`Directory path: ${e} does not exist`);try{await hD.emptyDir(e),await hD.remove(e)}catch(t){throw ir.error(`Error removing files in ${e} -- ${t}`),t}}a(R4,"removeDir");function A4(e,t){if(Zn(e)){ir.info("Invalid current version sent as parameter.");return}if(Zn(t)){ir.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(A4,"compareVersions");function O4(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(O4,"isCompatibleDataVersion");function b4(e){if(Vr(e))return e;let t=String(e);return t==="."?rt.UNICODE_PERIOD:t===".."?rt.UNICODE_PERIOD+rt.UNICODE_PERIOD:t.replace(rt.FORWARD_SLASH_REGEX,rt.UNICODE_FORWARD_SLASH)}a(b4,"escapeRawValue");function N4(e){if(Vr(e))return e;let t=String(e);return t===rt.UNICODE_PERIOD?".":t===rt.UNICODE_PERIOD+rt.UNICODE_PERIOD?"..":String(e).replace(rt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(N4,"unescapeValue");function y4(e,t){if(Vr(e))return ir.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+bd.EOL}!Zn(n)&&n[0]===";"?r+=" "+n+s+bd.EOL:Zn(n)||(r+=n+"="+s+bd.EOL)}catch{ir.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(y4,"stringifyProps");function bD(){let e;try{e=bd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(bD,"getHomeDir");function w4(){let e=oi.join(bD(),rt.HDB_HOME_DIR_NAME,rt.BOOT_PROPS_FILE_NAME);return TD.existsSync(e)||(e=oi.join(__dirname,"../","hdb_boot_properties.file")),e}a(w4,"getPropsFilePath");function I4(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(I4,"timeoutPromise");async function C4(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=t4.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(C4,"isPortTaken");function D4(e){try{return rt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ir.error(`Error checking operation against cluster ops ${t}`)}return!1}a(D4,"isClusterOperation");function L4(e,t){let r=(Ne(),te(qe)).getDatabases();if(!r[e])return yd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return yd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(L4,"checkGlobalSchemaTable");function M4(e,t){if(Vr(t)){ir.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Vr(e)||Zn(e)){ir.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){ir.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){ir.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(M4,"getClusterUser");function U4(){mD.parsePromise=function(e,t,r){return new Promise(function(n,s){mD.parse(e,{header:!0,transformHeader:ND,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(U4,"promisifyPapaParse");function ND(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(ND,"removeBOM");function P4(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;ir.info(`Got cluster status event response: ${s4(s)}`);try{i.cancel()}catch{ir.error("Error trying to cancel timeout.")}n(s)})})}a(P4,"createEventPromise");async function v4(e){let t=!0,r=0;do await gD(u4*r++),(await n4.findPs(e)).length>0&&(t=!1);while(t&&r<l4);if(t)throw new Error(`process ${e} was not started`)}a(v4,"checkProcessRunning");function B4(e,t){let r=yD(e);if(r)return r;let n=wD(e,t);if(n)return n}a(B4,"checkSchemaTableExist");function yD(e){let{getDatabases:t}=(Ne(),te(qe));if(!t()[e])return yd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yD,"checkSchemaExists");function wD(e,t){let{getDatabases:r}=(Ne(),te(qe));if(!r()[e][t])return yd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wD,"checkTableExists");function H4(){let e=Nd().utc().add(1,rt.MOMENT_DAYS_TAG).startOf(rt.MOMENT_DAYS_TAG).unix(),t=Nd().utc().unix();return e-t}a(H4,"getStartOfTomorrowInSeconds");function x4(){return Nd().utc().format("DD-MM-YYYY")}a(x4,"getLimitKey");function F4(e){try{let t=new r4(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){ir.error("Got an error back ticking items."),ir.error(t)}}a(F4,"backtickASTSchemaItems");function q4(e){return[e]}a(q4,"createForkArgs");function G4(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(G4,"autoCastBoolean");function k4(e,t){let{getDatabases:r}=(Ne(),te(qe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(k4,"getTableHashAttribute");function V4(e){let{getDatabases:t}=(Ne(),te(qe));return t()[e]!==void 0}a(V4,"doesSchemaExist");function $4(e,t){let{getDatabases:r}=(Ne(),te(qe));return r()[e]?.[t]!==void 0}a($4,"doesTableExist");function Y4(e){try{return JSON.stringify(e)}catch{return e}}a(Y4,"stringifyObj");function K4(e){let t=Nd.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(K4,"ms_to_time");function W4(e,t){let r=oi.basename(e,oi.extname(e));return oi.join(oi.dirname(e),r+t)}a(W4,"changeExtension");function lS(){if(process.env[rt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[rt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=i4(process.argv);if(e[rt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[rt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(lS,"getEnvCliRootPath");var cS;function Q4(){if(cS)return cS;let e=lS();lS()&&TD.pathExistsSync(oi.join(e,rt.HDB_CONFIG_FILE))&&(cS=!0)}a(Q4,"noBootFile");function z4(e,t){let r;return e.protocol==="http:"?r=a4:r=o4,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(z4,"httpRequest");function J4(e){if(!e.schema&&!e.database){e.schema=rt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(J4,"transformReq");function X4(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(X4,"convertToMS")});var Z=T((q_e,MD)=>{"use strict";var _S=require("fs-extra"),no=require("path"),CD=require("os"),j4=require("properties-reader"),Eu=W(),fu=J(),_e=U(),wd=vr(),Z4="Error initializing environment manager",Id="BOOT_PROPS_FILE_PATH",DD=!1,e3={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ns={};MD.exports={BOOT_PROPS_FILE_PATH:Id,getHdbBasePath:t3,setHdbBasePath:r3,get:LD,initSync:s3,setProperty:Me,initTestEnvironment:i3};function t3(){return Ns[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(t3,"getHdbBasePath");function r3(e){Ns[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(r3,"setHdbBasePath");function LD(e){let t=wd.getConfigValue(e);return t===void 0?Ns[e]:t}a(LD,"get");function Me(e,t){e3[e]&&(Ns[e]=t),wd.updateConfigObject(e,t)}a(Me,"setProperty");function n3(){let e;try{e=fu.getPropsFilePath(),_S.accessSync(e,_S.constants.F_OK|_S.constants.R_OK),DD=!0;let t=j4(e);return Ns[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),Ns[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ns[Id]=e,!0}catch{return Eu.trace(`Environment manager found no properties file at ${e}`),!1}}a(n3,"doesPropFileExist");function s3(e=!1){try{(DD||n3()||fu.noBootFile())&&(wd.initConfig(e),Ns[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=wd.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Eu.error(Z4),Eu.error(t),console.error(t),process.exit(1)}}a(s3,"initSync");function i3(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=no.join(__dirname,"../../","unitTests");Ns[Id]=no.join(u,"hdb_boot_properties.file"),Me(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,no.join(u,"settings.test")),Me(_e.HDB_SETTINGS_NAMES.INSTALL_USER,CD.userInfo()?CD.userInfo().username:void 0),Me(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Me(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,no.join(u,"envDir","log")),Me(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Me(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Me(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Me(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,no.join(u,"envDir")),Me(_e.CONFIG_PARAMS.STORAGE_PATH,no.join(u,"envDir")),s&&(Me(_e.CONFIG_PARAMS.HTTP_SECUREPORT,LD(_e.CONFIG_PARAMS.HTTP_PORT)),Me(_e.CONFIG_PARAMS.HTTP_PORT,null)),Me(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Me(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Me(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,fu.isEmpty(i)?!1:i),Me(_e.CONFIG_PARAMS.HTTP_CORS,fu.isEmpty(i)?!1:i),Me(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Me(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Me(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Me(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Me(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,no.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Me(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,fu.isEmpty(c)?!1:c),o&&(Me("CORS_ACCESSLIST",o),Me(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Me(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Me(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Me(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Me(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Me(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Me(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Id}. Please check your boot props and settings files`;Eu.fatal(r),Eu.error(t)}}a(i3,"initTestEnvironment")});var ES={};Fe(ES,{loadGQLSchema:()=>c3,start:()=>fS,startOnMainThread:()=>a3});function fS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let H=function(v){if(v.kind==="NonNullType"){let K=H(v.type);return K.nullable=!1,K}if(v.kind==="ListType")return{type:"array",elements:H(v.type)};let $={type:v.name?.value};return Object.defineProperty($,"location",{value:v.loc.startToken}),$};a(H,"getProperty");let O=S.name.value,g=[],R={table:null,database:null,properties:g};f.set(O,R);for(let v of S.directives){if(v.name.value==="table"){for(let M of v.arguments)R[M.name.value]=M.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=O),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(v.name.value==="sealed"&&(R.sealed=!0),v.name.value==="export"){R.export=!0;for(let M of v.arguments)M.name.value==="name"&&(R.export={name:M.value.value})}}let B=!1;for(let v of S.fields){let M=H(v.type);M.name=v.name.value,g.push(M);for(let $ of v.directives)if($.name.value==="primaryKey")B?console.warn("Can not define two attributes as a primary key"):(M.isPrimaryKey=!0,B=!0);else if($.name.value==="indexed")M.indexed=!0;else if($.name.value==="relationship"){let K={};for(let z of $.arguments)K[z.name.value]=z.value.value;M.relationship=K}else if($.name.value==="createdTime")M.assignCreatedTime=!0;else if($.name.value==="updatedTime")M.assignUpdatedTime=!0;else if($.name.value==="expiresAt")M.expiresAt=!0;else if($.name.value==="allow"){let K=M.authorizedRoles=[];for(let z of $.arguments)z.name.value==="role"&&K.push(z.value.value)}}R.type=O,O==="Query"&&(h=R)}function p(S){let O=f.get(S.type);O?(Object.defineProperty(S,"properties",{value:O.properties}),Object.defineProperty(S,"definition",{value:O})):S.type==="array"?p(S.elements):o3.includes(S.type)||(0,UD.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 f.values())for(let O of S.properties)p(O);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,dS.dirname)(n),S.tableClass):i.set((0,dS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var dS,UD,o3,a3,c3,PD=Oe(()=>{dS=require("path");Ne();UD=x(je()),o3=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(fS,"start");a3=fS,c3=fS({ensureTable:at}).handleFile});async function Cd(e){return u3?(hu||(hu=l3(d3)),(await(await hu).import(e)).namespace):import(e)}async function l3(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),hu=new Compartment({console,Math,Date,fetch:_3,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,BD.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:vt,tables:Gr,databases:tt})}};let n=await(0,vD.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),hu}function _3(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 d3(){return{Resource:vt,tables:Gr}}var vD,BD,u3,hu,hS=Oe(()=>{gn();Ne();vD=require("fs/promises"),BD=require("path"),u3=!1;a(Cd,"secureImport");a(l3,"getCompartment");a(_3,"secureOnlyFetch");a(d3,"getGlobalVars")});var pS={};Fe(pS,{handleFile:()=>f3});async function f3(e,t,r,n){let s=new Map,i=(0,HD.pathToFileURL)(r).toString(),o=await Cd(i);u(o.default)&&n.set((0,mS.dirname)(t),o.default),c(o,(0,mS.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var HD,mS,xD=Oe(()=>{HD=require("url");hS();mS=require("path");a(f3,"handleFile")});var TS={};Fe(TS,{start:()=>E3});function E3({resources:e}){e.set("login",SS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var SS,FD=Oe(()=>{gn();a(E3,"start");SS=class extends vt{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 KD={};Fe(KD,{parse:()=>RS,streamAsJSON:()=>mu,stringify:()=>so});function mu(e){return new gS({value:e})}function qD(e){return console.error(e),JSON.stringify(e.toString())}function GD(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function so(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===$D)return YD(e);if(t.resolution)return t.resolution.then(()=>so(e));throw t}}function YD(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+=YD(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+so(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function RS(e){return p3.test(e)?h3.parse(e):JSON.parse(e)}var kD,VD,h3,m3,$D,gS,p3,AS=Oe(()=>{kD=require("stream"),VD=x(require("json-bigint-fixes")),h3=(0,VD.default)({useNativeBigInt:!0}),m3=1e4,$D={};BigInt.prototype.toJSON=function(){throw $D};a(mu,"streamAsJSON");gS=class extends kD.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),qD)}catch(s){yield qD(s)}else yield so(t)}else yield so(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);GD(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>m3?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 GD(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(qD,"handleError");a(GD,"when");a(so,"stringify");a(YD,"jsStringify");p3=/-?\d{16,}/;a(RS,"parse")});var Dd=T((Z_e,WD)=>{"use strict";var S3=In();WD.exports={writeTransaction:T3};function T3(e,t,r){return S3.writeTransaction(e,t,r)}a(T3,"writeTransaction")});var XD=T((rde,JD)=>{"use strict";var g3=tn(),R3=Zs(),QD=W(),A3=rn(),tde=Dd(),O3=require("clone"),bS=require("alasql"),b3=G_(),zD=require("util"),N3=zD.promisify(R3.getTableSchema),y3=zD.promisify(g3.search),w3=U(),OS=J();b3(bS);JD.exports={update:C3};var I3="There was a problem performing this update. Please check the logs and try again.";async function C3({statement:e,hdb_user:t}){let r=await N3(e.table.databaseid,e.table.tableid),n=D3(e.columns);OS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=O3(s),c=OS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=bS.parse(u).statements[0],l=await y3(_),d=L3(n,l);return M3(o,d,t)}a(C3,"update");function D3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=bS.compile(`SELECT ${r.expression.toString()} AS [${w3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw QD.error(t),new Error(I3)}}a(D3,"createUpdateRecord");function L3(e,t){return OS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(L3,"buildUpdateRecords");async function M3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await A3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){QD.error(`Error delete new_attributes from update response: ${i}`)}return s}a(M3,"updateRecords")});var ZD=T((ode,jD)=>{var U3=require("alasql"),P3=tn(),v3=W(),B3=In(),yS=require("util"),NS=J(),H3=U(),x3=Zs(),sde=Dd(),ide=rn(),F3="record",q3="successfully deleted",G3=yS.callbackify(Y3),k3=yS.promisify(P3.search),V3=yS.promisify(x3.getTableSchema);jD.exports={convertDelete:G3};function $3(e){return`${e.deleted_hashes.length} ${F3}${e.deleted_hashes.length===1?"":"s"} ${q3}`}a($3,"generateReturnMessage");async function Y3({statement:e,hdb_user:t}){let r=await V3(e.table.databaseid,e.table.tableid);NS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=NS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=U3.parse(o).statements[0],u={operation:H3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await k3(c);let _=await B3.deleteRecords(u);return NS.isEmptyOrZeroLength(_.message)&&(_.message=$3(_)),delete _.txn_time,_}catch(_){throw v3.error(_),_.hdb_code?_.message:_}}a(Y3,"convertDelete")});var sL=T((cde,nL)=>{"use strict";var K3=Gi(),{hdb_errors:eL}=ee(),{getDatabases:tL}=(Ne(),te(qe));nL.exports={checkSchemaExists:rL,checkSchemaTableExists:W3,schema_describe:K3};async function rL(e){if(!tL()[e])return eL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(rL,"checkSchemaExists");async function W3(e,t){let r=await rL(e);if(r)return r;if(!tL()[e][t])return eL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(W3,"checkSchemaTableExists")});var pu=T((lde,Q3)=>{Q3.exports={name:"harperdb",version:"4.3.0-beta.4",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},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/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@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.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","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.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.10.0-beta.1",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},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.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",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.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",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.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Ot=T((hde,bL)=>{"use strict";var Ht=Z();Ht.initSync();var z3=require("fs-extra"),J3=require("semver"),gu=require("path"),{monotonicFactory:X3}=require("ulidx"),oL=X3(),j3=require("util"),aL=require("child_process"),Z3=j3.promisify(aL.exec),eX=aL.spawn,ye=et(),Pe=U(),DS=J(),$r=W(),Ld=Os(),tX=Dd(),Su=vr(),{onMessageByType:rX}=je(),{isMainThread:nX}=require("worker_threads"),{Encoder:sX,decode:LS}=require("msgpackr"),cL=new sX,{isEmpty:co}=DS,uL=nn(),iX=48*36e11,oX=5e9;nX&&rX(Pe.ITC_EVENT_TYPES.RESTART,()=>{cn=void 0,ao=void 0});var{connect:aX,StorageType:lL,RetentionPolicy:_L,AckPolicy:Md,DeliverPolicy:Ud,DiscardPolicy:cX,NatsConnection:_de,JetStreamManager:dde,JetStreamClient:fde,StringCodec:Ede,JSONCodec:uX,createInbox:MS,headers:lX,ErrorCode:iL}=require("nats"),{PACKAGE_ROOT:_X}=U(),dX=pu(),{recordAction:fX}=(bs(),te(tu)),dL=uX(),EX="clustering",hX=dX.engines[ye.NATS_SERVER_NAME],mX=gu.join(_X,"dependencies"),CS=gu.join(mX,`${process.platform}-${process.arch}`,ye.NATS_BINARY_NAME),wS,IS,Tu,io,oo;bL.exports={runCommand:fL,checkNATSServerInstalled:pX,createConnection:US,getConnection:Pd,getJetStreamManager:Ru,getJetStream:hL,getNATSReferences:or,getServerList:TX,createLocalStream:PS,listStreams:mL,deleteLocalStream:gX,getServerConfig:Au,listRemoteStreams:RX,viewStream:AX,viewStreamIterator:OX,publishToStream:bX,createWorkQueueStream:NX,addSourceToWorkStream:SL,request:wX,removeSourceFromWorkStream:gL,reloadNATS:vS,reloadNATSHub:IX,reloadNATSLeaf:CX,extractServerName:TL,requestErrorHandler:DX,updateWorkStream:LX,createLocalTableStream:AL,createTableStreams:MX,purgeTableStream:OL,purgeSchemaTableStreams:UX,getStreamInfo:PX,updateLocalStreams:BX,closeConnection:SX,getJsmServerName:Ou,addNatsMsgHeader:pL,updateIngestStreamConsumer:yX,clearClientCache:EL};async function fL(e,t=void 0){let{stdout:r,stderr:n}=await Z3(e,{cwd:t});if(n)throw new Error(n.replace(`
9
9
  `,""));return r.replace(`
10
10
  `,"")}a(fL,"runCommand");async function pX(){try{await z3.access(CS)}catch{return!1}let e=await fL(`${CS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return J3.eq(t,hX)}a(pX,"checkNATSServerInstalled");async function US(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await uL.getClusterUser();if(co(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}$r.trace("create nats connection called");let i=await aX({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),$r.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&$r.error("Error with Nats client connection, connection closed",o),EL()}),i}a(US,"createConnection");function EL(){cn=void 0,io=void 0,oo=void 0,ao=void 0}a(EL,"clearClientCache");async function SX(){cn&&(await cn.drain(),cn=void 0,io=void 0,oo=void 0,ao=void 0)}a(SX,"closeConnection");var cn,ao;async function Pd(){return ao||(ao=US(Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),cn=await ao),cn||ao}a(Pd,"getConnection");async function Ru(){if(io)return io;co(cn)&&await Pd();let{domain:e}=Au(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(co(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return io=await cn.jetstreamManager({domain:e,timeout:6e4}),io}a(Ru,"getJetStreamManager");async function hL(){if(oo)return oo;co(cn)&&await Pd();let{domain:e}=Au(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(co(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return oo=cn.jetstream({domain:e,timeout:6e4}),oo}a(hL,"getJetStream");async function or(){let e=cn||await Pd(),t=io||await Ru(),r=oo||await hL();return{connection:e,jsm:t,js:r}}a(or,"getNATSReferences");async function TX(e){let t=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await uL.getClusterUser(),s=await US(t,r,n),i=MS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=dL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await DS.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(TX,"getServerList");async function PS(e,t){let{jsm:r}=await or(),n=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:lL.File,retention:_L.Limits,subjects:t,discard:cX.Old,max_msgs:s,max_bytes:i,max_age:n})}a(PS,"createLocalStream");async function mL(){let{jsm:e}=await or(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(mL,"listStreams");async function gX(e){let{jsm:t}=await or();await t.streams.delete(e)}a(gX,"deleteLocalStream");async function RX(e){let{connection:t}=await or(),r=[],n=MS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(dL.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(RX,"listRemoteStreams");async function AX(e,t=void 0,r=void 0){let{jsm:n,js:s}=await or(),i=oL(),o={durable_name:i,ack_policy:Md.Explicit};t&&(o.deliver_policy=Ud.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=LS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ye.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(AX,"viewStream");async function*OX(e,t=void 0,r=void 0){let{jsm:n,js:s}=await or(),i=oL(),o={durable_name:i,ack_policy:Md.Explicit};t&&(o.deliver_policy=Ud.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=LS(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ye.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(OX,"viewStreamIterator");async function bX(e,t,r,n){$r.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=pL(n,r);let{js:s}=await or(),i=await Ou(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:cL.encode(n);try{$r.trace(`publishToStream publishing to subject: ${o}`),fX(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return RL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){$r.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await PS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(bX,"publishToStream");function pL(e,t){t===void 0&&(t=lX());let r=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ye.MSG_HEADERS.ORIGIN)&&r&&t.append(ye.MSG_HEADERS.ORIGIN,r),t}a(pL,"addNatsMsgHeader");function Au(e){e=e.toLowerCase();let t=gu.join(Ht.get(Pe.CONFIG_PARAMS.ROOTPATH),EX);if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return co(IS)&&(IS={port:Su.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Su.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.HUB,config_file:ye.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:gu.join(t,ye.PID_FILES.HUB),hdb_nats_path:t}),IS;if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return co(wS)&&(wS={port:Su.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Su.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.LEAF,config_file:ye.NATS_CONFIG_FILES.LEAF_SERVER,domain:Su.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.LEAF,pid_file_path:gu.join(t,ye.PID_FILES.LEAF),hdb_nats_path:t}),wS;$r.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Au,"getServerConfig");async function NX(e){let{jsm:t}=await or(),r=await Ou();try{await t.streams.add({name:e.stream_name,storage:lL.File,retention:_L.Limits,max_age:iX,max_bytes:oX,subjects:[`${ye.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(n){if(n.code!=="400")throw n}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(n){if(n.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Md.Explicit,durable_name:e.durable_name,deliver_policy:Ud.All,max_ack_pending:1e4});else throw n}}a(NX,"createWorkQueueStream");async function yX(){let{jsm:e}=await or();(await e.consumers.info(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,ye.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&($r.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,ye.WORK_QUEUE_CONSUMER_NAMES.durable_name),$r.info("Adding pull consumer to ingest stream"),await e.consumers.add(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Md.Explicit,durable_name:ye.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Ud.All,max_ack_pending:1e4}))}a(yX,"updateIngestStreamConsumer");async function SL(e,t,r){let{jsm:n}=await or(),s=await n.streams.info(t),i=TL(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=Ld.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(s.config.sources)||s.config.sources.length===0)s.config.sources=[];else for(let p=0,S=s.config.sources.length;p<S;p++)if(d=s.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await n.streams.purge(t,{filter:p}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${ye.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(SL,"addSourceToWorkStream");function TL(e){return e.split(".")[1]}a(TL,"extractServerName");async function gL(e,t,r){let{jsm:n}=await or(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=Ld.createNatsTableStreamName(s,i),u=await n.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await n.streams.update(t,u.config)}a(gL,"removeSourceFromWorkStream");async function wX(e,t,r=6e4,n=MS()){if(!DS.isObject(t))throw new Error("data param must be an object");let s=cL.encode(t),{connection:i}=await or(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return LS(c.data)}a(wX,"request");function vS(e){return new Promise(async(t,r)=>{let n=eX(CS,["--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(vS,"reloadNATS");async function IX(){let{pid_file_path:e}=Au(Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await vS(e)}a(IX,"reloadNATSHub");async function CX(){let{pid_file_path:e}=Au(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await vS(e)}a(CX,"reloadNATSLeaf");function DX(e,t,r){let n;switch(e.code){case iL.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case iL.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(DX,"requestErrorHandler");async function LX(e,t){let r=t+ye.SERVER_SUFFIX.LEAF;await RL(async()=>{e.subscribe===!0?await SL(r,ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await gL(r,ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(LX,"updateWorkStream");function RL(e){return tX.writeTransaction(Pe.SYSTEM_SCHEMA_NAME,Pe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(RL,"exclusiveLock");async function AL(e,t){let r=Ld.createNatsTableStreamName(e,t),n=await Ou(),s=vX(e,t,n);await PS(r,[s])}a(AL,"createLocalTableStream");async function MX(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await AL(n,s)}}a(MX,"createTableStreams");async function OL(e,t,r=!1){if(Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Ld.createNatsTableStreamName(e,t),{jsm:s}=await or();r?await s.streams.purge(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")$r.warn(n);else throw n}}a(OL,"purgeTableStream");async function UX(e,t){if(Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await OL(e,t[r])}a(UX,"purgeSchemaTableStreams");async function PX(e){return(await Ru()).streams.info(e)}a(PX,"getStreamInfo");function vX(e,t,r){return`${ye.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(vX,"createSubjectName");async function Ou(){if(Tu)return Tu;if(Tu=(await Ru())?.nc?.info?.server_name,Tu===void 0)throw new Error("Unable to get jetstream manager server name");return Tu}a(Ou,"getJsmServerName");async function BX(){let e=await Ru(),t=await Ou(),r=await mL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=HX(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===ye.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ye.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;$r.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===ye.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ye.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;$r.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");$r.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l}await e.streams.update(s.name,s)}}}a(BX,"updateLocalStreams");function HX(e){let{config:t}=e,r=!1;if(t.name===ye.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ye.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Ht.get(Pe.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(HX,"updateStreamLimits")});var xd=T((Sde,IL)=>{"use strict";var _a=N_(),da=sL(),xX=W(),FX=require("uuid").v4,pde=require("clone"),Bd=Ts(),fa=U(),qX=require("util"),ai=In(),{handleHDBError:ar,hdb_errors:GX}=ee(),{HDB_ERROR_MSGS:vd,HTTP_STATUS_CODES:cr}=GX,{SchemaEventMsg:Hd}=bn(),NL=Ot(),{getDatabases:kX}=(Ne(),te(qe)),{transformReq:Ea}=J();IL.exports={createSchema:VX,createSchemaStructure:yL,createTable:$X,createTableStructure:wL,createAttribute:zX,dropSchema:YX,dropTable:KX,dropAttribute:WX,getBackup:JX};async function VX(e){let t=await yL(e);return Bd.signalSchemaChange(new Hd(process.pid,e.operation,e.schema)),t}a(VX,"createSchema");async function yL(e){let t=_a.schema_object(e);if(t)throw ar(t,t.message,cr.BAD_REQUEST,void 0,void 0,!0);if(Ea(e),!await da.checkSchemaExists(e.schema))throw ar(new Error,vd.SCHEMA_EXISTS_ERR(e.schema),cr.BAD_REQUEST,fa.LOG_LEVELS.ERROR,vd.SCHEMA_EXISTS_ERR(e.schema),!0);return await ai.createSchema(e),`database '${e.schema}' successfully created`}a(yL,"createSchemaStructure");async function $X(e){return Ea(e),e.hash_attribute=e.primary_key??e.hash_attribute,await wL(e)}a($X,"createTable");async function wL(e){let t=_a.create_table_object(e);if(t)throw ar(t,t.message,cr.BAD_REQUEST,void 0,void 0,!0);if(_a.validateTableResidence(e.residence),!await da.checkSchemaTableExists(e.schema,e.table))throw ar(new Error,vd.TABLE_EXISTS_ERR(e.schema,e.table),cr.BAD_REQUEST,fa.LOG_LEVELS.ERROR,vd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:FX(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ai.createTable(n,e);else throw ar(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",cr.BAD_REQUEST);else await ai.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(wL,"createTableStructure");async function YX(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=_a.schema_object(e),n=t??r;if(n)throw ar(n,n.message,cr.BAD_REQUEST,void 0,void 0,!0);Ea(e);let s=await da.checkSchemaExists(e.schema);if(s)throw ar(new Error,s,cr.NOT_FOUND,fa.LOG_LEVELS.ERROR,s,!0);let i=await da.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ai.dropSchema(e),Bd.signalSchemaChange(new Hd(process.pid,e.operation,e.schema)),await NL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(YX,"dropSchema");async function KX(e){let t=_a.table_object(e);if(t)throw ar(t,t.message,cr.BAD_REQUEST,void 0,void 0,!0);Ea(e);let r=await da.checkSchemaTableExists(e.schema,e.table);if(r)throw ar(new Error,r,cr.NOT_FOUND,fa.LOG_LEVELS.ERROR,r,!0);return await ai.dropTable(e),await NL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(KX,"dropTable");async function WX(e){let t=_a.attribute_object(e);if(t)throw ar(t,t.message,cr.BAD_REQUEST,void 0,void 0,!0);Ea(e);let r=await da.checkSchemaTableExists(e.schema,e.table);if(r)throw ar(new Error,r,cr.NOT_FOUND,fa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ar(new Error,"You cannot drop a hash attribute",cr.BAD_REQUEST,void 0,void 0,!0);if(fa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ar(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,cr.BAD_REQUEST,void 0,void 0,!0);try{return await ai.dropAttribute(e),QX(e),Bd.signalSchemaChange(new Hd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw xX.error(`Got an error deleting attribute ${qX.inspect(e)}.`),n}}a(WX,"dropAttribute");function QX(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(QX,"dropAttributeFromGlobal");async function zX(e){Ea(e);let t=kX()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw ar(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,cr.BAD_REQUEST,void 0,void 0,!0);return await ai.createAttribute(e),Bd.signalSchemaChange(new Hd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(zX,"createAttribute");function JX(e){return ai.getBackup(e)}a(JX,"getBackup")});var DL=T((gde,CL)=>{"use strict";var{OPERATIONS_ENUM:XX}=U(),BS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=XX.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};CL.exports=BS});var HS=T((Ode,vL)=>{"use strict";var jX=In(),Ade=DL(),Fd=J(),qd=U(),ZX=Z(),{handleHDBError:LL,hdb_errors:ej}=ee(),{HDB_ERROR_MSGS:ML,HTTP_STATUS_CODES:UL}=ej,tj=Object.values(qd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),PL="To use this operation audit log must be enabled in harperdb-config.yaml";vL.exports=rj;async function rj(e){if(Fd.isEmpty(e.schema))throw new Error(ML.SCHEMA_REQUIRED_ERR);if(Fd.isEmpty(e.table))throw new Error(ML.TABLE_REQUIRED_ERR);if(!ZX.get(qd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw LL(new Error,PL,UL.BAD_REQUEST,qd.LOG_LEVELS.ERROR,PL,!0);let t=Fd.checkSchemaTableExist(e.schema,e.table);if(t)throw LL(new Error,t,UL.NOT_FOUND,qd.LOG_LEVELS.ERROR,t,!0);if(!Fd.isEmpty(e.search_type)&&tj.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await jX.readAuditLog(e)}a(rj,"readAuditLog")});var HL=T((Nde,BL)=>{"use strict";var{OPERATIONS_ENUM:nj}=U(),xS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=nj.GET_BACKUP,this.schema=t,this.table=r}};BL.exports=xS});var qL=T((Cde,FL)=>{"use strict";var sj=In(),wde=HL(),FS=J(),ij=U(),Ide=Z(),{handleHDBError:oj,hdb_errors:aj}=ee(),{HDB_ERROR_MSGS:xL,HTTP_STATUS_CODES:cj}=aj;FL.exports=uj;async function uj(e){if(FS.isEmpty(e.schema))throw new Error(xL.SCHEMA_REQUIRED_ERR);if(FS.isEmpty(e.table))throw new Error(xL.TABLE_REQUIRED_ERR);let t=FS.checkSchemaTableExist(e.schema,e.table);if(t)throw oj(new Error,t,cj.NOT_FOUND,ij.LOG_LEVELS.ERROR,t,!0);return await sj.getBackup(read_audit_log_object)}a(uj,"getBackup")});var KL=T((Lde,YL)=>{var ci=require("validate.js"),kL=Ze(),ha=U(),{handleHDBError:lj,hdb_errors:_j}=ee(),{HDB_ERROR_MSGS:ct,HTTP_STATUS_CODES:dj}=_j,qS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),fj={STRUCTURE_USER:"structure_user"},GL=Object.values(ha.ROLE_TYPES_ENUM),Ej="attribute_permissions",hj="attribute_name",{PERMS_CRUD_ENUM:ma}=ha,mj=[Ej,...Object.values(ma)],VL=[ma.READ,ma.INSERT,ma.UPDATE],pj=[hj,...VL];function Sj(e){let t=qS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,$L(e,t)}a(Sj,"addRoleValidation");function Tj(e){let t=qS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,$L(e,t)}a(Tj,"alterRoleValidation");function gj(e){let t=qS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,kL.validateObject(e,t)}a(gj,"dropRoleValidation");var Rj=["operation","role","id","permission","hdb_user","hdb_auth_header"];function $L(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Rj.includes(n[o])||s.push(n[o]);s.length>0&&ft(ct.INVALID_ROLE_JSON_KEYS(s),r);let i=kL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ft(o,r)}),e.permission){let o=Aj(e);o&&ft(o,r),GL.forEach(c=>{e.permission[c]&&!ci.isBoolean(e.permission[c])&&ft(ct.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(GL.indexOf(o)<0){if(o===fj.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||ft(ct.SCHEMA_NOT_FOUND(d),r)}continue}ft(ct.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ft(ct.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){ft(ct.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{mj.includes(l)||ft(ct.INVALID_PERM_KEY(l),r,o,u)}),Object.values(ma).forEach(l=>{ci.isDefined(_[l])?ci.isBoolean(_[l])||ft(ct.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):ft(ct.TABLE_PERM_MISSING(l),r,o,u)}),ci.isDefined(_.attribute_permissions)){if(!ci.isArray(_.attribute_permissions)){ft(ct.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ft(ct.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!pj.includes(p)&&p!==ma.DELETE&&ft(ct.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ci.isDefined(E.attribute_name)){ft(ct.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){ft(ct.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}VL.forEach(p=>{ci.isDefined(E[p])?ci.isBoolean(E[p])||ft(ct.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):ft(ct.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;ft(ct.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return Oj(r)}a($L,"customValidate");YL.exports={addRoleValidation:Sj,alterRoleValidation:Tj,dropRoleValidation:gj};function Aj(e){let{operation:t,permission:r}=e;if(t===ha.OPERATIONS_ENUM.ADD_ROLE||t===ha.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 ct.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ha.ROLE_TYPES_ENUM.SUPER_USER:ha.ROLE_TYPES_ENUM.CLUSTER_USER;return ct.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Aj,"validateNoSUPerms");function Oj(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ct.ROLE_PERMS_ERROR,...e};return lj(new Error,n,dj.BAD_REQUEST)}else return null}a(Oj,"generateRolePermResponse");function ft(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(ft,"addPermError")});var KS=T((Ude,JL)=>{"use strict";var WL=rn(),QL=tn(),bj=Ki(),kS=KL(),VS=Ts(),Nj=require("uuid").v4,yj=require("util"),Gd=U(),wj=J(),$S=QL.searchByValue,Ij=QL.searchByHash,Cj=yj.promisify(bj.delete),Dj=Kn(),Lj=Xo(),{hdb_errors:Mj,handleHDBError:uo}=ee(),{HDB_ERROR_MSGS:zL,HTTP_STATUS_CODES:bu}=Mj,{UserEventMsg:YS}=bn();JL.exports={addRole:Uj,alterRole:Pj,dropRole:vj,listRoles:Bj};function GS(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(GS,"scrubRoleDetails");async function Uj(e){let t=kS.addRoleValidation(e);if(t)throw t;e=GS(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 $S(r)||[])}catch(i){throw uo(i)}if(n&&n.length>0)throw uo(new Error,zL.ROLE_ALREADY_EXISTS(e.role),bu.CONFLICT,void 0,void 0,!0);e.id||(e.id=Nj());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await WL.insert(s),VS.signalUserChange(new YS(process.pid)),e=GS(e),e}a(Uj,"addRole");async function Pj(e){let t=kS.alterRoleValidation(e);if(t)throw t;e=GS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await WL.update(r)}catch(s){throw uo(s)}if(n&&n?.message==="updated 0 of 1 records")throw uo(new Error,"Invalid role id",bu.BAD_REQUEST,void 0,void 0,!0);return await VS.signalUserChange(new YS(process.pid)),e}a(Pj,"alterRole");async function vj(e){let t=kS.dropRoleValidation(e);if(t)throw uo(new Error,t,bu.BAD_REQUEST,void 0,void 0,!0);let r=new Lj(Gd.SYSTEM_SCHEMA_NAME,Gd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Ij(r));if(n.length===0)throw uo(new Error,zL.ROLE_NOT_FOUND,bu.NOT_FOUND,void 0,void 0,!0);let s=new Dj(Gd.SYSTEM_SCHEMA_NAME,Gd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await $S(s)),o=!1;if(wj.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw uo(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,bu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Cj(c),VS.signalUserChange(new YS(process.pid)),`${n[0].role} successfully deleted`}a(vj,"dropRole");async function Bj(){return $S({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Bj,"listRoles")});var eM=T((vde,ZL)=>{"use strict";var Hj=Z(),ui=require("joi"),xj=Ze(),XL=require("moment"),Fj=require("fs-extra"),WS=require("path"),qj=require("lodash"),Nu=U(),{LOG_LEVELS:lo}=U(),Gj="YYYY-MM-DD hh:mm:ss",kj=WS.resolve(__dirname,"../logs");ZL.exports=function(e){return xj.validateBySchema(e,Vj)};var Vj=ui.object({from:ui.custom(jL),until:ui.custom(jL),level:ui.valid(lo.NOTIFY,lo.FATAL,lo.ERROR,lo.WARN,lo.INFO,lo.DEBUG,lo.TRACE),order:ui.valid("asc","desc"),limit:ui.number().min(1),start:ui.number().min(0),log_name:ui.custom($j)});function jL(e,t){if(XL(e,XL.ISO_8601).format(Gj)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(jL,"validateDatetime");function $j(e,t){if(qj.invert(Nu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Hj.get(Nu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Nu.LOG_NAMES.HDB:e,i=s===Nu.LOG_NAMES.INSTALL?WS.join(kj,Nu.LOG_NAMES.INSTALL):WS.join(n,s);return Fj.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a($j,"validateReadLogPath")});var zS=T((Hde,rM)=>{"use strict";var kd=U(),Yj=W(),Kj=Z(),Wj=eM(),QS=require("path"),tM=require("fs-extra"),{once:Qj}=require("events"),{handleHDBError:zj,hdb_errors:Jj}=ee(),{PACKAGE_ROOT:Xj}=U(),jj=QS.join(Xj,"logs"),Zj=1e3,eZ=200;rM.exports=tZ;async function tZ(e){let t=Wj(e);if(t)throw zj(t,t.message,Jj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Kj.get(kd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?kd.LOG_NAMES.HDB:e.log_name,s=n===kd.LOG_NAMES.INSTALL?QS.join(jj,kd.LOG_NAMES.INSTALL):QS.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?Zj:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(tM.statSync(s).size-(h+5)*eZ,0));let S=tM.createReadStream(s,{start:p});S.on("error",v=>{Yj.error(v)});let O=0,g=[],R="",B;S.on("data",v=>{let M=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=R+v;let $=0,K;for(;(K=M.exec(v))&&!S.destroyed;){B&&(B.message=v.slice($,K.index),H(B));let[z,se,Te]=K,oe=Te.split("] ["),xe=oe[0],de=oe[1];oe.splice(0,2),B={timestamp:se,thread:xe,level:de,tags:oe,message:""},$=K.index+z.length}R=v.slice($)}),S.on("end",v=>{S.destroyed||B&&(B.message=R.trim(),H(B))}),S.resume();function H(v){let M,$,K;switch(!0){case(i&&c&&_):M=new Date(v.timestamp),$=new Date(u),K=new Date(l),v.level===o&&M>=$&&M<=K&&O<E?O++:v.level===o&&M>=$&&M<=K&&(li(v,f,g),O++,O===h&&S.destroy());break;case(i&&c):M=new Date(v.timestamp),$=new Date(u),v.level===o&&M>=$&&O<E?O++:v.level===o&&M>=$&&(li(v,f,g),O++,O===h&&S.destroy());break;case(i&&_):M=new Date(v.timestamp),K=new Date(l),v.level===o&&M<=K&&O<E?O++:v.level===o&&M<=K&&(li(v,f,g),O++,O===h&&S.destroy());break;case(c&&_):M=new Date(v.timestamp),$=new Date(u),K=new Date(l),M>=$&&M<=K&&O<E?O++:M>=$&&M<=K&&(li(v,f,g),O++,O===h&&S.destroy());break;case i:v.level===o&&O<E?O++:v.level===o&&(li(v,f,g),O++,O===h&&S.destroy());break;case c:M=new Date(v.timestamp),$=new Date(u),M>=$&&O<E?O++:M>=$&&O>=E&&(li(v,f,g),O++,O===h&&S.destroy());break;case _:M=new Date(v.timestamp),K=new Date(l),M<=K&&O<E?O++:M<=K&&O>=E&&(li(v,f,g),O++,O===h&&S.destroy());break;default:O<E?O++:(li(v,f,g),O++,O===h&&S.destroy())}}return a(H,"onLogMessage"),await Qj(S,"close"),g}a(tZ,"readLog");function li(e,t,r){t==="desc"?rZ(e,r):t==="asc"?nZ(e,r):r.push(e)}a(li,"pushLineToResult");function rZ(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(rZ,"insertDescending");function nZ(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(nZ,"insertAscending")});var Vd=T((kde,oM)=>{"use strict";var JS=require("joi"),{string:yu,boolean:nM,date:sZ}=JS.types(),iZ=Ze(),{validateSchemaExists:Fde,validateTableExists:qde,validateSchemaName:Gde}=$n(),oZ=U(),aZ=et(),sM=Z();sM.initSync();var cZ=yu.invalid(sM.get(oZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(aZ.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(),iM={operation:yu.valid("add_node","update_node","set_node_replication"),node_name:cZ,subscriptions:JS.array().items({table:yu.optional(),schema:yu.optional(),database:yu.optional(),subscribe:nM.required(),publish:nM.required().custom(lZ),start_time:sZ.iso()}).min(1).required()};function uZ(e){return iZ.validateBySchema(e,JS.object(iM))}a(uZ,"addUpdateNodeValidator");function lZ(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(lZ,"checkForFalsy");oM.exports={addUpdateNodeValidator:uZ,validation_schema:iM}});var cM=T(($de,aM)=>{var _Z=Ze(),dZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};aM.exports=function(e){return _Z.validateObject(e,dZ)}});var jS=T((Yde,uM)=>{"use strict";var fZ=U().OPERATIONS_ENUM,XS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=fZ.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uM.exports=XS});var _M=T((Wde,lM)=>{"use strict";var EZ={OPERATION:"operation",REFRESH:"refresh"},ZS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},eT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};lM.exports={JWTTokens:ZS,TOKEN_TYPE_ENUM:EZ,JWTRSAKeys:eT}});var Cu=T((zde,hM)=>{"use strict";var Iu=require("jsonwebtoken"),tT=require("fs-extra"),rT=J(),un=U(),{handleHDBError:ur,hdb_errors:hZ}=ee(),{HTTP_STATUS_CODES:lr,AUTHENTICATION_ERROR_MSGS:_r}=hZ,wu=W(),dM=j_(),iT=nn(),mZ=rn().update,pZ=jS(),SZ=Ts(),{UserEventMsg:TZ}=bn(),_i=Z();_i.initSync();var nT=require("path"),{JWTTokens:gZ,JWTRSAKeys:RZ,TOKEN_TYPE_ENUM:$d}=_M(),AZ=_i.get(un.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?_i.get(un.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",OZ=_i.get(un.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?_i.get(un.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Yd="RS256",sT;hM.exports={createTokens:bZ,validateOperationToken:yZ,refreshOperationToken:NZ,validateRefreshToken:EM};async function bZ(e){if(rT.isEmpty(e)||typeof e!="object")throw ur(new Error,_r.INVALID_AUTH_OBJECT,lr.BAD_REQUEST,void 0,void 0,!0);if(rT.isEmpty(e.username))throw ur(new Error,_r.USERNAME_REQUIRED,lr.BAD_REQUEST,void 0,void 0,!0);if(rT.isEmpty(e.password))throw ur(new Error,_r.PASSWORD_REQUIRED,lr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await iT.findAndValidateUser(e.username,e.password),!t)throw ur(new Error,_r.INVALID_CREDENTIALS,lr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw wu.error(f),ur(new Error,_r.INVALID_CREDENTIALS,lr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Kd(),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 fM(i,r.private_key,r.passphrase),c=await Iu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:OZ,algorithm:Yd,subject:$d.REFRESH}),u=dM.hash(c),_=new pZ(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await mZ(_)}catch(f){wu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw ur(new Error,_r.REFRESH_TOKEN_SAVE_FAILED,lr.INTERNAL_SERVER_ERROR);return SZ.signalUserChange(new TZ(process.pid)),new gZ(o,c)}a(bZ,"createTokens");async function fM(e,t,r){return await Iu.sign(e,{key:t,passphrase:r},{expiresIn:AZ,algorithm:Yd,subject:$d.OPERATION})}a(fM,"signOperationToken");async function Kd(){if(sT===void 0)try{let e=nT.join(_i.getHdbBasePath(),un.LICENSE_KEY_DIR_NAME,un.JWT_ENUM.JWT_PASSPHRASE_NAME),t=nT.join(_i.getHdbBasePath(),un.LICENSE_KEY_DIR_NAME,un.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=nT.join(_i.getHdbBasePath(),un.LICENSE_KEY_DIR_NAME,un.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await tT.readFile(e)).toString(),s=(await tT.readFile(t)).toString(),i=(await tT.readFile(r)).toString();sT=new RZ(i,s,n)}catch(e){throw wu.error(e),ur(new Error,_r.NO_ENCRYPTION_KEYS,lr.INTERNAL_SERVER_ERROR)}return sT}a(Kd,"getJWTRSAKeys");async function NZ(e){if(!e)throw ur(new Error,_r.INVALID_BODY,lr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ur(new Error,_r.REFRESH_TOKEN_REQUIRED,lr.BAD_REQUEST,void 0,void 0,!0);await EM(e.refresh_token);let t=await Kd(),r=await Iu.decode(e.refresh_token);return{operation_token:await fM({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(NZ,"refreshOperationToken");async function yZ(e){try{let t=await Kd(),r=await Iu.verify(e,t.public_key,{algorithms:Yd,subject:$d.OPERATION});return await iT.findAndValidateUser(r.username,void 0,!1)}catch(t){throw wu.warn(t),t.name&&t.name==="TokenExpiredError"?ur(new Error,_r.TOKEN_EXPIRED,lr.FORBIDDEN):ur(new Error,_r.INVALID_TOKEN,lr.UNAUTHORIZED)}}a(yZ,"validateOperationToken");async function EM(e){let t;try{let r=await Kd(),n=await Iu.verify(e,r.public_key,{algorithms:Yd,subject:$d.REFRESH});t=await iT.findAndValidateUser(n.username,void 0,!1)}catch(r){throw wu.warn(r),r.name&&r.name==="TokenExpiredError"?ur(new Error,_r.TOKEN_EXPIRED,lr.FORBIDDEN):ur(new Error,_r.INVALID_TOKEN,lr.UNAUTHORIZED)}if(!dM.validate(t.refresh_token,e))throw ur(new Error,_r.INVALID_TOKEN,lr.UNAUTHORIZED);return t}a(EM,"validateRefreshToken")});var oT=T((jde,SM)=>{"use strict";var wZ=cM(),pa=require("passport"),IZ=require("passport-local").Strategy,CZ=require("passport-http").BasicStrategy,DZ=require("util"),LZ=nn(),pM=DZ.callbackify(LZ.findAndValidateUser),Xde=br(),MZ=U(),mM=Cu();pa.use(new IZ(function(e,t,r){pM(e,t,r)}));pa.use(new CZ(function(e,t,r){pM(e,t,r)}));pa.serializeUser(function(e,t){t(null,e)});pa.deserializeUser(function(e,t){t(null,e)});function UZ(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":pa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===MZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?mM.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):mM.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:pa.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(UZ,"authorize");function PZ(e,t){let r=wZ(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(PZ,"checkPermissions");SM.exports={authorize:UZ,checkPermissions:PZ}});var Sa=T((efe,TM)=>{"use strict";var aT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},cT=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};TM.exports={Node:aT,NodeSubscription:cT}});var RM=T((rfe,gM)=>{"use strict";var vZ=U().OPERATIONS_ENUM,uT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=vZ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gM.exports=uT});var Du=T((sfe,AM)=>{"use strict";var lT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},_T=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)}};AM.exports={RemotePayloadObject:lT,RemotePayloadSubscription:_T}});var bM=T((ofe,OM)=>{"use strict";var dT=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}};OM.exports=dT});var wM=T((_fe,yM)=>{"use strict";var BZ=bM(),cfe=lt(),NM=Ve(),HZ=W(),{getSchemaPath:ufe,getTransactionAuditStorePath:lfe}=Ye(),{getDatabases:xZ}=(Ne(),te(qe));yM.exports=FZ;async function FZ(e){let t=new BZ;try{let r=xZ()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await NM.environmentDataSize(schema_path,e.name),o=await NM.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){HZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(FZ,"lmdbGetTableSize")});var CM=T((ffe,IM)=>{"use strict";var fT=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};IM.exports=fT});var Ta=T((pfe,UM)=>{"use strict";var qZ=require("fs-extra"),GZ=require("path"),Wt=require("systeminformation"),di=W(),kZ=Ot(),ET=et(),Qd=U(),VZ=wM(),MM=Gi(),{getThreadInfo:DM}=je(),bT=Z();bT.initSync();var $Z=CM(),{openEnvironment:hfe}=Ve(),{getSchemaPath:mfe}=Ye(),{database:YZ}=(Ne(),te(qe)),Wd;UM.exports={getHDBProcessInfo:ST,getNetworkInfo:gT,getDiskInfo:TT,getMemoryInfo:pT,getCPUInfo:mT,getTimeInfo:hT,getSystemInformation:RT,systemInformation:KZ,getTableSize:AT,getMetrics:OT};function hT(){return Wt.time()}a(hT,"getTimeInfo");async function mT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Wt.cpu();l.cpu_speed=await Wt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:O,...g}=await Wt.currentLoad();return g.cpus=[],O.forEach(R=>{let{raw_load:B,raw_load_idle:H,raw_load_irq:v,raw_load_nice:M,raw_load_system:$,raw_load_user:K,...z}=R;g.cpus.push(z)}),l.current_load=g,l}catch(e){return di.error(`error in getCPUInfo: ${e}`),{}}}a(mT,"getCPUInfo");async function pT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Wt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return di.error(`error in getMemoryInfo: ${e}`),{}}}a(pT,"getMemoryInfo");async function ST(){let e={core:[],clustering:[]};try{let t=await Wt.processes(),r;try{r=Number.parseInt(await qZ.readFile(GZ.join(bT.get(Qd.CONFIG_PARAMS.ROOTPATH),Qd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Qd.NODE_ERROR_CODES.ENOENT)di.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");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 di.error(`error in getHDBProcessInfo: ${t}`),e}}a(ST,"getHDBProcessInfo");async function TT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Wt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Wt.fsStats();return e.read_write=_,e.size=await Wt.fsSize(),e}catch(t){return di.error(`error in getDiskInfo: ${t}`),e}}a(TT,"getDiskInfo");async function gT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Wt.networkInterfaceDefault(),e.latency=await Wt.inetChecksite("google.com"),(await Wt.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await Wt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return di.error(`error in getNetworkInfo: ${t}`),e}}a(gT,"getNetworkInfo");async function RT(){if(Wd!==void 0)return Wd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Wt.osInfo();e=c;let u=await Wt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Wd=e,Wd}catch(t){return di.error(`error in getSystemInformation: ${t}`),e}}a(RT,"getSystemInformation");async function AT(){let e=[],t=await MM.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await VZ(n));return e}a(AT,"getTableSize");async function OT(){let e=await MM.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=YZ({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),n[s]=o}catch(i){di.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(OT,"getMetrics");async function LM(){if(bT.get(Qd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await kZ.getNATSReferences(),r=await t.streams.info(ET.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(ET.WORK_QUEUE_CONSUMER_NAMES.stream_name,ET.WORK_QUEUE_CONSUMER_NAMES.durable_name),s={ingest:{stream:{...r.state},consumer:{num_ack_pending:n._info.num_ack_pending,num_redelivered:n._info.num_redelivered,num_waiting:n._info.num_waiting,num_pending:n._info.num_pending}}};return r.sources&&(s.ingest.stream.sources=r.sources),s}}a(LM,"getNatsStreamInfo");async function KZ(e){let t=new $Z;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await RT(),t.time=hT(),t.cpu=await mT(),t.memory=await pT(),t.disk=await TT(),t.network=await gT(),t.harperdb_processes=await ST(),t.table_size=await AT(),t.metrics=await OT(),t.threads=await DM(),t.replication=await LM(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await RT();break;case"time":t.time=hT();break;case"cpu":t.cpu=await mT();break;case"memory":t.memory=await pT();break;case"disk":t.disk=await TT();break;case"network":t.network=await gT();break;case"harperdb_processes":t.harperdb_processes=await ST();break;case"table_size":t.table_size=await AT();break;case"database_metrics":case"metrics":t.metrics=await OT();break;case"threads":t.threads=await DM();break;case"replication":t.replication=await LM();break;default:break}return t}a(KZ,"systemInformation")});var Jd=T((Tfe,PM)=>{"use strict";PM.exports={version:WZ,printVersion:QZ};var zd=pu();function WZ(){if(zd)return zd.version}a(WZ,"version");function QZ(){zd&&console.log(`HarperDB Version ${zd.version}`)}a(QZ,"printVersion")});var ys=T((Ofe,xM)=>{"use strict";var zZ=rn(),NT=J(),JZ=require("util"),_o=U(),vM=Z();vM.initSync();var XZ=oT(),BM=tn(),{Node:Rfe,NodeSubscription:Afe}=Sa(),jZ=Xo(),ZZ=RM(),{RemotePayloadObject:e5,RemotePayloadSubscription:t5}=Du(),{handleHDBError:r5,hdb_errors:n5}=ee(),{HTTP_STATUS_CODES:s5,HDB_ERROR_MSGS:i5}=n5,o5=Kn(),a5=Ta(),c5=Jd(),{getDatabases:u5}=(Ne(),te(qe)),l5=JZ.promisify(XZ.authorize),_5=BM.searchByHash,d5=BM.searchByValue;xM.exports={authHeaderToUser:f5,isEmpty:E5,getNodeRecord:h5,upsertNodeRecord:m5,buildNodePayloads:p5,checkClusteringEnabled:S5,getAllNodeRecords:T5,getSystemInfo:g5,reverseSubscription:HM};async function f5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await l5(t,null),e}a(f5,"authHeaderToUser");function E5(e){return e==null}a(E5,"isEmpty");async function h5(e){let t=new jZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return _5(t)}a(h5,"getNodeRecord");async function m5(e){let t=new ZZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return zZ.upsert(t)}a(m5,"upsertNodeRecord");function HM(e){if(NT.isEmpty(e.subscribe)||NT.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(HM,"reverseSubscription");function p5(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=NT.getTableHashAttribute(u,_),{subscribe:d,publish:f}=HM(c),E=u5()[u]?.[_],h=new t5(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new e5(r,t,s,n)}a(p5,"buildNodePayloads");function S5(){if(!vM.get(_o.CONFIG_PARAMS.CLUSTERING_ENABLED))throw r5(new Error,i5.CLUSTERING_NOT_ENABLED,s5.BAD_REQUEST,void 0,void 0,!0)}a(S5,"checkClusteringEnabled");async function T5(){let e=new o5(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await d5(e))}a(T5,"getAllNodeRecords");async function g5(){let e=await a5.getSystemInformation();return{hdb_version:c5.version(),node_version:e.node_version,platform:e.platform}}a(g5,"getSystemInfo")});var yT=T((Nfe,KM)=>{"use strict";var Xd=Ot(),FM=J(),qM=et(),GM=U(),jd=W(),kM=xd(),R5=Ym(),{RemotePayloadObject:A5}=Du(),{handleHDBError:VM,hdb_errors:O5}=ee(),{HTTP_STATUS_CODES:$M}=O5,{NodeSubscription:YM}=Sa();KM.exports=b5;async function b5(e,t){let r;try{r=await Xd.request(`${t}.${qM.REQUEST_SUFFIX}`,new A5(GM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),jd.trace("Response from remote describe all request:",r)}catch(o){jd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Xd.requestErrorHandler(o,"add_node",t);throw VM(new Error,c,$M.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===qM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw VM(new Error,o,$M.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===GM.SYSTEM_SCHEMA_NAME){await Xd.createLocalTableStream(u,c);let h=new YM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=FM.doesSchemaExist(u),l=n[u]!==void 0,d=c?FM.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(jd.trace(`addNode creating schema: ${u}`),await kM.createSchema({operation:"create_schema",schema:u})),!d&&f){jd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new R5(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await kM.createTable(h)}await Xd.createLocalTableStream(u,c);let E=new YM(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(b5,"reviewSubscriptions")});var tf=T((wfe,zM)=>{"use strict";var{handleHDBError:Zd,hdb_errors:N5}=ee(),{HTTP_STATUS_CODES:ef}=N5,{addUpdateNodeValidator:y5}=Vd(),Lu=W(),QM=U(),WM=et(),w5=J(),wT=Ot(),Mu=ys(),I5=Z(),C5=yT(),{Node:D5,NodeSubscription:L5}=Sa(),{broadcast:M5}=je(),U5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",P5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",v5=I5.get(QM.CONFIG_PARAMS.CLUSTERING_NODENAME);zM.exports=B5;async function B5(e,t=!1){Lu.trace("addNode called with:",e),Mu.checkClusteringEnabled();let r=y5(e);if(r)throw Zd(r,r.message,ef.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Mu.getNodeRecord(n);if(!w5.isEmptyOrZeroLength(d))throw Zd(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,ef.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await C5(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=U5,o;let c=Mu.buildNodePayloads(s,v5,QM.OPERATIONS_ENUM.ADD_NODE,await Mu.getSystemInfo());Lu.trace("addNode sending remote payload:",c);let u;try{u=await wT.request(`${n}.${WM.REQUEST_SUFFIX}`,c)}catch(d){Lu.error(`addNode received error from request: ${d}`);let f=wT.requestErrorHandler(d,"add_node",n);throw Zd(new Error,f,ef.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===WM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Zd(new Error,d,ef.INTERNAL_SERVER_ERROR,"error",d)}Lu.trace(u);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];Lu.trace("Add node updating work stream for node:",n,"subscriptions:",E),await wT.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new L5(E.schema,E.table,E.publish,E.subscribe))}let l=new D5(n,_,u.system_info);return await Mu.upsertNodeRecord(l),M5({type:"nats_update"}),i.length>0?o.message=P5:o.message=`Successfully added '${n}' to manifest`,o}a(B5,"addNode")});var LT=T((Dfe,jM)=>{"use strict";var{handleHDBError:IT,hdb_errors:H5}=ee(),{HTTP_STATUS_CODES:CT}=H5,{addUpdateNodeValidator:x5}=Vd(),Uu=W(),XM=U(),JM=et(),Cfe=J(),DT=Ot(),Pu=ys(),F5=Z(),{cloneDeep:q5}=require("lodash"),G5=yT(),{Node:k5,NodeSubscription:V5}=Sa(),{broadcast:$5}=je(),Y5="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",K5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",W5=F5.get(XM.CONFIG_PARAMS.CLUSTERING_NODENAME);jM.exports=Q5;async function Q5(e){Uu.trace("updateNode called with:",e),Pu.checkClusteringEnabled();let t=x5(e);if(t)throw IT(t,t.message,CT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Pu.getNodeRecord(r);s.length>0&&(n=q5(s));let{added:i,skipped:o}=await G5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Y5,c;let u=Pu.buildNodePayloads(i,W5,XM.OPERATIONS_ENUM.UPDATE_NODE,await Pu.getSystemInfo());Uu.trace("updateNode sending remote payload:",u);let _;try{_=await DT.request(`${r}.${JM.REQUEST_SUFFIX}`,u)}catch(l){Uu.error(`updateNode received error from request: ${l}`);let d=DT.requestErrorHandler(l,"update_node",r);throw IT(new Error,d,CT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===JM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw IT(new Error,l,CT.INTERNAL_SERVER_ERROR,"error",l)}Uu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];Uu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await DT.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return n||(n=[new k5(r,[],_.system_info)]),await z5(n[0],i,_.system_info),o.length>0?c.message=K5:c.message=`Successfully updated '${r}'`,c}a(Q5,"updateNode");async function z5(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new V5(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Pu.upsertNodeRecord(n),$5({type:"nats_update"})}a(z5,"updateNodeTable")});var nU=T((Mfe,rU)=>{"use strict";var tU=require("joi"),{string:ZM}=tU.types(),J5=Ze(),eU=U(),X5=Z(),j5=et();rU.exports=Z5;function Z5(e){let t=ZM.invalid(X5.get(eU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(j5.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=tU.object({operation:ZM.valid(eU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return J5.validateBySchema(e,r)}a(Z5,"removeNodeValidator")});var nf=T((Pfe,uU)=>{"use strict";var{handleHDBError:sU,hdb_errors:e8}=ee(),{HTTP_STATUS_CODES:iU}=e8,t8=nU(),vu=W(),oU=ys(),r8=J(),rf=U(),aU=et(),cU=Ot(),n8=Z(),{RemotePayloadObject:s8}=Du(),{NodeSubscription:i8}=Sa(),o8=xc(),a8=Ki(),{broadcast:c8}=je(),u8=n8.get(rf.CONFIG_PARAMS.CLUSTERING_NODENAME);uU.exports=l8;async function l8(e){vu.trace("removeNode called with:",e),oU.checkClusteringEnabled();let t=t8(e);if(t)throw sU(t,t.message,iU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await oU.getNodeRecord(r);if(r8.isEmptyOrZeroLength(n))throw sU(new Error,`Node '${r}' was not found.`,iU.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new s8(rf.OPERATIONS_ENUM.REMOVE_NODE,u8,[]),i,o=!1;try{i=await cU.request(`${r}.${aU.REQUEST_SUFFIX}`,s),vu.trace("Remove node reply from remote node:",r,i)}catch(u){vu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];vu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new i8(l.schema,l.table,!1,!1);await cU.updateWorkStream(d,r)}let c=new o8(rf.SYSTEM_SCHEMA_NAME,rf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await a8.deleteRecord(c),c8({type:"nats_update"}),i?.status===aU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(vu.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(l8,"removeNode")});var dU=T((Bfe,_U)=>{"use strict";var lU=require("joi"),{string:_8,array:d8}=lU.types(),f8=Ze(),E8=Vd();_U.exports=h8;function h8(e){let t=lU.object({operation:_8.valid("configure_cluster").required(),connections:d8.items(E8.validation_schema).required()});return f8.validateBySchema(e,t)}a(h8,"configureClusterValidator")});var MT=T((xfe,pU)=>{"use strict";var m8=U(),sf=W(),p8=J(),S8=nf(),T8=tf(),fU=ys(),g8=dU(),{handleHDBError:EU,hdb_errors:R8}=ee(),{HTTP_STATUS_CODES:hU}=R8,A8="Configure cluster complete.",O8="Failed to configure the cluster. Check the logs for more details.",b8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";pU.exports=N8;async function N8(e){sf.trace("configure cluster called with:",e),fU.checkClusteringEnabled();let t=g8(e);if(t)throw EU(t,t.message,hU.BAD_REQUEST,void 0,void 0,!0);let r=await fU.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(mU(S8,{operation:m8.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);sf.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(mU(T8,E,E.node_name))}let c=await Promise.allSettled(i);sf.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(sf.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(p8.isEmptyOrZeroLength(u))return{message:A8,connections:_};if(l)return{message:b8,failed_nodes:u,connections:_};throw EU(new Error,O8,hU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(N8,"configureCluster");async function mU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(mU,"functionWrapper")});var TU=T((qfe,SU)=>{"use strict";var of=require("joi"),y8=Ze(),{validateSchemaExists:w8,validateTableExists:I8,validateSchemaName:C8}=$n(),D8=of.object({operation:of.string().valid("purge_stream"),schema:of.string().custom(w8).custom(C8).required(),table:of.string().custom(I8).required()});function L8(e){return y8.validateBySchema(e,D8)}a(L8,"purgeStreamValidator");SU.exports=L8});var UT=T((kfe,gU)=>{"use strict";var{handleHDBError:M8,hdb_errors:U8}=ee(),{HTTP_STATUS_CODES:P8}=U8,v8=TU(),B8=Ot(),H8=ys();gU.exports=x8;async function x8(e){if(e.purge_ingest!==!0){let s=v8(e);if(s)throw M8(s,s.message,P8.BAD_REQUEST,void 0,void 0,!0)}H8.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await B8.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(x8,"purgeStream")});var BT=T(($fe,yU)=>{"use strict";var vT=ys(),F8=Ot(),OU=Z(),af=U(),fo=et(),q8=J(),PT=W(),{RemotePayloadObject:G8}=Du(),{ErrorCode:RU}=require("nats"),AU=OU.get(af.CONFIG_PARAMS.CLUSTERING_ENABLED),bU=OU.get(af.CONFIG_PARAMS.CLUSTERING_NODENAME);yU.exports={clusterStatus:k8,buildNodeStatus:NU};async function k8(){let e={node_name:bU,is_enabled:AU,connections:[]};if(!AU)return e;let t=await vT.getAllNodeRecords();if(q8.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(NU(t[n],e.connections));return await Promise.allSettled(r),e}a(k8,"clusterStatus");async function NU(e,t){let r=e.name,n=new G8(af.OPERATIONS_ENUM.CLUSTER_STATUS,bU,void 0,await vT.getSystemInfo()),s,i,o=fo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await F8.request(fo.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===fo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=fo.CLUSTER_STATUS_STATUSES.CLOSED,PT.error(`Error getting node status from ${r} `,s))}catch(u){PT.warn(`Error getting node status from ${r}`,u),u.code===RU.NoResponders?o=fo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===RU.Timeout?o=fo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=fo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new V8(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==af.PRE_4_0_0_VERSION&&await vT.upsertNodeRecord(u)}catch(u){PT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(NU,"buildNodeStatus");function V8(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(V8,"NodeStatusObject")});var xT=T((Kfe,wU)=>{"use strict";var{handleHDBError:$8,hdb_errors:Y8}=ee(),{HTTP_STATUS_CODES:K8}=Y8,W8=Ot(),Q8=ys(),HT=J(),cf=require("joi"),z8=Ze(),J8=2e3,X8=cf.object({timeout:cf.number().min(1),connected_nodes:cf.boolean(),routes:cf.boolean()});wU.exports=j8;async function j8(e){Q8.checkClusteringEnabled();let t=z8.validateBySchema(e,X8);if(t)throw $8(t,t.message,K8.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||HT.autoCastBoolean(n),o=s===void 0||HT.autoCastBoolean(s),c={nodes:[]},u=await W8.getServerList(r??J8),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:HT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(j8,"clusterNetwork")});var LU=T((Qfe,DU)=>{"use strict";var FT=require("joi"),IU=Ze(),{route_constraints:CU}=Lp();DU.exports={setRoutesValidator:Z8,deleteRoutesValidator:e6};function Z8(e){let t=FT.object({server:FT.valid("hub","leaf").required(),routes:CU.required()});return IU.validateBySchema(e,t)}a(Z8,"setRoutesValidator");function e6(e){let t=FT.object({routes:CU.required()});return IU.validateBySchema(e,t)}a(e6,"deleteRoutesValidator")});var GT=T((Jfe,vU)=>{"use strict";var Eo=vr(),qT=J(),uf=U(),MU=LU(),{handleHDBError:UU,hdb_errors:t6}=ee(),{HTTP_STATUS_CODES:PU}=t6,r6="cluster routes successfully set",n6="cluster routes successfully deleted";vU.exports={setRoutes:s6,getRoutes:i6,deleteRoutes:o6};function s6(e){let t=MU.setRoutesValidator(e);if(t)throw UU(t,t.message,PU.BAD_REQUEST,void 0,void 0,!0);let r=Eo.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=qT.autoCast(_.port);let l=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Eo.updateConfigValue(uf.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Eo.updateConfigValue(uf.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:r6,set:o,skipped:i}}a(s6,"setRoutes");function i6(){let e=Eo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(i6,"getRoutes");function o6(e){let t=MU.deleteRoutesValidator(e);if(t)throw UU(t,t.message,PU.BAD_REQUEST,void 0,void 0,!0);let r=Eo.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let p=n[E];if(d.host===p.host&&d.port===p.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!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),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=qT.isEmptyOrZeroLength(n)?null:n,Eo.updateConfigValue(uf.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=qT.isEmptyOrZeroLength(s)?null:s,Eo.updateConfigValue(uf.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:n6,deleted:i,skipped:o}}a(o6,"deleteRoutes")});var HU=T((jfe,BU)=>{"use strict";var Bu=require("alasql"),ho=require("recursive-iterator"),Un=W(),a6=J(),Hu=U(),kT=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,u6(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=>Hu.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=>!Hu.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][Hu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=c6(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Hu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Bu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function c6(e){return e.filter(t=>t[Hu.PERMS_CRUD_ENUM.READ])}a(c6,"filterReadRestrictedAttrs");function u6(e,t,r,n,s){l6(e,t,r,n,s)}a(u6,"interpretAST");function xu(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(xu,"addSchemaTableToMap");function l6(e,t,r,n,s){if(!e){Un.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Bu.yy.Insert?E6(e,t,r):e instanceof Bu.yy.Select?_6(e,t,r,n,s):e instanceof Bu.yy.Update?d6(e,t,r):e instanceof Bu.yy.Delete?f6(e,t,r):Un.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(l6,"getRecordAttributesAST");function _6(e,t,r,n,s){if(!e){Un.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(a6.isEmptyOrZeroLength(i)){Un.error("No schema specified");return}e.from.forEach(c=>{xu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),xu(c.table,t,r,n,s)});let o=new ho(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Un.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new ho(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Un.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new ho(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Un.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new ho(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Un.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(_6,"getSelectAttributes");function d6(e,t,r){if(!e){Un.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ho(e.columns),s=e.table.databaseid;xu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&VT(e.table.tableid,s,i.columnid,t,r)}a(d6,"getUpdateAttributes");function f6(e,t,r){if(!e){Un.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ho(e.where),s=e.table.databaseid;xu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&VT(e.table.tableid,s,i.columnid,t,r)}a(f6,"getDeleteAttributes");function E6(e,t,r){if(!e){Un.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ho(e.columns),s=e.into.databaseid;xu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&VT(e.into.tableid,s,i.columnid,t,r)}a(E6,"getInsertAttributes");function VT(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(VT,"pushAttribute");BU.exports=kT});var KT=T((eEe,GU)=>{var lf=Ji(),xU=require("chalk"),Yr=W(),FU=require("prompt"),{promisify:h6}=require("util"),$T=U(),m6=require("fs-extra"),p6=require("path"),S6=J(),T6=Jd(),qU=Z();qU.initSync();var g6=require("moment"),R6=h6(FU.get),A6=p6.join(qU.getHdbBasePath(),$T.LICENSE_KEY_DIR_NAME,$T.LICENSE_FILE_NAME,$T.LICENSE_FILE_NAME);GU.exports={getFingerprint:b6,setLicense:O6,parseLicense:YT,register:N6,getRegistrationInfo:w6};async function O6(e){if(e&&e.key&&e.company){try{Yr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await YT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Yr.error(r),Yr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(O6,"setLicense");async function b6(){let e={};try{e=await lf.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Yr.error(r),Yr.error(t),new Error(r)}return e}a(b6,"getFingerprint");async function YT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Yr.info("Validating license input...");let r=lf.validateLicense(e,t);if(Yr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Yr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Yr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Yr.info("writing license to disk"),await m6.writeFile(A6,JSON.stringify({license_key:e,company:t}))}catch(n){throw Yr.error("Failed to write License"),n}return"Registration successful."}a(YT,"parseLicense");async function N6(){let e=await y6();return YT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(N6,"register");async function y6(){let e=await lf.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:xU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:xU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{FU.start()}catch(n){Yr.error(n)}let r;try{r=await R6(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(y6,"promptForRegistration");async function w6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await lf.getLicense()}catch(r){throw Yr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(S6.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=T6.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=g6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(w6,"getRegistrationInfo")});var VU=T((rEe,kU)=>{"use strict";var I6=et(),WT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+I6.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};kU.exports=WT});var KU=T((sEe,YU)=>{"use strict";var $U=et(),QT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+$U.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+$U.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};YU.exports=QT});var QU=T((oEe,WU)=>{"use strict";var zT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};WU.exports=zT});var JU=T((cEe,zU)=>{"use strict";var C6=et(),JT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+C6.SERVER_SUFFIX.ADMIN,this.password=r}};zU.exports=JT});var ZT=T((lEe,ZU)=>{"use strict";var ga=require("path"),ff=require("fs-extra"),D6=VU(),L6=KU(),M6=QU(),U6=JU(),XT=nn(),Aa=J(),dr=vr(),df=U(),Fu=et(),{CONFIG_PARAMS:ut}=df,qu=W(),Gu=Z(),XU=Os(),jT=Ot(),Ra="clustering",P6=1e4,jU=5;ZU.exports={generateNatsConfig:B6,removeNatsConfig:H6,getHubConfigPath:v6};function v6(){let e=Gu.get(ut.ROOTPATH);return ga.join(e,Ra,Fu.NATS_CONFIG_FILES.HUB_SERVER)}a(v6,"getHubConfigPath");async function B6(e=!1,t=void 0){Gu.initSync();let r=Gu.get(ut.ROOTPATH),n=ga.join(r,Ra,Fu.PID_FILES.HUB),s=ga.join(r,Ra,Fu.PID_FILES.LEAF),i=dr.getConfigFromFile(ut.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ga.join(r,Ra,Fu.NATS_CONFIG_FILES.HUB_SERVER),c=ga.join(r,Ra,Fu.NATS_CONFIG_FILES.LEAF_SERVER),u=dr.getConfigFromFile(ut.CLUSTERING_TLS_CERTIFICATE),_=dr.getConfigFromFile(ut.CLUSTERING_TLS_PRIVATEKEY),l=dr.getConfigFromFile(ut.CLUSTERING_TLS_CERT_AUTH),d=dr.getConfigFromFile(ut.CLUSTERING_TLS_INSECURE),f=dr.getConfigFromFile(ut.CLUSTERING_TLS_VERIFY),E=dr.getConfigFromFile(ut.CLUSTERING_NODENAME),h=dr.getConfigFromFile(ut.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await jT.checkNATSServerInstalled()||Ef("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await XT.listUsers(),S=dr.getConfigFromFile(ut.CLUSTERING_USER),O=await XT.getClusterUser();(Aa.isEmpty(O)||O.active!==!0)&&Ef(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await _f(ut.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await _f(ut.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await _f(ut.CLUSTERING_HUBSERVER_NETWORK_PORT),await _f(ut.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],R=[];for(let[z,se]of p.entries())se.role.role===df.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(g.push(new U6(se.username,XU.decrypt(se.hash))),R.push(new M6(se.username,XU.decrypt(se.hash))));let B=[],{hub_routes:H}=dr.getClusteringRoutes();if(!Aa.isEmptyOrZeroLength(H))for(let z of H)B.push(`tls://${O.sys_name_encoded}:${O.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new D6(dr.getConfigFromFile(ut.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,dr.getConfigFromFile(ut.CLUSTERING_HUBSERVER_CLUSTER_NAME),dr.getConfigFromFile(ut.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),B,g,R);l==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=Aa.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===df.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ff.writeJson(o,v),qu.trace(`Hub server config written to ${o}`));let M=`tls://${O.sys_name_encoded}:${O.uri_encoded_d_hash}@0.0.0.0:${h}`,$=`tls://${O.uri_encoded_name}:${O.uri_encoded_d_hash}@0.0.0.0:${h}`,K=new L6(dr.getConfigFromFile(ut.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[M],[$],g,R,u,_,l,d);l==null&&delete K.tls.ca_file,(t===void 0||t===df.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ff.writeJson(c,K),qu.trace(`Leaf server config written to ${c}`))}a(B6,"generateNatsConfig");async function _f(e){let t=Gu.get(e);return Aa.isEmpty(t)&&Ef(`port undefined for '${e}'`),await Aa.isPortTaken(t)&&Ef(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(_f,"isPortAvailable");function Ef(e){let t=`Error generating clustering config: ${e}`;qu.error(t),console.error(t),process.exit(1)}a(Ef,"generateNatsConfigError");async function H6(e){let{port:t,config_file:r}=jT.getServerConfig(e),{username:n,decrypt_hash:s}=await XT.getClusterUser(),i=0,o=2e3;for(;i<jU;){try{let _=await jT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){qu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=jU)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.`);await Aa.async_set_timeout(o*(i*2))}let c="0".repeat(P6),u=ga.join(Gu.get(ut.ROOTPATH),Ra,r);await ff.writeFile(u,c),await ff.remove(u),qu.notify(e,"started.")}a(H6,"removeNatsConfig")});var iP=T((dEe,sP)=>{"use strict";var Kr=Z(),x6=Ji(),Se=U(),ku=et(),ws=require("path"),{PACKAGE_ROOT:mf}=U(),eP=Z(),hf=J(),Oa="/dev/null",F6=ws.join(mf,"launchServiceScripts"),tP=ws.join(mf,"utility/scripts"),q6=ws.join(tP,Se.HDB_RESTART_SCRIPT),rP=ws.resolve(mf,"dependencies",`${process.platform}-${process.arch}`,ku.NATS_BINARY_NAME);function nP(){let t=x6.licenseSearch().ram_allocation||Se.RAM_ALLOCATION_ENUM.DEFAULT,r=Se.MEM_SETTING_KEY+t,n={[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return hf.noBootFile()&&(n[Se.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=hf.getEnvCliRootPath()),{name:Se.PROCESS_DESCRIPTORS.HDB,script:Se.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:mf}}a(nP,"generateMainServerConfig");var G6=9930;function k6(){Kr.initSync(!0);let e=Kr.get(Se.CONFIG_PARAMS.ROOTPATH),t=ws.join(e,"clustering",ku.NATS_CONFIG_FILES.HUB_SERVER),r=ws.join(Kr.get(Se.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Se.LOG_NAMES.HDB),n=eP.get(Se.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=ku.LOG_LEVEL_FLAGS[Kr.get(Se.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==G6?"-"+n:""),script:rP,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Kr.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Oa,i.error_file=Oa),i}a(k6,"generateNatsHubServerConfig");var V6=9940;function $6(){Kr.initSync(!0);let e=Kr.get(Se.CONFIG_PARAMS.ROOTPATH),t=ws.join(e,"clustering",ku.NATS_CONFIG_FILES.LEAF_SERVER),r=ws.join(Kr.get(Se.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Se.LOG_NAMES.HDB),n=eP.get(Se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=ku.LOG_LEVEL_FLAGS[Kr.get(Se.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==V6?"-"+n:""),script:rP,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Kr.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Oa,i.error_file=Oa),i}a($6,"generateNatsLeafServerConfig");function Y6(){Kr.initSync();let e=ws.join(Kr.get(Se.CONFIG_PARAMS.LOGGING_ROOT),Se.LOG_NAMES.HDB),t={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Se.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:F6,autorestart:!1};return Kr.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Oa,t.error_file=Oa),t}a(Y6,"generateClusteringUpgradeV4ServiceConfig");function K6(){let e={[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.RESTART_HDB};return hf.noBootFile()&&(e[Se.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=hf.getEnvCliRootPath()),{...{name:Se.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:tP},script:q6}}a(K6,"generateRestart");function W6(){return{apps:[nP()]}}a(W6,"generateAllServiceConfigs");sP.exports={generateAllServiceConfigs:W6,generateMainServerConfig:nP,generateRestart:K6,generateNatsHubServerConfig:k6,generateNatsLeafServerConfig:$6,generateClusteringUpgradeV4ServiceConfig:Y6}});var TP=T((hEe,SP)=>{"use strict";var Ue=U(),Q6=J(),Is=ZT(),Vu=Ot(),es=et(),fi=iP(),pf=Z(),Ei=W(),z6=ys(),{startWorker:oP,onMessageFromWorkers:J6}=je(),X6=Ta(),EEe=require("util"),j6=require("child_process"),Z6=require("fs"),{execFile:e9}=j6,we;SP.exports={enterPM2Mode:t9,start:hi,stop:eg,reload:cP,restart:uP,list:tg,describe:_P,connect:Cs,kill:o9,startAllServices:a9,startService:rg,getUniqueServicesList:dP,restartAllServices:c9,isServiceRegistered:fP,reloadStopStart:EP,restartHdb:lP,deleteProcess:s9,startClusteringProcesses:mP,startClusteringThreads:pP,isHdbRestartRunning:i9,isClusteringRunning:l9,stopClustering:u9,reloadClustering:_9};var $u=!1;J6(e=>{e.type==="restart"&&pf.initSync(!0)});function t9(){$u=!0}a(t9,"enterPM2Mode");function Cs(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{Ei.setupConsoleLogging(),r&&t(r),e(n)})})}a(Cs,"connect");var fr,r9=10,aP;function hi(e,t=!1){if($u)return n9(e);let r=e9(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=fr.indexOf(r);o>-1&&fr.splice(o,1),!aP&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<r9&&(Z6.existsSync(Is.getHubConfigPath())?hi(e):(await Is.generateNatsConfig(!0),hi(e),await new Promise(c=>setTimeout(c,3e3)),await Is.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Is.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=pf.get(Ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&es.LOG_LEVEL_HIERARCHY[o]>=es.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===es.LOG_LEVELS.ERR||l===es.LOG_LEVELS.WRN?Ei.OUTPUTS.STDERR:Ei.OUTPUTS.STDOUT;Ei.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=es.LOG_LEVELS[f]}if(es.LOG_LEVEL_HIERARCHY[o]>=es.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===es.LOG_LEVELS.ERR||l===es.LOG_LEVELS.WRN?Ei.OUTPUTS.STDERR:Ei.OUTPUTS.STDOUT;Ei.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),fr=[],!fr&&!t){let i=a(()=>{aP=!0,fr&&(fr.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)}fr.push(r)}a(hi,"start");function n9(e){return new Promise(async(t,r)=>{try{await Cs()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(n9,"startWithPM2");function eg(e){if(!$u){for(let t of fr||[])t.name===e&&(fr.splice(fr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Cs()}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(eg,"stop");function cP(e){return new Promise(async(t,r)=>{try{await Cs()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(cP,"reload");function uP(e){if(!$u)for(let t of fr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Cs()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(uP,"restart");function s9(e){return new Promise(async(t,r)=>{try{await Cs()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(s9,"deleteProcess");async function lP(){await hi(fi.generateRestart())}a(lP,"restartHdb");async function i9(){let e=await tg();for(let t in e)if(e[t].name===Ue.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(i9,"isHdbRestartRunning");function tg(){return new Promise(async(e,t)=>{try{await Cs()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(tg,"list");function _P(e){return new Promise(async(t,r)=>{try{await Cs()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(_P,"describe");function o9(){if(!$u){for(let e of fr||[])e.kill();fr=[];return}return new Promise(async(e,t)=>{try{await Cs()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(o9,"kill");async function a9(){try{await mP(),await pP(),await hi(fi.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(a9,"startAllServices");async function rg(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ue.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=fi.generateMainServerConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=fi.generateNatsIngestServiceConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=fi.generateNatsReplyServiceConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=fi.generateNatsHubServerConfig(),await hi(r,t),await Is.removeNatsConfig(e);return;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=fi.generateNatsLeafServerConfig(),await hi(r,t),await Is.removeNatsConfig(e);return;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=fi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await hi(r)}catch(r){throw we?.disconnect(),r}}a(rg,"startService");async function dP(){try{let e=await tg(),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(dP,"getUniqueServicesList");async function c9(e=[]){try{let t=!1,r=await dP();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Ue.PROCESS_DESCRIPTORS.HDB?t=!0:await uP(o))}t&&await EP(Ue.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(c9,"restartAllServices");async function fP(e){if(fr?.find(r=>r.name===e))return!0;let t=await X6.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(fP,"isServiceRegistered");async function EP(e){let t=e===Ue.PROCESS_DESCRIPTORS.HDB?pf.get(Ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):pf.get(Ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await _P(e),n=Q6.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await eg(e),await rg(e)):e===Ue.PROCESS_DESCRIPTORS.HDB?await lP():await cP(e)}a(EP,"reloadStopStart");var hP;async function mP(e=!1){for(let t in Ue.CLUSTERING_PROCESSES){let r=Ue.CLUSTERING_PROCESSES[t];await rg(r,e)}}a(mP,"startClusteringProcesses");async function pP(){hP=oP(Ue.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ue.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Vu.createWorkQueueStream(es.WORK_QUEUE_CONSUMER_NAMES),await Vu.updateIngestStreamConsumer(),await Vu.updateLocalStreams();let e=await z6.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ue.PRE_4_0_0_VERSION){Ei.info("Starting clustering upgrade 4.0.0 process"),oP(Ue.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(pP,"startClusteringThreads");async function u9(){for(let e in Ue.CLUSTERING_PROCESSES)if(e!==Ue.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ue.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await hP.terminate();else{let t=Ue.CLUSTERING_PROCESSES[e];await eg(t)}}a(u9,"stopClustering");async function l9(){for(let e in Ue.CLUSTERING_PROCESSES){let t=Ue.CLUSTERING_PROCESSES[e];if(await fP(t)===!1)return!1}return!0}a(l9,"isClusteringRunning");async function _9(){await Is.generateNatsConfig(!0),await Vu.reloadNATSHub(),await Vu.reloadNATSLeaf(),await Is.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Is.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(_9,"reloadClustering")});var Rf=T((pEe,yP)=>{"use strict";var d9=require("minimist"),{isMainThread:ig,parentPort:AP}=require("worker_threads"),nt=U(),{PROCESS_DESCRIPTORS_VALIDATE:Yu}=nt,ts=W(),og=J(),Sf=ZT(),ba=Ot(),ng=et(),OP=vr(),rs=TP(),gP=Ta(),f9=th(),{restartWorkers:Tf,onMessageByType:E9}=je(),{handleHDBError:h9,hdb_errors:m9}=ee(),{HTTP_STATUS_CODES:p9}=m9,gf=Z();gf.initSync();var Ku=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,S9="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",RP="Clustering is not enabled so cannot be restarted",T9="Invalid service",Na,ln;yP.exports={restart:bP,restartService:ag};ig&&E9(nt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?ag({service:e.workerType}):bP({operation:"restart"})});async function bP(e){ln=Object.keys(e).length===0,Na=await rs.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=d9(process.argv);if(t.service){await ag(t);return}if(ln&&!Na){console.error(S9);return}if(ln&&console.log(Ku),Na){rs.enterPM2Mode(),ts.notify(Ku);let r=f9(Object.keys(nt.CONFIG_PARAM_MAP),!0);return og.isEmptyOrZeroLength(Object.keys(r))||OP.updateConfigValue(void 0,void 0,r,!0,!0),R9(),Ku}return ig?(ts.notify(Ku),setTimeout(()=>{Tf()},50)):AP.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),Ku}a(bP,"restart");async function ag(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw h9(new Error,T9,p9.BAD_REQUEST,void 0,void 0,!0);if(Na=await rs.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!ig)return AP.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Yu.clustering:if(!gf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=RP;break}ln&&console.log("Restarting clustering"),ts.notify("Restarting clustering"),await NP();break;case Yu.clustering_config:case Yu["clustering config"]:if(!gf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=RP;break}ln&&console.log("Restarting clustering_config"),ts.notify("Restarting clustering_config"),await rs.reloadClustering();break;case"custom_functions":case"custom functions":case Yu.harperdb:case Yu.http_workers:if(ln&&!Na){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}ln&&console.log("Restarting http_workers"),ts.notify("Restarting http_workers"),ln?await rs.restart(nt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Tf("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ts.error(r),ln&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(ag,"restartService");async function g9(){await ba.publishToStream(`${ng.SUBJECT_PREFIXES.TXN}.${ng.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,ng.WORK_QUEUE_CONSUMER_NAMES.stream_name,ba.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(g9,"postDummyNatsMsg");async function R9(){await NP(),await rs.restart(nt.HDB_PROC_DESCRIPTOR),await og.async_set_timeout(2e3),gf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await sg(),ln&&(await ba.closeConnection(),process.exit(0))}a(R9,"restartPM2Mode");async function NP(){if(!OP.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await gP.getHDBProcessInfo()).clustering.length===0)ts.trace("Clustering not running, restart will start clustering services"),await Sf.generateNatsConfig(!0),await rs.startClusteringProcesses(),await rs.startClusteringThreads(),await sg(),ln&&await ba.closeConnection();else{await g9(),await Sf.generateNatsConfig(!0),Na?(ts.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await rs.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await rs.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await gP.getHDBProcessInfo()).clustering.forEach(s=>{ts.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await og.async_set_timeout(3e3),await sg(),await ba.updateLocalStreams(),ln&&await ba.closeConnection(),ts.trace("Restart clustering restarting ingest and reply service threads");let t=Tf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Tf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(NP,"restartClustering");async function sg(){await Sf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Sf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(sg,"removeNatsConfig")});var HP=T((gEe,BP)=>{"use strict";var TEe=require("lodash"),Er=U(),{handleHDBError:wP,hdb_errors:A9}=ee(),{HDB_ERROR_MSGS:O9,HTTP_STATUS_CODES:b9}=A9,cg=W();BP.exports={getRolePermissions:y9};var mo=Object.create(null),N9=a(e=>({key:e,perms:{}}),"perms_template_obj"),LP=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),MP=a((e=!1,t=!1,r=!1,n=!1)=>({[Er.PERMS_CRUD_ENUM.READ]:e,[Er.PERMS_CRUD_ENUM.INSERT]:t,[Er.PERMS_CRUD_ENUM.UPDATE]:r,[Er.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),ug=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...MP(t,r,n,s)}),"table_perms_template"),IP=a((e,t=MP())=>({attribute_name:e,describe:vP(t),[Wu]:t[Wu],[lg]:t[lg],[_g]:t[_g]}),"attr_perms_template"),CP=a((e,t=!1)=>({attribute_name:e,describe:t,[Wu]:t}),"timestamp_attr_perms_template"),{READ:Wu,INSERT:lg,UPDATE:_g}=Er.PERMS_CRUD_ENUM,UP=Object.values(Er.PERMS_CRUD_ENUM),PP=[Wu,lg,_g];function y9(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Er.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(mo[t]&&mo[t].key===n)return mo[t].perms;let s=w9(e,r);return mo[t]?mo[t].key=n:mo[t]=N9(n),mo[t].perms=s,s}catch(r){if(!e[Er.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Er.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Er.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw cg.error(n),cg.debug(r),wP(new Error,O9.OUTDATED_PERMS_TRANSLATION_ERROR,b9.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
11
11
  ${r.stack}`;throw cg.error(n),wP(new Error)}}}a(y9,"getRolePermissions");function w9(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Er.SYSTEM_SCHEMA_NAME]=n[Er.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=I9(t[i]);return}r[i]=LP(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],u=t[i][o],_=C9(c,u);r[i].describe||UP.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=ug()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=ug()})}),r}a(w9,"translateRolePermissions");function I9(e){let t=LP(!0);return Object.keys(e).forEach(r=>{t.tables[r]=ug(!0,!0,!0,!0,!0)}),t}a(I9,"createStructureUserPermissions");function C9(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Er.TIME_STAMP_NAMES.includes(d)&&(f=CP(d,l[Wu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=IP(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=vP(l),s.attribute_permissions.push(l),c||D9(l,u)}else if(_!==o){let l;Er.TIME_STAMP_NAMES.includes(_)?l=CP(_):l=IP(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=DP(s),s}else return e.describe=DP(e),e}a(C9,"getTableAttrPerms");function DP(e){return UP.filter(t=>e[t]).length>0}a(DP,"getSchemaTableDescribePerm");function vP(e){return PP.filter(t=>e[t]).length>0}a(vP,"getAttributeDescribePerm");function D9(e,t){PP.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(D9,"checkForHashPerms")});var xP={};Fe(xP,{Headers:()=>mi});var mi,Af=Oe(()=>{mi=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];n?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var Qu={};Fe(Qu,{authentication:()=>KP,bypassAuth:()=>H9,login:()=>F9,logout:()=>q9,start:()=>x9});function H9(){YP=!0}async function KP(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?P9?U9:[]:M9?L9:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new mi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Of&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Of&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Of){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let p=s.indexOf(";",h),S=s.indexOf("=",h);u=s.slice(S+1,p===-1?s.length:p),_=await qP.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Nf.AuthAuditLog(E,h,xt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===xt.AUTH_AUDIT_STATUS.SUCCESS?FP.notify(S):FP.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await Xe.getUser(E,null,null))}let d;if(!e.user)if(n){if(d=po.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await Xe.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,bf.validateOperationToken)(h)}catch(O){if(O.message==="invalid token")try{return await(0,bf.validateRefreshToken)(h),c({status:-1})}catch{throw O}}break}}catch(O){return B9&&(po.get(h)||(po.set(h,h),l(p,xt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:pi({error:O.message},e)})}po.set(n,d),v9&&l(d.username,xt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await Xe.getUser(_.user,null,e):(YP&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,kP.getSuperUser)());Of&&(e.session.update=function(E){if(!u){u=(0,VP.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,qP.put(E)},e.login=async function(E,h){e.user=await Xe.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Qs.loginPath?(f.status=302,f.headers.set("Location",Qs.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new mi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function x9({server:e,port:t}){e.request(KP,{port:t||"all"}),GP||(GP=!0,setInterval(()=>{po=new Map},_n.get(xt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),$P.user.addListener(()=>{po=new Map}))}async function F9(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function q9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var kP,bf,VP,_n,xt,Nf,$P,FP,L9,M9,U9,P9,qP,Of,YP,v9,B9,po,GP,yf=Oe(()=>{kP=x(nn());zt();pc();bf=x(Cu());Ne();VP=require("uuid"),_n=x(Z()),xt=x(U()),Nf=x(W()),$P=x(Jc());Af();ya();FP=(0,Nf.loggerWithTag)("auth-event");_n.initSync();L9=_n.get(xt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),M9=_n.get(xt.CONFIG_PARAMS.HTTP_CORS),U9=_n.get(xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),P9=_n.get(xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),qP=at({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Of=_n.get(xt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,YP=_n.get(xt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,v9=_n.get(xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,B9=_n.get(xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,po=new Map;Xe.onInvalidatedUser(()=>{po=new Map});a(H9,"bypassAuth");a(KP,"authentication");a(x9,"start");a(F9,"login");a(q9,"logout")});var ZP=T((CEe,jP)=>{"use strict";var Ie=require("joi"),WP=require("fs-extra"),QP=require("path"),Ls=Ze(),zP=Z(),JP=U(),XP=W(),{hdb_errors:G9}=ee(),{HDB_ERROR_MSGS:Qt}=G9,Ds=/^[a-zA-Z0-9-_]+$/;jP.exports={getDropCustomFunctionValidator:V9,setCustomFunctionValidator:$9,addComponentValidator:Q9,dropCustomFunctionProjectValidator:z9,packageComponentValidator:J9,deployComponentValidator:X9,setComponentFileValidator:Y9,getComponentFileValidator:W9,dropComponentFileValidator:K9};function wf(e,t,r){try{let n=zP.get(JP.CONFIG_PARAMS.COMPONENTSROOT),s=QP.join(n,t);return WP.existsSync(s)?e?t:r.message(Qt.PROJECT_EXISTS):e?r.message(Qt.NO_PROJECT):t}catch(n){return XP.error(n),r.message(Qt.VALIDATION_ERR)}}a(wf,"checkProjectExists");function zu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(zu,"checkFilePath");function k9(e,t,r,n){try{let s=zP.get(JP.CONFIG_PARAMS.COMPONENTSROOT),i=QP.join(s,e,t,r+".js");return WP.existsSync(i)?r:n.message(Qt.NO_FILE)}catch(s){return XP.error(s),n.message(Qt.VALIDATION_ERR)}}a(k9,"checkFileExists");function V9(e){let t=Ie.object({project:Ie.string().pattern(Ds).custom(wf.bind(null,!0)).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Ds).custom(k9.bind(null,e.project,e.type)).custom(zu).required().messages({"string.pattern.base":Qt.BAD_FILE_NAME})});return Ls.validateBySchema(e,t)}a(V9,"getDropCustomFunctionValidator");function $9(e){let t=Ie.object({project:Ie.string().pattern(Ds).custom(wf.bind(null,!0)).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(zu).required(),function_content:Ie.string().required()});return Ls.validateBySchema(e,t)}a($9,"setCustomFunctionValidator");function Y9(e){let t=Ie.object({project:Ie.string().pattern(Ds).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),file:Ie.string().custom(zu).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ls.validateBySchema(e,t)}a(Y9,"setComponentFileValidator");function K9(e){let t=Ie.object({project:Ie.string().pattern(Ds).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),file:Ie.string().custom(zu).optional()});return Ls.validateBySchema(e,t)}a(K9,"dropComponentFileValidator");function W9(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(zu).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ls.validateBySchema(e,t)}a(W9,"getComponentFileValidator");function Q9(e){let t=Ie.object({project:Ie.string().pattern(Ds).custom(wf.bind(null,!1)).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME})});return Ls.validateBySchema(e,t)}a(Q9,"addComponentValidator");function z9(e){let t=Ie.object({project:Ie.string().pattern(Ds).custom(wf.bind(null,!0)).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME})});return Ls.validateBySchema(e,t)}a(z9,"dropCustomFunctionProjectValidator");function J9(e){let t=Ie.object({project:Ie.string().pattern(Ds).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean()});return Ls.validateBySchema(e,t)}a(J9,"packageComponentValidator");function X9(e){let t=Ie.object({project:Ie.string().pattern(Ds).required().messages({"string.pattern.base":Qt.BAD_PROJECT_NAME}),payload:Ie.string().optional().messages({"string.pattern.base":Qt.BAD_PACKAGE}),package:Ie.string().optional()});return Ls.validateBySchema(e,t)}a(X9,"deployComponentValidator")});var Lf=T((LEe,ov)=>{"use strict";var If=require("joi"),Cf=require("path"),ev=require("fs-extra"),{exec:j9}=require("child_process"),Z9=require("util"),tv=Z9.promisify(j9),Ju=U(),{handleHDBError:wa,hdb_errors:e7}=ee(),{HTTP_STATUS_CODES:Ia}=e7,Xu=Z(),t7=Ze(),Ca=W();Xu.initSync();var dg=Xu.get(Ju.CONFIG_PARAMS.COMPONENTSROOT),rv="npm install --omit=dev --json",r7=`${rv} --dry-run`;ov.exports={installModules:o7,auditModules:a7,installAllRootModules:n7,uninstallRootModule:s7,linkHarperdb:i7};async function n7(e=!1){await Df(),await ju(e?"npm install --ignore-scripts":"npm install",Xu.get(Ju.CONFIG_PARAMS.ROOTPATH))}a(n7,"installAllRootModules");async function s7(e){await ju(`npm uninstall ${e}`,Xu.get(Ju.CONFIG_PARAMS.ROOTPATH))}a(s7,"uninstallRootModule");async function i7(){await Df(),await ju(`npm link ${Ju.PACKAGE_ROOT}`,Xu.get(Ju.CONFIG_PARAMS.ROOTPATH))}a(i7,"linkHarperdb");async function ju(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await tv(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`