harperdb 4.3.0-beta.8 → 4.3.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +2 -2
- package/bin/lite.js +1 -1
- package/dependencies/linux-x64/nats-server +0 -0
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +2 -2
- package/launchServiceScripts/launchNatsReplyService.js +2 -2
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +2 -2
- package/npm-shrinkwrap.json +44 -43
- package/package.json +4 -7
- package/server/jobs/jobProcess.js +16 -16
- package/server/threads/threadServer.js +2 -2
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.dbbf05d9.js → main.925ae583.js} +2 -2
- package/utility/scripts/restartHdb.js +2 -2
- /package/studio/build-local/static/js/{main.dbbf05d9.js.LICENSE.txt → main.925ae583.js.LICENSE.txt} +0 -0
package/bin/lite.js
CHANGED
|
@@ -5,7 +5,7 @@ var EG=Object.create;var Za=Object.defineProperty;var hG=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
|
`)},r2="certificate.pem",n2="privateKey.pem",s2="ca.pem";iC.exports={CERTIFICATE_VALUES:t2,CERTIFICATE_PEM_NAME:r2,PRIVATEKEY_PEM_NAME:n2,CA_PEM_NAME:s2}});var kp=g((Qle,_C)=>{"use strict";var lC=require("fs-extra"),ie=require("joi"),i2=require("os"),{boolean:ye,string:lr,number:At,array:qp}=ie.types(),{totalmem:aC}=require("os"),Ji=require("path"),o2=K(),ud=z(),Wle=oC(),cC=U(),a2=et(),uC="log",c2="components",u2="Invalid logging.rotation.maxSize unit. Available units are G, M or K",l2="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",_2="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",d2="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",f2="rootPath config parameter is undefined",E2="clustering.enabled config parameter is undefined",Xi=At.min(0).required(),ld=qp.items({host:lr.required(),port:Xi}).empty(null),es;_C.exports={configValidator:h2,routesValidator:R2,route_constraints:ld};function h2(e){if(es=e.rootPath,ud.isEmpty(es))throw f2;let t=ye.required(),r=At.min(0).max(1e3).empty(null).default(g2),n=lr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Qc),s=lr.optional().empty(null),i=lr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ie.string().empty(null).default(Qc),c=ie.custom(p2).empty(null).default(Qc),u=e.clustering?.enabled;if(ud.isEmpty(u))throw E2;let _;return u===!0?_=ie.object({enabled:t,hubServer:ie.object({cluster:ie.object({name:ie.required().empty(null),network:ie.object({port:Xi,routes:ld}).required()}).required(),leafNodes:ie.object({network:ie.object({port:Xi}).required()}).required(),network:ie.object({port:Xi}).required()}).required(),leafServer:ie.object({network:ie.object({port:Xi,routes:ld}).required(),streams:ie.object({maxAge:At.min(120).allow(null).optional(),maxBytes:At.min(1).allow(null).optional(),maxMsgs:At.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ie.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:ie.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:ye.required(),verify:ye.optional()}),user:lr.optional().empty(null)}).required():_=ie.object({enabled:t,tls:ie.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:ye.required()})}).required(),ie.object({authentication:ie.object({authorizeLocal:ye,cacheTTL:At.required(),enableSessions:ye}),analytics:ie.object({aggregatePeriod:At}),componentsRoot:n.optional(),clustering:_,localStudio:ie.object({enabled:t}).required(),logging:ie.object({auditAuthEvents:ie.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:ie.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ie.object({enabled:ye.optional(),compress:ye.optional(),interval:lr.custom(T2).optional().empty(null),maxSize:lr.custom(S2).optional().empty(null),path:lr.optional().empty(null).default(Qc)}).required(),root:n,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:ie.object({network:ie.object({cors:ye.optional(),corsAccessList:qp.optional(),headersTimeout:At.min(1).optional(),keepAliveTimeout:At.min(1).optional(),port:At.optional().empty(null),domainSocket:ie.optional().empty("hdb/operations-server").default(Qc),securePort:At.optional().empty(null),timeout:At.min(1).optional()}).optional(),tls:ie.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:lr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ie.object({network:ie.object({port:Xi,securePort:Xi,mtls:ie.alternatives([ye.optional(),ie.object({user:lr.optional(),certificateAuthority:s,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:ie.object({compressionThreshold:At.optional(),cors:ye.optional(),corsAccessList:qp.optional(),headersTimeout:At.min(1).optional(),port:At.min(0).optional().empty(null),securePort:At.min(0).optional().empty(null),mtls:ie.alternatives([ye.optional(),ie.object({user:lr.optional(),certificateAuthority:s,required:ye.optional()})])}).required(),threads:ie.alternatives(r.optional(),ie.object({count:r.optional(),debug:ie.alternatives(ye.optional(),ie.object({startingPort:At.min(1).optional(),host:lr.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:At.min(0).optional()})),storage:ie.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:ye.optional(),noReadAhead:ye.optional(),path:c,prefetchWrites:ye.optional()}).required(),ignoreScripts:ye.optional(),tls:ie.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:lr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(h2,"configValidator");function m2(e){return lC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(m2,"doesPathExist");function p2(e,t){ie.assert(e,lr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=m2(e);if(r)return t.message(r)}a(p2,"validatePath");function S2(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(u2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(_2):e}a(S2,"validateRotationMaxSize");function T2(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(l2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(d2):e}a(T2,"validateRotationInterval");function g2(e,t){let r=t.state.path.join("."),n=i2.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||aC();return i=Math.round(Math.min(i,aC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),o2.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(g2,"setDefaultThreads");function Qc(e,t){let r=t.state.path.join(".");if(!ud.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(ud.isEmpty(es))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ji.join(es,c2);case"logging.root":return Ji.join(es,uC);case"clustering.leafServer.streams.path":return Ji.join(es,"clustering","leaf");case"storage.path":let n=Ji.join(es,cC.LEGACY_DATABASES_DIR_NAME);return lC.existsSync(n)?n:Ji.join(es,cC.DATABASES_DIR_NAME);case"logging.rotation.path":return Ji.join(es,uC);case"operationsApi.network.domainSocket":return r==null?null:Ji.join(es,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Qc,"setDefaultRoot");function R2(e){let t=ie.object({routes:ld});return a2.validateBySchema({routes:e},t)}a(R2,"routesValidator")});var xr=g((Xle,gC)=>{"use strict";var Hr=U(),Lt=z(),Ot=K(),{configValidator:A2,routesValidator:dC}=kp(),_r=require("fs-extra"),O2=require("yaml"),Mn=require("path"),b2=require("is-number"),EC=require("properties-reader"),y2=require("lodash"),{handleHDBError:N2}=ne(),{HTTP_STATUS_CODES:I2,HDB_ERROR_MSGS:_d}=Nr(),Jle=require("minimist"),{server:w2}=(tr(),se(Ci)),{DATABASES_PARAM_CONFIG:zc,CONFIG_PARAMS:Br,CONFIG_PARAM_MAP:Un}=Hr,C2="Unable to get config value because config is uninitialized",D2="Config successfully initialized",L2="Error backing up config file",M2="Empty parameter sent to getConfigValue",hC=Mn.join(Hr.PACKAGE_ROOT,"config","yaml",Hr.HDB_DEFAULT_CONFIG_FILE),U2="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",fC={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},dd,bt,fd;gC.exports={createConfigFile:P2,getDefaultConfig:v2,getConfigValue:pC,initConfig:$p,flattenConfig:na,updateConfigValue:SC,updateConfigObject:H2,getConfiguration:F2,setConfiguration:q2,readConfigFile:Kp,getClusteringRoutes:k2,initOldConfig:TC,getConfigFromFile:V2,getConfigFilePath:ji,addConfig:$2,deleteConfigFromFile:Y2,getConfigObj:K2};function P2(e){let t=ii(hC);dd=na(t.toJSON());let r;for(let o in e){let c=Un[o.toLowerCase()];if(c===Br.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Vp(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Ot.error(l)}}}r&&mC(t,r),Yp(t);let n=t.toJSON();bt=na(n);let s=t.getIn(["rootPath"]),i=Mn.join(s,Hr.HDB_CONFIG_FILE);_r.createFileSync(i),_r.writeFileSync(i,String(t)),Ot.trace(`Config file written to ${i}`)}a(P2,"createConfigFile");function mC(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(zc.TABLES))for(let i in n[s][zc.TABLES])for(let o in n[s][zc.TABLES][i]){let c=n[s][zc.TABLES][i][o],u=[Br.DATABASES,s,zc.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=[Br.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Ot.error("Error parsing schemas CLI/env config arguments",n)}}a(mC,"setSchemasConfig");function v2(e){if(dd===void 0){let r=ii(hC);dd=na(r.toJSON())}let t=Un[e.toLowerCase()];if(t!==void 0)return dd[t.toLowerCase()]}a(v2,"getDefaultConfig");function pC(e){if(e==null){Ot.error(M2);return}if(bt===void 0){Ot.trace(C2);return}let t=Un[e.toLowerCase()];if(t!==void 0)return bt[t.toLowerCase()]}a(pC,"getConfigValue");function ji(e=Lt.getPropsFilePath()){let t=Lt.getEnvCliRootPath();return t?Mn.join(t,Hr.HDB_CONFIG_FILE):EC(e).get(Hr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ji,"getConfigFilePath");function $p(e=!1){if(bt===void 0||e){let t;if(!Lt.noBootFile()){t=Lt.getPropsFilePath();try{_r.accessSync(t,_r.constants.F_OK|_r.constants.R_OK)}catch(i){throw Ot.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ji(t),n;if(r.includes("config/settings.js"))try{TC(r);return}catch(i){if(i.code!==Hr.NODE_ERROR_CODES.ENOENT)throw i}try{n=ii(r)}catch(i){if(i.code===Hr.NODE_ERROR_CODES.ENOENT){Ot.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 Ot.error(i),new Error(`Error reading HarperDB config file at ${r}`)}B2(n,r),Yp(n);let s=n.toJSON();if(w2.config=s,bt=na(s),bt.logging_rotation_rotate)for(let i in fC)bt[i]&&Ot.error(`Config ${fC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ot.trace(D2)}}a($p,"initConfig");function B2(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Mn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Mn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Mn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Ot.trace("Updating config file with missing config params"),_r.writeFileSync(t,String(e)))}a(B2,"checkForUpdatedConfig");function Yp(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=A2(t);if(r.error)throw _d.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):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(Yp,"validateConfig");function H2(e,t){bt===void 0&&(bt={});let r=Un[e.toLowerCase()];if(r===void 0){Ot.trace(`Unable to update config object because config param '${e}' does not exist`);return}bt[r.toLowerCase()]=t}a(H2,"updateConfigObject");function SC(e,t,r=void 0,n=!1,s=!1,i=!1){bt===void 0&&$p();let o=pC(Un.hdb_root),c=Mn.join(o,Hr.HDB_CONFIG_FILE),u=ii(c),_;if(r===void 0&&e.toLowerCase()===Br.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Un[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Vp(f,t);u.setIn([...E],h)}else for(let f in r){let E=Un[f.toLowerCase()];if(E===Br.HTTP_SECUREPORT&&r[f]===bt[Br.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Br.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===bt[Br.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Br.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Hr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Vp(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(T){Ot.error(T)}}}_&&mC(u,_),Yp(u);let l=u.getIn(["rootPath"]),d=Mn.join(l,Hr.HDB_CONFIG_FILE);n===!0&&x2(c,l),_r.writeFileSync(d,String(u)),s&&(bt=na(u.toJSON())),Ot.trace(`Config parameter: ${e} updated with value: ${t}`)}a(SC,"updateConfigValue");function x2(e,t){try{let r=Mn.join(t,"backup",`${Hr.HDB_CONFIG_FILE}.bak`);_r.copySync(e,r),Ot.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ot.error(L2),Ot.error(r)}}a(x2,"backupConfigFile");var G2=["databases"];function na(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)),fd=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])&&!G2.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;!Br[u.toUpperCase()]&&Un[u]&&(s[Un[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(na,"flattenConfig");function Vp(e,t){if(e===Br.CLUSTERING_NODENAME||e===Br.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(b2(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(Vp,"castConfigValue");function F2(){let e=Lt.getPropsFilePath(),t=ji(e);return ii(t).toJSON()}a(F2,"getConfiguration");async function q2(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return SC(void 0,void 0,s,!0),U2}catch(i){throw typeof i=="string"||i instanceof String?N2(i,i,I2.BAD_REQUEST,void 0,void 0,!0):i}}a(q2,"setConfiguration");function Kp(){let e=Lt.getPropsFilePath();try{_r.accessSync(e,_r.constants.F_OK|_r.constants.R_OK)}catch(n){if(!Lt.noBootFile())throw Ot.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ji(e);return ii(t).toJSON()}a(Kp,"readConfigFile");function ii(e){return O2.parseDocument(_r.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ii,"parseYamlDoc");function k2(){let e=Kp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Lt.isEmptyOrZeroLength(t)?[]:t;let r=dC(t);if(r)throw _d.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Lt.isEmptyOrZeroLength(n)?[]:n;let s=dC(n);if(s)throw _d.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 _d.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(k2,"getClusteringRoutes");function TC(e){let t=EC(e);bt={};for(let r in Un){let n=t.get(r.toUpperCase());if(Lt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Un[r].toLowerCase();s===Br.LOGGING_ROOT?bt[s]=Mn.dirname(n):bt[s]=n}return bt}a(TC,"initOldConfig");function V2(e){let t=Kp();return y2.get(t,e.replaceAll("_","."))}a(V2,"getConfigFromFile");async function $2(e,t){let r=ii(ji());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await _r.writeFile(ji(),String(r))}a($2,"addConfig");function Y2(e){let t=ji(Lt.getPropsFilePath()),r=ii(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Mn.join(n,Hr.HDB_CONFIG_FILE);_r.writeFileSync(s,String(r))}a(Y2,"deleteConfigFromFile");function K2(){return fd||($p(),fd)}a(K2,"getConfigObj")});var AC=g((Zle,RC)=>{"use strict";var Ed=U(),hd=class{static{a(this,"BaseLicense")}constructor(t=0,r=Ed.RAM_ALLOCATION_ENUM.DEFAULT,n=Ed.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Wp=class extends hd{static{a(this,"ExtendedLicense")}constructor(t=0,r=Ed.RAM_ALLOCATION_ENUM.DEFAULT,n=Ed.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};RC.exports={BaseLicense:hd,ExtendedLicense:Wp}});var Zi=g((t_e,wC)=>{"use strict";var ia=require("fs-extra"),bC=cd(),yC=require("crypto"),W2=require("moment"),Q2=require("uuid").v4,Qt=K(),zp=require("path"),z2=z(),oi=U(),{totalmem:OC}=require("os"),J2=AC().ExtendedLicense,sa="invalid license key format",X2="061183",j2="mofi25",Z2="aes-256-cbc",eJ=16,tJ=32,NC=re();NC.initSync();var Qp;wC.exports={validateLicense:IC,generateFingerPrint:nJ,licenseSearch:jp,getLicense:oJ,checkMemoryLimit:aJ};function Jp(){return zp.join(NC.getHdbBasePath(),oi.LICENSE_KEY_DIR_NAME,oi.LICENSE_FILE_NAME)}a(Jp,"getLicenseDirPath");function rJ(){let e=Jp();return zp.join(e,oi.LICENSE_FILE_NAME)}a(rJ,"getLicenseFilePath");function Xp(){let e=Jp();return zp.join(e,oi.REG_KEY_FILE_NAME)}a(Xp,"getFingerPrintFilePath");async function nJ(){let e=Xp();try{return await ia.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await sJ();throw Qt.error(`Error writing fingerprint file to ${e}`),Qt.error(t),new Error("There was an error generating the fingerprint")}}a(nJ,"generateFingerPrint");async function sJ(){let e=Q2(),t=bC.hash(e),r=Xp();try{await ia.mkdirp(Jp()),await ia.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Qt.error(`Error writing fingerprint file to ${r}`),Qt.error(n),new Error("There was an error generating the fingerprint")}return t}a(sJ,"writeFingerprint");function IC(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:oi.RAM_ALLOCATION_ENUM.DEFAULT,version:oi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Qt.error("empty license key passed to validate."),r;let n=Xp(),s=!1;try{s=ia.statSync(n)}catch(i){Qt.error(i)}if(s){let i;try{i=ia.readFileSync(n,"utf8")}catch{Qt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(j2),c=o[1];c=Buffer.concat([Buffer.from(c)],eJ);let u=Buffer.concat([Buffer.from(i)],tJ),_=yC.createDecipheriv(Z2,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=iJ(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(sa),Qt.error(sa),new Error(sa)}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(sa),Qt.error(sa),new Error(sa)}else r.exp_date=l;r.exp_date<W2().valueOf()&&(r.valid_date=!1),bC.validate(o[1],`${X2}${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||Qt.error("Invalid licence"),r}a(IC,"validateLicense");function iJ(e,t){try{let r=yC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Qt.warn("Check old license failed")}}a(iJ,"checkOldLicense");function jp(){let e=new J2,t=[];try{t=ia.readFileSync(rJ(),"utf-8").split(oi.NEW_LINE)}catch(r){r.code==="ENOENT"?Qt.info("no license file found"):Qt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(z2.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=IC(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){Qt.error("There was an error parsing the license string."),Qt.error(s),e.ram_allocation=oi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Qp=e,e}a(jp,"licenseSearch");async function oJ(){return Qp||await jp(),Qp}a(oJ,"getLicense");function aJ(){let e=jp().ram_allocation,t=process.constrainedMemory?.()||OC();if(t=Math.round(Math.min(t,OC())/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(aJ,"checkMemoryLimit")});var an=g((o_e,$C)=>{"use strict";var MC="username is required",UC="nothing to update, must supply active, role or password to update",PC="password cannot be an empty string",vC="If role is specified, it cannot be empty.",BC="active must be true or false";$C.exports={addUser:mJ,alterUser:pJ,dropUser:TJ,getSuperUser:OJ,userInfo:gJ,listUsers:pd,listUsersExternal:RJ,setUsersToGlobal:aa,findAndValidateUser:kC,getClusterUser:bJ,USERNAME_REQUIRED:MC,ALTERUSER_NOTHING_TO_UPDATE:UC,EMPTY_PASSWORD:PC,EMPTY_ROLE:vC,ACTIVE_BOOLEAN:BC};var HC=on(),cJ=zi(),tS=cd(),xC=rC(),GC=vr(),rS=gs(),Gr=z(),FC=require("validate.js"),Se=K(),{promisify:uJ}=require("util"),nS=bs(),CC=U(),DC=tt(),lJ=xr(),n_e=re(),s_e=Zi(),_J=Hi(),{table:i_e}=(Oe(),se(qe)),{handleHDBError:ts,hdb_errors:dJ}=ne(),{HTTP_STATUS_CODES:rs,AUTHENTICATION_ERROR_MSGS:Zp,HDB_ERROR_MSGS:oa}=dJ,{UserEventMsg:sS}=Nn(),eS=require("lodash"),{server:iS}=(tr(),se(Ci)),fJ=K();iS.getUser=(e,t)=>kC(e,t,t!=null);var qC={username:!0,active:!0,role:!0,password:!0},LC=new Map,md=GC.searchByValue,EJ=GC.searchByHash,hJ=uJ(cJ.delete);async function mJ(e){let t=FC.cleanAttributes(e,qC),r=xC.addUserValidation(t);if(r)throw ts(new Error,r.message,rs.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await md(n),s=s&&Array.from(s)}catch(u){throw Se.error("There was an error searching for a role in add user"),Se.error(u),u}if(!s||s.length<1)throw ts(new Error,oa.ROLE_NAME_NOT_FOUND(t.role),rs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw ts(new Error,oa.DUP_ROLES_FOUND(t.role),rs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=nS.encrypt(t.password)),t.password=tS.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await HC.insert(i)}catch(u){throw Se.error("There was an error searching for a user."),Se.error(u),u}Se.debug(o);try{await aa()}catch(u){throw Se.error("Got an error setting users to global"),Se.error(u),u}if(o.skipped_hashes.length===1)throw ts(new Error,oa.USER_ALREADY_EXISTS(t.username),rs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],rS.signalUserChange(new sS(process.pid)),`${c.username} successfully added`}a(mJ,"addUser");async function pJ(e){let t=FC.cleanAttributes(e,qC);if(Gr.isEmptyOrZeroLength(t.username))throw new Error(MC);if(Gr.isEmptyOrZeroLength(t.password)&&Gr.isEmptyOrZeroLength(t.role)&&Gr.isEmptyOrZeroLength(t.active))throw new Error(UC);if(!Gr.isEmpty(t.password)&&Gr.isEmptyOrZeroLength(t.password.trim()))throw new Error(PC);if(!Gr.isEmpty(t.active)&&!Gr.isBoolean(t.active))throw new Error(BC);let r=SJ(t.username);if(!Gr.isEmpty(t.password)&&!Gr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=nS.encrypt(t.password)),t.password=tS.hash(t.password)),t.role==="")throw new Error(vC);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await md(i)||[])}catch(c){throw Se.error("Got an error searching for a role."),Se.error(c),c}if(!o||o.length===0){let c=oa.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Se.error(c),ts(new Error,c,rs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=oa.ALTER_USER_DUP_ROLES(t.role);throw Se.error(c),ts(new Error,c,rs.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 HC.update(n)}catch(i){throw Se.error("Error during update."),Se.error(i),i}try{await aa()}catch(i){throw Se.error("Got an error setting users to global"),Se.error(i),i}return rS.signalUserChange(new sS(process.pid)),s}a(pJ,"alterUser");function SJ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(SJ,"isClusterUser");async function TJ(e){try{let t=xC.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Gr.isEmpty(global.hdb_users.get(e.username)))throw ts(new Error,oa.USER_NOT_EXIST(e.username),rs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await hJ(r)}catch(s){throw Se.error("Got an error deleting a user."),Se.error(s),s}Se.debug(n);try{await aa()}catch(s){throw Se.error("Got an error setting users to global."),Se.error(s),s}return rS.signalUserChange(new sS(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(TJ,"dropUser");async function gJ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=eS.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await EJ(r)}catch(s){throw Se.error("Got an error searching for a role."),Se.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Se.error(r),r}return t}a(gJ,"userInfo");async function RJ(){let e;try{e=await pd()}catch(t){throw Se.error("Got an error listing users."),Se.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(RJ,"listUsersExternal");async function pd(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await md(e)}catch(o){throw Se.error("Got an error searching for roles."),Se.error(o),o}let r={};for(let o of t)r[o.id]=eS.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await md(n)}catch(o){throw Se.error("Got an error searching for users."),Se.error(o),o}let i=new Map;for(let o of s)o=eS.cloneDeep(o),o.role=r[o.role],AJ(o.role),i.set(o.username,o);return i}catch(e){throw Se.error("got an error listing users"),Se.error(e),Gr.errorizeMessage(e)}return null}a(pd,"listUsers");function AJ(e){try{if(!e){Se.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(_J)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Se.error("Got an error trying to set system permissions."),Se.error(t)}}a(AJ,"appendSystemTablesToRole");async function aa(){try{let e=await pd();global.hdb_users=e}catch(e){throw Se.error(e),e}}a(aa,"setUsersToGlobal");async function kC(e,t,r=!0){global.hdb_users||await aa();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw ts(new Error,Zp.GENERIC_AUTH_FAIL,rs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw ts(new Error,Zp.USER_INACTIVE,rs.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(LC.get(t)===n.password)return s;if(tS.validate(n.password,t))LC.set(t,n.password);else throw ts(new Error,Zp.GENERIC_AUTH_FAIL,rs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(kC,"findAndValidateUser");async function OJ(){global.hdb_users||await aa();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(OJ,"getSuperUser");async function bJ(){let e=await pd(),t=lJ.getConfigFromFile(CC.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Gr.isEmpty(r)&&r?.role?.role===CC.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=nS.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(bJ,"getClusterUser");var VC=[];iS.invalidateUser=function(e){for(let t of VC)try{t(e)}catch(r){fJ.error("Error invalidating user",r)}};iS.onInvalidatedUser=function(e){VC.push(e)}});var Xc=g((l_e,QC)=>{"use strict";var eo=K(),Fr=U(),yJ=Jb(),c_e=ri(),u_e=$i(),NJ=an(),{validateEvent:YC}=Nn(),Jc=Dn(),IJ=require("process"),{resetDatabases:wJ}=(Oe(),se(qe)),CJ={[Fr.ITC_EVENT_TYPES.SCHEMA]:DJ,[Fr.ITC_EVENT_TYPES.USER]:WC};async function DJ(e){let t=YC(e);if(t){eo.error(t);return}eo.trace("ITC schemaHandler received schema event:",e),await yJ(e.message),await LJ(e.message)}a(DJ,"schemaHandler");async function LJ(e){try{Jc.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Jc.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Jc.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=wJ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){eo.error(t)}}a(LJ,"syncSchemaMetadata");var KC=[];async function WC(e){try{try{Jc.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Jc.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){eo.warn(r)}let t=YC(e);if(t){eo.error(t);return}eo.trace(`ITC userHandler ${Fr.HDB_ITC_CLIENT_PREFIX}${IJ.pid} received user event:`,e),await NJ.setUsersToGlobal();for(let r of KC)r()}catch(t){eo.error(t)}}a(WC,"userHandler");WC.addListener=function(e){KC.push(e)};QC.exports=CJ});var Nn=g((m_e,JC)=>{"use strict";var d_e=K(),oS=z(),MJ=U(),{ITC_ERRORS:jc}=Nr(),{parentPort:f_e,threadId:UJ,isMainThread:PJ,workerData:E_e}=require("worker_threads"),{onMessageFromWorkers:vJ,broadcast:h_e,broadcastWithAcknowledgement:BJ}=Ze();JC.exports={sendItcEvent:HJ,validateEvent:zC,SchemaEventMsg:xJ,UserEventMsg:GJ};var Sd;vJ(async(e,t)=>{Sd=Sd||Xc(),zC(e),Sd[e.type]&&await Sd[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function HJ(e){return!PJ&&e.message&&(e.message.originator=UJ),BJ(e)}a(HJ,"sendItcEvent");function zC(e){if(typeof e!="object")return jc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||oS.isEmpty(e.type))return jc.MISSING_TYPE;if(!e.hasOwnProperty("message")||oS.isEmpty(e.message))return jc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||oS.isEmpty(e.message.originator))return jc.MISSING_ORIGIN;if(MJ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return jc.INVALID_EVENT(e.type)}a(zC,"validateEvent");function xJ(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(xJ,"SchemaEventMsg");function GJ(e){this.originator=e}a(GJ,"UserEventMsg")});var gs=g((T_e,eD)=>{"use strict";var XC=U(),S_e=z(),Td=K(),jC=Mb(),ca,{sendItcEvent:ZC}=Nn();function FJ(e){try{Td.trace("signalSchemaChange called with message:",e),ca=ca||Xc();let t=new jC(XC.ITC_EVENT_TYPES.SCHEMA,e);return ca.schema(t),ZC(t)}catch(t){Td.error(t)}}a(FJ,"signalSchemaChange");function qJ(e){try{Td.trace("signalUserChange called with message:",e),ca=ca||Xc();let t=new jC(XC.ITC_EVENT_TYPES.USER,e);return ca.user(t),ZC(t)}catch(t){Td.error(t)}}a(qJ,"signalUserChange");eD.exports={signalSchemaChange:FJ,signalUserChange:qJ}});var nu={};Fe(nu,{addAnalyticsListener:()=>ru,recordAction:()=>qr,recordActionBinary:()=>cn,setAnalyticsEnabled:()=>kJ});function kJ(e){uD=e}function qr(e,t,r,n,s){if(!uD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Ad.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},Ad.set(i,o)}gd||VJ()}function cn(e,t,r,n,s){qr(!!e,t,r,n,s)}function ru(e){dD.push(e)}function VJ(){gd=performance.now(),setTimeout(async()=>{let e=performance.now()-gd;gd=0;let t=[],r={time:Date.now(),period:e,threadId:to.threadId,metrics:t};for(let[s,i]of Ad){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 fD){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 ED()}let n=process.memoryUsage();t.push({metric:"memory",threadId:to.threadId,byThread:!0,...n});for(let s of dD)s(t);Ad=new Map,to.parentPort?to.parentPort.postMessage({type:_D,report:r}):pD({report:r})},lD).unref()}async function $J(e,t=6e4){let r=uS(),n=hD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,Zc.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,Zc.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:b}=S;for(let R of T||[]){let{path:L,method:H,type:P,metric:k,count:B,total:J,distribution:Q,threads:X,...Te}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let de=c.get(ce);if(de){if(de.threads){let Be=de.threads[b];if(Be)de=Be;else{de.threads[b]=Object.assign({},Te);continue}}de.count||(de.count=1);let Le=de.count;for(let Be in Te){let Ct=Te[Be];typeof Ct=="number"&&(de[Be]=(de[Be]*Le+Ct*B)/(Le+B))}de.count+=B,J>=0&&(de.total+=J,de.ratio=de.total/de.count)}else de=Object.assign({period:t},R),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[b]=Object.assign({},Te),_.push(de));if(Q){Q=Q.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...Q):u.set(ce,Q)}}await ED()}for(let p of _){let{path:S,method:T,type:b,metric:R,count:L,total:H,distribution:P,threads:k,...B}=p;k=k.filter(J=>J);for(let J in B){if(typeof p[J]!="number")continue;let Q=0;for(let X of k){let Te=X[J];typeof Te=="number"&&(Q+=Te)}p[J]=Q}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Ct)=>Be.value>Ct.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of fD){let Ct=b*Be;for(;L<Ct;)P=S[H++],L+=P.count,H===1&&L--;let Ll=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-Ll.value)*(L-Ct)/P.count)}let[k,B,J,Q,X,Te,ce,de,Le]=R;Object.assign(T,{p1:k,p10:B,p25:J,median:Q,p75:X,p90:Te,p95:ce,p99:de,p999:Le})}let d;for(let[p,S]of c)S.id=(0,Rd.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let p=(0,Rd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:E-tD,active:h-rD,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}tD=E,rD=h}async function nD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function uS(){return sD||(sD=ct({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function hD(){return iD||(iD=ct({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function WJ(){mD=!0;let e=(0,tu.get)(cS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await $J(lD,e),await nD(uS(),YJ),await nD(hD(),KJ)},Math.min(e/2,2147483647)).unref()}function pD(e,t){let r=e.report;r.threadId=t?.threadId||to.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(oD+=n.mean*n.count);r.totalBytesProcessed=oD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(aD.get(t))}),aD.set(t,t.performance.eventLoopUtilization())),r.id=(0,Rd.getNextMonotonicTime)(),uS().primaryStore.put(r.id,r),mD||WJ(),QJ&&(SD=JJ(r))}async function JJ(e){if(await SD,!ai){let r=(0,eu.dirname)((0,Zc.getLogFilePath)());try{ai=await(0,aS.open)((0,eu.join)(r,"analytics.log"),"r+")}catch{ai=await(0,aS.open)((0,eu.join)(r,"analytics.log"),"w+")}}let t=(await ai.stat()).size;if(t>zJ){let r=Buffer.alloc(t);await ai.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ai.write(r,{position:0}),await ai.truncate(r.length),t=r.length}await ai.write(JSON.stringify(e)+`
|
|
8
|
-
`,t)}var to,cD,Zc,eu,aS,Rd,tu,cS,Ad,uD,gd,lD,_D,dD,fD,tD,rD,ED,YJ,KJ,sD,iD,mD,oD,aD,QJ,SD,ai,zJ,ys=Re(()=>{to=require("worker_threads"),cD=x(Ze());Oe();Zc=x(K()),eu=require("path"),aS=require("fs/promises"),Rd=x(Ir()),tu=x(re()),cS=x(U());tr();(0,tu.initSync)();Ad=new Map,uD=(0,tu.get)(cS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(kJ,"setAnalyticsEnabled");a(qr,"recordAction");je.recordAnalytics=qr;a(cn,"recordActionBinary");gd=0,lD=1e3,_D="analytics-report",dD=[];a(ru,"addAnalyticsListener");fD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(VJ,"sendAnalytics");a($J,"aggregation");tD=0,rD=0,ED=a(()=>new Promise(setImmediate),"rest");a(nD,"cleanup");YJ=36e5,KJ=31536e6;a(uS,"getRawAnalyticsTable");a(hD,"getAnalyticsTable");(0,cD.setChildListenerByType)(_D,pD);a(WJ,"startScheduledTasks");oD=0,aD=new Map,QJ=!1;a(pD,"recordAnalytics");zJ=1e6;a(JJ,"logAnalytics")});var TD={};Fe(TD,{Headers:()=>ci,appendHeader:()=>lS});function lS(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var ci,su=Re(()=>{ci=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(lS,"appendHeader")});var ES={};Fe(ES,{coerceType:()=>Od,makeTable:()=>Nd,setServerUtilities:()=>i4,updateResource:()=>bd});function Nd(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]),Cb(i,u);let T=Ph(i,n,u),b=0,R,L,H={},P=Promise.resolve(),k,B,J;for(let Y of S)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(k=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(B=Y),Y.expiresAt&&(J=Y),Y.isPrimaryKey&&(H=Y);let Q,X=[],Te=[],ce=1,de=2,Le={},Be={},Ct=864e5,Ll,Ml,Vs,HA=!1,nh,uG=i.getRange({start:!1,end:!1}).constructor,lG=10,_G=6;h&&FA();class We extends Gt{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=B;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),L=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let I=a(D=>{let N=this.sources.slice(0,-1);if(N=N.filter(M=>M[D]&&(!M[D].reliesOnPrototype||M.prototype[D])),N.length>0)if(N.length===1){let M=N[0];return(F,C,v)=>{if(F?.source!==M)return M[D](C,v,F)}}else return(M,F,C)=>{let v=[];for(let q of N){if(M?.source===q)break;v.push(q[D](F,C,M))}return Promise.all(v)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1],A=a(D=>{if(y[D]&&(!y[D].reliesOnPrototype||y.prototype[D]))return(N,M,F)=>{if(!N?.source)return y[D](M,F,N)}},"getApplyToCanonicalSource");return Le={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish")},Be={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let D=!1,N=a(async(M,F)=>{let C=M.value,v=M.table?rt[c][M.table]:We;if(c===vn.SYSTEM_SCHEMA_NAME&&(M.table===vn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===vn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),M.id===void 0&&(M.id=C[v.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let q=await v.getResource(M.id,F,ua);switch(M.type){case"put":return q._writeUpdate(C,!0,ua);case"patch":return q._writeUpdate(C,!1,ua);case"delete":return q._writeDelete(ua);case"publish":return q._writePublish(C,ua);case"invalidate":return q.invalidate(ua);default:Je.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&p==null&&(p=!0);let F=m.subscribeOnThisThread?m.subscribeOnThisThread((0,no.getWorkerIndex)()):(0,no.getWorkerIndex)()===0,C=M&&F&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let v;for await(let q of C)try{if(!(q.type==="transaction"?q.writes[0]:q)){Je.error("Bad subscription event",q);continue}if(q.source=m,v)if(q.beginTxn)v.resolve();else{N(q,v);continue}if(q.type==="end_txn")continue;let be=ze(q,()=>{if(q.type==="transaction"){let ee=[];for(let Pe of q.writes)try{ee.push(N(Pe,q))}catch(ae){throw ae.message+=" writing "+JSON.stringify(Pe)+" of event "+JSON.stringify(q),ae}return Promise.all(ee)}else if(q.type==="define_schema"){let ee=this.attributes.slice(0),Pe;for(let ae of q.attributes)ee.find(Ge=>Ge.name===ae.name)||(ee.push(ae),Pe=!0);Pe&&(ct({table:s,database:c,attributes:ee,origin:"cluster"}),_u.signalSchemaChange(new du.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return q.beginTxn?(v=q,N(q,q),new Promise(ee=>{v.resolve=ee})):N(q,q)});D&&(await be,_u.signalUserChange(new du.UserEventMsg(process.pid))),q.onCommit&&(be?.then?be.then(q.onCommit):q.onCommit())}catch(oe){Je.error("error in subscription handler",oe)}}}catch(M){Je.error(M)}})(),this}static getResource(m,O,I){let y=super.getResource(m,O,I);if(m!=null){ja(m);try{if(y.hasOwnProperty(_e))return y;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let A=!I?.async||i.cache?.get(m),D=Tn(O),N=D.getReadTxn();if(N?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return sh(m,O,{transaction:N},A,M=>{if(M?bd(y,M):y[_e]=null,O.onlyIfCached&&O.noCacheStore){if(!y.doesExist())throw new un.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let F=ih(m,M,O,y);if(F)return D?.disregardReadTxn(),y[_S]=!0,fS(F,C=>(bd(y,C),y))}return y})}catch(A){throw A.message.includes("Unable to serialize object")&&(A.message+=": "+JSON.stringify(m)),A}}return y}ensureLoaded(){let m=ih(this[Me],this[kr],this[Ae]);if(m)return this[_S]=!0,fS(m,O=>{this[kr]=O,this[_e]=O.value,this[uu]=O.version})}static setTTLExpiration(m){if(typeof m=="number")f=m*1e3,E||(E=0);else if(m&&typeof m=="object")f=m.expiration*1e3,E=(m.eviction||0)*1e3,Ct=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Ct=Ct||(f+E)/4,ah()}static enableAuditing(m=!0){h=m,m&&FA(),We.audit=m}static coerceId(m){return m===""?null:Od(m,H)}static async dropTable(){if(delete rt[c][s],c===o){for(let m of S)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));_u.signalSchemaChange(new du.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[nn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let O=We.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Ae]?.returnNonexistent)return this}allowRead(m,O){let I=Pl(m);if(I?.read){if(I.isSuperUser)return!0;let y=I.attribute_permissions,A=O?.select;if(y?.length>0||HA&&A){if(O||(O={}),A){let D=y?.length>0&&dS(y,"read");O.select=A.map(N=>{let M=N.name||N;if(!D||D[M]){let F=Vs[M]?.definition?.tableClass;if(F){if(N.name||(N={name:N}),!F.prototype.allowRead.call(null,m,N))return!1;if(!N.select)return N.name}return N}}).filter(Boolean)}else O.select=y.filter(D=>D.read&&!Vs[D.attribute_name]).map(D=>D.attribute_name);return O}else return!0}}allowUpdate(m,O){let I=Pl(m);if(I?.update){let y=I.attribute_permissions;if(y?.length>0){let A=dS(y,"update");for(let D in O)if(!A[D])return!1;for(let D of y){let N=D.attribute_name;!D.update&&!(N in O)&&(O[N]=this.getProperty(N))}}return!0}}allowCreate(m,O){if(this[nn]){let I=Pl(m);if(I?.insert){let y=I.attribute_permissions;if(y?.length>0){let A=dS(y,"insert");for(let D in O)if(!A[D])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Pl(m)?.delete}update(m,O){if(!Tn(this[Ae]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let y;return typeof m=="object"&&m&&(O?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[_e]={},this[Rt]=m):(y=this[Rt],y&&(m=Object.assign(y,m)),this[Rt]=y=m)),this._writeUpdate(this[Rt],O),this}addTo(m,O){if(typeof O=="number")this[iu]===RD?this.set(m,(+this.getProperty(m)||0)+O):(this[iu]||this.update(),this.set(m,new u_(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,O){if(typeof O=="number")return this.addTo(m,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let O=this[Ae],I=this[Me];ja(I),Tn(this[Ae]).addWrite({key:I,store:i,invalidated:!0,entry:this[kr],nodeName:this[Ae]?.nodeName,before:Le.invalidate?.bind(this,O,I),beforeIntermediate:Be.invalidate?.bind(this,O,I),commit:(A,D)=>{if(D?.version>A)return;let N=null;for(let M in r)N||(N={}),N[M]=this.getProperty(M);T(I,N,this[kr],A,ou,h,this[Ae],0,"invalidate")}})}static evict(m,O,I){let y=this.Source,A;if(!((L||h)&&(!O||(A=i.getEntry(m),!A||!O)||A.version!==I))){if(L){if(i.hasLock(m,A.version))return;let D;for(let N in r)D||(D={}),D[N]=O[N];if(D)return T(m,D,A,I,au,null,null,0,null,!0)}return i.ifVersion(m,I,()=>{Ul(m,O,null)}),h?T(m,null,A,I,au,null,null,0,null,!0):i.remove(m,I)}}lock(){throw new Error("Not yet implemented")}static operation(m,O){return m.table||=s,m.schema||=c,ID.operation(m,O)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,O,I){let y=this[Ae],A=Tn(y),D=this[Me];ja(D);let N=this[kr];this[iu]=O?RD:r4;let M={key:D,store:i,entry:N,nodeName:y?.nodeName,validate:F=>{m||(m=this[Rt]),O||m&&a_(m)?y?.source||(A.checkOverloaded(),this.validate(m,!O),B&&(m[B.name]=B.type==="Date"?new Date(F):B.type==="String"?new Date(F).toISOString():F),O&&(t&&m[t]!==D&&(m[t]=D),k&&(N?.value?m[k.name]=N?.value[k.name]:m[k.name]=k.type==="Date"?new Date(F):k.type==="String"?new Date(F).toISOString():F),m=Pi(m))):A.removeWrite(M)},before:O?Le.put?()=>Le.put(y,D,m):null:Le.patch?()=>Le.patch(y,D,m):Le.put?()=>Le.put(y,D,Pi(this)):null,beforeIntermediate:O?Be.put?()=>Be.put(y,D,m):null:Be.patch?()=>Be.patch(y,D,m):Be.put?()=>Be.put(y,D,Pi(this)):null,commit:(F,C,v)=>{if(v){if(y&&C?.version>(y.lastModified||0)&&(y.lastModified=C.version),this[kr]=C,C?.value?.[_e])throw new Error("Can not assign a record to a record, check for circular references");O||(this[_e]=C?.value??null)}this[Rt]=m,this[uu]=F;let q=C?.value,oe=m;if(this[iu]=0,C?.version>=F)if(h){let ae=C.localTime,Ge=C.version;for(;oe&&(ae>F||Ge>=F&&ae>0);){let te=u.get(ae),j=Dt(te);if(Ge=j.version,Ge>F){if(j.type==="patch"){let ge=j.getValue(i);oe=i_(oe,ge)}else if(j.type==="put"||j.type==="delete")return}else if(Ge===F)return;ae=j.previousLocalTime}}else{if(O)return;oe=i_(oe,q)}let be;if(O?be=oe:(this[_e]=q,be=O?oe:Pi(this,oe)),this[_e]=be,be?.[_e])throw new Error("Can not assign a record to a record, check for circular references");let ee;O||(ee=m),Ul(D,q,be);let Pe=O?"put":"patch";T(D,be,C,F,0,h,y,y.expiresAt||(f?f+Date.now():0),Pe,!1,ee)}};A.addWrite(M)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[nn]){for await(let O of this.search(m))(await We.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[_e]?this._writeDelete(m):!1}_writeDelete(m){let O=Tn(this[Ae]),I=this[Me];ja(I);let y=this[Ae];return O.addWrite({key:I,store:i,resource:this,nodeName:y?.nodeName,before:Le.delete?.bind(this,y,I),beforeIntermediate:Be.delete?.bind(this,y,I),commit:(A,D,N)=>{let M=D?.value;N&&(y&&D?.version>(y.lastModified||0)&&(y.lastModified=D.version),bd(this,D)),!(D?.version>A)&&(Ul(this[Me],M),Je.trace("Write delete entry",I,A),h||p?(T(I,null,this[kr],A,0,h,this[Ae],0,"delete"),h||ah()):i.remove(this[Me]))}}),!0}search(m){let O=this[Ae],I=Tn(O);if(!m)throw new Error("No query provided");let y=m.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(y=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(y));let A,D={};function N(j,ge){let He;switch(ge){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}let kn=He&&{},$s;for(let $e of j){if($e.conditions){$e.conditions=N($e.conditions,$e.operator);continue}let Ht=$e[0]??$e.attribute,Zr=Ht==null?H:ps(S,Ht);if(Zr){if(He){let Vn=On(Ht),xt=kn[Vn];xt?(xt.push($e),$s=!0):kn[Vn]=[$e]}(Zr.type||Wh[$e.comparator])&&($e[1]===void 0?$e.value=F($e.value,Zr):$e[1]=F($e[1],Zr))}else if(Ht!=null)throw(0,un.handleHDBError)(new Error,`${Ht} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return j;if($s)for(let $e in kn){let Ht=kn[$e],Zr=Ht.length;if(Zr>1)for(let Vn=0;Vn<Zr;Vn++){let xt=Ht[Vn];if(xt.comparator==="ge"||xt.comparator==="greater_than_equal")for(let Ys=0;Ys<Zr;Ys++){let Mo=Ht[Ys];(Mo.comparator==="le"||Mo.comparator==="less_than_equal")&&(xt.comparator="between",xt.value=[xt.value,Mo.value],j.splice(j.indexOf(Mo),1))}if(xt.comparator==="equals"||!xt.comparator){for(let Ys=0;Ys<Zr;Ys++)if(Ys!==Vn){let Mo=Ht[Ys];j.splice(j.indexOf(Mo),1)}break}}}return j}a(N,"prepareConditions");function M(j,ge){if(m.enforceExecutionOrder)return j;for(let He of j)He.conditions&&(He.conditions=M(He.conditions,He.operator));return j.length>1&&ge!=="or"?(0,ND.sortBy)(j,h_(We)):j}a(M,"orderConditions");function F(j,ge){return Array.isArray(j)?j.map(He=>Od(He,ge)):Od(j,ge)}a(F,"coerceTypedValues");let C=m.operator;(y.length>0||C)&&(y=N(y,C));let v=typeof m.sort=="object"&&m.sort,q;if(v&&C!=="or"){let j=v.attribute;if(A=y.find(ge=>On(ge.attribute)===On(j)),!A){if(!ps(S,j))throw(0,un.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);A={attribute:j,comparator:"sort"},y.push(A)}A.descending=!!v.descending}y=M(y,C),v&&(y[0]===A?v.next&&(q={dbOrderedAttribute:v.attribute,attribute:v.next.attribute,descending:v.next.descending,next:v.next.next}):(A&&y.splice(y.indexOf(A),1),q=v));let oe=m.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:y,operator:C,postOrdering:q,selectApplied:!!oe};let be=I.useReadTxn(),ee=Qh(y,C,We,be,m,O,(j,ge)=>xA(j,oe,O,be,ge),D),Pe=m.ensureLoaded!==!1;q||(ee=te(ee));let ae=We.transformEntryForSelect(oe,O,be,D,Pe,!0),Ge=We.transformToOrderedSelect(ee,oe,q,be,O,ae);function te(j){return m.offset||m.limit!==void 0?j.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):j}return a(te,"applyOffset"),q&&(Ge=te(Ge)),Ge.onDone=()=>{Ge.onDone=null,I.doneReadTxn()},Ge.selectApplied=!0,Ge.getColumns=()=>{if(oe){let j=[];for(let ge of oe)ge==="*"?j.push(...S.map(He=>He.name)):j.push(ge.name||ge);return j}return S.map(j=>j.name)},Ge}static transformToOrderedSelect(m,O,I,y,A,D){let N=new uG;if(I){m=xA(m,O,y,A,null);let M;N.iterate=function(){let C,v=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),q,oe=I.dbOrderedAttribute,be,ee,Pe=!0;function ae(te){let j=te.next&&ae(te.next),ge=te.descending;return(He,kn)=>{let $s=oh(He,te.attribute,y),$e=oh(kn,te.attribute,y),Ht=ge?(0,so.compareKeys)($e,$s):(0,so.compareKeys)($s,$e);return Ht===0?j?.(He,kn)||0:Ht}}a(ae,"createComparator");let Ge=ae(I);return{async next(){let te;if(C)if(te=C.next(),te.done){if(q)return N.onDone&&N.onDone(),te}else return{value:await D.call(this,te.value)};M=[],be&&M.push(be);do if(te=await v.next(),te.done){if(q=!0,M.length)break;return N.onDone&&N.onDone(),te}else{let j=te.value;if(j?.then&&(j=await j),oe){let ge=oh(j,oe,y);if(Pe)Pe=!1,ee=ge;else if(ge!==ee){ee=ge,be=j;break}}M.push(j)}while(!0);return I.isGrouped,M.sort(Ge),C=M[Symbol.iterator](),te=C.next(),te.done?(N.onDone&&N.onDone(),te):{value:await D.call(this,te.value)}},return(){N.onDone&&N.onDone(),v.return()},throw(){N.onDone&&N.onDone(),v.throw()}}};let F=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let v=0;v<O.length;v++){let q=O[v],oe;if(q.name===C.attribute[0]){for(oe=q.sort||(q.sort={});oe.next;)oe=oe.next;oe.attribute=C.attribute.slice(1),oe.descending=C.descending}else q===C.attribute[0]&&(O[v]=oe={name:q,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&F(C.next)},"applySortingOnSelect");F(I)}else N.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),N=N.map(D);return N}static transformEntryForSelect(m,O,I,y,A,D){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(v=>v?.key??v,"transform");return m===t?C:m.asArray?v=>[C(v)]:v=>({[t]:C(v)})}let N;A&&L&&!m?.every(C=>{let v;return typeof C=="object"?v=C.name:v=C,r[v]||v===t})&&(N=!0);let M,F=a(function(C){let v;if(C!=null){if(nh=C,v=C.value||C.deref?.(),!v&&(C.key===void 0||C.deref)){if(C=sh(C.key??C,O,{transaction:I,lazy:m?.length<4},this.isSync,q=>q),C?.then)return C.then(F.bind(this));v=C?.value}if(N&&(C.metadataFlags&(ou|au)||C.expiresAt&&C.expiresAt<Date.now())){let q=ih(C.key??C,C,O);if(q?.then)return q.then(F)}}if(v==null)return D?ro.SKIP:v;if(m&&!(m[0]==="*"&&m.length===1)){let q,oe=a((ee,Pe)=>{let ae;typeof ee=="object"?ae=ee.name:ae=ee;let Ge=Vs?.[ae],te;if(Ge){let j=y?.[ae];if(j)if(j.hasMappings){let He=Ge.from?v[Ge.from]:On(C.key);te=j.get(He),te||(te=[])}else te=j.fromRecord?.(v);else te=Ge(v,O,C);let ge=a(He=>{if(He&&typeof He=="object"){let kn=Ge.definition?.tableClass||We;M||(M={});let $s=M[ae]||(M[ae]=kn.transformEntryForSelect(ae===ee?null:ee.select||(Array.isArray(ee)?ee:null),O,I,j,A));if(Array.isArray(He)){let $e=[],Ht=kn.transformToOrderedSelect(He,ee.select,typeof ee.sort=="object"&&ee.sort,O,I,$s)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Zr=a(xt=>{for(;!xt.done;){if(xt?.then)return xt.then(Zr);$e.push(xt.value),xt=Ht.next()}Pe($e,ae)},"nextValue"),Vn=Zr(Ht.next());Vn&&(q||(q=[]),q.push(Vn));return}else if(He=$s.call(this,He),He?.then){q||(q=[]),q.push(He.then($e=>Pe($e,ae)));return}}Pe(He,ae)},"handleResolvedValue");te?.then?(q||(q=[]),q.push(te.then(ge))):ge(te);return}else te=v[ae],te&&typeof te=="object"&&ae!==ee&&(te=We.transformEntryForSelect(ee.select||ee,O,I,null)({value:te}));Pe(te,ae)},"selectAttribute"),be;if(typeof m=="string")oe(m,ee=>{be=ee});else if(Array.isArray(m))if(m.asArray)be=[],m.forEach((ee,Pe)=>{ee==="*"?m[Pe]=v:oe(ee,ae=>be[Pe]=ae)});else{be={};let ee=m.forceNulls;for(let Pe of m)if(Pe==="*")for(let ae in v)be[ae]=v[ae];else oe(Pe,(ae,Ge)=>{ae===void 0&&ee&&(ae=null),be[Ge]=ae})}else throw new un.ClientError("Invalid select"+m);return q?Promise.all(q).then(()=>be):be}return v},"transform");return F}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||ct({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let O=!m.rawEvents,I=Ib(We,this[Me]??null,function(N,M,F,C){try{let v=M.getValue?.(i,O);if(!v&&M.type==="patch"&&O){let q=i.getEntry(N);q?.version===M.version?v=q.value:v=M.getValue?.(i,!0,F),M.type="put"}this.send({id:N,timestamp:F,value:v,version:M.version,type:M.type,beginTxn:C})}catch(v){Je.error(v)}},m.startTime||0,this[nn]);this[nn]&&(I.includeDescendants=!0,m.onlyChildren&&(I.onlyChildren=!0)),m.crossThreads===!1&&(I.crossThreads=!1),m.supportsTransactions&&(I.supportsTransactions=!0);let y=this[Me],A=m.previousCount;A>1e3&&(A=1e3);let D=m.startTime;if(this[nn]){if(D){if(A)throw new un.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:M}of u.getRange({start:D,exclusiveStart:!0})){let F=Dt(M);if(F.tableId!==n)continue;let C=F.recordId;if(y==null||bD(y,C)){let v=F.getValue(i,O,N);I.send({id:C,timestamp:N,value:v,version:F.version,type:F.type})}I.startTime=N}}else if(A){let N=[];for(let{key:M,value:F}of u.getRange({start:"z",end:!1,reverse:!0}))try{let C=Dt(F);if(C.tableId!==n)continue;let v=C.recordId;if(y==null||bD(y,v)){let q=C.getValue(i,O,M);if(N.push({id:v,timestamp:M,value:q,version:C.version,type:C.type}),--A<=0)break}}catch(C){Je.error("Error getting history entry",M,C)}for(let M=N.length;M>0;)I.send(N[--M]);N[0]&&(I.startTime=N[0].timestamp)}else if(!m.omitCurrent)for(let{key:N,value:M,version:F,localTime:C}of i.getRange({start:y??!1,end:y==null?void 0:[y,so.MAXIMUM_KEY],versions:!0}))M&&I.send({id:N,timestamp:C,value:M,version:F,type:"put"})}else{A&&!D&&(D=0);let N=this[kr]?.localTime;if(N===Uh&&(i.cache?.delete(y),this[kr]=i.getEntry(y),Je.trace("re-retrieved record",N,this[kr]?.localTime),N=this[kr]?.localTime),Je.trace("Subscription from",D,"from",y,N),D<N){let M=[],F=N;do{let C=u.get(F);if(C){m.omitCurrent=!0;let v=Dt(C),q=v.getValue(i,O,F);O&&(v.type="put"),M.push({id:y,value:q,timestamp:F,...v}),F=v.previousLocalTime}else break;A&&A--}while(F>D&&A!==0);for(let C=M.length;C>0;)I.send(M[--C]);I.startTime=N}!m.omitCurrent&&this.doesExist()&&I.send({id:y,timestamp:N,value:this,version:this[uu],type:"put"})}return m.listener&&I.on("data",m.listener),I}doesExist(){return!!(this[_e]||this[iu])}publish(m,O){this._writePublish(m,O)}_writePublish(m,O){let I=Tn(this[Ae]),y=this[Me]||null;ja(y);let A=this[Ae];I.addWrite({key:y,store:i,entry:this[kr],nodeName:A?.nodeName,validate:()=>{A?.source||(I.checkOverloaded(),this.validate(m))},before:Le.publish?.bind(this,A,y,m),beforeIntermediate:Be.publish?.bind(this,A,y,m),commit:(D,N,M)=>{N===void 0&&p&&!h&&ah(),T(y,N?.value??null,N,N?.version||D,0,!0,A,N?.expiresAt,"message",!1,m)}})}validate(m,O){let I,y=a((A,D,N)=>{if(D.type&&A!=null)if(O&&A.__op__&&(A=A.value),D.properties){typeof A!="object"&&(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be an object${D.type?" ("+D.type+")":""}`);let M=D.properties;for(let F=0,C=M.length;F<C;F++){let v=M[F],q=y(A[v.name],v,N+"."+v.name);q&&(A[v.name]=q)}if(D.sealed&&A!=null&&typeof A=="object")for(let F in A)M.find(C=>C.name===F)||(I||(I=[])).push(`Property ${F} is not allowed within object in property ${N}`)}else switch(D.type){case"Int":(typeof A!="number"||A>>0!==A)&&(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a string`);break;case"Boolean":typeof A!="boolean"&&(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a Date`)}break;case"BigInt":if(typeof A!="bigint"){if(typeof A=="string"||typeof A=="number")return BigInt(A);(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a bigint`)}break;case"Bytes":A instanceof Uint8Array||(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(A)){if(D.elements)for(let M=0,F=A.length;M<F;M++){let C=A[M],v=y(C,D.elements,N+"[*]");v&&(A[M]=v)}}else(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a Buffer or Uint8Array`);break}D.nullable===!1&&A==null&&(I||(I=[])).push(`Property ${N} is required (and not does not allow null values)`)},"validateValue");for(let A=0,D=S.length;A<D;A++){let N=S[A];if(!N.relationship&&(!O||N.name in m)){let M=y(m[N.name],N,N.name);M&&(m[N.name]=M)}}if(d)for(let A in m)S.find(D=>D.name===A)||(I||(I=[])).push(`Property ${A} is not allowed`);if(I)throw new un.ClientError(I.join(". "))}getUpdatedTime(){return this[uu]}wasLoadedFromSource(){return L?!!this[_S]:void 0}static async addAttributes(m){let O=S.slice(0);for(let I of m){if(!I.name)throw new un.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new un.ClientError("Attribute names cannot include backticks or forward slashes");O.push(I)}return ct({table:s,database:c,schemaDefined:_,attributes:O}),We.indexingOperation}static async removeAttributes(m){let O=S.filter(I=>!m.includes(I.name));return ct({table:s,database:c,schemaDefined:_,attributes:O}),We.indexingOperation}static getRecordCount(m){let O=i.getStats().entryCount,I=5e3,y=1e3,A;O>I&&!m?.exactCount&&(A=y);let D=0;for(let{value:N}of i.getRange({start:!0,lazy:!0,limit:A}))N!=null&&D++;if(A){let N=D;D=0;for(let{value:Pe}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:A}))Pe!=null&&D++;let M=A*2,F=(D+N)/M,C=Math.pow((D-N+1)/A/2,2)+F*(1-F)/M,v=Math.max(Math.sqrt(C)*O,1),q=Math.round(F*O),oe=Math.max(q-1.96*v,0),be=Math.min(q+1.96*v,O),ee=Math.pow(10,Math.round(Math.log10(v)));return ee>q&&(ee=ee/10),D=Math.round(q/ee)*ee,{recordCount:D,estimatedRange:[Math.round(oe),Math.round(be)]}}return{recordCount:D}}static updatedAttributes(){Vs=this.propertyResolvers={$id:(m,O,I)=>({value:I.key}),$updatedtime:(m,O,I)=>I.version,$record:(m,O,I)=>I?{value:m}:m};for(let m of this.attributes){m.resolve=null;let O=m.relationship;if(O)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),HA=!0,O.to)m.elements?.definition?(Vs[m.name]=m.resolve=(I,y,A)=>{let D=I[O.from?O.from:t],N=m.elements.definition.tableClass;return A?ko({attribute:O.to,value:D},Tn(y).getReadTxn(),!1,N,!1).asArray:N.search([{attribute:O.to,value:D}],y).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,O.from&&(m.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(O.from){let I=m.definition||m.elements?.definition;I?(Vs[m.name]=m.resolve=(y,A,D)=>{let N=y[O.from];if(N!==void 0){if(m.elements){let M,F=N.map(C=>{let v=D?I.tableClass.primaryStore.getEntry(C,{transaction:Tn(A).getReadTxn()}):I.tableClass.get(C,A);return v?.then&&(M=!0),v});return O.filterMissing?M?Promise.all(F).then(C=>C.filter(yD)):F.filter(yD):M?Promise.all(F):F}return D?I.tableClass.primaryStore.getEntry(N,{transaction:Tn(A).getReadTxn()}):I.tableClass.get(N,A)}},m.set=(y,A)=>{if(Array.isArray(A)){let D=A.map(N=>N[Me]||N[I.tableClass.primaryKey]);y[O.from]=D}else{let D=A[Me]||A[I.tableClass.primaryKey];y[O.from]=D}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=O.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}l_(this,this)}static async deleteHistory(m=0){let O;for(let{key:I,value:y}of u.getRange({start:0,end:m}))await cu(),Dt(y).tableId===n&&(O=u.remove(I));await O}static async*getHistory(m=0,O=1/0){for(let{key:I,value:y}of u.getRange({start:m,end:O})){await cu();let A=Dt(y);A.tableId===n&&(yield{id:A.recordId,localTime:I,version:A.version,type:A.type,value:A.getValue(i,!0,I),user:A.user})}}static async getHistoryOfRecord(m){let O=[];if(m==null)throw new Error("An id is required");let I=i.getEntry(m);if(!I)return O;let y=I.localTime;if(!y)throw new Error("The entry does not have a local audit time");let A=0;do{await cu();let D=u.get(y);if(D){let N=Dt(D);O.push({id:N.recordId,localTime:y,version:N.version,type:N.type,value:N.getValue(i,!0,y),user:N.user}),y=N.previousLocalTime}else break}while(A<1e3&&y);return O.reverse()}static cleanup(){Q?.remove()}}We.updatedAttributes();let dG=We.prototype;return dG[t4]=!0,f&&We.setTTLExpiration(f/1e3),J&&fG(),We;function Ul(Y,m,O){let I;for(let y in r){let A=r[y],D=A.isIndexing,N=O?.[y],M=m?.[y];if(N===M&&!D)continue;I=!0;let F=A.indexNulls,C=(0,lu.getIndexedValues)(M,F);if(C){gD&&A.prefetch(C.map(v=>({key:v,value:Y})),OD);for(let v=0,q=C.length;v<q;v++)A.remove(C[v],Y)}if(C=(0,lu.getIndexedValues)(N,F),C){gD&&A.prefetch(C.map(v=>({key:v,value:Y})),OD);for(let v=0,q=C.length;v<q;v++)A.put(C[v],Y)}}return I}a(Ul,"updateIndices");function ja(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>AD)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,so.writeKey)(Y,n4,0)>AD)throw new Error("Primary key size is too large: "+Y.length);return!0}a(ja,"checkValidId");function sh(Y,m,O,I,y){let A=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),O.transaction?.isDone)return y(null,Y);let D=i.getEntry(Y,O);return D&&m&&(D?.version>(m.lastModified||0)&&(m.lastModified=D.version),D?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=D.localTime)),y(D,Y)},"whenPrefetched");return I?A():ce>0?(ce--,A()):new Promise((D,N)=>{ce===0?(ce--,i.prefetch([Y],()=>{M(),F()})):(X.push(Y),Te.push(F),X.length>_G&&(ce--,M()));function M(){if(X.length>0){let C=Te;i.prefetch(X,()=>{ce===-1?M():ce++;for(let v of C)v()}),X=[],Te=[],de>2&&de--}else ce=de,de<lG&&de++}a(M,"prefetch");function F(){try{D(A())}catch(C){N(C)}}a(F,"load")})}a(sh,"loadLocalRecord");function Pl(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return s4;let O=m[c],I,y=O?.tables;if(y)return y[s];if(c==="data"&&(I=m[s])&&!I.tables)return I}a(Pl,"getTablePermissions");function ih(Y,m,O,I){if(L){let y;if(O.noCache?y=!0:(m?(!m.value||m.metadataFlags&(ou|au)||m.expiresAt&&m.expiresAt<Date.now())&&(y=!0):y=!0,cn(!y,"cache-hit",s)),y){let A=GA(Y,m,O).then(D=>(D?.value?.[_e]&&Je.error("Can not assign a record with a record property"),O&&(D?.version>(O.lastModified||0)&&(O.lastModified=D.version),O.lastRefreshed=Date.now()),D));if(O?.onlyIfCached||m?.value&&I?.allowStaleWhileRevalidate?.(m,Y)){if(A.catch(D=>Je.warn(D)),O?.onlyIfCached&&!I.doesExist())throw new un.ServerError("Entry is not cached",504);return}else return A}}}a(ih,"ensureLoadedFromSource");function Tn(Y){let m=Y?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let O=m.next;if(!O)return m=m.next=new vi,m.lmdbDb=i,m;m=O}while(!0)}else return new f_}a(Tn,"txnForContext");function oh(Y,m,O){if(!Y)return;nh=Y;let I=Y.value||Y.deref?.()||(nh=i.getEntry(Y.key))?.value;if(typeof m=="object"){let A=Vs,D=I;for(let N=0,M=m.length;N<M;N++){let F=m[N],C=A?.[F];D=C&&D?C(D,O,!0)?.value:D?.[F],A=C?.definition?.tableClass?.propertyResolvers}return D}let y=Vs[m];return y?y(I,O):I[m]}a(oh,"getAttributeValue");function xA(Y,m,O,I,y){let A=y?.length,D={transaction:I,lazy:A>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},N;function M(F,C){let v=F?.value;if(!v)return ro.SKIP;for(let q=0;q<A;q++)if(!N?.includes(q)&&!y[q](v,F))return ro.SKIP;return C!==void 0&&(F.key=C),F}if(a(M,"processEntry"),A>0||!Y.hasEntries){let F=Y.map(C=>{if(N=null,typeof C=="object"&&C.key!==void 0)return A>0?M(C):C;if(C==null)return ro.SKIP;for(let v=0;v<A;v++){let oe=y[v].idFilter;if(oe){if(!oe(C))return ro.SKIP;N||(N=[]),N.push(v)}}return sh(C,O,D,!1,M)});return Array.isArray(Y)&&(F=F.filter(C=>C!==ro.SKIP)),F.hasEntries=!0,F}return Y}a(xA,"transformToEntries");async function GA(Y,m,O){let I=m?.metadataFlags,y=m?.version,A,D;if(!i.attemptLock(Y,y,()=>{clearTimeout(D);let C=i.getEntry(Y);!C||!C.value||C.metadataFlags&(ou|au)?A(GA(Y,i.getEntry(Y),O)):A(C)}))return new Promise(C=>{A=C,D=setTimeout(()=>{i.unlock(Y,y)},e4)});let N=m?.value,M={requestContext:O,replacingRecord:N,replacingVersion:y,source:null,resourceCache:O?.resourceCache},F=O?.responseHeaders;return new Promise((C,v)=>{let q;fS(ze(M,async oe=>{let be=performance.now(),ee,Pe,ae;try{for(let ge of We.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(M.source=ge,ee=await ge.get(Y,M),ee))break;ae=I&ou;let te=M.lastModified||ae&&y;Pe=ae||te>y||!N,te||(te=(0,lu.getNextMonotonicTime)());let j=performance.now()-be;if(qr(j,"cache-resolution",s),F&&lS(F,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),oe.timestamp=te,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),ee){if(typeof ee!="object")throw new Error("Only objects can be cached and stored in tables");typeof ee.toJSON=="function"&&(ee=ee.toJSON()),t&&ee[t]!==Y&&(ee[t]=Y)}q=!0,C({version:te,value:ee})}catch(te){te.message+=` while resolving record ${Y} for ${s}`,N&&((te.code==="ECONNRESET"||te.code==="ECONNREFUSED"||te.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(te.statusCode===500||te.statusCode===502||te.statusCode===503||te.statusCode===504))?(C({version:y,value:N}),Je.trace(te.message,"(returned stale record)")):v(te),M.transaction.abort();return}if(O?.noCacheStore){M.transaction.abort();return}Tn(M).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(te,j)=>{if(j?.version!==y)return;let ge=Ul(Y,N,ee);ee?(Be.put?.(M,Y,ee),T(Y,ee,j,te,0,h&&Pe||null,M,M.expiresAt,"put",!!ae)):(Be.delete?.(M,Y),h||p?T(Y,null,j,te,0,h&&Pe||null,M,0,"delete",!!ae):i.remove(Y,y))}})}),()=>{i.unlock(Y,y)},oe=>{i.unlock(Y,y),q&&Je.error("Error committing cache update",oe)})})}a(GA,"getFromSource");function ah(){if(Ct!==Ll&&(Ll=Ct,(0,no.getWorkerIndex)()===(0,no.getWorkerCount)()-1)){if(Ml&&clearTimeout(Ml),!Ct)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())/Ct)*Ct+Y.getTime(),O=a(I=>{Je.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Ml=setTimeout(()=>P=P.then(async()=>{if(O(Math.max(I+Ct,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ml);return}let y=50,A=new Array(y),D=0;Je.trace(`Starting cleanup scan for ${s}`);try{let N=0;for(let{key:M,value:F,version:C,expiresAt:v}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let q;F===null&&!h&&C+ZJ<Date.now()?q=i.remove(M,C):v&&v+E<Date.now()&&(q=We.evict(M,F,C),N++),q&&(await A[D],A[D]=q.catch(oe=>{Je.error("Cleanup error",oe)}),++D>=y&&(D=0)),await cu()}Je.trace(`Finished cleanup scan for ${s}, evicted ${N} entries`)}catch(N){Je.trace(`Error in cleanup scan for ${s}:`,N)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");O(m)}}a(ah,"scheduleCleanup");function FA(){Q=u?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(FA,"addDeleteRemoval");function fG(){(0,no.getWorkerIndex)()===0&&setInterval(async()=>{try{let Y=J.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let{key:O,value:I}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let y=i.getEntry(I);y?.value?y.value[Y]<Date.now()&&We.evict(I,y.value,y.version):i.ifVersion(I,y?.version,()=>m.remove(O,I)),await cu()}}catch(Y){Je.error("Error in evicting old records",Y)}},jJ).unref()}a(fG,"runRecordExpirationEviction")}function dS(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 OD(){}function i4(e){ID=e}function Od(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"&&!o4.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,yd.autoCast)(e):e}function bD(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 fS(e,t,r){return e?.then?e.then(t,r):t(e)}function bd(e,t){e[kr]=t,e[_e]=t?.value??null,e[uu]=t?.version}function yD(e){return e!=null}function Pn(e){try{return JSON.stringify(e)}catch{return e}}var vn,ro,lu,ND,fu,un,_u,du,Je,so,no,yd,XJ,ID,jJ,ZJ,gD,e4,uu,t4,kr,iu,RD,r4,_S,ua,ou,au,n4,AD,s4,K_e,o4,cu,Id=Re(()=>{vn=x(U()),ro=require("lmdb"),lu=x(Ir()),ND=require("lodash");An();Yh();fu=x(re());Db();un=x(ne()),_u=x(gs()),du=x(Nn());Oe();p_();Je=x(K());d_();Bi();so=require("ordered-binary"),no=x(Ze());Mi();yd=x(z());Ho();ys();n_();su();XJ=new Uint8Array(9);XJ[8]=192;jJ=6e4,ZJ=864e5;fu.initSync();gD=fu.get(vn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),e4=1e4,uu=Symbol.for("version"),t4=Symbol.for("incremental-update"),kr=Symbol("entry"),iu=Symbol("is-saving"),RD=1,r4=2,_S=Symbol("loaded-from-source"),ua={isNotification:!0,ensureLoaded:!1},ou=1,au=8,n4=Buffer.allocUnsafeSlow(8192),AD=1978,s4={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},K_e=(0,yd.convertToMS)(fu.get(vn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Nd,"makeTable");a(dS,"attributesAsObject");a(OD,"noop");a(i4,"setServerUtilities");o4=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Od,"coerceType");a(bD,"isDescendantId");cu=a(()=>new Promise(setImmediate),"rest");a(fS,"when");a(bd,"updateResource");a(yD,"exists");a(Pn,"stringify")});var qe={};Fe(qe,{database:()=>Vc,databases:()=>rt,dropDatabase:()=>Op,dropTableMeta:()=>d4,getDatabases:()=>wn,getTables:()=>a4,onUpdatedTable:()=>TS,readMetaDb:()=>Eu,resetDatabases:()=>c4,table:()=>ct,tables:()=>$r});function a4(){return Md||wn(),$r||{}}function wn(){if(Md)return rt;Md=!0,da=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Xe.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),t=(0,zt.get)(Yr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Vr.existsSync)(e)?e:(0,Xe.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Vr.existsSync)(e))for(let r of(0,Vr.readdirSync)(e,{withFileTypes:!0})){let n=(0,Xe.basename)(r.name,".mdb");r.isFile()&&(0,Xe.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Eu((0,Xe.join)(e,r.name),null,n)}if((0,Vr.existsSync)((0,_a.getBaseSchemaPath)())){for(let r of(0,Vr.readdirSync)((0,_a.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Xe.join)((0,_a.getBaseSchemaPath)(),r.name),s=(0,Xe.join)((0,_a.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Vr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Xe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Xe.join)(s,i.name);Eu((0,Xe.join)(n,i.name),(0,Xe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Vr.existsSync)(s))for(let o of(0,Vr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Xe.extname)(o.name).toLowerCase()===".mdb"&&Eu((0,Xe.join)(s,o.name),(0,Xe.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Xe.join)(c.path,(0,Xe.basename)(o+".mdb"));(0,Vr.existsSync)(u)&&Eu(u,o,r,null,!0)}}for(let r in rt){let n=da.get(r);if(n){let s=rt[r];r.includes("delete")&&ln.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(ln.trace(`delete table class ${i}`),delete s[i])}else if(delete rt[r],r==="data"){for(let s in $r)delete $r[s];delete $r[Ud]}}return da=null,rt}}function c4(){Md=!1;for(let[,e]of ui)e.needsDeletion=!0;wn();for(let[e,t]of ui)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ui.delete(e));return rt}function Eu(e,t,r=pS,n,s){let i=new hS.default(e,!1);try{let o=ui.get(e);o?o.needsDeletion=!1:(o=(0,Cd.open)(i),ui.set(e,o));let c=new io.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(wd.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Vr.existsSync)(n)&&(i.path=n,_=(0,Cd.open)(i),_.isLegacy=!0):_=r_(o));let l=LD(r),d=l[Ud],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 T=f.get(p);T||f.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.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 X of p)if(X.is_hash_attribute||X.isPrimaryKey){S=X;break}if(!S){ln.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[E],b={},R=[],L,H,P=typeof S.audit=="boolean"?S.audit:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),k=S.trackDeletes,B=S.expiration,J=S.eviction,Q=S.sealed;if(T)b=T.indices,R=T.attributes,T.schemaVersion++;else{L=S.tableId,L?L>=(u.get(la)||0)&&u.putSync(la,L+1):(S.tableId=L=u.get(la),L||(L=1),u.putSync(la,L+1),u.putSync(S.key,S));let X=new io.default(!S.is_hash_attribute,S.is_hash_attribute);H=jl(o.openDB(S.key,X)),H.rootStore=o,H.tableId=L}for(let X of p){X.attribute=X.name;try{if(!X.is_hash_attribute&&(X.indexed||X.attribute&&!X.name)){if(!b[X.name]){let ce=new io.default(!X.is_hash_attribute,X.is_hash_attribute);b[X.name]=o.openDB(X.key,ce),b[X.name].indexNulls=X.indexNulls}let Te=R.find(ce=>ce.name===X.name);Te?R.splice(R.indexOf(Te),1,X):R.push(X)}}catch(Te){ln.error("Error trying to update attribute",X,R,b,Te)}}if(!T){T=MD(l,E,Nd({primaryStore:H,auditStore:_,audit:P,sealed:Q,expirationMS:B&&B*1e3,evictionMS:J&&J*1e3,trackDeletes:k,tableName:E,tableId:L,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let X of SS)X(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function LD(e){let t=rt[e];if(t||(e==="data"?t=rt[e]=$r:e==="system"?Object.defineProperty(rt,"system",{value:t=Object.create(null),configurable:!0}):t=rt[e]=Object.create(null)),da&&!da.has(e)){let r=new Set;t[Ud]=r,da.set(e,r)}return t}function MD(e,t,r){return e[t]=r,r}function Vc({database:e,table:t}){e||(e=pS),wn();let r=LD(e),n=(0,Xe.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),s=(0,zt.get)(Yr.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,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||((0,Vr.existsSync)(n)?n:(0,Xe.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME));let o=(0,Xe.join)(n,(i?t:e)+".mdb"),c=ui.get(o);if(!c){let u=new hS.default(o,!1);c=(0,Cd.open)(u),ui.set(o,c)}return c}async function Op(e){if(!rt[e])throw new Error("Schema does not exist");let t=rt[e];for(let r in t){let s=t[r].primaryStore.rootStore;ui.delete(s.path),s.status==="open"&&(await s.close(),await wD.remove(s.path))}if(e==="data"){for(let r in $r)delete $r[r];delete $r[Ud]}delete rt[e]}function ct({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=pS);let d=Vc({database:t,table:e}),f=rt[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let b=new io.default(!1);for(let B of i)B.attribute?(B.name=B.attribute,B.indexed=!0):B.attribute=B.name,B.expiresAt&&(B.indexed=!0);let R,L;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let B=d.auditStore;B||(B=r_(d)),p=i.find(Te=>Te.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=!0,p.schemaDefined=_,u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),n&&(p.eviction=n),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),ln.trace(`${e} table loading, opening primary store`);let J=new io.default(!1,!0),Q=e+"/",X=jl(d.openDB(Q,J));X.rootStore=d,T=d.dbisDb=d.openDB(wd.INTERNAL_DBIS_NAME,b),X.tableId=T.get(la),X.tableId||(X.tableId=1),T.putSync(la,X.tableId+1),p.tableId=X.tableId,E=MD(f,e,Nd({primaryStore:X,auditStore:B,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:X.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),E.schemaVersion=1,R=!0,k(),T.put(Q,p)}S=E.indices,T=T||(d.dbisDb=d.openDB(wd.INTERNAL_DBIS_NAME,b)),E.dbisDB=T;let H=[];for(let{key:B,value:J}of T.getRange({start:!0})){let[Q,X]=B.toString().split("/");if(X===""&&(X=J.name),X){if(Q!==e)continue}else X=Q;if(!i.find(ce=>ce.name===X)?.indexed&&J.indexed&&!J.isPrimaryKey){k(),R=!0,T.remove(B);let ce=E.indices[Q];ce&&H.push(ce)}}let P=[];try{for(let B of i||[]){if(B.relationship)continue;let J=e+"/"+(B.name||"");Object.defineProperty(B,"key",{value:J,configurable:!0});let Q=T.get(J);if(B.isPrimaryKey){if(Q=Q||T.get(J=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+Q.expiration||void 0)||(+n||void 0)!==(+Q.eviction||void 0)){let Te=Object.assign({},Q);typeof o=="boolean"&&(o&&E.enableAuditing(o),Te.audit=o),r&&(Te.expiration=+r),n&&(Te.eviction=+n),c!==void 0&&(Te.sealed=c),R=!0,k(),T.put(J,Te)}continue}Q?.attribute&&!Q.name&&(Q.indexed=!0);let X=!Q||Q.type!==B.type||Q.indexed!==B.indexed||Q.nullable!==B.nullable||JSON.stringify(Q.attributes)!==JSON.stringify(B.attributes)||JSON.stringify(Q.elements)!==JSON.stringify(B.elements);if(B.indexed){let Te=new io.default(!0,!1),ce=d.openDB(J,Te);(X||Q.indexingPID&&Q.indexingPID!==process.pid||Q.restartNumber<hu.workerData?.restartNumber)&&(R=!0,k(),Q=T.get(J),(X||Q.indexingPID&&Q.indexingPID!==process.pid||Q.restartNumber<hu.workerData?.restartNumber)&&(R=!0,B.lastIndexedKey=Q?.lastIndexedKey||!1,B.indexingPID=process.pid,ce.isIndexing=!0,Object.defineProperty(B,"dbi",{value:ce}),B.indexNulls===void 0&&(B.indexNulls=!0),P.push(B)),T.put(J,B)),Q?.indexNulls&&B.indexNulls===void 0&&(B.indexNulls=!0),ce.indexNulls=B.indexNulls,S[B.name]=ce}else X&&(R=!0,k(),T.put(J,B))}}finally{L&&L()}if(R&&(E.schemaVersion++,E.updatedAttributes()),ln.trace(`${e} table loading, running index`),P.length>0||H.length>0?E.indexingOperation=_4(E,P,H):R&&Dd.signalSchemaChange(new Ld.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=l,R)for(let B of SS)B(E,l!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),ln.trace(`${e} table loaded`),E;function k(){L||d.transactionSync(()=>({then(B){L=B}}))}a(k,"startTxn")}async function _4(e,t,r){try{let n=e.schemaVersion;await Dd.signalSchemaChange(new Ld.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,CD.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,ln.error(f)}),hu.workerData&&hu.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>u4?await s:u>l4&&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 Dd.signalSchemaChange(new Ld.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){ln.error("Error in indexing",n)}}function d4({table:e,database:t}){let r=Vc({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 TS(e){SS.push(e)}var zt,wd,Cd,Xe,Vr,_a,io,hS,Yr,wD,mS,CD,Dd,Ld,hu,ln,DD,pS,Ud,$r,rt,la,SS,Md,ui,da,u4,l4,Oe=Re(()=>{zt=x(re()),wd=x(_t()),Cd=require("lmdb"),Xe=require("path"),Vr=require("fs"),_a=x(Qe());Id();io=x(A_()),hS=x(b_()),Yr=x(U()),wD=x(require("fs-extra")),mS=require("../index"),CD=x(Ir()),Dd=x(gs()),Ld=x(Nn()),hu=require("worker_threads"),ln=x(K()),DD=x(Ze());Mi();Ho();pS="data",Ud=Symbol("defined-tables");(0,zt.initSync)();$r=Object.create(null),rt=Object.create(null);(0,mS._assignPackageExport)("databases",rt);(0,mS._assignPackageExport)("tables",$r);la=Symbol.for("next-table-id"),SS=[],ui=new Map;a(a4,"getTables");a(wn,"getDatabases");a(c4,"resetDatabases");a(Eu,"readMetaDb");a(LD,"ensureDB");a(MD,"setTable");a(Vc,"database");a(Op,"dropDatabase");a(ct,"table");u4=1e3,l4=10;a(_4,"runIndexing");a(d4,"dropTableMeta");a(TS,"onUpdatedTable")});var z=g((tde,KD)=>{"use strict";var li=require("path"),HD=require("fs-extra"),dr=K(),UD=require("fs-extra"),Pd=require("os"),f4=require("net"),E4=require("recursive-iterator"),nt=U(),h4=TO(),PD=require("papaparse"),vd=require("moment"),{inspect:m4}=require("util"),vD=require("is-number"),ede=require("lodash"),p4=require("minimist"),S4=require("https"),T4=require("http"),{hdb_errors:Bd}=ne(),g4=/^((\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)))$/,xD=require("util").promisify(setTimeout),R4=100,A4=5,O4="",b4=4,BD={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};KD.exports={isEmpty:Kr,isEmptyOrZeroLength:ns,arrayHasEmptyValues:I4,arrayHasEmptyOrZeroLengthValues:w4,buildFolderPath:C4,isBoolean:GD,errorizeMessage:y4,stripFileExtension:L4,autoCast:M4,autoCastJSON:FD,autoCastJSONDeep:RS,removeDir:U4,compareVersions:P4,isCompatibleDataVersion:v4,escapeRawValue:B4,unescapeValue:H4,stringifyProps:x4,timeoutPromise:F4,isClusterOperation:k4,getClusterUser:$4,checkGlobalSchemaTable:V4,getHomeDir:kD,getPropsFilePath:G4,promisifyPapaParse:Y4,removeBOM:VD,createEventPromise:K4,checkProcessRunning:W4,checkSchemaTableExist:Q4,checkSchemaExists:$D,checkTableExists:YD,getStartOfTomorrowInSeconds:z4,getLimitKey:J4,isObject:D4,isNotEmptyAndHasValue:N4,autoCasterIsNumberCheck:qD,backtickASTSchemaItems:X4,isPortTaken:q4,createForkArgs:j4,autoCastBoolean:Z4,async_set_timeout:xD,getTableHashAttribute:e3,doesSchemaExist:t3,doesTableExist:r3,stringifyObj:n3,ms_to_time:s3,changeExtension:i3,getEnvCliRootPath:AS,noBootFile:o3,httpRequest:a3,transformReq:c3,convertToMS:u3,PACKAGE_ROOT:nt.PACKAGE_ROOT};function y4(e){return e instanceof Error?e:new Error(e)}a(y4,"errorizeMessage");function Kr(e){return e==null}a(Kr,"isEmpty");function N4(e){return!Kr(e)&&(e||e===0||e===""||GD(e))}a(N4,"isNotEmptyAndHasValue");function ns(e){return Kr(e)||e.length===0||e.size===0}a(ns,"isEmptyOrZeroLength");function I4(e){if(Kr(e))return!0;for(let t=0;t<e.length;t++)if(Kr(e[t]))return!0;return!1}a(I4,"arrayHasEmptyValues");function w4(e){if(ns(e))return!0;for(let t=0;t<e.length;t++)if(ns(e[t]))return!0;return!1}a(w4,"arrayHasEmptyOrZeroLengthValues");function C4(...e){try{return e.join(li.sep)}catch{console.error(e)}}a(C4,"buildFolderPath");function GD(e){return Kr(e)?!1:e===!0||e===!1}a(GD,"isBoolean");function D4(e){return Kr(e)?!1:typeof e=="object"}a(D4,"isObject");function L4(e){return ns(e)?O4:e.slice(0,-b4)}a(L4,"stripFileExtension");function M4(e){return Kr(e)||e===""||typeof e!="string"?e:BD[e]!==void 0?BD[e]:qD(e)===!0?Number(e):g4.test(e)?new Date(e):e}a(M4,"autoCast");function FD(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(FD,"autoCastJSON");function RS(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=RS(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=RS(r);n!==r&&(e[t]=n)}return e}else return FD(e)}a(RS,"autoCastJSONDeep");function qD(e){if(e.startsWith("0.")&&vD(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&vD(e))}a(qD,"autoCasterIsNumberCheck");async function U4(e){if(ns(e))throw new Error(`Directory path: ${e} does not exist`);try{await UD.emptyDir(e),await UD.remove(e)}catch(t){throw dr.error(`Error removing files in ${e} -- ${t}`),t}}a(U4,"removeDir");function P4(e,t){if(ns(e)){dr.info("Invalid current version sent as parameter.");return}if(ns(t)){dr.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(P4,"compareVersions");function v4(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(v4,"isCompatibleDataVersion");function B4(e){if(Kr(e))return e;let t=String(e);return t==="."?nt.UNICODE_PERIOD:t===".."?nt.UNICODE_PERIOD+nt.UNICODE_PERIOD:t.replace(nt.FORWARD_SLASH_REGEX,nt.UNICODE_FORWARD_SLASH)}a(B4,"escapeRawValue");function H4(e){if(Kr(e))return e;let t=String(e);return t===nt.UNICODE_PERIOD?".":t===nt.UNICODE_PERIOD+nt.UNICODE_PERIOD?"..":String(e).replace(nt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(H4,"unescapeValue");function x4(e,t){if(Kr(e))return dr.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+Pd.EOL}!ns(n)&&n[0]===";"?r+=" "+n+s+Pd.EOL:ns(n)||(r+=n+"="+s+Pd.EOL)}catch{dr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(x4,"stringifyProps");function kD(){let e;try{e=Pd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(kD,"getHomeDir");function G4(){let e=li.join(kD(),nt.HDB_HOME_DIR_NAME,nt.BOOT_PROPS_FILE_NAME);return HD.existsSync(e)||(e=li.join(__dirname,"../","hdb_boot_properties.file")),e}a(G4,"getPropsFilePath");function F4(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(F4,"timeoutPromise");async function q4(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=f4.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(q4,"isPortTaken");function k4(e){try{return nt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){dr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(k4,"isClusterOperation");function V4(e,t){let r=(Oe(),se(qe)).getDatabases();if(!r[e])return Bd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Bd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(V4,"checkGlobalSchemaTable");function $4(e,t){if(Kr(t)){dr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Kr(e)||ns(e)){dr.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){dr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){dr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a($4,"getClusterUser");function Y4(){PD.parsePromise=function(e,t,r){return new Promise(function(n,s){PD.parse(e,{header:!0,transformHeader:VD,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Y4,"promisifyPapaParse");function VD(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(VD,"removeBOM");function K4(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;dr.info(`Got cluster status event response: ${m4(s)}`);try{i.cancel()}catch{dr.error("Error trying to cancel timeout.")}n(s)})})}a(K4,"createEventPromise");async function W4(e){let t=!0,r=0;do await xD(R4*r++),(await h4.findPs(e)).length>0&&(t=!1);while(t&&r<A4);if(t)throw new Error(`process ${e} was not started`)}a(W4,"checkProcessRunning");function Q4(e,t){let r=$D(e);if(r)return r;let n=YD(e,t);if(n)return n}a(Q4,"checkSchemaTableExist");function $D(e){let{getDatabases:t}=(Oe(),se(qe));if(!t()[e])return Bd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a($D,"checkSchemaExists");function YD(e,t){let{getDatabases:r}=(Oe(),se(qe));if(!r()[e][t])return Bd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(YD,"checkTableExists");function z4(){let e=vd().utc().add(1,nt.MOMENT_DAYS_TAG).startOf(nt.MOMENT_DAYS_TAG).unix(),t=vd().utc().unix();return e-t}a(z4,"getStartOfTomorrowInSeconds");function J4(){return vd().utc().format("DD-MM-YYYY")}a(J4,"getLimitKey");function X4(e){try{let t=new E4(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){dr.error("Got an error back ticking items."),dr.error(t)}}a(X4,"backtickASTSchemaItems");function j4(e){return[e]}a(j4,"createForkArgs");function Z4(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Z4,"autoCastBoolean");function e3(e,t){let{getDatabases:r}=(Oe(),se(qe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(e3,"getTableHashAttribute");function t3(e){let{getDatabases:t}=(Oe(),se(qe));return t()[e]!==void 0}a(t3,"doesSchemaExist");function r3(e,t){let{getDatabases:r}=(Oe(),se(qe));return r()[e]?.[t]!==void 0}a(r3,"doesTableExist");function n3(e){try{return JSON.stringify(e)}catch{return e}}a(n3,"stringifyObj");function s3(e){let t=vd.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(s3,"ms_to_time");function i3(e,t){let r=li.basename(e,li.extname(e));return li.join(li.dirname(e),r+t)}a(i3,"changeExtension");function AS(){if(process.env[nt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[nt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=p4(process.argv);if(e[nt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[nt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(AS,"getEnvCliRootPath");var gS;function o3(){if(gS)return gS;let e=AS();AS()&&HD.pathExistsSync(li.join(e,nt.HDB_CONFIG_FILE))&&(gS=!0)}a(o3,"noBootFile");function a3(e,t){let r;return e.protocol==="http:"?r=T4:r=S4,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(a3,"httpRequest");function c3(e){if(!e.schema&&!e.database){e.schema=nt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(c3,"transformReq");function u3(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(u3,"convertToMS")});var re=g((nde,JD)=>{"use strict";var OS=require("fs-extra"),oo=require("path"),WD=require("os"),l3=require("properties-reader"),pu=K(),mu=z(),ue=U(),Hd=xr(),_3="Error initializing environment manager",xd="BOOT_PROPS_FILE_PATH",QD=!1,d3={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ns={};JD.exports={BOOT_PROPS_FILE_PATH:xd,getHdbBasePath:f3,setHdbBasePath:E3,get:zD,initSync:m3,setProperty:Ue,initTestEnvironment:p3};function f3(){return Ns[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(f3,"getHdbBasePath");function E3(e){Ns[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(E3,"setHdbBasePath");function zD(e){let t=Hd.getConfigValue(e);return t===void 0?Ns[e]:t}a(zD,"get");function Ue(e,t){d3[e]&&(Ns[e]=t),Hd.updateConfigObject(e,t)}a(Ue,"setProperty");function h3(){let e;try{e=mu.getPropsFilePath(),OS.accessSync(e,OS.constants.F_OK|OS.constants.R_OK),QD=!0;let t=l3(e);return Ns[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),Ns[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ns[xd]=e,!0}catch{return pu.trace(`Environment manager found no properties file at ${e}`),!1}}a(h3,"doesPropFileExist");function m3(e=!1){try{(QD||h3()||mu.noBootFile())&&(Hd.initConfig(e),Ns[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Hd.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){pu.error(_3),pu.error(t),console.error(t),process.exit(1)}}a(m3,"initSync");function p3(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=oo.join(__dirname,"../../","unitTests");Ns[xd]=oo.join(u,"hdb_boot_properties.file"),Ue(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,oo.join(u,"settings.test")),Ue(ue.HDB_SETTINGS_NAMES.INSTALL_USER,WD.userInfo()?WD.userInfo().username:void 0),Ue(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ue(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,oo.join(u,"envDir","log")),Ue(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,oo.join(u,"envDir")),Ue(ue.CONFIG_PARAMS.STORAGE_PATH,oo.join(u,"envDir")),s&&(Ue(ue.CONFIG_PARAMS.HTTP_SECUREPORT,zD(ue.CONFIG_PARAMS.HTTP_PORT)),Ue(ue.CONFIG_PARAMS.HTTP_PORT,null)),Ue(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ue(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ue(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,mu.isEmpty(i)?!1:i),Ue(ue.CONFIG_PARAMS.HTTP_CORS,mu.isEmpty(i)?!1:i),Ue(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ue(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,oo.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ue(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,mu.isEmpty(c)?!1:c),o&&(Ue("CORS_ACCESSLIST",o),Ue(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ue(ue.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ue(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ue(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${xd}. Please check your boot props and settings files`;pu.fatal(r),pu.error(t)}}a(p3,"initTestEnvironment")});var NS={};Fe(NS,{loadGQLSchema:()=>g3,start:()=>yS,startOnMainThread:()=>T3});function yS({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(P){if(P.kind==="NonNullType"){let J=H(P.type);return J.nullable=!1,J}if(P.kind==="ListType")return{type:"array",elements:H(P.type)};let B={type:P.name?.value};return Object.defineProperty(B,"location",{value:P.loc.startToken}),B};a(H,"getProperty");let T=S.name.value,b=[],R={table:null,database:null,properties:b};f.set(T,R);for(let P of S.directives){if(P.name.value==="table"){for(let k of P.arguments)R[k.name.value]=k.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=T),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(P.name.value==="sealed"&&(R.sealed=!0),P.name.value==="export"){R.export=!0;for(let k of P.arguments)k.name.value==="name"&&(R.export={name:k.value.value})}}let L=!1;for(let P of S.fields){let k=H(P.type);k.name=P.name.value,b.push(k);for(let B of P.directives)if(B.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(B.name.value==="indexed")k.indexed=!0;else if(B.name.value==="relationship"){let J={};for(let Q of B.arguments)J[Q.name.value]=Q.value.value;k.relationship=J}else if(B.name.value==="createdTime")k.assignCreatedTime=!0;else if(B.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(B.name.value==="expiresAt")k.expiresAt=!0;else if(B.name.value==="allow"){let J=k.authorizedRoles=[];for(let Q of B.arguments)Q.name.value==="role"&&J.push(Q.value.value)}}R.type=T,T==="Query"&&(h=R)}function p(S){let T=f.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):S3.includes(S.type)||(0,XD.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 T of S.properties)p(T);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,bS.dirname)(n),S.tableClass):i.set((0,bS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var bS,XD,S3,T3,g3,jD=Re(()=>{bS=require("path");Oe();XD=x(Ze()),S3=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(yS,"start");T3=yS,g3=yS({ensureTable:ct}).handleFile});async function Gd(e){return R3?(Su||(Su=A3(b3)),(await(await Su).import(e)).namespace):import(e)}async function A3(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Su=new Compartment({console,Math,Date,fetch:O3,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,eL.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Gt,tables:$r,databases:rt})}};let n=await(0,ZD.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Su}function O3(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 b3(){return{Resource:Gt,tables:$r}}var ZD,eL,R3,Su,IS=Re(()=>{An();Oe();ZD=require("fs/promises"),eL=require("path"),R3=!1;a(Gd,"secureImport");a(A3,"getCompartment");a(O3,"secureOnlyFetch");a(b3,"getGlobalVars")});var CS={};Fe(CS,{handleFile:()=>y3});async function y3(e,t,r,n){let s=new Map,i=(0,tL.pathToFileURL)(r).toString(),o=await Gd(i);u(o.default)&&n.set((0,wS.dirname)(t),o.default),c(o,(0,wS.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 tL,wS,rL=Re(()=>{tL=require("url");IS();wS=require("path");a(y3,"handleFile")});var LS={};Fe(LS,{start:()=>N3});function N3({resources:e}){e.set("login",DS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var DS,nL=Re(()=>{An();a(N3,"start");DS=class extends Gt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var lL={};Fe(lL,{parse:()=>US,streamAsJSON:()=>Tu,stringify:()=>ao});function Tu(e){return new MS({value:e})}function sL(e){return console.error(e),JSON.stringify(e.toString())}function iL(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ao(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===cL)return uL(e);if(t.resolution)return t.resolution.then(()=>ao(e));throw t}}function uL(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+=uL(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ao(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function US(e){return C3.test(e)?I3.parse(e):JSON.parse(e)}var oL,aL,I3,w3,cL,MS,C3,PS=Re(()=>{oL=require("stream"),aL=x(require("json-bigint-fixes")),I3=(0,aL.default)({useNativeBigInt:!0}),w3=1e4,cL={};BigInt.prototype.toJSON=function(){throw cL};a(Tu,"streamAsJSON");MS=class extends oL.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),sL)}catch(s){yield sL(s)}else yield ao(t)}else yield ao(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);iL(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>w3?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 iL(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(sL,"handleError");a(iL,"when");a(ao,"stringify");a(uL,"jsStringify");C3=/-?\d{16,}/;a(US,"parse")});var Fd=g((mde,_L)=>{"use strict";var D3=Dn();_L.exports={writeTransaction:L3};function L3(e,t,r){return D3.writeTransaction(e,t,r)}a(L3,"writeTransaction")});var hL=g((Tde,EL)=>{"use strict";var M3=vr(),U3=ri(),dL=K(),P3=on(),Sde=Fd(),v3=require("clone"),BS=require("alasql"),B3=X_(),fL=require("util"),H3=fL.promisify(U3.getTableSchema),x3=fL.promisify(M3.search),G3=U(),vS=z();B3(BS);EL.exports={update:q3};var F3="There was a problem performing this update. Please check the logs and try again.";async function q3({statement:e,hdb_user:t}){let r=await H3(e.table.databaseid,e.table.tableid),n=k3(e.columns);vS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=v3(s),c=vS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=BS.parse(u).statements[0],l=await x3(_),d=V3(n,l);return $3(o,d,t)}a(q3,"update");function k3(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 [${G3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw dL.error(t),new Error(F3)}}a(k3,"createUpdateRecord");function V3(e,t){return vS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(V3,"buildUpdateRecords");async function $3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await P3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){dL.error(`Error delete new_attributes from update response: ${i}`)}return s}a($3,"updateRecords")});var pL=g((Ode,mL)=>{var Y3=require("alasql"),K3=vr(),W3=K(),Q3=Dn(),xS=require("util"),HS=z(),z3=U(),J3=ri(),Rde=Fd(),Ade=on(),X3="record",j3="successfully deleted",Z3=xS.callbackify(nX),eX=xS.promisify(K3.search),tX=xS.promisify(J3.getTableSchema);mL.exports={convertDelete:Z3};function rX(e){return`${e.deleted_hashes.length} ${X3}${e.deleted_hashes.length===1?"":"s"} ${j3}`}a(rX,"generateReturnMessage");async function nX({statement:e,hdb_user:t}){let r=await tX(e.table.databaseid,e.table.tableid);HS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=HS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Y3.parse(o).statements[0],u={operation:z3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await eX(c);let _=await Q3.deleteRecords(u);return HS.isEmptyOrZeroLength(_.message)&&(_.message=rX(_)),delete _.txn_time,_}catch(_){throw W3.error(_),_.hdb_code?_.message:_}}a(nX,"convertDelete")});var AL=g((yde,RL)=>{"use strict";var sX=$i(),{hdb_errors:SL}=ne(),{getDatabases:TL}=(Oe(),se(qe));RL.exports={checkSchemaExists:gL,checkSchemaTableExists:iX,schema_describe:sX};async function gL(e){if(!TL()[e])return SL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(gL,"checkSchemaExists");async function iX(e,t){let r=await gL(e);if(r)return r;if(!TL()[e][t])return SL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(iX,"checkSchemaTableExists")});var gu=g((Ide,oX)=>{oX.exports={name:"harperdb",version:"4.3.0-beta.8",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.6","nats-server":"2.10.10"},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.4",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.19.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 $S=g((Dde,ML)=>{"use strict";var{decode:aX}=require("msgpackr"),{isMainThread:wde,parentPort:cX,threadId:Cde}=require("worker_threads"),Ru=yt(),fa=tt(),qS=U(),Jt=K(),FS=re(),bL=U(),{onMessageByType:uX}=Ze(),yL=bs(),{recordAction:lX,recordActionBinary:_X}=(ys(),se(nu)),{publishToStream:dX}=Ru,{ConsumerEvents:fX}=require("nats"),EX=vr(),{promisify:hX}=require("util"),NL=hX(setTimeout),Vd=1e4,$d,kd,mX,pX,IL,Au=new Map,Ea=new Map;ML.exports={initialize:kS,ingestConsumer:VS,setSubscription:SX,setIgnoreOrigin:RX,getDatabaseSubscriptions:gX,updateConsumer:wL};async function kS(){uX(qS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await wL(n)}),IL=!0,Jt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Ru.getNATSReferences();$d=e,kd=e.info.server_name,mX=t,pX=r}a(kS,"initialize");async function wL(e){if(e.status==="start"){let{js:t,jsm:r}=await CL(e.node_domain_name);VS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Au.get(e.stream_name+e.node_domain_name);t&&(Jt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Au.set(e.stream_name+e.node_domain_name,"close")),Ea.get(e.node_domain_name)==="failed"&&Ea.set(e.node_domain_name,"close")}}a(wL,"updateConsumer");var Yd=new Map;function SX(e,t,r){let n=Yd.get(e);n||Yd.set(e,n=new Map),n.set(t,r),IL||kS().then(TX)}a(SX,"setSubscription");async function TX(){let e=await EX.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+fa.SERVER_SUFFIX.LEAF,{js:n,jsm:s}=await CL(r);if(s){for(let i of t.subscriptions)if(i.subscribe===!0){let{schema:o,table:c}=i,u=yL.createNatsTableStreamName(o,c);VS(u,n,s,r)}}}}a(TX,"accessConsumers");async function CL(e){let t,r,n=1;for(;!r;)try{t=await $d.jetstream({domain:e,timeout:6e4}),r=await $d.jetstreamManager({domain:e,timeout:6e4})}catch(s){if(Ea.get(e)==="close")break;Ea.set(e,"failed"),n%10===1&&Jt.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Vd?n++*100:Vd;await NL(i)}return{js:t,jsm:r}}a(CL,"connectToRemoteJS");function gX(){return Yd}a(gX,"getDatabaseSubscriptions");var DL;function RX(e){DL=e}a(RX,"setIgnoreOrigin");var LL=100,OL=new Array(LL),qd=0;async function VS(e,t,r,n){let{connection:s}=await Ru.getNATSReferences();$d=s,kd=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,kd),Jt.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Ea.get(n)==="close")break;o%10===1&&Jt.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(Jt.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Ru.createConsumer(r,e,kd,new Date(Date.now()).toISOString()));let l=o++*100<Vd?o++*100:Vd;await NL(l)}let c=!1,u;for(cX?.on("message",async _=>{let{type:l}=_;l===bL.ITC_EVENT_TYPES.SHUTDOWN&&(c=!0,u&&u.close?.()&&u.close())});!c;){if(Au.get(e+n)==="close"||Ea.get(n)==="close"){Au.delete(e+n),c=!0;continue}u=await i.consume({max_messages:FS.get(qS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),Au.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===fX.HeartbeatsMissed){let d=l.data;Jt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===2&&(Jt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await OL[qd],OL[qd]=AX(l).catch(d=>{Jt.error(d)}),++qd>=LL&&(qd=0)}catch(l){l.message==="consumer deleted"?(Jt.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):Jt.error("Error consuming clustering ingest, restarting consumer",l)}Ru.clearClientCache(),!c&&_&&await kS()}}a(VS,"ingestConsumer");async function AX(e){let t=aX(e.data);lX(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Jt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=FS.get(qS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(fa.MSG_HEADERS.TRANSACTED_NODES)&&r.values(fa.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(fa.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!DL),_X(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(fa.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Jt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Jt.trace(`messageProcessor nats msg id: ${e.headers.get(fa.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(L=>h=L),{timestamp:S,user:T,node_name:b}=f||{},R=Yd.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,R.send(t);else if(l.length===1&&!u)R.send({type:GS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((H,P)=>({type:GS(o),value:H,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:GS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:L,table:_,timestamp:S,onCommit:h,user:T,nodeName:b})}FS.get(bL.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&dX(e.subject.split(".").slice(0,-1).join("."),yL.createNatsTableStreamName(c,_),e.headers,e.data),await p}catch(o){Jt.error(o)}e.ack()}a(AX,"messageProcessor");function GS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(GS,"convertOperation")});var yt=g((Hde,zL)=>{"use strict";var Mt=re();Mt.initSync();var OX=require("fs-extra"),bX=require("semver"),yu=require("path"),{monotonicFactory:yX}=require("ulidx"),PL=yX(),NX=require("util"),vL=require("child_process"),IX=NX.promisify(vL.exec),wX=vL.spawn,qt=tt(),Ce=U(),Kd=z(),Bn=K(),Wd=bs(),CX=Fd(),Ou=xr(),{broadcast:DX,onMessageByType:LX,getWorkerIndex:MX}=Ze(),{isMainThread:BL}=require("worker_threads"),{Encoder:UX,decode:QS}=require("msgpackr"),HL=new UX,{isEmpty:_o}=Kd,xL=an(),Mde=48*36e11;BL&&LX(Ce.ITC_EVENT_TYPES.RESTART,()=>{fr=void 0,lo=void 0});var{connect:PX,StorageType:vX,RetentionPolicy:BX,AckPolicy:zS,DeliverPolicy:JS,DiscardPolicy:HX,NatsConnection:Ude,JetStreamManager:Pde,JetStreamClient:vde,StringCodec:Bde,JSONCodec:xX,createInbox:XS,headers:GX,ErrorCode:UL}=require("nats"),{PACKAGE_ROOT:FX}=U(),qX=gu(),{recordAction:kX}=(ys(),se(nu)),GL=xX(),VX="clustering",$X=qX.engines[qt.NATS_SERVER_NAME],YX=yu.join(FX,"dependencies"),WS=yu.join(YX,`${process.platform}-${process.arch}`,qt.NATS_BINARY_NAME),YS,KS,bu,co,uo;zL.exports={runCommand:FL,checkNATSServerInstalled:KX,createConnection:jS,getConnection:Qd,getJetStreamManager:Nu,getJetStream:kL,getNATSReferences:Hn,getServerList:QX,createLocalStream:ZS,listStreams:VL,deleteLocalStream:zX,getServerConfig:Iu,listRemoteStreams:JX,viewStream:XX,viewStreamIterator:jX,publishToStream:ZX,request:rj,reloadNATS:eT,reloadNATSHub:nj,reloadNATSLeaf:sj,extractServerName:tj,requestErrorHandler:ij,createLocalTableStream:WL,createTableStreams:cj,purgeTableStream:QL,purgeSchemaTableStreams:uj,getStreamInfo:lj,updateLocalStreams:dj,closeConnection:WX,getJsmServerName:zd,addNatsMsgHeader:$L,clearClientCache:qL,updateRemoteConsumer:oj,createConsumer:YL,updateConsumerIterator:aj};async function FL(e,t=void 0){let{stdout:r,stderr:n}=await IX(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
8
|
+
`,t)}var to,cD,Zc,eu,aS,Rd,tu,cS,Ad,uD,gd,lD,_D,dD,fD,tD,rD,ED,YJ,KJ,sD,iD,mD,oD,aD,QJ,SD,ai,zJ,ys=Re(()=>{to=require("worker_threads"),cD=x(Ze());Oe();Zc=x(K()),eu=require("path"),aS=require("fs/promises"),Rd=x(Ir()),tu=x(re()),cS=x(U());tr();(0,tu.initSync)();Ad=new Map,uD=(0,tu.get)(cS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(kJ,"setAnalyticsEnabled");a(qr,"recordAction");je.recordAnalytics=qr;a(cn,"recordActionBinary");gd=0,lD=1e3,_D="analytics-report",dD=[];a(ru,"addAnalyticsListener");fD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(VJ,"sendAnalytics");a($J,"aggregation");tD=0,rD=0,ED=a(()=>new Promise(setImmediate),"rest");a(nD,"cleanup");YJ=36e5,KJ=31536e6;a(uS,"getRawAnalyticsTable");a(hD,"getAnalyticsTable");(0,cD.setChildListenerByType)(_D,pD);a(WJ,"startScheduledTasks");oD=0,aD=new Map,QJ=!1;a(pD,"recordAnalytics");zJ=1e6;a(JJ,"logAnalytics")});var TD={};Fe(TD,{Headers:()=>ci,appendHeader:()=>lS});function lS(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var ci,su=Re(()=>{ci=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(lS,"appendHeader")});var ES={};Fe(ES,{coerceType:()=>Od,makeTable:()=>Nd,setServerUtilities:()=>i4,updateResource:()=>bd});function Nd(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]),Cb(i,u);let T=Ph(i,n,u),b=0,R,L,H={},P=Promise.resolve(),k,B,J;for(let Y of S)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(k=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(B=Y),Y.expiresAt&&(J=Y),Y.isPrimaryKey&&(H=Y);let Q,X=[],Te=[],ce=1,de=2,Le={},Be={},Ct=864e5,Ll,Ml,Vs,HA=!1,nh,uG=i.getRange({start:!1,end:!1}).constructor,lG=10,_G=6;h&&FA();class We extends Gt{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=B;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),L=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let I=a(D=>{let N=this.sources.slice(0,-1);if(N=N.filter(M=>M[D]&&(!M[D].reliesOnPrototype||M.prototype[D])),N.length>0)if(N.length===1){let M=N[0];return(F,C,v)=>{if(F?.source!==M)return M[D](C,v,F)}}else return(M,F,C)=>{let v=[];for(let q of N){if(M?.source===q)break;v.push(q[D](F,C,M))}return Promise.all(v)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1],A=a(D=>{if(y[D]&&(!y[D].reliesOnPrototype||y.prototype[D]))return(N,M,F)=>{if(!N?.source)return y[D](M,F,N)}},"getApplyToCanonicalSource");return Le={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish")},Be={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let D=!1,N=a(async(M,F)=>{let C=M.value,v=M.table?rt[c][M.table]:We;if(c===vn.SYSTEM_SCHEMA_NAME&&(M.table===vn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===vn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),M.id===void 0&&(M.id=C[v.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let q=await v.getResource(M.id,F,ua);switch(M.type){case"put":return q._writeUpdate(C,!0,ua);case"patch":return q._writeUpdate(C,!1,ua);case"delete":return q._writeDelete(ua);case"publish":return q._writePublish(C,ua);case"invalidate":return q.invalidate(ua);default:Je.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&p==null&&(p=!0);let F=m.subscribeOnThisThread?m.subscribeOnThisThread((0,no.getWorkerIndex)()):(0,no.getWorkerIndex)()===0,C=M&&F&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let v;for await(let q of C)try{if(!(q.type==="transaction"?q.writes[0]:q)){Je.error("Bad subscription event",q);continue}if(q.source=m,v)if(q.beginTxn)v.resolve();else{N(q,v);continue}if(q.type==="end_txn")continue;let be=ze(q,()=>{if(q.type==="transaction"){let ee=[];for(let Pe of q.writes)try{ee.push(N(Pe,q))}catch(ae){throw ae.message+=" writing "+JSON.stringify(Pe)+" of event "+JSON.stringify(q),ae}return Promise.all(ee)}else if(q.type==="define_schema"){let ee=this.attributes.slice(0),Pe;for(let ae of q.attributes)ee.find(Ge=>Ge.name===ae.name)||(ee.push(ae),Pe=!0);Pe&&(ct({table:s,database:c,attributes:ee,origin:"cluster"}),_u.signalSchemaChange(new du.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return q.beginTxn?(v=q,N(q,q),new Promise(ee=>{v.resolve=ee})):N(q,q)});D&&(await be,_u.signalUserChange(new du.UserEventMsg(process.pid))),q.onCommit&&(be?.then?be.then(q.onCommit):q.onCommit())}catch(oe){Je.error("error in subscription handler",oe)}}}catch(M){Je.error(M)}})(),this}static getResource(m,O,I){let y=super.getResource(m,O,I);if(m!=null){ja(m);try{if(y.hasOwnProperty(_e))return y;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let A=!I?.async||i.cache?.get(m),D=Tn(O),N=D.getReadTxn();if(N?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return sh(m,O,{transaction:N},A,M=>{if(M?bd(y,M):y[_e]=null,O.onlyIfCached&&O.noCacheStore){if(!y.doesExist())throw new un.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let F=ih(m,M,O,y);if(F)return D?.disregardReadTxn(),y[_S]=!0,fS(F,C=>(bd(y,C),y))}return y})}catch(A){throw A.message.includes("Unable to serialize object")&&(A.message+=": "+JSON.stringify(m)),A}}return y}ensureLoaded(){let m=ih(this[Me],this[kr],this[Ae]);if(m)return this[_S]=!0,fS(m,O=>{this[kr]=O,this[_e]=O.value,this[uu]=O.version})}static setTTLExpiration(m){if(typeof m=="number")f=m*1e3,E||(E=0);else if(m&&typeof m=="object")f=m.expiration*1e3,E=(m.eviction||0)*1e3,Ct=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Ct=Ct||(f+E)/4,ah()}static enableAuditing(m=!0){h=m,m&&FA(),We.audit=m}static coerceId(m){return m===""?null:Od(m,H)}static async dropTable(){if(delete rt[c][s],c===o){for(let m of S)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));_u.signalSchemaChange(new du.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[nn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let O=We.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Ae]?.returnNonexistent)return this}allowRead(m,O){let I=Pl(m);if(I?.read){if(I.isSuperUser)return!0;let y=I.attribute_permissions,A=O?.select;if(y?.length>0||HA&&A){if(O||(O={}),A){let D=y?.length>0&&dS(y,"read");O.select=A.map(N=>{let M=N.name||N;if(!D||D[M]){let F=Vs[M]?.definition?.tableClass;if(F){if(N.name||(N={name:N}),!F.prototype.allowRead.call(null,m,N))return!1;if(!N.select)return N.name}return N}}).filter(Boolean)}else O.select=y.filter(D=>D.read&&!Vs[D.attribute_name]).map(D=>D.attribute_name);return O}else return!0}}allowUpdate(m,O){let I=Pl(m);if(I?.update){let y=I.attribute_permissions;if(y?.length>0){let A=dS(y,"update");for(let D in O)if(!A[D])return!1;for(let D of y){let N=D.attribute_name;!D.update&&!(N in O)&&(O[N]=this.getProperty(N))}}return!0}}allowCreate(m,O){if(this[nn]){let I=Pl(m);if(I?.insert){let y=I.attribute_permissions;if(y?.length>0){let A=dS(y,"insert");for(let D in O)if(!A[D])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Pl(m)?.delete}update(m,O){if(!Tn(this[Ae]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let y;return typeof m=="object"&&m&&(O?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[_e]={},this[Rt]=m):(y=this[Rt],y&&(m=Object.assign(y,m)),this[Rt]=y=m)),this._writeUpdate(this[Rt],O),this}addTo(m,O){if(typeof O=="number")this[iu]===RD?this.set(m,(+this.getProperty(m)||0)+O):(this[iu]||this.update(),this.set(m,new u_(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,O){if(typeof O=="number")return this.addTo(m,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let O=this[Ae],I=this[Me];ja(I),Tn(this[Ae]).addWrite({key:I,store:i,invalidated:!0,entry:this[kr],nodeName:this[Ae]?.nodeName,before:Le.invalidate?.bind(this,O,I),beforeIntermediate:Be.invalidate?.bind(this,O,I),commit:(A,D)=>{if(D?.version>A)return;let N=null;for(let M in r)N||(N={}),N[M]=this.getProperty(M);T(I,N,this[kr],A,ou,h,this[Ae],0,"invalidate")}})}static evict(m,O,I){let y=this.Source,A;if(!((L||h)&&(!O||(A=i.getEntry(m),!A||!O)||A.version!==I))){if(L){if(i.hasLock(m,A.version))return;let D;for(let N in r)D||(D={}),D[N]=O[N];if(D)return T(m,D,A,I,au,null,null,0,null,!0)}return i.ifVersion(m,I,()=>{Ul(m,O,null)}),h?T(m,null,A,I,au,null,null,0,null,!0):i.remove(m,I)}}lock(){throw new Error("Not yet implemented")}static operation(m,O){return m.table||=s,m.schema||=c,ID.operation(m,O)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,O,I){let y=this[Ae],A=Tn(y),D=this[Me];ja(D);let N=this[kr];this[iu]=O?RD:r4;let M={key:D,store:i,entry:N,nodeName:y?.nodeName,validate:F=>{m||(m=this[Rt]),O||m&&a_(m)?y?.source||(A.checkOverloaded(),this.validate(m,!O),B&&(m[B.name]=B.type==="Date"?new Date(F):B.type==="String"?new Date(F).toISOString():F),O&&(t&&m[t]!==D&&(m[t]=D),k&&(N?.value?m[k.name]=N?.value[k.name]:m[k.name]=k.type==="Date"?new Date(F):k.type==="String"?new Date(F).toISOString():F),m=Pi(m))):A.removeWrite(M)},before:O?Le.put?()=>Le.put(y,D,m):null:Le.patch?()=>Le.patch(y,D,m):Le.put?()=>Le.put(y,D,Pi(this)):null,beforeIntermediate:O?Be.put?()=>Be.put(y,D,m):null:Be.patch?()=>Be.patch(y,D,m):Be.put?()=>Be.put(y,D,Pi(this)):null,commit:(F,C,v)=>{if(v){if(y&&C?.version>(y.lastModified||0)&&(y.lastModified=C.version),this[kr]=C,C?.value?.[_e])throw new Error("Can not assign a record to a record, check for circular references");O||(this[_e]=C?.value??null)}this[Rt]=m,this[uu]=F;let q=C?.value,oe=m;if(this[iu]=0,C?.version>=F)if(h){let ae=C.localTime,Ge=C.version;for(;oe&&(ae>F||Ge>=F&&ae>0);){let te=u.get(ae),j=Dt(te);if(Ge=j.version,Ge>F){if(j.type==="patch"){let ge=j.getValue(i);oe=i_(oe,ge)}else if(j.type==="put"||j.type==="delete")return}else if(Ge===F)return;ae=j.previousLocalTime}}else{if(O)return;oe=i_(oe,q)}let be;if(O?be=oe:(this[_e]=q,be=O?oe:Pi(this,oe)),this[_e]=be,be?.[_e])throw new Error("Can not assign a record to a record, check for circular references");let ee;O||(ee=m),Ul(D,q,be);let Pe=O?"put":"patch";T(D,be,C,F,0,h,y,y.expiresAt||(f?f+Date.now():0),Pe,!1,ee)}};A.addWrite(M)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[nn]){for await(let O of this.search(m))(await We.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[_e]?this._writeDelete(m):!1}_writeDelete(m){let O=Tn(this[Ae]),I=this[Me];ja(I);let y=this[Ae];return O.addWrite({key:I,store:i,resource:this,nodeName:y?.nodeName,before:Le.delete?.bind(this,y,I),beforeIntermediate:Be.delete?.bind(this,y,I),commit:(A,D,N)=>{let M=D?.value;N&&(y&&D?.version>(y.lastModified||0)&&(y.lastModified=D.version),bd(this,D)),!(D?.version>A)&&(Ul(this[Me],M),Je.trace("Write delete entry",I,A),h||p?(T(I,null,this[kr],A,0,h,this[Ae],0,"delete"),h||ah()):i.remove(this[Me]))}}),!0}search(m){let O=this[Ae],I=Tn(O);if(!m)throw new Error("No query provided");let y=m.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(y=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(y));let A,D={};function N(j,ge){let He;switch(ge){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}let kn=He&&{},$s;for(let $e of j){if($e.conditions){$e.conditions=N($e.conditions,$e.operator);continue}let Ht=$e[0]??$e.attribute,Zr=Ht==null?H:ps(S,Ht);if(Zr){if(He){let Vn=On(Ht),xt=kn[Vn];xt?(xt.push($e),$s=!0):kn[Vn]=[$e]}(Zr.type||Wh[$e.comparator])&&($e[1]===void 0?$e.value=F($e.value,Zr):$e[1]=F($e[1],Zr))}else if(Ht!=null)throw(0,un.handleHDBError)(new Error,`${Ht} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return j;if($s)for(let $e in kn){let Ht=kn[$e],Zr=Ht.length;if(Zr>1)for(let Vn=0;Vn<Zr;Vn++){let xt=Ht[Vn];if(xt.comparator==="ge"||xt.comparator==="greater_than_equal")for(let Ys=0;Ys<Zr;Ys++){let Mo=Ht[Ys];(Mo.comparator==="le"||Mo.comparator==="less_than_equal")&&(xt.comparator="between",xt.value=[xt.value,Mo.value],j.splice(j.indexOf(Mo),1))}if(xt.comparator==="equals"||!xt.comparator){for(let Ys=0;Ys<Zr;Ys++)if(Ys!==Vn){let Mo=Ht[Ys];j.splice(j.indexOf(Mo),1)}break}}}return j}a(N,"prepareConditions");function M(j,ge){if(m.enforceExecutionOrder)return j;for(let He of j)He.conditions&&(He.conditions=M(He.conditions,He.operator));return j.length>1&&ge!=="or"?(0,ND.sortBy)(j,h_(We)):j}a(M,"orderConditions");function F(j,ge){return Array.isArray(j)?j.map(He=>Od(He,ge)):Od(j,ge)}a(F,"coerceTypedValues");let C=m.operator;(y.length>0||C)&&(y=N(y,C));let v=typeof m.sort=="object"&&m.sort,q;if(v&&C!=="or"){let j=v.attribute;if(A=y.find(ge=>On(ge.attribute)===On(j)),!A){if(!ps(S,j))throw(0,un.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);A={attribute:j,comparator:"sort"},y.push(A)}A.descending=!!v.descending}y=M(y,C),v&&(y[0]===A?v.next&&(q={dbOrderedAttribute:v.attribute,attribute:v.next.attribute,descending:v.next.descending,next:v.next.next}):(A&&y.splice(y.indexOf(A),1),q=v));let oe=m.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:y,operator:C,postOrdering:q,selectApplied:!!oe};let be=I.useReadTxn(),ee=Qh(y,C,We,be,m,O,(j,ge)=>xA(j,oe,O,be,ge),D),Pe=m.ensureLoaded!==!1;q||(ee=te(ee));let ae=We.transformEntryForSelect(oe,O,be,D,Pe,!0),Ge=We.transformToOrderedSelect(ee,oe,q,be,O,ae);function te(j){return m.offset||m.limit!==void 0?j.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):j}return a(te,"applyOffset"),q&&(Ge=te(Ge)),Ge.onDone=()=>{Ge.onDone=null,I.doneReadTxn()},Ge.selectApplied=!0,Ge.getColumns=()=>{if(oe){let j=[];for(let ge of oe)ge==="*"?j.push(...S.map(He=>He.name)):j.push(ge.name||ge);return j}return S.map(j=>j.name)},Ge}static transformToOrderedSelect(m,O,I,y,A,D){let N=new uG;if(I){m=xA(m,O,y,A,null);let M;N.iterate=function(){let C,v=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),q,oe=I.dbOrderedAttribute,be,ee,Pe=!0;function ae(te){let j=te.next&&ae(te.next),ge=te.descending;return(He,kn)=>{let $s=oh(He,te.attribute,y),$e=oh(kn,te.attribute,y),Ht=ge?(0,so.compareKeys)($e,$s):(0,so.compareKeys)($s,$e);return Ht===0?j?.(He,kn)||0:Ht}}a(ae,"createComparator");let Ge=ae(I);return{async next(){let te;if(C)if(te=C.next(),te.done){if(q)return N.onDone&&N.onDone(),te}else return{value:await D.call(this,te.value)};M=[],be&&M.push(be);do if(te=await v.next(),te.done){if(q=!0,M.length)break;return N.onDone&&N.onDone(),te}else{let j=te.value;if(j?.then&&(j=await j),oe){let ge=oh(j,oe,y);if(Pe)Pe=!1,ee=ge;else if(ge!==ee){ee=ge,be=j;break}}M.push(j)}while(!0);return I.isGrouped,M.sort(Ge),C=M[Symbol.iterator](),te=C.next(),te.done?(N.onDone&&N.onDone(),te):{value:await D.call(this,te.value)}},return(){N.onDone&&N.onDone(),v.return()},throw(){N.onDone&&N.onDone(),v.throw()}}};let F=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let v=0;v<O.length;v++){let q=O[v],oe;if(q.name===C.attribute[0]){for(oe=q.sort||(q.sort={});oe.next;)oe=oe.next;oe.attribute=C.attribute.slice(1),oe.descending=C.descending}else q===C.attribute[0]&&(O[v]=oe={name:q,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&F(C.next)},"applySortingOnSelect");F(I)}else N.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),N=N.map(D);return N}static transformEntryForSelect(m,O,I,y,A,D){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(v=>v?.key??v,"transform");return m===t?C:m.asArray?v=>[C(v)]:v=>({[t]:C(v)})}let N;A&&L&&!m?.every(C=>{let v;return typeof C=="object"?v=C.name:v=C,r[v]||v===t})&&(N=!0);let M,F=a(function(C){let v;if(C!=null){if(nh=C,v=C.value||C.deref?.(),!v&&(C.key===void 0||C.deref)){if(C=sh(C.key??C,O,{transaction:I,lazy:m?.length<4},this.isSync,q=>q),C?.then)return C.then(F.bind(this));v=C?.value}if(N&&(C.metadataFlags&(ou|au)||C.expiresAt&&C.expiresAt<Date.now())){let q=ih(C.key??C,C,O);if(q?.then)return q.then(F)}}if(v==null)return D?ro.SKIP:v;if(m&&!(m[0]==="*"&&m.length===1)){let q,oe=a((ee,Pe)=>{let ae;typeof ee=="object"?ae=ee.name:ae=ee;let Ge=Vs?.[ae],te;if(Ge){let j=y?.[ae];if(j)if(j.hasMappings){let He=Ge.from?v[Ge.from]:On(C.key);te=j.get(He),te||(te=[])}else te=j.fromRecord?.(v);else te=Ge(v,O,C);let ge=a(He=>{if(He&&typeof He=="object"){let kn=Ge.definition?.tableClass||We;M||(M={});let $s=M[ae]||(M[ae]=kn.transformEntryForSelect(ae===ee?null:ee.select||(Array.isArray(ee)?ee:null),O,I,j,A));if(Array.isArray(He)){let $e=[],Ht=kn.transformToOrderedSelect(He,ee.select,typeof ee.sort=="object"&&ee.sort,O,I,$s)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Zr=a(xt=>{for(;!xt.done;){if(xt?.then)return xt.then(Zr);$e.push(xt.value),xt=Ht.next()}Pe($e,ae)},"nextValue"),Vn=Zr(Ht.next());Vn&&(q||(q=[]),q.push(Vn));return}else if(He=$s.call(this,He),He?.then){q||(q=[]),q.push(He.then($e=>Pe($e,ae)));return}}Pe(He,ae)},"handleResolvedValue");te?.then?(q||(q=[]),q.push(te.then(ge))):ge(te);return}else te=v[ae],te&&typeof te=="object"&&ae!==ee&&(te=We.transformEntryForSelect(ee.select||ee,O,I,null)({value:te}));Pe(te,ae)},"selectAttribute"),be;if(typeof m=="string")oe(m,ee=>{be=ee});else if(Array.isArray(m))if(m.asArray)be=[],m.forEach((ee,Pe)=>{ee==="*"?m[Pe]=v:oe(ee,ae=>be[Pe]=ae)});else{be={};let ee=m.forceNulls;for(let Pe of m)if(Pe==="*")for(let ae in v)be[ae]=v[ae];else oe(Pe,(ae,Ge)=>{ae===void 0&&ee&&(ae=null),be[Ge]=ae})}else throw new un.ClientError("Invalid select"+m);return q?Promise.all(q).then(()=>be):be}return v},"transform");return F}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||ct({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let O=!m.rawEvents,I=Ib(We,this[Me]??null,function(N,M,F,C){try{let v=M.getValue?.(i,O);if(!v&&M.type==="patch"&&O){let q=i.getEntry(N);q?.version===M.version?v=q.value:v=M.getValue?.(i,!0,F),M.type="put"}this.send({id:N,timestamp:F,value:v,version:M.version,type:M.type,beginTxn:C})}catch(v){Je.error(v)}},m.startTime||0,this[nn]);this[nn]&&(I.includeDescendants=!0,m.onlyChildren&&(I.onlyChildren=!0)),m.crossThreads===!1&&(I.crossThreads=!1),m.supportsTransactions&&(I.supportsTransactions=!0);let y=this[Me],A=m.previousCount;A>1e3&&(A=1e3);let D=m.startTime;if(this[nn]){if(D){if(A)throw new un.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:M}of u.getRange({start:D,exclusiveStart:!0})){let F=Dt(M);if(F.tableId!==n)continue;let C=F.recordId;if(y==null||bD(y,C)){let v=F.getValue(i,O,N);I.send({id:C,timestamp:N,value:v,version:F.version,type:F.type})}I.startTime=N}}else if(A){let N=[];for(let{key:M,value:F}of u.getRange({start:"z",end:!1,reverse:!0}))try{let C=Dt(F);if(C.tableId!==n)continue;let v=C.recordId;if(y==null||bD(y,v)){let q=C.getValue(i,O,M);if(N.push({id:v,timestamp:M,value:q,version:C.version,type:C.type}),--A<=0)break}}catch(C){Je.error("Error getting history entry",M,C)}for(let M=N.length;M>0;)I.send(N[--M]);N[0]&&(I.startTime=N[0].timestamp)}else if(!m.omitCurrent)for(let{key:N,value:M,version:F,localTime:C}of i.getRange({start:y??!1,end:y==null?void 0:[y,so.MAXIMUM_KEY],versions:!0}))M&&I.send({id:N,timestamp:C,value:M,version:F,type:"put"})}else{A&&!D&&(D=0);let N=this[kr]?.localTime;if(N===Uh&&(i.cache?.delete(y),this[kr]=i.getEntry(y),Je.trace("re-retrieved record",N,this[kr]?.localTime),N=this[kr]?.localTime),Je.trace("Subscription from",D,"from",y,N),D<N){let M=[],F=N;do{let C=u.get(F);if(C){m.omitCurrent=!0;let v=Dt(C),q=v.getValue(i,O,F);O&&(v.type="put"),M.push({id:y,value:q,timestamp:F,...v}),F=v.previousLocalTime}else break;A&&A--}while(F>D&&A!==0);for(let C=M.length;C>0;)I.send(M[--C]);I.startTime=N}!m.omitCurrent&&this.doesExist()&&I.send({id:y,timestamp:N,value:this,version:this[uu],type:"put"})}return m.listener&&I.on("data",m.listener),I}doesExist(){return!!(this[_e]||this[iu])}publish(m,O){this._writePublish(m,O)}_writePublish(m,O){let I=Tn(this[Ae]),y=this[Me]||null;ja(y);let A=this[Ae];I.addWrite({key:y,store:i,entry:this[kr],nodeName:A?.nodeName,validate:()=>{A?.source||(I.checkOverloaded(),this.validate(m))},before:Le.publish?.bind(this,A,y,m),beforeIntermediate:Be.publish?.bind(this,A,y,m),commit:(D,N,M)=>{N===void 0&&p&&!h&&ah(),T(y,N?.value??null,N,N?.version||D,0,!0,A,N?.expiresAt,"message",!1,m)}})}validate(m,O){let I,y=a((A,D,N)=>{if(D.type&&A!=null)if(O&&A.__op__&&(A=A.value),D.properties){typeof A!="object"&&(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be an object${D.type?" ("+D.type+")":""}`);let M=D.properties;for(let F=0,C=M.length;F<C;F++){let v=M[F],q=y(A[v.name],v,N+"."+v.name);q&&(A[v.name]=q)}if(D.sealed&&A!=null&&typeof A=="object")for(let F in A)M.find(C=>C.name===F)||(I||(I=[])).push(`Property ${F} is not allowed within object in property ${N}`)}else switch(D.type){case"Int":(typeof A!="number"||A>>0!==A)&&(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a string`);break;case"Boolean":typeof A!="boolean"&&(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a Date`)}break;case"BigInt":if(typeof A!="bigint"){if(typeof A=="string"||typeof A=="number")return BigInt(A);(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a bigint`)}break;case"Bytes":A instanceof Uint8Array||(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(A)){if(D.elements)for(let M=0,F=A.length;M<F;M++){let C=A[M],v=y(C,D.elements,N+"[*]");v&&(A[M]=v)}}else(I||(I=[])).push(`Value ${Pn(A)} in property ${N} must be a Buffer or Uint8Array`);break}D.nullable===!1&&A==null&&(I||(I=[])).push(`Property ${N} is required (and not does not allow null values)`)},"validateValue");for(let A=0,D=S.length;A<D;A++){let N=S[A];if(!N.relationship&&(!O||N.name in m)){let M=y(m[N.name],N,N.name);M&&(m[N.name]=M)}}if(d)for(let A in m)S.find(D=>D.name===A)||(I||(I=[])).push(`Property ${A} is not allowed`);if(I)throw new un.ClientError(I.join(". "))}getUpdatedTime(){return this[uu]}wasLoadedFromSource(){return L?!!this[_S]:void 0}static async addAttributes(m){let O=S.slice(0);for(let I of m){if(!I.name)throw new un.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new un.ClientError("Attribute names cannot include backticks or forward slashes");O.push(I)}return ct({table:s,database:c,schemaDefined:_,attributes:O}),We.indexingOperation}static async removeAttributes(m){let O=S.filter(I=>!m.includes(I.name));return ct({table:s,database:c,schemaDefined:_,attributes:O}),We.indexingOperation}static getRecordCount(m){let O=i.getStats().entryCount,I=5e3,y=1e3,A;O>I&&!m?.exactCount&&(A=y);let D=0;for(let{value:N}of i.getRange({start:!0,lazy:!0,limit:A}))N!=null&&D++;if(A){let N=D;D=0;for(let{value:Pe}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:A}))Pe!=null&&D++;let M=A*2,F=(D+N)/M,C=Math.pow((D-N+1)/A/2,2)+F*(1-F)/M,v=Math.max(Math.sqrt(C)*O,1),q=Math.round(F*O),oe=Math.max(q-1.96*v,0),be=Math.min(q+1.96*v,O),ee=Math.pow(10,Math.round(Math.log10(v)));return ee>q&&(ee=ee/10),D=Math.round(q/ee)*ee,{recordCount:D,estimatedRange:[Math.round(oe),Math.round(be)]}}return{recordCount:D}}static updatedAttributes(){Vs=this.propertyResolvers={$id:(m,O,I)=>({value:I.key}),$updatedtime:(m,O,I)=>I.version,$record:(m,O,I)=>I?{value:m}:m};for(let m of this.attributes){m.resolve=null;let O=m.relationship;if(O)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),HA=!0,O.to)m.elements?.definition?(Vs[m.name]=m.resolve=(I,y,A)=>{let D=I[O.from?O.from:t],N=m.elements.definition.tableClass;return A?ko({attribute:O.to,value:D},Tn(y).getReadTxn(),!1,N,!1).asArray:N.search([{attribute:O.to,value:D}],y).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,O.from&&(m.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(O.from){let I=m.definition||m.elements?.definition;I?(Vs[m.name]=m.resolve=(y,A,D)=>{let N=y[O.from];if(N!==void 0){if(m.elements){let M,F=N.map(C=>{let v=D?I.tableClass.primaryStore.getEntry(C,{transaction:Tn(A).getReadTxn()}):I.tableClass.get(C,A);return v?.then&&(M=!0),v});return O.filterMissing?M?Promise.all(F).then(C=>C.filter(yD)):F.filter(yD):M?Promise.all(F):F}return D?I.tableClass.primaryStore.getEntry(N,{transaction:Tn(A).getReadTxn()}):I.tableClass.get(N,A)}},m.set=(y,A)=>{if(Array.isArray(A)){let D=A.map(N=>N[Me]||N[I.tableClass.primaryKey]);y[O.from]=D}else{let D=A[Me]||A[I.tableClass.primaryKey];y[O.from]=D}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=O.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}l_(this,this)}static async deleteHistory(m=0){let O;for(let{key:I,value:y}of u.getRange({start:0,end:m}))await cu(),Dt(y).tableId===n&&(O=u.remove(I));await O}static async*getHistory(m=0,O=1/0){for(let{key:I,value:y}of u.getRange({start:m,end:O})){await cu();let A=Dt(y);A.tableId===n&&(yield{id:A.recordId,localTime:I,version:A.version,type:A.type,value:A.getValue(i,!0,I),user:A.user})}}static async getHistoryOfRecord(m){let O=[];if(m==null)throw new Error("An id is required");let I=i.getEntry(m);if(!I)return O;let y=I.localTime;if(!y)throw new Error("The entry does not have a local audit time");let A=0;do{await cu();let D=u.get(y);if(D){let N=Dt(D);O.push({id:N.recordId,localTime:y,version:N.version,type:N.type,value:N.getValue(i,!0,y),user:N.user}),y=N.previousLocalTime}else break}while(A<1e3&&y);return O.reverse()}static cleanup(){Q?.remove()}}We.updatedAttributes();let dG=We.prototype;return dG[t4]=!0,f&&We.setTTLExpiration(f/1e3),J&&fG(),We;function Ul(Y,m,O){let I;for(let y in r){let A=r[y],D=A.isIndexing,N=O?.[y],M=m?.[y];if(N===M&&!D)continue;I=!0;let F=A.indexNulls,C=(0,lu.getIndexedValues)(M,F);if(C){gD&&A.prefetch(C.map(v=>({key:v,value:Y})),OD);for(let v=0,q=C.length;v<q;v++)A.remove(C[v],Y)}if(C=(0,lu.getIndexedValues)(N,F),C){gD&&A.prefetch(C.map(v=>({key:v,value:Y})),OD);for(let v=0,q=C.length;v<q;v++)A.put(C[v],Y)}}return I}a(Ul,"updateIndices");function ja(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>AD)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,so.writeKey)(Y,n4,0)>AD)throw new Error("Primary key size is too large: "+Y.length);return!0}a(ja,"checkValidId");function sh(Y,m,O,I,y){let A=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),O.transaction?.isDone)return y(null,Y);let D=i.getEntry(Y,O);return D&&m&&(D?.version>(m.lastModified||0)&&(m.lastModified=D.version),D?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=D.localTime)),y(D,Y)},"whenPrefetched");return I?A():ce>0?(ce--,A()):new Promise((D,N)=>{ce===0?(ce--,i.prefetch([Y],()=>{M(),F()})):(X.push(Y),Te.push(F),X.length>_G&&(ce--,M()));function M(){if(X.length>0){let C=Te;i.prefetch(X,()=>{ce===-1?M():ce++;for(let v of C)v()}),X=[],Te=[],de>2&&de--}else ce=de,de<lG&&de++}a(M,"prefetch");function F(){try{D(A())}catch(C){N(C)}}a(F,"load")})}a(sh,"loadLocalRecord");function Pl(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return s4;let O=m[c],I,y=O?.tables;if(y)return y[s];if(c==="data"&&(I=m[s])&&!I.tables)return I}a(Pl,"getTablePermissions");function ih(Y,m,O,I){if(L){let y;if(O.noCache?y=!0:(m?(!m.value||m.metadataFlags&(ou|au)||m.expiresAt&&m.expiresAt<Date.now())&&(y=!0):y=!0,cn(!y,"cache-hit",s)),y){let A=GA(Y,m,O).then(D=>(D?.value?.[_e]&&Je.error("Can not assign a record with a record property"),O&&(D?.version>(O.lastModified||0)&&(O.lastModified=D.version),O.lastRefreshed=Date.now()),D));if(O?.onlyIfCached||m?.value&&I?.allowStaleWhileRevalidate?.(m,Y)){if(A.catch(D=>Je.warn(D)),O?.onlyIfCached&&!I.doesExist())throw new un.ServerError("Entry is not cached",504);return}else return A}}}a(ih,"ensureLoadedFromSource");function Tn(Y){let m=Y?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let O=m.next;if(!O)return m=m.next=new vi,m.lmdbDb=i,m;m=O}while(!0)}else return new f_}a(Tn,"txnForContext");function oh(Y,m,O){if(!Y)return;nh=Y;let I=Y.value||Y.deref?.()||(nh=i.getEntry(Y.key))?.value;if(typeof m=="object"){let A=Vs,D=I;for(let N=0,M=m.length;N<M;N++){let F=m[N],C=A?.[F];D=C&&D?C(D,O,!0)?.value:D?.[F],A=C?.definition?.tableClass?.propertyResolvers}return D}let y=Vs[m];return y?y(I,O):I[m]}a(oh,"getAttributeValue");function xA(Y,m,O,I,y){let A=y?.length,D={transaction:I,lazy:A>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},N;function M(F,C){let v=F?.value;if(!v)return ro.SKIP;for(let q=0;q<A;q++)if(!N?.includes(q)&&!y[q](v,F))return ro.SKIP;return C!==void 0&&(F.key=C),F}if(a(M,"processEntry"),A>0||!Y.hasEntries){let F=Y.map(C=>{if(N=null,typeof C=="object"&&C.key!==void 0)return A>0?M(C):C;if(C==null)return ro.SKIP;for(let v=0;v<A;v++){let oe=y[v].idFilter;if(oe){if(!oe(C))return ro.SKIP;N||(N=[]),N.push(v)}}return sh(C,O,D,!1,M)});return Array.isArray(Y)&&(F=F.filter(C=>C!==ro.SKIP)),F.hasEntries=!0,F}return Y}a(xA,"transformToEntries");async function GA(Y,m,O){let I=m?.metadataFlags,y=m?.version,A,D;if(!i.attemptLock(Y,y,()=>{clearTimeout(D);let C=i.getEntry(Y);!C||!C.value||C.metadataFlags&(ou|au)?A(GA(Y,i.getEntry(Y),O)):A(C)}))return new Promise(C=>{A=C,D=setTimeout(()=>{i.unlock(Y,y)},e4)});let N=m?.value,M={requestContext:O,replacingRecord:N,replacingVersion:y,source:null,resourceCache:O?.resourceCache},F=O?.responseHeaders;return new Promise((C,v)=>{let q;fS(ze(M,async oe=>{let be=performance.now(),ee,Pe,ae;try{for(let ge of We.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(M.source=ge,ee=await ge.get(Y,M),ee))break;ae=I&ou;let te=M.lastModified||ae&&y;Pe=ae||te>y||!N,te||(te=(0,lu.getNextMonotonicTime)());let j=performance.now()-be;if(qr(j,"cache-resolution",s),F&&lS(F,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),oe.timestamp=te,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),ee){if(typeof ee!="object")throw new Error("Only objects can be cached and stored in tables");typeof ee.toJSON=="function"&&(ee=ee.toJSON()),t&&ee[t]!==Y&&(ee[t]=Y)}q=!0,C({version:te,value:ee})}catch(te){te.message+=` while resolving record ${Y} for ${s}`,N&&((te.code==="ECONNRESET"||te.code==="ECONNREFUSED"||te.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(te.statusCode===500||te.statusCode===502||te.statusCode===503||te.statusCode===504))?(C({version:y,value:N}),Je.trace(te.message,"(returned stale record)")):v(te),M.transaction.abort();return}if(O?.noCacheStore){M.transaction.abort();return}Tn(M).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(te,j)=>{if(j?.version!==y)return;let ge=Ul(Y,N,ee);ee?(Be.put?.(M,Y,ee),T(Y,ee,j,te,0,h&&Pe||null,M,M.expiresAt,"put",!!ae)):(Be.delete?.(M,Y),h||p?T(Y,null,j,te,0,h&&Pe||null,M,0,"delete",!!ae):i.remove(Y,y))}})}),()=>{i.unlock(Y,y)},oe=>{i.unlock(Y,y),q&&Je.error("Error committing cache update",oe)})})}a(GA,"getFromSource");function ah(){if(Ct!==Ll&&(Ll=Ct,(0,no.getWorkerIndex)()===(0,no.getWorkerCount)()-1)){if(Ml&&clearTimeout(Ml),!Ct)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())/Ct)*Ct+Y.getTime(),O=a(I=>{Je.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Ml=setTimeout(()=>P=P.then(async()=>{if(O(Math.max(I+Ct,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ml);return}let y=50,A=new Array(y),D=0;Je.trace(`Starting cleanup scan for ${s}`);try{let N=0;for(let{key:M,value:F,version:C,expiresAt:v}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let q;F===null&&!h&&C+ZJ<Date.now()?q=i.remove(M,C):v&&v+E<Date.now()&&(q=We.evict(M,F,C),N++),q&&(await A[D],A[D]=q.catch(oe=>{Je.error("Cleanup error",oe)}),++D>=y&&(D=0)),await cu()}Je.trace(`Finished cleanup scan for ${s}, evicted ${N} entries`)}catch(N){Je.trace(`Error in cleanup scan for ${s}:`,N)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");O(m)}}a(ah,"scheduleCleanup");function FA(){Q=u?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(FA,"addDeleteRemoval");function fG(){(0,no.getWorkerIndex)()===0&&setInterval(async()=>{try{let Y=J.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let{key:O,value:I}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let y=i.getEntry(I);y?.value?y.value[Y]<Date.now()&&We.evict(I,y.value,y.version):i.ifVersion(I,y?.version,()=>m.remove(O,I)),await cu()}}catch(Y){Je.error("Error in evicting old records",Y)}},jJ).unref()}a(fG,"runRecordExpirationEviction")}function dS(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 OD(){}function i4(e){ID=e}function Od(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"&&!o4.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,yd.autoCast)(e):e}function bD(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 fS(e,t,r){return e?.then?e.then(t,r):t(e)}function bd(e,t){e[kr]=t,e[_e]=t?.value??null,e[uu]=t?.version}function yD(e){return e!=null}function Pn(e){try{return JSON.stringify(e)}catch{return e}}var vn,ro,lu,ND,fu,un,_u,du,Je,so,no,yd,XJ,ID,jJ,ZJ,gD,e4,uu,t4,kr,iu,RD,r4,_S,ua,ou,au,n4,AD,s4,K_e,o4,cu,Id=Re(()=>{vn=x(U()),ro=require("lmdb"),lu=x(Ir()),ND=require("lodash");An();Yh();fu=x(re());Db();un=x(ne()),_u=x(gs()),du=x(Nn());Oe();p_();Je=x(K());d_();Bi();so=require("ordered-binary"),no=x(Ze());Mi();yd=x(z());Ho();ys();n_();su();XJ=new Uint8Array(9);XJ[8]=192;jJ=6e4,ZJ=864e5;fu.initSync();gD=fu.get(vn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),e4=1e4,uu=Symbol.for("version"),t4=Symbol.for("incremental-update"),kr=Symbol("entry"),iu=Symbol("is-saving"),RD=1,r4=2,_S=Symbol("loaded-from-source"),ua={isNotification:!0,ensureLoaded:!1},ou=1,au=8,n4=Buffer.allocUnsafeSlow(8192),AD=1978,s4={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},K_e=(0,yd.convertToMS)(fu.get(vn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Nd,"makeTable");a(dS,"attributesAsObject");a(OD,"noop");a(i4,"setServerUtilities");o4=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Od,"coerceType");a(bD,"isDescendantId");cu=a(()=>new Promise(setImmediate),"rest");a(fS,"when");a(bd,"updateResource");a(yD,"exists");a(Pn,"stringify")});var qe={};Fe(qe,{database:()=>Vc,databases:()=>rt,dropDatabase:()=>Op,dropTableMeta:()=>d4,getDatabases:()=>wn,getTables:()=>a4,onUpdatedTable:()=>TS,readMetaDb:()=>Eu,resetDatabases:()=>c4,table:()=>ct,tables:()=>$r});function a4(){return Md||wn(),$r||{}}function wn(){if(Md)return rt;Md=!0,da=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Xe.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),t=(0,zt.get)(Yr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Vr.existsSync)(e)?e:(0,Xe.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Vr.existsSync)(e))for(let r of(0,Vr.readdirSync)(e,{withFileTypes:!0})){let n=(0,Xe.basename)(r.name,".mdb");r.isFile()&&(0,Xe.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Eu((0,Xe.join)(e,r.name),null,n)}if((0,Vr.existsSync)((0,_a.getBaseSchemaPath)())){for(let r of(0,Vr.readdirSync)((0,_a.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Xe.join)((0,_a.getBaseSchemaPath)(),r.name),s=(0,Xe.join)((0,_a.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Vr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Xe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Xe.join)(s,i.name);Eu((0,Xe.join)(n,i.name),(0,Xe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Vr.existsSync)(s))for(let o of(0,Vr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Xe.extname)(o.name).toLowerCase()===".mdb"&&Eu((0,Xe.join)(s,o.name),(0,Xe.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Xe.join)(c.path,(0,Xe.basename)(o+".mdb"));(0,Vr.existsSync)(u)&&Eu(u,o,r,null,!0)}}for(let r in rt){let n=da.get(r);if(n){let s=rt[r];r.includes("delete")&&ln.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(ln.trace(`delete table class ${i}`),delete s[i])}else if(delete rt[r],r==="data"){for(let s in $r)delete $r[s];delete $r[Ud]}}return da=null,rt}}function c4(){Md=!1;for(let[,e]of ui)e.needsDeletion=!0;wn();for(let[e,t]of ui)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ui.delete(e));return rt}function Eu(e,t,r=pS,n,s){let i=new hS.default(e,!1);try{let o=ui.get(e);o?o.needsDeletion=!1:(o=(0,Cd.open)(i),ui.set(e,o));let c=new io.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(wd.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Vr.existsSync)(n)&&(i.path=n,_=(0,Cd.open)(i),_.isLegacy=!0):_=r_(o));let l=LD(r),d=l[Ud],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 T=f.get(p);T||f.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.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 X of p)if(X.is_hash_attribute||X.isPrimaryKey){S=X;break}if(!S){ln.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[E],b={},R=[],L,H,P=typeof S.audit=="boolean"?S.audit:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),k=S.trackDeletes,B=S.expiration,J=S.eviction,Q=S.sealed;if(T)b=T.indices,R=T.attributes,T.schemaVersion++;else{L=S.tableId,L?L>=(u.get(la)||0)&&u.putSync(la,L+1):(S.tableId=L=u.get(la),L||(L=1),u.putSync(la,L+1),u.putSync(S.key,S));let X=new io.default(!S.is_hash_attribute,S.is_hash_attribute);H=jl(o.openDB(S.key,X)),H.rootStore=o,H.tableId=L}for(let X of p){X.attribute=X.name;try{if(!X.is_hash_attribute&&(X.indexed||X.attribute&&!X.name)){if(!b[X.name]){let ce=new io.default(!X.is_hash_attribute,X.is_hash_attribute);b[X.name]=o.openDB(X.key,ce),b[X.name].indexNulls=X.indexNulls}let Te=R.find(ce=>ce.name===X.name);Te?R.splice(R.indexOf(Te),1,X):R.push(X)}}catch(Te){ln.error("Error trying to update attribute",X,R,b,Te)}}if(!T){T=MD(l,E,Nd({primaryStore:H,auditStore:_,audit:P,sealed:Q,expirationMS:B&&B*1e3,evictionMS:J&&J*1e3,trackDeletes:k,tableName:E,tableId:L,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let X of SS)X(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function LD(e){let t=rt[e];if(t||(e==="data"?t=rt[e]=$r:e==="system"?Object.defineProperty(rt,"system",{value:t=Object.create(null),configurable:!0}):t=rt[e]=Object.create(null)),da&&!da.has(e)){let r=new Set;t[Ud]=r,da.set(e,r)}return t}function MD(e,t,r){return e[t]=r,r}function Vc({database:e,table:t}){e||(e=pS),wn();let r=LD(e),n=(0,Xe.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),s=(0,zt.get)(Yr.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,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||((0,Vr.existsSync)(n)?n:(0,Xe.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME));let o=(0,Xe.join)(n,(i?t:e)+".mdb"),c=ui.get(o);if(!c){let u=new hS.default(o,!1);c=(0,Cd.open)(u),ui.set(o,c)}return c}async function Op(e){if(!rt[e])throw new Error("Schema does not exist");let t=rt[e];for(let r in t){let s=t[r].primaryStore.rootStore;ui.delete(s.path),s.status==="open"&&(await s.close(),await wD.remove(s.path))}if(e==="data"){for(let r in $r)delete $r[r];delete $r[Ud]}delete rt[e]}function ct({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=pS);let d=Vc({database:t,table:e}),f=rt[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let b=new io.default(!1);for(let B of i)B.attribute?(B.name=B.attribute,B.indexed=!0):B.attribute=B.name,B.expiresAt&&(B.indexed=!0);let R,L;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let B=d.auditStore;B||(B=r_(d)),p=i.find(Te=>Te.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=!0,p.schemaDefined=_,u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),n&&(p.eviction=n),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),ln.trace(`${e} table loading, opening primary store`);let J=new io.default(!1,!0),Q=e+"/",X=jl(d.openDB(Q,J));X.rootStore=d,T=d.dbisDb=d.openDB(wd.INTERNAL_DBIS_NAME,b),X.tableId=T.get(la),X.tableId||(X.tableId=1),T.putSync(la,X.tableId+1),p.tableId=X.tableId,E=MD(f,e,Nd({primaryStore:X,auditStore:B,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:X.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),E.schemaVersion=1,R=!0,k(),T.put(Q,p)}S=E.indices,T=T||(d.dbisDb=d.openDB(wd.INTERNAL_DBIS_NAME,b)),E.dbisDB=T;let H=[];for(let{key:B,value:J}of T.getRange({start:!0})){let[Q,X]=B.toString().split("/");if(X===""&&(X=J.name),X){if(Q!==e)continue}else X=Q;if(!i.find(ce=>ce.name===X)?.indexed&&J.indexed&&!J.isPrimaryKey){k(),R=!0,T.remove(B);let ce=E.indices[Q];ce&&H.push(ce)}}let P=[];try{for(let B of i||[]){if(B.relationship)continue;let J=e+"/"+(B.name||"");Object.defineProperty(B,"key",{value:J,configurable:!0});let Q=T.get(J);if(B.isPrimaryKey){if(Q=Q||T.get(J=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+Q.expiration||void 0)||(+n||void 0)!==(+Q.eviction||void 0)){let Te=Object.assign({},Q);typeof o=="boolean"&&(o&&E.enableAuditing(o),Te.audit=o),r&&(Te.expiration=+r),n&&(Te.eviction=+n),c!==void 0&&(Te.sealed=c),R=!0,k(),T.put(J,Te)}continue}Q?.attribute&&!Q.name&&(Q.indexed=!0);let X=!Q||Q.type!==B.type||Q.indexed!==B.indexed||Q.nullable!==B.nullable||JSON.stringify(Q.attributes)!==JSON.stringify(B.attributes)||JSON.stringify(Q.elements)!==JSON.stringify(B.elements);if(B.indexed){let Te=new io.default(!0,!1),ce=d.openDB(J,Te);(X||Q.indexingPID&&Q.indexingPID!==process.pid||Q.restartNumber<hu.workerData?.restartNumber)&&(R=!0,k(),Q=T.get(J),(X||Q.indexingPID&&Q.indexingPID!==process.pid||Q.restartNumber<hu.workerData?.restartNumber)&&(R=!0,B.lastIndexedKey=Q?.lastIndexedKey||!1,B.indexingPID=process.pid,ce.isIndexing=!0,Object.defineProperty(B,"dbi",{value:ce}),B.indexNulls===void 0&&(B.indexNulls=!0),P.push(B)),T.put(J,B)),Q?.indexNulls&&B.indexNulls===void 0&&(B.indexNulls=!0),ce.indexNulls=B.indexNulls,S[B.name]=ce}else X&&(R=!0,k(),T.put(J,B))}}finally{L&&L()}if(R&&(E.schemaVersion++,E.updatedAttributes()),ln.trace(`${e} table loading, running index`),P.length>0||H.length>0?E.indexingOperation=_4(E,P,H):R&&Dd.signalSchemaChange(new Ld.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=l,R)for(let B of SS)B(E,l!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),ln.trace(`${e} table loaded`),E;function k(){L||d.transactionSync(()=>({then(B){L=B}}))}a(k,"startTxn")}async function _4(e,t,r){try{let n=e.schemaVersion;await Dd.signalSchemaChange(new Ld.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,CD.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,ln.error(f)}),hu.workerData&&hu.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>u4?await s:u>l4&&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 Dd.signalSchemaChange(new Ld.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){ln.error("Error in indexing",n)}}function d4({table:e,database:t}){let r=Vc({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 TS(e){SS.push(e)}var zt,wd,Cd,Xe,Vr,_a,io,hS,Yr,wD,mS,CD,Dd,Ld,hu,ln,DD,pS,Ud,$r,rt,la,SS,Md,ui,da,u4,l4,Oe=Re(()=>{zt=x(re()),wd=x(_t()),Cd=require("lmdb"),Xe=require("path"),Vr=require("fs"),_a=x(Qe());Id();io=x(A_()),hS=x(b_()),Yr=x(U()),wD=x(require("fs-extra")),mS=require("../index"),CD=x(Ir()),Dd=x(gs()),Ld=x(Nn()),hu=require("worker_threads"),ln=x(K()),DD=x(Ze());Mi();Ho();pS="data",Ud=Symbol("defined-tables");(0,zt.initSync)();$r=Object.create(null),rt=Object.create(null);(0,mS._assignPackageExport)("databases",rt);(0,mS._assignPackageExport)("tables",$r);la=Symbol.for("next-table-id"),SS=[],ui=new Map;a(a4,"getTables");a(wn,"getDatabases");a(c4,"resetDatabases");a(Eu,"readMetaDb");a(LD,"ensureDB");a(MD,"setTable");a(Vc,"database");a(Op,"dropDatabase");a(ct,"table");u4=1e3,l4=10;a(_4,"runIndexing");a(d4,"dropTableMeta");a(TS,"onUpdatedTable")});var z=g((tde,KD)=>{"use strict";var li=require("path"),HD=require("fs-extra"),dr=K(),UD=require("fs-extra"),Pd=require("os"),f4=require("net"),E4=require("recursive-iterator"),nt=U(),h4=TO(),PD=require("papaparse"),vd=require("moment"),{inspect:m4}=require("util"),vD=require("is-number"),ede=require("lodash"),p4=require("minimist"),S4=require("https"),T4=require("http"),{hdb_errors:Bd}=ne(),g4=/^((\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)))$/,xD=require("util").promisify(setTimeout),R4=100,A4=5,O4="",b4=4,BD={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};KD.exports={isEmpty:Kr,isEmptyOrZeroLength:ns,arrayHasEmptyValues:I4,arrayHasEmptyOrZeroLengthValues:w4,buildFolderPath:C4,isBoolean:GD,errorizeMessage:y4,stripFileExtension:L4,autoCast:M4,autoCastJSON:FD,autoCastJSONDeep:RS,removeDir:U4,compareVersions:P4,isCompatibleDataVersion:v4,escapeRawValue:B4,unescapeValue:H4,stringifyProps:x4,timeoutPromise:F4,isClusterOperation:k4,getClusterUser:$4,checkGlobalSchemaTable:V4,getHomeDir:kD,getPropsFilePath:G4,promisifyPapaParse:Y4,removeBOM:VD,createEventPromise:K4,checkProcessRunning:W4,checkSchemaTableExist:Q4,checkSchemaExists:$D,checkTableExists:YD,getStartOfTomorrowInSeconds:z4,getLimitKey:J4,isObject:D4,isNotEmptyAndHasValue:N4,autoCasterIsNumberCheck:qD,backtickASTSchemaItems:X4,isPortTaken:q4,createForkArgs:j4,autoCastBoolean:Z4,async_set_timeout:xD,getTableHashAttribute:e3,doesSchemaExist:t3,doesTableExist:r3,stringifyObj:n3,ms_to_time:s3,changeExtension:i3,getEnvCliRootPath:AS,noBootFile:o3,httpRequest:a3,transformReq:c3,convertToMS:u3,PACKAGE_ROOT:nt.PACKAGE_ROOT};function y4(e){return e instanceof Error?e:new Error(e)}a(y4,"errorizeMessage");function Kr(e){return e==null}a(Kr,"isEmpty");function N4(e){return!Kr(e)&&(e||e===0||e===""||GD(e))}a(N4,"isNotEmptyAndHasValue");function ns(e){return Kr(e)||e.length===0||e.size===0}a(ns,"isEmptyOrZeroLength");function I4(e){if(Kr(e))return!0;for(let t=0;t<e.length;t++)if(Kr(e[t]))return!0;return!1}a(I4,"arrayHasEmptyValues");function w4(e){if(ns(e))return!0;for(let t=0;t<e.length;t++)if(ns(e[t]))return!0;return!1}a(w4,"arrayHasEmptyOrZeroLengthValues");function C4(...e){try{return e.join(li.sep)}catch{console.error(e)}}a(C4,"buildFolderPath");function GD(e){return Kr(e)?!1:e===!0||e===!1}a(GD,"isBoolean");function D4(e){return Kr(e)?!1:typeof e=="object"}a(D4,"isObject");function L4(e){return ns(e)?O4:e.slice(0,-b4)}a(L4,"stripFileExtension");function M4(e){return Kr(e)||e===""||typeof e!="string"?e:BD[e]!==void 0?BD[e]:qD(e)===!0?Number(e):g4.test(e)?new Date(e):e}a(M4,"autoCast");function FD(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(FD,"autoCastJSON");function RS(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=RS(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=RS(r);n!==r&&(e[t]=n)}return e}else return FD(e)}a(RS,"autoCastJSONDeep");function qD(e){if(e.startsWith("0.")&&vD(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&vD(e))}a(qD,"autoCasterIsNumberCheck");async function U4(e){if(ns(e))throw new Error(`Directory path: ${e} does not exist`);try{await UD.emptyDir(e),await UD.remove(e)}catch(t){throw dr.error(`Error removing files in ${e} -- ${t}`),t}}a(U4,"removeDir");function P4(e,t){if(ns(e)){dr.info("Invalid current version sent as parameter.");return}if(ns(t)){dr.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(P4,"compareVersions");function v4(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(v4,"isCompatibleDataVersion");function B4(e){if(Kr(e))return e;let t=String(e);return t==="."?nt.UNICODE_PERIOD:t===".."?nt.UNICODE_PERIOD+nt.UNICODE_PERIOD:t.replace(nt.FORWARD_SLASH_REGEX,nt.UNICODE_FORWARD_SLASH)}a(B4,"escapeRawValue");function H4(e){if(Kr(e))return e;let t=String(e);return t===nt.UNICODE_PERIOD?".":t===nt.UNICODE_PERIOD+nt.UNICODE_PERIOD?"..":String(e).replace(nt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(H4,"unescapeValue");function x4(e,t){if(Kr(e))return dr.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+Pd.EOL}!ns(n)&&n[0]===";"?r+=" "+n+s+Pd.EOL:ns(n)||(r+=n+"="+s+Pd.EOL)}catch{dr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(x4,"stringifyProps");function kD(){let e;try{e=Pd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(kD,"getHomeDir");function G4(){let e=li.join(kD(),nt.HDB_HOME_DIR_NAME,nt.BOOT_PROPS_FILE_NAME);return HD.existsSync(e)||(e=li.join(__dirname,"../","hdb_boot_properties.file")),e}a(G4,"getPropsFilePath");function F4(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(F4,"timeoutPromise");async function q4(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=f4.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(q4,"isPortTaken");function k4(e){try{return nt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){dr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(k4,"isClusterOperation");function V4(e,t){let r=(Oe(),se(qe)).getDatabases();if(!r[e])return Bd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Bd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(V4,"checkGlobalSchemaTable");function $4(e,t){if(Kr(t)){dr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Kr(e)||ns(e)){dr.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){dr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){dr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a($4,"getClusterUser");function Y4(){PD.parsePromise=function(e,t,r){return new Promise(function(n,s){PD.parse(e,{header:!0,transformHeader:VD,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Y4,"promisifyPapaParse");function VD(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(VD,"removeBOM");function K4(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;dr.info(`Got cluster status event response: ${m4(s)}`);try{i.cancel()}catch{dr.error("Error trying to cancel timeout.")}n(s)})})}a(K4,"createEventPromise");async function W4(e){let t=!0,r=0;do await xD(R4*r++),(await h4.findPs(e)).length>0&&(t=!1);while(t&&r<A4);if(t)throw new Error(`process ${e} was not started`)}a(W4,"checkProcessRunning");function Q4(e,t){let r=$D(e);if(r)return r;let n=YD(e,t);if(n)return n}a(Q4,"checkSchemaTableExist");function $D(e){let{getDatabases:t}=(Oe(),se(qe));if(!t()[e])return Bd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a($D,"checkSchemaExists");function YD(e,t){let{getDatabases:r}=(Oe(),se(qe));if(!r()[e][t])return Bd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(YD,"checkTableExists");function z4(){let e=vd().utc().add(1,nt.MOMENT_DAYS_TAG).startOf(nt.MOMENT_DAYS_TAG).unix(),t=vd().utc().unix();return e-t}a(z4,"getStartOfTomorrowInSeconds");function J4(){return vd().utc().format("DD-MM-YYYY")}a(J4,"getLimitKey");function X4(e){try{let t=new E4(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){dr.error("Got an error back ticking items."),dr.error(t)}}a(X4,"backtickASTSchemaItems");function j4(e){return[e]}a(j4,"createForkArgs");function Z4(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Z4,"autoCastBoolean");function e3(e,t){let{getDatabases:r}=(Oe(),se(qe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(e3,"getTableHashAttribute");function t3(e){let{getDatabases:t}=(Oe(),se(qe));return t()[e]!==void 0}a(t3,"doesSchemaExist");function r3(e,t){let{getDatabases:r}=(Oe(),se(qe));return r()[e]?.[t]!==void 0}a(r3,"doesTableExist");function n3(e){try{return JSON.stringify(e)}catch{return e}}a(n3,"stringifyObj");function s3(e){let t=vd.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(s3,"ms_to_time");function i3(e,t){let r=li.basename(e,li.extname(e));return li.join(li.dirname(e),r+t)}a(i3,"changeExtension");function AS(){if(process.env[nt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[nt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=p4(process.argv);if(e[nt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[nt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(AS,"getEnvCliRootPath");var gS;function o3(){if(gS)return gS;let e=AS();AS()&&HD.pathExistsSync(li.join(e,nt.HDB_CONFIG_FILE))&&(gS=!0)}a(o3,"noBootFile");function a3(e,t){let r;return e.protocol==="http:"?r=T4:r=S4,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(a3,"httpRequest");function c3(e){if(!e.schema&&!e.database){e.schema=nt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(c3,"transformReq");function u3(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(u3,"convertToMS")});var re=g((nde,JD)=>{"use strict";var OS=require("fs-extra"),oo=require("path"),WD=require("os"),l3=require("properties-reader"),pu=K(),mu=z(),ue=U(),Hd=xr(),_3="Error initializing environment manager",xd="BOOT_PROPS_FILE_PATH",QD=!1,d3={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ns={};JD.exports={BOOT_PROPS_FILE_PATH:xd,getHdbBasePath:f3,setHdbBasePath:E3,get:zD,initSync:m3,setProperty:Ue,initTestEnvironment:p3};function f3(){return Ns[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(f3,"getHdbBasePath");function E3(e){Ns[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(E3,"setHdbBasePath");function zD(e){let t=Hd.getConfigValue(e);return t===void 0?Ns[e]:t}a(zD,"get");function Ue(e,t){d3[e]&&(Ns[e]=t),Hd.updateConfigObject(e,t)}a(Ue,"setProperty");function h3(){let e;try{e=mu.getPropsFilePath(),OS.accessSync(e,OS.constants.F_OK|OS.constants.R_OK),QD=!0;let t=l3(e);return Ns[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),Ns[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ns[xd]=e,!0}catch{return pu.trace(`Environment manager found no properties file at ${e}`),!1}}a(h3,"doesPropFileExist");function m3(e=!1){try{(QD||h3()||mu.noBootFile())&&(Hd.initConfig(e),Ns[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Hd.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){pu.error(_3),pu.error(t),console.error(t),process.exit(1)}}a(m3,"initSync");function p3(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=oo.join(__dirname,"../../","unitTests");Ns[xd]=oo.join(u,"hdb_boot_properties.file"),Ue(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,oo.join(u,"settings.test")),Ue(ue.HDB_SETTINGS_NAMES.INSTALL_USER,WD.userInfo()?WD.userInfo().username:void 0),Ue(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ue(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,oo.join(u,"envDir","log")),Ue(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,oo.join(u,"envDir")),Ue(ue.CONFIG_PARAMS.STORAGE_PATH,oo.join(u,"envDir")),s&&(Ue(ue.CONFIG_PARAMS.HTTP_SECUREPORT,zD(ue.CONFIG_PARAMS.HTTP_PORT)),Ue(ue.CONFIG_PARAMS.HTTP_PORT,null)),Ue(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ue(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ue(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,mu.isEmpty(i)?!1:i),Ue(ue.CONFIG_PARAMS.HTTP_CORS,mu.isEmpty(i)?!1:i),Ue(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ue(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,oo.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ue(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,mu.isEmpty(c)?!1:c),o&&(Ue("CORS_ACCESSLIST",o),Ue(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ue(ue.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ue(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ue(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${xd}. Please check your boot props and settings files`;pu.fatal(r),pu.error(t)}}a(p3,"initTestEnvironment")});var NS={};Fe(NS,{loadGQLSchema:()=>g3,start:()=>yS,startOnMainThread:()=>T3});function yS({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(P){if(P.kind==="NonNullType"){let J=H(P.type);return J.nullable=!1,J}if(P.kind==="ListType")return{type:"array",elements:H(P.type)};let B={type:P.name?.value};return Object.defineProperty(B,"location",{value:P.loc.startToken}),B};a(H,"getProperty");let T=S.name.value,b=[],R={table:null,database:null,properties:b};f.set(T,R);for(let P of S.directives){if(P.name.value==="table"){for(let k of P.arguments)R[k.name.value]=k.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=T),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(P.name.value==="sealed"&&(R.sealed=!0),P.name.value==="export"){R.export=!0;for(let k of P.arguments)k.name.value==="name"&&(R.export={name:k.value.value})}}let L=!1;for(let P of S.fields){let k=H(P.type);k.name=P.name.value,b.push(k);for(let B of P.directives)if(B.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(B.name.value==="indexed")k.indexed=!0;else if(B.name.value==="relationship"){let J={};for(let Q of B.arguments)J[Q.name.value]=Q.value.value;k.relationship=J}else if(B.name.value==="createdTime")k.assignCreatedTime=!0;else if(B.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(B.name.value==="expiresAt")k.expiresAt=!0;else if(B.name.value==="allow"){let J=k.authorizedRoles=[];for(let Q of B.arguments)Q.name.value==="role"&&J.push(Q.value.value)}}R.type=T,T==="Query"&&(h=R)}function p(S){let T=f.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):S3.includes(S.type)||(0,XD.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 T of S.properties)p(T);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,bS.dirname)(n),S.tableClass):i.set((0,bS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var bS,XD,S3,T3,g3,jD=Re(()=>{bS=require("path");Oe();XD=x(Ze()),S3=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(yS,"start");T3=yS,g3=yS({ensureTable:ct}).handleFile});async function Gd(e){return R3?(Su||(Su=A3(b3)),(await(await Su).import(e)).namespace):import(e)}async function A3(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Su=new Compartment({console,Math,Date,fetch:O3,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,eL.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Gt,tables:$r,databases:rt})}};let n=await(0,ZD.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Su}function O3(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 b3(){return{Resource:Gt,tables:$r}}var ZD,eL,R3,Su,IS=Re(()=>{An();Oe();ZD=require("fs/promises"),eL=require("path"),R3=!1;a(Gd,"secureImport");a(A3,"getCompartment");a(O3,"secureOnlyFetch");a(b3,"getGlobalVars")});var CS={};Fe(CS,{handleFile:()=>y3});async function y3(e,t,r,n){let s=new Map,i=(0,tL.pathToFileURL)(r).toString(),o=await Gd(i);u(o.default)&&n.set((0,wS.dirname)(t),o.default),c(o,(0,wS.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 tL,wS,rL=Re(()=>{tL=require("url");IS();wS=require("path");a(y3,"handleFile")});var LS={};Fe(LS,{start:()=>N3});function N3({resources:e}){e.set("login",DS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var DS,nL=Re(()=>{An();a(N3,"start");DS=class extends Gt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var lL={};Fe(lL,{parse:()=>US,streamAsJSON:()=>Tu,stringify:()=>ao});function Tu(e){return new MS({value:e})}function sL(e){return console.error(e),JSON.stringify(e.toString())}function iL(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ao(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===cL)return uL(e);if(t.resolution)return t.resolution.then(()=>ao(e));throw t}}function uL(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+=uL(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ao(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function US(e){return C3.test(e)?I3.parse(e):JSON.parse(e)}var oL,aL,I3,w3,cL,MS,C3,PS=Re(()=>{oL=require("stream"),aL=x(require("json-bigint-fixes")),I3=(0,aL.default)({useNativeBigInt:!0}),w3=1e4,cL={};BigInt.prototype.toJSON=function(){throw cL};a(Tu,"streamAsJSON");MS=class extends oL.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),sL)}catch(s){yield sL(s)}else yield ao(t)}else yield ao(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);iL(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>w3?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 iL(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(sL,"handleError");a(iL,"when");a(ao,"stringify");a(uL,"jsStringify");C3=/-?\d{16,}/;a(US,"parse")});var Fd=g((mde,_L)=>{"use strict";var D3=Dn();_L.exports={writeTransaction:L3};function L3(e,t,r){return D3.writeTransaction(e,t,r)}a(L3,"writeTransaction")});var hL=g((Tde,EL)=>{"use strict";var M3=vr(),U3=ri(),dL=K(),P3=on(),Sde=Fd(),v3=require("clone"),BS=require("alasql"),B3=X_(),fL=require("util"),H3=fL.promisify(U3.getTableSchema),x3=fL.promisify(M3.search),G3=U(),vS=z();B3(BS);EL.exports={update:q3};var F3="There was a problem performing this update. Please check the logs and try again.";async function q3({statement:e,hdb_user:t}){let r=await H3(e.table.databaseid,e.table.tableid),n=k3(e.columns);vS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=v3(s),c=vS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=BS.parse(u).statements[0],l=await x3(_),d=V3(n,l);return $3(o,d,t)}a(q3,"update");function k3(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 [${G3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw dL.error(t),new Error(F3)}}a(k3,"createUpdateRecord");function V3(e,t){return vS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(V3,"buildUpdateRecords");async function $3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await P3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){dL.error(`Error delete new_attributes from update response: ${i}`)}return s}a($3,"updateRecords")});var pL=g((Ode,mL)=>{var Y3=require("alasql"),K3=vr(),W3=K(),Q3=Dn(),xS=require("util"),HS=z(),z3=U(),J3=ri(),Rde=Fd(),Ade=on(),X3="record",j3="successfully deleted",Z3=xS.callbackify(nX),eX=xS.promisify(K3.search),tX=xS.promisify(J3.getTableSchema);mL.exports={convertDelete:Z3};function rX(e){return`${e.deleted_hashes.length} ${X3}${e.deleted_hashes.length===1?"":"s"} ${j3}`}a(rX,"generateReturnMessage");async function nX({statement:e,hdb_user:t}){let r=await tX(e.table.databaseid,e.table.tableid);HS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=HS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Y3.parse(o).statements[0],u={operation:z3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await eX(c);let _=await Q3.deleteRecords(u);return HS.isEmptyOrZeroLength(_.message)&&(_.message=rX(_)),delete _.txn_time,_}catch(_){throw W3.error(_),_.hdb_code?_.message:_}}a(nX,"convertDelete")});var AL=g((yde,RL)=>{"use strict";var sX=$i(),{hdb_errors:SL}=ne(),{getDatabases:TL}=(Oe(),se(qe));RL.exports={checkSchemaExists:gL,checkSchemaTableExists:iX,schema_describe:sX};async function gL(e){if(!TL()[e])return SL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(gL,"checkSchemaExists");async function iX(e,t){let r=await gL(e);if(r)return r;if(!TL()[e][t])return SL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(iX,"checkSchemaTableExists")});var gu=g((Ide,oX)=>{oX.exports={name:"harperdb",version:"4.3.0-beta.9",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.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/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.5",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.19.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"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var $S=g((Dde,ML)=>{"use strict";var{decode:aX}=require("msgpackr"),{isMainThread:wde,parentPort:cX,threadId:Cde}=require("worker_threads"),Ru=yt(),fa=tt(),qS=U(),Jt=K(),FS=re(),bL=U(),{onMessageByType:uX}=Ze(),yL=bs(),{recordAction:lX,recordActionBinary:_X}=(ys(),se(nu)),{publishToStream:dX}=Ru,{ConsumerEvents:fX}=require("nats"),EX=vr(),{promisify:hX}=require("util"),NL=hX(setTimeout),Vd=1e4,$d,kd,mX,pX,IL,Au=new Map,Ea=new Map;ML.exports={initialize:kS,ingestConsumer:VS,setSubscription:SX,setIgnoreOrigin:RX,getDatabaseSubscriptions:gX,updateConsumer:wL};async function kS(){uX(qS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await wL(n)}),IL=!0,Jt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Ru.getNATSReferences();$d=e,kd=e.info.server_name,mX=t,pX=r}a(kS,"initialize");async function wL(e){if(e.status==="start"){let{js:t,jsm:r}=await CL(e.node_domain_name);VS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Au.get(e.stream_name+e.node_domain_name);t&&(Jt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Au.set(e.stream_name+e.node_domain_name,"close")),Ea.get(e.node_domain_name)==="failed"&&Ea.set(e.node_domain_name,"close")}}a(wL,"updateConsumer");var Yd=new Map;function SX(e,t,r){let n=Yd.get(e);n||Yd.set(e,n=new Map),n.set(t,r),IL||kS().then(TX)}a(SX,"setSubscription");async function TX(){let e=await EX.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+fa.SERVER_SUFFIX.LEAF,{js:n,jsm:s}=await CL(r);if(s){for(let i of t.subscriptions)if(i.subscribe===!0){let{schema:o,table:c}=i,u=yL.createNatsTableStreamName(o,c);VS(u,n,s,r)}}}}a(TX,"accessConsumers");async function CL(e){let t,r,n=1;for(;!r;)try{t=await $d.jetstream({domain:e,timeout:6e4}),r=await $d.jetstreamManager({domain:e,timeout:6e4})}catch(s){if(Ea.get(e)==="close")break;Ea.set(e,"failed"),n%10===1&&Jt.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Vd?n++*100:Vd;await NL(i)}return{js:t,jsm:r}}a(CL,"connectToRemoteJS");function gX(){return Yd}a(gX,"getDatabaseSubscriptions");var DL;function RX(e){DL=e}a(RX,"setIgnoreOrigin");var LL=100,OL=new Array(LL),qd=0;async function VS(e,t,r,n){let{connection:s}=await Ru.getNATSReferences();$d=s,kd=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,kd),Jt.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Ea.get(n)==="close")break;o%10===1&&Jt.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(Jt.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Ru.createConsumer(r,e,kd,new Date(Date.now()).toISOString()));let l=o++*100<Vd?o++*100:Vd;await NL(l)}let c=!1,u;for(cX?.on("message",async _=>{let{type:l}=_;l===bL.ITC_EVENT_TYPES.SHUTDOWN&&(c=!0,u&&u.close?.()&&u.close())});!c;){if(Au.get(e+n)==="close"||Ea.get(n)==="close"){Au.delete(e+n),c=!0;continue}u=await i.consume({max_messages:FS.get(qS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),Au.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===fX.HeartbeatsMissed){let d=l.data;Jt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===2&&(Jt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await OL[qd],OL[qd]=AX(l).catch(d=>{Jt.error(d)}),++qd>=LL&&(qd=0)}catch(l){l.message==="consumer deleted"?(Jt.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):Jt.error("Error consuming clustering ingest, restarting consumer",l)}Ru.clearClientCache(),!c&&_&&await kS()}}a(VS,"ingestConsumer");async function AX(e){let t=aX(e.data);lX(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Jt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=FS.get(qS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(fa.MSG_HEADERS.TRANSACTED_NODES)&&r.values(fa.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(fa.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!DL),_X(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(fa.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Jt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Jt.trace(`messageProcessor nats msg id: ${e.headers.get(fa.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(L=>h=L),{timestamp:S,user:T,node_name:b}=f||{},R=Yd.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,R.send(t);else if(l.length===1&&!u)R.send({type:GS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((H,P)=>({type:GS(o),value:H,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:GS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:L,table:_,timestamp:S,onCommit:h,user:T,nodeName:b})}FS.get(bL.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&dX(e.subject.split(".").slice(0,-1).join("."),yL.createNatsTableStreamName(c,_),e.headers,e.data),await p}catch(o){Jt.error(o)}e.ack()}a(AX,"messageProcessor");function GS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(GS,"convertOperation")});var yt=g((Hde,zL)=>{"use strict";var Mt=re();Mt.initSync();var OX=require("fs-extra"),bX=require("semver"),yu=require("path"),{monotonicFactory:yX}=require("ulidx"),PL=yX(),NX=require("util"),vL=require("child_process"),IX=NX.promisify(vL.exec),wX=vL.spawn,qt=tt(),Ce=U(),Kd=z(),Bn=K(),Wd=bs(),CX=Fd(),Ou=xr(),{broadcast:DX,onMessageByType:LX,getWorkerIndex:MX}=Ze(),{isMainThread:BL}=require("worker_threads"),{Encoder:UX,decode:QS}=require("msgpackr"),HL=new UX,{isEmpty:_o}=Kd,xL=an(),Mde=48*36e11;BL&&LX(Ce.ITC_EVENT_TYPES.RESTART,()=>{fr=void 0,lo=void 0});var{connect:PX,StorageType:vX,RetentionPolicy:BX,AckPolicy:zS,DeliverPolicy:JS,DiscardPolicy:HX,NatsConnection:Ude,JetStreamManager:Pde,JetStreamClient:vde,StringCodec:Bde,JSONCodec:xX,createInbox:XS,headers:GX,ErrorCode:UL}=require("nats"),{PACKAGE_ROOT:FX}=U(),qX=gu(),{recordAction:kX}=(ys(),se(nu)),GL=xX(),VX="clustering",$X=qX.engines[qt.NATS_SERVER_NAME],YX=yu.join(FX,"dependencies"),WS=yu.join(YX,`${process.platform}-${process.arch}`,qt.NATS_BINARY_NAME),YS,KS,bu,co,uo;zL.exports={runCommand:FL,checkNATSServerInstalled:KX,createConnection:jS,getConnection:Qd,getJetStreamManager:Nu,getJetStream:kL,getNATSReferences:Hn,getServerList:QX,createLocalStream:ZS,listStreams:VL,deleteLocalStream:zX,getServerConfig:Iu,listRemoteStreams:JX,viewStream:XX,viewStreamIterator:jX,publishToStream:ZX,request:rj,reloadNATS:eT,reloadNATSHub:nj,reloadNATSLeaf:sj,extractServerName:tj,requestErrorHandler:ij,createLocalTableStream:WL,createTableStreams:cj,purgeTableStream:QL,purgeSchemaTableStreams:uj,getStreamInfo:lj,updateLocalStreams:dj,closeConnection:WX,getJsmServerName:zd,addNatsMsgHeader:$L,clearClientCache:qL,updateRemoteConsumer:oj,createConsumer:YL,updateConsumerIterator:aj};async function FL(e,t=void 0){let{stdout:r,stderr:n}=await IX(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
10
|
`,"")}a(FL,"runCommand");async function KX(){try{await OX.access(WS)}catch{return!1}let e=await FL(`${WS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return bX.eq(t,$X)}a(KX,"checkNATSServerInstalled");async function jS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await xL.getClusterUser();if(_o(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Bn.trace("create nats connection called");let i=await PX({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Bn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Bn.error("Error with Nats client connection, connection closed",o),qL()}),i}a(jS,"createConnection");function qL(){fr=void 0,co=void 0,uo=void 0,lo=void 0}a(qL,"clearClientCache");async function WX(){fr&&(await fr.drain(),fr=void 0,co=void 0,uo=void 0,lo=void 0)}a(WX,"closeConnection");var fr,lo;async function Qd(){return lo||(lo=jS(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),fr=await lo),fr||lo}a(Qd,"getConnection");async function Nu(){if(co)return co;_o(fr)&&await Qd();let{domain:e}=Iu(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(_o(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return co=await fr.jetstreamManager({domain:e,timeout:6e4}),co}a(Nu,"getJetStreamManager");async function kL(){if(uo)return uo;_o(fr)&&await Qd();let{domain:e}=Iu(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(_o(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return uo=fr.jetstream({domain:e,timeout:6e4}),uo}a(kL,"getJetStream");async function Hn(){let e=fr||await Qd(),t=co||await Nu(),r=uo||await kL();return{connection:e,jsm:t,js:r}}a(Hn,"getNATSReferences");async function QX(e){let t=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await xL.getClusterUser(),s=await jS(t,r,n),i=XS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=GL.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 Kd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(QX,"getServerList");async function ZS(e,t){let{jsm:r}=await Hn(),n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:vX.File,retention:BX.Limits,subjects:t,discard:HX.Old,max_msgs:s,max_bytes:i,max_age:n})}a(ZS,"createLocalStream");async function VL(){let{jsm:e}=await Hn(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(VL,"listStreams");async function zX(e){let{jsm:t}=await Hn();await t.streams.delete(e)}a(zX,"deleteLocalStream");async function JX(e){let{connection:t}=await Hn(),r=[],n=XS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(GL.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(JX,"listRemoteStreams");async function XX(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Hn(),i=PL(),o={durable_name:i,ack_policy:zS.Explicit};t&&(o.deliver_policy=JS.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=QS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(qt.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(XX,"viewStream");async function*jX(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Hn(),i=PL(),o={durable_name:i,ack_policy:zS.Explicit};t&&(o.deliver_policy=JS.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=QS(_.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(qt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(jX,"viewStreamIterator");async function ZX(e,t,r,n){Bn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=$L(n,r);let{js:s}=await Hn(),i=await zd(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:HL.encode(n);try{Bn.trace(`publishToStream publishing to subject: ${o}`),kX(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 KL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Bn.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await ZS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(ZX,"publishToStream");function $L(e,t){t===void 0&&(t=GX());let r=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(qt.MSG_HEADERS.ORIGIN)&&r&&t.append(qt.MSG_HEADERS.ORIGIN,r),t}a($L,"addNatsMsgHeader");function Iu(e){e=e.toLowerCase();let t=yu.join(Mt.get(Ce.CONFIG_PARAMS.ROOTPATH),VX);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return _o(KS)&&(KS={port:Ou.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ou.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+qt.SERVER_SUFFIX.HUB,config_file:qt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:yu.join(t,qt.PID_FILES.HUB),hdb_nats_path:t}),KS;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return _o(YS)&&(YS={port:Ou.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ou.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+qt.SERVER_SUFFIX.LEAF,config_file:qt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ou.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+qt.SERVER_SUFFIX.LEAF,pid_file_path:yu.join(t,qt.PID_FILES.LEAF),hdb_nats_path:t}),YS;Bn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Iu,"getServerConfig");async function YL(e,t,r,n){try{await e.consumers.add(t,{ack_policy:zS.Explicit,durable_name:r,deliver_policy:JS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(YL,"createConsumer");async function ej(e,t,r){await e.consumers.delete(t,r)}a(ej,"removeConsumer");function tj(e){return e.split(".")[1]}a(tj,"extractServerName");async function rj(e,t,r=6e4,n=XS()){if(!Kd.isObject(t))throw new Error("data param must be an object");let s=HL.encode(t),{connection:i}=await Hn(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return QS(c.data)}a(rj,"request");function eT(e){return new Promise(async(t,r)=>{let n=wX(WS,["--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(eT,"reloadNATS");async function nj(){let{pid_file_path:e}=Iu(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await eT(e)}a(nj,"reloadNATSHub");async function sj(){let{pid_file_path:e}=Iu(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await eT(e)}a(sj,"reloadNATSLeaf");function ij(e,t,r){let n;switch(e.code){case UL.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case UL.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(ij,"requestErrorHandler");async function oj(e,t){let r=t+qt.SERVER_SUFFIX.LEAF,{connection:n}=await Hn(),{jsm:s}=await Ej(r),{schema:i,table:o}=e,c=Wd.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await KL(async()=>{if(e.subscribe===!0)await YL(s,c,n.info.server_name,u);else try{await ej(s,c,n.info.server_name)}catch(_){Bn.trace(_)}})}a(oj,"updateRemoteConsumer");async function aj(e,t,r,n){let s=Wd.createNatsTableStreamName(e,t),i=r+qt.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!BL&&MX()<Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=$S();await c(o)}await DX(o),n==="stop"&&await Kd.async_set_timeout(1e3)}a(aj,"updateConsumerIterator");function KL(e){return CX.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(KL,"exclusiveLock");async function WL(e,t){let r=Wd.createNatsTableStreamName(e,t),n=await zd(),s=_j(e,t,n);await ZS(r,[s])}a(WL,"createLocalTableStream");async function cj(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await WL(n,s)}}a(cj,"createTableStreams");async function QL(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Wd.createNatsTableStreamName(e,t),{jsm:n}=await Hn();await n.streams.purge(r)}catch(r){if(r.message==="stream not found")Bn.warn(r);else throw r}}a(QL,"purgeTableStream");async function uj(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await QL(e,t[r])}a(uj,"purgeSchemaTableStreams");async function lj(e){return(await Nu()).streams.info(e)}a(lj,"getStreamInfo");function _j(e,t,r){return`${qt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(_j,"createSubjectName");async function zd(){if(bu)return bu;if(bu=(await Nu())?.nc?.info?.server_name,bu===void 0)throw new Error("Unable to get jetstream manager server name");return bu}a(zd,"getJsmServerName");async function dj(){let e=await Nu(),t=await zd(),r=await VL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=fj(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Bn.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a(dj,"updateLocalStreams");function fj(e){let{config:t}=e,r=!1,n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Mt.get(Ce.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(fj,"updateStreamLimits");async function Ej(e){let t,r;try{t=await fr.jetstream({domain:e,timeout:6e4}),r=await fr.jetstreamManager({domain:e,timeout:6e4})}catch(n){throw Bn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Ej,"connectToRemoteJS")});var Zd=g((Fde,ZL)=>{"use strict";var ha=M_(),ma=AL(),hj=K(),mj=require("uuid").v4,Gde=require("clone"),Xd=gs(),pa=U(),pj=require("util"),_i=Dn(),{handleHDBError:Er,hdb_errors:Sj}=ne(),{HDB_ERROR_MSGS:Jd,HTTP_STATUS_CODES:hr}=Sj,{SchemaEventMsg:jd}=Nn(),JL=yt(),{getDatabases:Tj}=(Oe(),se(qe)),{transformReq:Sa}=z();ZL.exports={createSchema:gj,createSchemaStructure:XL,createTable:Rj,createTableStructure:jL,createAttribute:Nj,dropSchema:Aj,dropTable:Oj,dropAttribute:bj,getBackup:Ij};async function gj(e){let t=await XL(e);return Xd.signalSchemaChange(new jd(process.pid,e.operation,e.schema)),t}a(gj,"createSchema");async function XL(e){let t=ha.schema_object(e);if(t)throw Er(t,t.message,hr.BAD_REQUEST,void 0,void 0,!0);if(Sa(e),!await ma.checkSchemaExists(e.schema))throw Er(new Error,Jd.SCHEMA_EXISTS_ERR(e.schema),hr.BAD_REQUEST,pa.LOG_LEVELS.ERROR,Jd.SCHEMA_EXISTS_ERR(e.schema),!0);return await _i.createSchema(e),`database '${e.schema}' successfully created`}a(XL,"createSchemaStructure");async function Rj(e){return Sa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await jL(e)}a(Rj,"createTable");async function jL(e){let t=ha.create_table_object(e);if(t)throw Er(t,t.message,hr.BAD_REQUEST,void 0,void 0,!0);if(ha.validateTableResidence(e.residence),!await ma.checkSchemaTableExists(e.schema,e.table))throw Er(new Error,Jd.TABLE_EXISTS_ERR(e.schema,e.table),hr.BAD_REQUEST,pa.LOG_LEVELS.ERROR,Jd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:mj(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await _i.createTable(n,e);else throw Er(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",hr.BAD_REQUEST);else await _i.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(jL,"createTableStructure");async function Aj(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ha.schema_object(e),n=t??r;if(n)throw Er(n,n.message,hr.BAD_REQUEST,void 0,void 0,!0);Sa(e);let s=await ma.checkSchemaExists(e.schema);if(s)throw Er(new Error,s,hr.NOT_FOUND,pa.LOG_LEVELS.ERROR,s,!0);let i=await ma.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await _i.dropSchema(e),Xd.signalSchemaChange(new jd(process.pid,e.operation,e.schema)),await JL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Aj,"dropSchema");async function Oj(e){let t=ha.table_object(e);if(t)throw Er(t,t.message,hr.BAD_REQUEST,void 0,void 0,!0);Sa(e);let r=await ma.checkSchemaTableExists(e.schema,e.table);if(r)throw Er(new Error,r,hr.NOT_FOUND,pa.LOG_LEVELS.ERROR,r,!0);return await _i.dropTable(e),await JL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Oj,"dropTable");async function bj(e){let t=ha.attribute_object(e);if(t)throw Er(t,t.message,hr.BAD_REQUEST,void 0,void 0,!0);Sa(e);let r=await ma.checkSchemaTableExists(e.schema,e.table);if(r)throw Er(new Error,r,hr.NOT_FOUND,pa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Er(new Error,"You cannot drop a hash attribute",hr.BAD_REQUEST,void 0,void 0,!0);if(pa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Er(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,hr.BAD_REQUEST,void 0,void 0,!0);try{return await _i.dropAttribute(e),yj(e),Xd.signalSchemaChange(new jd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw hj.error(`Got an error deleting attribute ${pj.inspect(e)}.`),n}}a(bj,"dropAttribute");function yj(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(yj,"dropAttributeFromGlobal");async function Nj(e){Sa(e);let t=Tj()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Er(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,hr.BAD_REQUEST,void 0,void 0,!0);return await _i.createAttribute(e),Xd.signalSchemaChange(new jd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Nj,"createAttribute");function Ij(e){return _i.getBackup(e)}a(Ij,"getBackup")});var tM=g((kde,eM)=>{"use strict";var{OPERATIONS_ENUM:wj}=U(),tT=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=wj.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};eM.exports=tT});var rT=g((Yde,oM)=>{"use strict";var Cj=Dn(),$de=tM(),ef=z(),tf=U(),Dj=re(),{handleHDBError:rM,hdb_errors:Lj}=ne(),{HDB_ERROR_MSGS:nM,HTTP_STATUS_CODES:sM}=Lj,Mj=Object.values(tf.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),iM="To use this operation audit log must be enabled in harperdb-config.yaml";oM.exports=Uj;async function Uj(e){if(ef.isEmpty(e.schema))throw new Error(nM.SCHEMA_REQUIRED_ERR);if(ef.isEmpty(e.table))throw new Error(nM.TABLE_REQUIRED_ERR);if(!Dj.get(tf.CONFIG_PARAMS.LOGGING_AUDITLOG))throw rM(new Error,iM,sM.BAD_REQUEST,tf.LOG_LEVELS.ERROR,iM,!0);let t=ef.checkSchemaTableExist(e.schema,e.table);if(t)throw rM(new Error,t,sM.NOT_FOUND,tf.LOG_LEVELS.ERROR,t,!0);if(!ef.isEmpty(e.search_type)&&Mj.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Cj.readAuditLog(e)}a(Uj,"readAuditLog")});var cM=g((Wde,aM)=>{"use strict";var{OPERATIONS_ENUM:Pj}=U(),nT=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Pj.GET_BACKUP,this.schema=t,this.table=r}};aM.exports=nT});var _M=g((Xde,lM)=>{"use strict";var vj=Dn(),zde=cM(),sT=z(),Bj=U(),Jde=re(),{handleHDBError:Hj,hdb_errors:xj}=ne(),{HDB_ERROR_MSGS:uM,HTTP_STATUS_CODES:Gj}=xj;lM.exports=Fj;async function Fj(e){if(sT.isEmpty(e.schema))throw new Error(uM.SCHEMA_REQUIRED_ERR);if(sT.isEmpty(e.table))throw new Error(uM.TABLE_REQUIRED_ERR);let t=sT.checkSchemaTableExist(e.schema,e.table);if(t)throw Hj(new Error,t,Gj.NOT_FOUND,Bj.LOG_LEVELS.ERROR,t,!0);return await vj.getBackup(read_audit_log_object)}a(Fj,"getBackup")});var pM=g((Zde,mM)=>{var di=require("validate.js"),fM=et(),Ta=U(),{handleHDBError:qj,hdb_errors:kj}=ne(),{HDB_ERROR_MSGS:ut,HTTP_STATUS_CODES:Vj}=kj,iT=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),$j={STRUCTURE_USER:"structure_user"},dM=Object.values(Ta.ROLE_TYPES_ENUM),Yj="attribute_permissions",Kj="attribute_name",{PERMS_CRUD_ENUM:ga}=Ta,Wj=[Yj,...Object.values(ga)],EM=[ga.READ,ga.INSERT,ga.UPDATE],Qj=[Kj,...EM];function zj(e){let t=iT();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,hM(e,t)}a(zj,"addRoleValidation");function Jj(e){let t=iT();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,hM(e,t)}a(Jj,"alterRoleValidation");function Xj(e){let t=iT();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,fM.validateObject(e,t)}a(Xj,"dropRoleValidation");var jj=["operation","role","id","permission","hdb_user","hdb_auth_header"];function hM(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)jj.includes(n[o])||s.push(n[o]);s.length>0&&Et(ut.INVALID_ROLE_JSON_KEYS(s),r);let i=fM.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Et(o,r)}),e.permission){let o=Zj(e);o&&Et(o,r),dM.forEach(c=>{e.permission[c]&&!di.isBoolean(e.permission[c])&&Et(ut.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(dM.indexOf(o)<0){if(o===$j.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]||Et(ut.SCHEMA_NOT_FOUND(d),r)}continue}Et(ut.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Et(ut.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]){Et(ut.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{Wj.includes(l)||Et(ut.INVALID_PERM_KEY(l),r,o,u)}),Object.values(ga).forEach(l=>{di.isDefined(_[l])?di.isBoolean(_[l])||Et(ut.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):Et(ut.TABLE_PERM_MISSING(l),r,o,u)}),di.isDefined(_.attribute_permissions)){if(!di.isArray(_.attribute_permissions)){Et(ut.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Et(ut.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=>{!Qj.includes(p)&&p!==ga.DELETE&&Et(ut.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!di.isDefined(E.attribute_name)){Et(ut.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){Et(ut.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}EM.forEach(p=>{di.isDefined(E[p])?di.isBoolean(E[p])||Et(ut.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):Et(ut.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}`;Et(ut.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return eZ(r)}a(hM,"customValidate");mM.exports={addRoleValidation:zj,alterRoleValidation:Jj,dropRoleValidation:Xj};function Zj(e){let{operation:t,permission:r}=e;if(t===Ta.OPERATIONS_ENUM.ADD_ROLE||t===Ta.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 ut.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Ta.ROLE_TYPES_ENUM.SUPER_USER:Ta.ROLE_TYPES_ENUM.CLUSTER_USER;return ut.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Zj,"validateNoSUPerms");function eZ(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ut.ROLE_PERMS_ERROR,...e};return qj(new Error,n,Vj.BAD_REQUEST)}else return null}a(eZ,"generateRolePermResponse");function Et(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(Et,"addPermError")});var _T=g((tfe,RM)=>{"use strict";var SM=on(),TM=vr(),tZ=zi(),aT=pM(),cT=gs(),rZ=require("uuid").v4,nZ=require("util"),rf=U(),sZ=z(),uT=TM.searchByValue,iZ=TM.searchByHash,oZ=nZ.promisify(tZ.delete),aZ=Jn(),cZ=Zo(),{hdb_errors:uZ,handleHDBError:fo}=ne(),{HDB_ERROR_MSGS:gM,HTTP_STATUS_CODES:wu}=uZ,{UserEventMsg:lT}=Nn();RM.exports={addRole:lZ,alterRole:_Z,dropRole:dZ,listRoles:fZ};function oT(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(oT,"scrubRoleDetails");async function lZ(e){let t=aT.addRoleValidation(e);if(t)throw t;e=oT(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 uT(r)||[])}catch(i){throw fo(i)}if(n&&n.length>0)throw fo(new Error,gM.ROLE_ALREADY_EXISTS(e.role),wu.CONFLICT,void 0,void 0,!0);e.id||(e.id=rZ());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await SM.insert(s),cT.signalUserChange(new lT(process.pid)),e=oT(e),e}a(lZ,"addRole");async function _Z(e){let t=aT.alterRoleValidation(e);if(t)throw t;e=oT(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await SM.update(r)}catch(s){throw fo(s)}if(n&&n?.message==="updated 0 of 1 records")throw fo(new Error,"Invalid role id",wu.BAD_REQUEST,void 0,void 0,!0);return await cT.signalUserChange(new lT(process.pid)),e}a(_Z,"alterRole");async function dZ(e){let t=aT.dropRoleValidation(e);if(t)throw fo(new Error,t,wu.BAD_REQUEST,void 0,void 0,!0);let r=new cZ(rf.SYSTEM_SCHEMA_NAME,rf.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await iZ(r));if(n.length===0)throw fo(new Error,gM.ROLE_NOT_FOUND,wu.NOT_FOUND,void 0,void 0,!0);let s=new aZ(rf.SYSTEM_SCHEMA_NAME,rf.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await uT(s)),o=!1;if(sZ.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw fo(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,wu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await oZ(c),cT.signalUserChange(new lT(process.pid)),`${n[0].role} successfully deleted`}a(dZ,"dropRole");async function fZ(){return uT({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(fZ,"listRoles")});var yM=g((nfe,bM)=>{"use strict";var EZ=re(),fi=require("joi"),hZ=et(),AM=require("moment"),mZ=require("fs-extra"),dT=require("path"),pZ=require("lodash"),Cu=U(),{LOG_LEVELS:Eo}=U(),SZ="YYYY-MM-DD hh:mm:ss",TZ=dT.resolve(__dirname,"../logs");bM.exports=function(e){return hZ.validateBySchema(e,gZ)};var gZ=fi.object({from:fi.custom(OM),until:fi.custom(OM),level:fi.valid(Eo.NOTIFY,Eo.FATAL,Eo.ERROR,Eo.WARN,Eo.INFO,Eo.DEBUG,Eo.TRACE),order:fi.valid("asc","desc"),limit:fi.number().min(1),start:fi.number().min(0),log_name:fi.custom(RZ)});function OM(e,t){if(AM(e,AM.ISO_8601).format(SZ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(OM,"validateDatetime");function RZ(e,t){if(pZ.invert(Cu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=EZ.get(Cu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Cu.LOG_NAMES.HDB:e,i=s===Cu.LOG_NAMES.INSTALL?dT.join(TZ,Cu.LOG_NAMES.INSTALL):dT.join(n,s);return mZ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(RZ,"validateReadLogPath")});var ET=g((ife,IM)=>{"use strict";var nf=U(),AZ=K(),OZ=re(),bZ=yM(),fT=require("path"),NM=require("fs-extra"),{once:yZ}=require("events"),{handleHDBError:NZ,hdb_errors:IZ}=ne(),{PACKAGE_ROOT:wZ}=U(),CZ=fT.join(wZ,"logs"),DZ=1e3,LZ=200;IM.exports=MZ;async function MZ(e){let t=bZ(e);if(t)throw NZ(t,t.message,IZ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=OZ.get(nf.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?nf.LOG_NAMES.HDB:e.log_name,s=n===nf.LOG_NAMES.INSTALL?fT.join(CZ,nf.LOG_NAMES.INSTALL):fT.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?DZ: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(NM.statSync(s).size-(h+5)*LZ,0));let S=NM.createReadStream(s,{start:p});S.on("error",P=>{AZ.error(P)});let T=0,b=[],R="",L;S.on("data",P=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;P=R+P;let B=0,J;for(;(J=k.exec(P))&&!S.destroyed;){L&&(L.message=P.slice(B,J.index),H(L));let[Q,X,Te]=J,ce=Te.split("] ["),de=ce[0],Le=ce[1];ce.splice(0,2),L={timestamp:X,thread:de,level:Le,tags:ce,message:""},B=J.index+Q.length}R=P.slice(B)}),S.on("end",P=>{S.destroyed||L&&(L.message=R.trim(),H(L))}),S.resume();function H(P){let k,B,J;switch(!0){case(i&&c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),P.level===o&&k>=B&&k<=J&&T<E?T++:P.level===o&&k>=B&&k<=J&&(Ei(P,f,b),T++,T===h&&S.destroy());break;case(i&&c):k=new Date(P.timestamp),B=new Date(u),P.level===o&&k>=B&&T<E?T++:P.level===o&&k>=B&&(Ei(P,f,b),T++,T===h&&S.destroy());break;case(i&&_):k=new Date(P.timestamp),J=new Date(l),P.level===o&&k<=J&&T<E?T++:P.level===o&&k<=J&&(Ei(P,f,b),T++,T===h&&S.destroy());break;case(c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),k>=B&&k<=J&&T<E?T++:k>=B&&k<=J&&(Ei(P,f,b),T++,T===h&&S.destroy());break;case i:P.level===o&&T<E?T++:P.level===o&&(Ei(P,f,b),T++,T===h&&S.destroy());break;case c:k=new Date(P.timestamp),B=new Date(u),k>=B&&T<E?T++:k>=B&&T>=E&&(Ei(P,f,b),T++,T===h&&S.destroy());break;case _:k=new Date(P.timestamp),J=new Date(l),k<=J&&T<E?T++:k<=J&&T>=E&&(Ei(P,f,b),T++,T===h&&S.destroy());break;default:T<E?T++:(Ei(P,f,b),T++,T===h&&S.destroy())}}return a(H,"onLogMessage"),await yZ(S,"close"),b}a(MZ,"readLog");function Ei(e,t,r){t==="desc"?UZ(e,r):t==="asc"?PZ(e,r):r.push(e)}a(Ei,"pushLineToResult");function UZ(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(UZ,"insertDescending");function PZ(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(PZ,"insertAscending")});var sf=g((lfe,LM)=>{"use strict";var hT=require("joi"),{string:Du,boolean:wM,date:vZ}=hT.types(),BZ=et(),{validateSchemaExists:afe,validateTableExists:cfe,validateSchemaName:ufe}=Qn(),HZ=U(),xZ=tt(),CM=re();CM.initSync();var GZ=Du.invalid(CM.get(HZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(xZ.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(),DM={operation:Du.valid("add_node","update_node","set_node_replication"),node_name:GZ,subscriptions:hT.array().items({table:Du.optional(),schema:Du.optional(),database:Du.optional(),subscribe:wM.required(),publish:wM.required().custom(qZ),start_time:vZ.iso()}).min(1).required()};function FZ(e){return BZ.validateBySchema(e,hT.object(DM))}a(FZ,"addUpdateNodeValidator");function qZ(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(qZ,"checkForFalsy");LM.exports={addUpdateNodeValidator:FZ,validation_schema:DM}});var UM=g((dfe,MM)=>{var kZ=et(),VZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};MM.exports=function(e){return kZ.validateObject(e,VZ)}});var pT=g((ffe,PM)=>{"use strict";var $Z=U().OPERATIONS_ENUM,mT=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=$Z.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};PM.exports=mT});var BM=g((hfe,vM)=>{"use strict";var YZ={OPERATION:"operation",REFRESH:"refresh"},ST=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},TT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};vM.exports={JWTTokens:ST,TOKEN_TYPE_ENUM:YZ,JWTRSAKeys:TT}});var Uu=g((pfe,FM)=>{"use strict";var Mu=require("jsonwebtoken"),gT=require("fs-extra"),RT=z(),_n=U(),{handleHDBError:mr,hdb_errors:KZ}=ne(),{HTTP_STATUS_CODES:pr,AUTHENTICATION_ERROR_MSGS:Sr}=KZ,Lu=K(),HM=cd(),bT=an(),WZ=on().update,QZ=pT(),zZ=gs(),{UserEventMsg:JZ}=Nn(),hi=re();hi.initSync();var AT=require("path"),{JWTTokens:XZ,JWTRSAKeys:jZ,TOKEN_TYPE_ENUM:of}=BM(),ZZ=hi.get(_n.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?hi.get(_n.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",e5=hi.get(_n.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?hi.get(_n.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",af="RS256",OT;FM.exports={createTokens:t5,validateOperationToken:n5,refreshOperationToken:r5,validateRefreshToken:GM};async function t5(e){if(RT.isEmpty(e)||typeof e!="object")throw mr(new Error,Sr.INVALID_AUTH_OBJECT,pr.BAD_REQUEST,void 0,void 0,!0);if(RT.isEmpty(e.username))throw mr(new Error,Sr.USERNAME_REQUIRED,pr.BAD_REQUEST,void 0,void 0,!0);if(RT.isEmpty(e.password))throw mr(new Error,Sr.PASSWORD_REQUIRED,pr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await bT.findAndValidateUser(e.username,e.password),!t)throw mr(new Error,Sr.INVALID_CREDENTIALS,pr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Lu.error(f),mr(new Error,Sr.INVALID_CREDENTIALS,pr.UNAUTHORIZED,void 0,void 0,!0)}let r=await cf(),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 xM(i,r.private_key,r.passphrase),c=await Mu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:e5,algorithm:af,subject:of.REFRESH}),u=HM.hash(c),_=new QZ(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await WZ(_)}catch(f){Lu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw mr(new Error,Sr.REFRESH_TOKEN_SAVE_FAILED,pr.INTERNAL_SERVER_ERROR);return zZ.signalUserChange(new JZ(process.pid)),new XZ(o,c)}a(t5,"createTokens");async function xM(e,t,r){return await Mu.sign(e,{key:t,passphrase:r},{expiresIn:ZZ,algorithm:af,subject:of.OPERATION})}a(xM,"signOperationToken");async function cf(){if(OT===void 0)try{let e=AT.join(hi.getHdbBasePath(),_n.LICENSE_KEY_DIR_NAME,_n.JWT_ENUM.JWT_PASSPHRASE_NAME),t=AT.join(hi.getHdbBasePath(),_n.LICENSE_KEY_DIR_NAME,_n.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=AT.join(hi.getHdbBasePath(),_n.LICENSE_KEY_DIR_NAME,_n.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await gT.readFile(e)).toString(),s=(await gT.readFile(t)).toString(),i=(await gT.readFile(r)).toString();OT=new jZ(i,s,n)}catch(e){throw Lu.error(e),mr(new Error,Sr.NO_ENCRYPTION_KEYS,pr.INTERNAL_SERVER_ERROR)}return OT}a(cf,"getJWTRSAKeys");async function r5(e){if(!e)throw mr(new Error,Sr.INVALID_BODY,pr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw mr(new Error,Sr.REFRESH_TOKEN_REQUIRED,pr.BAD_REQUEST,void 0,void 0,!0);await GM(e.refresh_token);let t=await cf(),r=await Mu.decode(e.refresh_token);return{operation_token:await xM({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(r5,"refreshOperationToken");async function n5(e){try{let t=await cf(),r=await Mu.verify(e,t.public_key,{algorithms:af,subject:of.OPERATION});return await bT.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Lu.warn(t),t.name&&t.name==="TokenExpiredError"?mr(new Error,Sr.TOKEN_EXPIRED,pr.FORBIDDEN):mr(new Error,Sr.INVALID_TOKEN,pr.UNAUTHORIZED)}}a(n5,"validateOperationToken");async function GM(e){let t;try{let r=await cf(),n=await Mu.verify(e,r.public_key,{algorithms:af,subject:of.REFRESH});t=await bT.findAndValidateUser(n.username,void 0,!1)}catch(r){throw Lu.warn(r),r.name&&r.name==="TokenExpiredError"?mr(new Error,Sr.TOKEN_EXPIRED,pr.FORBIDDEN):mr(new Error,Sr.INVALID_TOKEN,pr.UNAUTHORIZED)}if(!HM.validate(t.refresh_token,e))throw mr(new Error,Sr.INVALID_TOKEN,pr.UNAUTHORIZED);return t}a(GM,"validateRefreshToken")});var yT=g((gfe,VM)=>{"use strict";var s5=UM(),Ra=require("passport"),i5=require("passport-local").Strategy,o5=require("passport-http").BasicStrategy,a5=require("util"),c5=an(),kM=a5.callbackify(c5.findAndValidateUser),Tfe=Nr(),u5=U(),qM=Uu();Ra.use(new i5(function(e,t,r){kM(e,t,r)}));Ra.use(new o5(function(e,t,r){kM(e,t,r)}));Ra.serializeUser(function(e,t){t(null,e)});Ra.deserializeUser(function(e,t){t(null,e)});function l5(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":Ra.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===u5.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?qM.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):qM.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ra.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(l5,"authorize");function _5(e,t){let r=s5(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(_5,"checkPermissions");VM.exports={authorize:l5,checkPermissions:_5}});var Aa=g((Afe,$M)=>{"use strict";var NT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},IT=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};$M.exports={Node:NT,NodeSubscription:IT}});var KM=g((bfe,YM)=>{"use strict";var d5=U().OPERATIONS_ENUM,wT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=d5.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};YM.exports=wT});var Pu=g((Nfe,WM)=>{"use strict";var CT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},DT=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)}};WM.exports={RemotePayloadObject:CT,RemotePayloadSubscription:DT}});var zM=g((wfe,QM)=>{"use strict";var LT=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}};QM.exports=LT});var jM=g((Ufe,XM)=>{"use strict";var f5=zM(),Dfe=_t(),JM=Ye(),E5=K(),{getSchemaPath:Lfe,getTransactionAuditStorePath:Mfe}=Qe(),{getDatabases:h5}=(Oe(),se(qe));XM.exports=m5;async function m5(e){let t=new f5;try{let r=h5()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await JM.environmentDataSize(schema_path,e.name),o=await JM.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){E5.warn(`unable to stat table dbi due to ${r}`)}return t}a(m5,"lmdbGetTableSize")});var eU=g((vfe,ZM)=>{"use strict";var MT=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}};ZM.exports=MT});var Oa=g((Ffe,iU)=>{"use strict";var p5=require("fs-extra"),S5=require("path"),Xt=require("systeminformation"),mi=K(),tU=yt(),Hfe=tt(),lf=U(),T5=jM(),sU=$i(),{getThreadInfo:rU}=Ze(),kT=re();kT.initSync();var g5=eU(),{openEnvironment:xfe}=Ye(),{getSchemaPath:Gfe}=Qe(),{database:R5}=(Oe(),se(qe)),uf;iU.exports={getHDBProcessInfo:BT,getNetworkInfo:xT,getDiskInfo:HT,getMemoryInfo:vT,getCPUInfo:PT,getTimeInfo:UT,getSystemInformation:GT,systemInformation:A5,getTableSize:FT,getMetrics:qT};function UT(){return Xt.time()}a(UT,"getTimeInfo");async function PT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Xt.cpu();l.cpu_speed=await Xt.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:T,...b}=await Xt.currentLoad();return b.cpus=[],T.forEach(R=>{let{raw_load:L,raw_load_idle:H,raw_load_irq:P,raw_load_nice:k,raw_load_system:B,raw_load_user:J,...Q}=R;b.cpus.push(Q)}),l.current_load=b,l}catch(e){return mi.error(`error in getCPUInfo: ${e}`),{}}}a(PT,"getCPUInfo");async function vT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Xt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return mi.error(`error in getMemoryInfo: ${e}`),{}}}a(vT,"getMemoryInfo");async function BT(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await p5.readFile(S5.join(kT.get(lf.CONFIG_PARAMS.ROOTPATH),lf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===lf.NODE_ERROR_CODES.ENOENT)mi.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 mi.error(`error in getHDBProcessInfo: ${t}`),e}}a(BT,"getHDBProcessInfo");async function HT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Xt.fsStats();return e.read_write=_,e.size=await Xt.fsSize(),e}catch(t){return mi.error(`error in getDiskInfo: ${t}`),e}}a(HT,"getDiskInfo");async function xT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Xt.networkInterfaceDefault(),e.latency=await Xt.inetChecksite("google.com"),(await Xt.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 Xt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return mi.error(`error in getNetworkInfo: ${t}`),e}}a(xT,"getNetworkInfo");async function GT(){if(uf!==void 0)return uf;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Xt.osInfo();e=c;let u=await Xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,uf=e,uf}catch(t){return mi.error(`error in getSystemInformation: ${t}`),e}}a(GT,"getSystemInformation");async function FT(){let e=[],t=await sU.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await T5(n));return e}a(FT,"getTableSize");async function qT(){let e=await sU.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=R5({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){mi.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(qT,"getMetrics");async function nU(){if(kT.get(lf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await tU.getNATSReferences(),t=await tU.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(nU,"getNatsStreamInfo");async function A5(e){let t=new g5;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await GT(),t.time=UT(),t.cpu=await PT(),t.memory=await vT(),t.disk=await HT(),t.network=await xT(),t.harperdb_processes=await BT(),t.table_size=await FT(),t.metrics=await qT(),t.threads=await rU(),t.replication=await nU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await GT();break;case"time":t.time=UT();break;case"cpu":t.cpu=await PT();break;case"memory":t.memory=await vT();break;case"disk":t.disk=await HT();break;case"network":t.network=await xT();break;case"harperdb_processes":t.harperdb_processes=await BT();break;case"table_size":t.table_size=await FT();break;case"database_metrics":case"metrics":t.metrics=await qT();break;case"threads":t.threads=await rU();break;case"replication":t.replication=await nU();break;default:break}return t}a(A5,"systemInformation")});var df=g((kfe,oU)=>{"use strict";oU.exports={version:O5,printVersion:b5};var _f=gu();function O5(){if(_f)return _f.version}a(O5,"version");function b5(){_f&&console.log(`HarperDB Version ${_f.version}`)}a(b5,"printVersion")});var Is=g((Kfe,lU)=>{"use strict";var y5=on(),VT=z(),N5=require("util"),ho=U(),aU=re();aU.initSync();var I5=yT(),cU=vr(),{Node:$fe,NodeSubscription:Yfe}=Aa(),w5=Zo(),C5=KM(),{RemotePayloadObject:D5,RemotePayloadSubscription:L5}=Pu(),{handleHDBError:M5,hdb_errors:U5}=ne(),{HTTP_STATUS_CODES:P5,HDB_ERROR_MSGS:v5}=U5,B5=Jn(),H5=Oa(),x5=df(),{getDatabases:G5}=(Oe(),se(qe)),F5=N5.promisify(I5.authorize),q5=cU.searchByHash,k5=cU.searchByValue;lU.exports={authHeaderToUser:V5,isEmpty:$5,getNodeRecord:Y5,upsertNodeRecord:K5,buildNodePayloads:W5,checkClusteringEnabled:Q5,getAllNodeRecords:z5,getSystemInfo:J5,reverseSubscription:uU};async function V5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await F5(t,null),e}a(V5,"authHeaderToUser");function $5(e){return e==null}a($5,"isEmpty");async function Y5(e){let t=new w5(ho.SYSTEM_SCHEMA_NAME,ho.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return q5(t)}a(Y5,"getNodeRecord");async function K5(e){let t=new C5(ho.SYSTEM_SCHEMA_NAME,ho.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return y5.upsert(t)}a(K5,"upsertNodeRecord");function uU(e){if(VT.isEmpty(e.subscribe)||VT.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(uU,"reverseSubscription");function W5(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=VT.getTableHashAttribute(u,_),{subscribe:d,publish:f}=uU(c),E=G5()[u]?.[_],h=new L5(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new D5(r,t,s,n)}a(W5,"buildNodePayloads");function Q5(){if(!aU.get(ho.CONFIG_PARAMS.CLUSTERING_ENABLED))throw M5(new Error,v5.CLUSTERING_NOT_ENABLED,P5.BAD_REQUEST,void 0,void 0,!0)}a(Q5,"checkClusteringEnabled");async function z5(){let e=new B5(ho.SYSTEM_SCHEMA_NAME,ho.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await k5(e))}a(z5,"getAllNodeRecords");async function J5(){let e=await H5.getSystemInformation();return{hdb_version:x5.version(),node_version:e.node_version,platform:e.platform}}a(J5,"getSystemInfo")});var $T=g((Qfe,SU)=>{"use strict";var ff=yt(),_U=z(),dU=tt(),fU=U(),Ef=K(),EU=Zd(),X5=np(),{RemotePayloadObject:j5}=Pu(),{handleHDBError:hU,hdb_errors:Z5}=ne(),{HTTP_STATUS_CODES:mU}=Z5,{NodeSubscription:pU}=Aa();SU.exports=e8;async function e8(e,t){let r;try{r=await ff.request(`${t}.${dU.REQUEST_SUFFIX}`,new j5(fU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Ef.trace("Response from remote describe all request:",r)}catch(o){Ef.error(`addNode received error from describe all request to remote node: ${o}`);let c=ff.requestErrorHandler(o,"add_node",t);throw hU(new Error,c,mU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===dU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw hU(new Error,o,mU.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===fU.SYSTEM_SCHEMA_NAME){await ff.createLocalTableStream(u,c);let h=new pU(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=_U.doesSchemaExist(u),l=n[u]!==void 0,d=c?_U.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Ef.trace(`addNode creating schema: ${u}`),await EU.createSchema({operation:"create_schema",schema:u})),!d&&f){Ef.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new X5(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await EU.createTable(h)}await ff.createLocalTableStream(u,c);let E=new pU(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(e8,"reviewSubscriptions")});var Sf=g((Jfe,RU)=>{"use strict";var{handleHDBError:hf,hdb_errors:t8}=ne(),{HTTP_STATUS_CODES:mf}=t8,{addUpdateNodeValidator:r8}=sf(),pf=K(),gU=U(),TU=tt(),n8=z(),vu=yt(),Bu=Is(),s8=re(),i8=$T(),{Node:o8,NodeSubscription:a8}=Aa(),{broadcast:c8}=Ze(),u8="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",l8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",_8=s8.get(gU.CONFIG_PARAMS.CLUSTERING_NODENAME);RU.exports=d8;async function d8(e,t=!1){pf.trace("addNode called with:",e),Bu.checkClusteringEnabled();let r=r8(e);if(r)throw hf(r,r.message,mf.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Bu.getNodeRecord(n);if(!n8.isEmptyOrZeroLength(d))throw hf(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,mf.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await i8(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=u8,o;let c=Bu.buildNodePayloads(s,_8,gU.OPERATIONS_ENUM.ADD_NODE,await Bu.getSystemInfo()),u=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];s[d].start_time===void 0&&delete s[d].start_time,u.push(new a8(E.schema,E.table,E.publish,E.subscribe))}pf.trace("addNode sending remote payload:",c);let _;try{_=await vu.request(`${n}.${TU.REQUEST_SUFFIX}`,c)}catch(d){pf.error(`addNode received error from request: ${d}`);for(let E=0,h=s.length;E<h;E++){let p=s[E];p.publish=!1,p.subscribe=!1,await vu.updateRemoteConsumer(p,n)}let f=vu.requestErrorHandler(d,"add_node",n);throw hf(new Error,f,mf.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===TU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw hf(new Error,d,mf.INTERNAL_SERVER_ERROR,"error",d)}pf.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await vu.updateRemoteConsumer(E,n),E.subscribe===!0&&await vu.updateConsumerIterator(E.schema,E.table,n,"start")}let l=new o8(n,u,_.system_info);return await Bu.upsertNodeRecord(l),c8({type:"nats_update"}),i.length>0?o.message=l8:o.message=`Successfully added '${n}' to manifest`,o}a(d8,"addNode")});var WT=g((Zfe,bU)=>{"use strict";var{handleHDBError:YT,hdb_errors:f8}=ne(),{HTTP_STATUS_CODES:KT}=f8,{addUpdateNodeValidator:E8}=sf(),Hu=K(),OU=U(),AU=tt(),jfe=z(),xu=yt(),Gu=Is(),h8=re(),{cloneDeep:m8}=require("lodash"),p8=$T(),{Node:S8,NodeSubscription:T8}=Aa(),{broadcast:g8}=Ze(),R8="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",A8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",O8=h8.get(OU.CONFIG_PARAMS.CLUSTERING_NODENAME);bU.exports=b8;async function b8(e){Hu.trace("updateNode called with:",e),Gu.checkClusteringEnabled();let t=E8(e);if(t)throw YT(t,t.message,KT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Gu.getNodeRecord(r);s.length>0&&(n=m8(s));let{added:i,skipped:o}=await p8(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=R8,c;let u=Gu.buildNodePayloads(i,O8,OU.OPERATIONS_ENUM.UPDATE_NODE,await Gu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let f=i[l];Hu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[l].start_time===void 0&&delete i[l].start_time}Hu.trace("updateNode sending remote payload:",u);let _;try{_=await xu.request(`${r}.${AU.REQUEST_SUFFIX}`,u)}catch(l){Hu.error(`updateNode received error from request: ${l}`);let d=xu.requestErrorHandler(l,"update_node",r);throw YT(new Error,d,KT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===AU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw YT(new Error,l,KT.INTERNAL_SERVER_ERROR,"error",l)}Hu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];await xu.updateRemoteConsumer(f,r),f.subscribe===!0?await xu.updateConsumerIterator(f.schema,f.table,r,"start"):await xu.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new S8(r,[],_.system_info)]),await y8(n[0],i,_.system_info),o.length>0?c.message=A8:c.message=`Successfully updated '${r}'`,c}a(b8,"updateNode");async function y8(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 T8(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Gu.upsertNodeRecord(n),g8({type:"nats_update"})}a(y8,"updateNodeTable")});var CU=g((tEe,wU)=>{"use strict";var IU=require("joi"),{string:yU}=IU.types(),N8=et(),NU=U(),I8=re(),w8=tt();wU.exports=C8;function C8(e){let t=yU.invalid(I8.get(NU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(w8.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=IU.object({operation:yU.valid(NU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return N8.validateBySchema(e,r)}a(C8,"removeNodeValidator")});var gf=g((nEe,PU)=>{"use strict";var{handleHDBError:DU,hdb_errors:D8}=ne(),{HTTP_STATUS_CODES:LU}=D8,L8=CU(),Fu=K(),MU=Is(),M8=z(),Tf=U(),UU=tt(),QT=yt(),U8=re(),{RemotePayloadObject:P8}=Pu(),{NodeSubscription:v8}=Aa(),B8=Gc(),H8=zi(),{broadcast:x8}=Ze(),G8=U8.get(Tf.CONFIG_PARAMS.CLUSTERING_NODENAME);PU.exports=F8;async function F8(e){Fu.trace("removeNode called with:",e),MU.checkClusteringEnabled();let t=L8(e);if(t)throw DU(t,t.message,LU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await MU.getNodeRecord(r);if(M8.isEmptyOrZeroLength(n))throw DU(new Error,`Node '${r}' was not found.`,LU.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new P8(Tf.OPERATIONS_ENUM.REMOVE_NODE,G8,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await QT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await QT.updateRemoteConsumer(new v8(l.schema,l.table,!1,!1),r)}catch(d){Fu.error(d)}}try{i=await QT.request(`${r}.${UU.REQUEST_SUFFIX}`,s),Fu.trace("Remove node reply from remote node:",r,i)}catch(u){Fu.error("removeNode received error from request:",u),o=!0}let c=new B8(Tf.SYSTEM_SCHEMA_NAME,Tf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await H8.deleteRecord(c),x8({type:"nats_update"}),i?.status===UU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Fu.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(F8,"removeNode")});var HU=g((iEe,BU)=>{"use strict";var vU=require("joi"),{string:q8,array:k8}=vU.types(),V8=et(),$8=sf();BU.exports=Y8;function Y8(e){let t=vU.object({operation:q8.valid("configure_cluster").required(),connections:k8.items($8.validation_schema).required()});return V8.validateBySchema(e,t)}a(Y8,"configureClusterValidator")});var zT=g((aEe,kU)=>{"use strict";var K8=U(),Rf=K(),W8=z(),Q8=gf(),z8=Sf(),xU=Is(),J8=HU(),{handleHDBError:GU,hdb_errors:X8}=ne(),{HTTP_STATUS_CODES:FU}=X8,j8="Configure cluster complete.",Z8="Failed to configure the cluster. Check the logs for more details.",e6="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";kU.exports=t6;async function t6(e){Rf.trace("configure cluster called with:",e),xU.checkClusteringEnabled();let t=J8(e);if(t)throw GU(t,t.message,FU.BAD_REQUEST,void 0,void 0,!0);let r=await xU.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(qU(Q8,{operation:K8.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);Rf.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(qU(z8,E,E.node_name))}let c=await Promise.allSettled(i);Rf.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"&&(Rf.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(W8.isEmptyOrZeroLength(u))return{message:j8,connections:_};if(l)return{message:e6,failed_nodes:u,connections:_};throw GU(new Error,Z8,FU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(t6,"configureCluster");async function qU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(qU,"functionWrapper")});var $U=g((uEe,VU)=>{"use strict";var Af=require("joi"),r6=et(),{validateSchemaExists:n6,validateTableExists:s6,validateSchemaName:i6}=Qn(),o6=Af.object({operation:Af.string().valid("purge_stream"),schema:Af.string().custom(n6).custom(i6).required(),table:Af.string().custom(s6).required()});function a6(e){return r6.validateBySchema(e,o6)}a(a6,"purgeStreamValidator");VU.exports=a6});var JT=g((_Ee,YU)=>{"use strict";var{handleHDBError:c6,hdb_errors:u6}=ne(),{HTTP_STATUS_CODES:l6}=u6,_6=$U(),d6=yt(),f6=Is();YU.exports=E6;async function E6(e){if(e.purge_ingest!==!0){let s=_6(e);if(s)throw c6(s,s.message,l6.BAD_REQUEST,void 0,void 0,!0)}f6.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await d6.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(E6,"purgeStream")});var ZT=g((fEe,XU)=>{"use strict";var jT=Is(),h6=yt(),QU=re(),Of=U(),mo=tt(),m6=z(),XT=K(),{RemotePayloadObject:p6}=Pu(),{ErrorCode:KU}=require("nats"),WU=QU.get(Of.CONFIG_PARAMS.CLUSTERING_ENABLED),zU=QU.get(Of.CONFIG_PARAMS.CLUSTERING_NODENAME);XU.exports={clusterStatus:S6,buildNodeStatus:JU};async function S6(){let e={node_name:zU,is_enabled:WU,connections:[]};if(!WU)return e;let t=await jT.getAllNodeRecords();if(m6.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(JU(t[n],e.connections));return await Promise.allSettled(r),e}a(S6,"clusterStatus");async function JU(e,t){let r=e.name,n=new p6(Of.OPERATIONS_ENUM.CLUSTER_STATUS,zU,void 0,await jT.getSystemInfo()),s,i,o=mo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await h6.request(mo.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===mo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=mo.CLUSTER_STATUS_STATUSES.CLOSED,XT.error(`Error getting node status from ${r} `,s))}catch(u){XT.warn(`Error getting node status from ${r}`,u),u.code===KU.NoResponders?o=mo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===KU.Timeout?o=mo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=mo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new T6(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!==Of.PRE_4_0_0_VERSION&&await jT.upsertNodeRecord(u)}catch(u){XT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(JU,"buildNodeStatus");function T6(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(T6,"NodeStatusObject")});var tg=g((hEe,jU)=>{"use strict";var{handleHDBError:g6,hdb_errors:R6}=ne(),{HTTP_STATUS_CODES:A6}=R6,O6=yt(),b6=Is(),eg=z(),bf=require("joi"),y6=et(),N6=2e3,I6=bf.object({timeout:bf.number().min(1),connected_nodes:bf.boolean(),routes:bf.boolean()});jU.exports=w6;async function w6(e){b6.checkClusteringEnabled();let t=y6.validateBySchema(e,I6);if(t)throw g6(t,t.message,A6.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||eg.autoCastBoolean(n),o=s===void 0||eg.autoCastBoolean(s),c={nodes:[]},u=await O6.getServerList(r??N6),_={};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:eg.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(w6,"clusterNetwork")});var rP=g((pEe,tP)=>{"use strict";var rg=require("joi"),ZU=et(),{route_constraints:eP}=kp();tP.exports={setRoutesValidator:C6,deleteRoutesValidator:D6};function C6(e){let t=rg.object({server:rg.valid("hub","leaf").required(),routes:eP.required()});return ZU.validateBySchema(e,t)}a(C6,"setRoutesValidator");function D6(e){let t=rg.object({routes:eP.required()});return ZU.validateBySchema(e,t)}a(D6,"deleteRoutesValidator")});var sg=g((TEe,oP)=>{"use strict";var po=xr(),ng=z(),yf=U(),nP=rP(),{handleHDBError:sP,hdb_errors:L6}=ne(),{HTTP_STATUS_CODES:iP}=L6,M6="cluster routes successfully set",U6="cluster routes successfully deleted";oP.exports={setRoutes:P6,getRoutes:v6,deleteRoutes:B6};function P6(e){let t=nP.setRoutesValidator(e);if(t)throw sP(t,t.message,iP.BAD_REQUEST,void 0,void 0,!0);let r=po.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=ng.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"?po.updateConfigValue(yf.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):po.updateConfigValue(yf.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:M6,set:o,skipped:i}}a(P6,"setRoutes");function v6(){let e=po.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(v6,"getRoutes");function B6(e){let t=nP.deleteRoutesValidator(e);if(t)throw sP(t,t.message,iP.BAD_REQUEST,void 0,void 0,!0);let r=po.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=ng.isEmptyOrZeroLength(n)?null:n,po.updateConfigValue(yf.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=ng.isEmptyOrZeroLength(s)?null:s,po.updateConfigValue(yf.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:U6,deleted:i,skipped:o}}a(B6,"deleteRoutes")});var cP=g((REe,aP)=>{"use strict";var qu=require("alasql"),So=require("recursive-iterator"),xn=K(),H6=z(),ku=U(),ig=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,G6(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=>ku.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=>!ku.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][ku.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=x6(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(_=>!ku.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new qu.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 x6(e){return e.filter(t=>t[ku.PERMS_CRUD_ENUM.READ])}a(x6,"filterReadRestrictedAttrs");function G6(e,t,r,n,s){F6(e,t,r,n,s)}a(G6,"interpretAST");function Vu(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(Vu,"addSchemaTableToMap");function F6(e,t,r,n,s){if(!e){xn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof qu.yy.Insert?$6(e,t,r):e instanceof qu.yy.Select?q6(e,t,r,n,s):e instanceof qu.yy.Update?k6(e,t,r):e instanceof qu.yy.Delete?V6(e,t,r):xn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(F6,"getRecordAttributesAST");function q6(e,t,r,n,s){if(!e){xn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(H6.isEmptyOrZeroLength(i)){xn.error("No schema specified");return}e.from.forEach(c=>{Vu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Vu(c.table,t,r,n,s)});let o=new So(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{xn.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 So(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{xn.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 So(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{xn.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 So(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{xn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(q6,"getSelectAttributes");function k6(e,t,r){if(!e){xn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new So(e.columns),s=e.table.databaseid;Vu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&og(e.table.tableid,s,i.columnid,t,r)}a(k6,"getUpdateAttributes");function V6(e,t,r){if(!e){xn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new So(e.where),s=e.table.databaseid;Vu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&og(e.table.tableid,s,i.columnid,t,r)}a(V6,"getDeleteAttributes");function $6(e,t,r){if(!e){xn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new So(e.columns),s=e.into.databaseid;Vu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&og(e.into.tableid,s,i.columnid,t,r)}a($6,"getInsertAttributes");function og(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(og,"pushAttribute");aP.exports=ig});var ug=g((OEe,dP)=>{var Nf=Zi(),uP=require("chalk"),Wr=K(),lP=require("prompt"),{promisify:Y6}=require("util"),ag=U(),K6=require("fs-extra"),W6=require("path"),Q6=z(),z6=df(),_P=re();_P.initSync();var J6=require("moment"),X6=Y6(lP.get),j6=W6.join(_P.getHdbBasePath(),ag.LICENSE_KEY_DIR_NAME,ag.LICENSE_FILE_NAME,ag.LICENSE_FILE_NAME);dP.exports={getFingerprint:e9,setLicense:Z6,parseLicense:cg,register:t9,getRegistrationInfo:n9};async function Z6(e){if(e&&e.key&&e.company){try{Wr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await cg(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Wr.error(r),Wr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Z6,"setLicense");async function e9(){let e={};try{e=await Nf.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Wr.error(r),Wr.error(t),new Error(r)}return e}a(e9,"getFingerprint");async function cg(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Wr.info("Validating license input...");let r=Nf.validateLicense(e,t);if(Wr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Wr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Wr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Wr.info("writing license to disk"),await K6.writeFile(j6,JSON.stringify({license_key:e,company:t}))}catch(n){throw Wr.error("Failed to write License"),n}return"Registration successful."}a(cg,"parseLicense");async function t9(){let e=await r9();return cg(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(t9,"register");async function r9(){let e=await Nf.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:uP.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:uP.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{lP.start()}catch(n){Wr.error(n)}let r;try{r=await X6(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(r9,"promptForRegistration");async function n9(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Nf.getLicense()}catch(r){throw Wr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Q6.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=z6.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=J6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(n9,"getRegistrationInfo")});var EP=g((yEe,fP)=>{"use strict";var s9=tt(),lg=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+s9.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.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"}};fP.exports=lg});var pP=g((IEe,mP)=>{"use strict";var hP=tt(),_g=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+hP.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+hP.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"}};mP.exports=_g});var TP=g((CEe,SP)=>{"use strict";var dg=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};SP.exports=dg});var RP=g((LEe,gP)=>{"use strict";var i9=tt(),fg=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+i9.SERVER_SUFFIX.ADMIN,this.password=r}};gP.exports=fg});var mg=g((UEe,bP)=>{"use strict";var ba=require("path"),Cf=require("fs-extra"),o9=EP(),a9=pP(),c9=TP(),u9=RP(),Eg=an(),Na=z(),Tr=xr(),wf=U(),$u=tt(),{CONFIG_PARAMS:lt}=wf,Yu=K(),Ku=re(),AP=bs(),hg=yt(),ya="clustering",l9=1e4,OP=5;bP.exports={generateNatsConfig:d9,removeNatsConfig:f9,getHubConfigPath:_9};function _9(){let e=Ku.get(lt.ROOTPATH);return ba.join(e,ya,$u.NATS_CONFIG_FILES.HUB_SERVER)}a(_9,"getHubConfigPath");async function d9(e=!1,t=void 0){Ku.initSync();let r=Ku.get(lt.ROOTPATH),n=ba.join(r,ya,$u.PID_FILES.HUB),s=ba.join(r,ya,$u.PID_FILES.LEAF),i=Tr.getConfigFromFile(lt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ba.join(r,ya,$u.NATS_CONFIG_FILES.HUB_SERVER),c=ba.join(r,ya,$u.NATS_CONFIG_FILES.LEAF_SERVER),u=Tr.getConfigFromFile(lt.CLUSTERING_TLS_CERTIFICATE),_=Tr.getConfigFromFile(lt.CLUSTERING_TLS_PRIVATEKEY),l=Tr.getConfigFromFile(lt.CLUSTERING_TLS_CERT_AUTH),d=Tr.getConfigFromFile(lt.CLUSTERING_TLS_INSECURE),f=Tr.getConfigFromFile(lt.CLUSTERING_TLS_VERIFY),E=Tr.getConfigFromFile(lt.CLUSTERING_NODENAME),h=Tr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await hg.checkNATSServerInstalled()||Df("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await Eg.listUsers(),S=Tr.getConfigFromFile(lt.CLUSTERING_USER),T=await Eg.getClusterUser();(Na.isEmpty(T)||T.active!==!0)&&Df(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await If(lt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await If(lt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await If(lt.CLUSTERING_HUBSERVER_NETWORK_PORT),await If(lt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],R=[];for(let[Q,X]of p.entries())X.role.role===wf.ROLE_TYPES_ENUM.CLUSTER_USER&&X.active&&(b.push(new u9(X.username,AP.decrypt(X.hash))),R.push(new c9(X.username,AP.decrypt(X.hash))));let L=[],{hub_routes:H}=Tr.getClusteringRoutes();if(!Na.isEmptyOrZeroLength(H))for(let Q of H)L.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${Q.host}:${Q.port}`);let P=new o9(Tr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,Tr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Tr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,b,R);l==null&&(delete P.tls.ca_file,delete P.leafnodes.tls.ca_file),t=Na.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===wf.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Cf.writeJson(o,P),Yu.trace(`Hub server config written to ${o}`));let k=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,B=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,J=new a9(Tr.getConfigFromFile(lt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[k],[B],b,R,u,_,l,d);l==null&&delete J.tls.ca_file,(t===void 0||t===wf.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Cf.writeJson(c,J),Yu.trace(`Leaf server config written to ${c}`))}a(d9,"generateNatsConfig");async function If(e){let t=Ku.get(e);return Na.isEmpty(t)&&Df(`port undefined for '${e}'`),await Na.isPortTaken(t)&&Df(`'${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(If,"isPortAvailable");function Df(e){let t=`Error generating clustering config: ${e}`;Yu.error(t),console.error(t),process.exit(1)}a(Df,"generateNatsConfigError");async function f9(e){let{port:t,config_file:r}=hg.getServerConfig(e),{username:n,decrypt_hash:s}=await Eg.getClusterUser(),i=0,o=2e3;for(;i<OP;){try{let _=await hg.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Yu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=OP)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 Na.async_set_timeout(o*(i*2))}let c="0".repeat(l9),u=ba.join(Ku.get(lt.ROOTPATH),ya,r);await Cf.writeFile(u,c),await Cf.remove(u),Yu.notify(e,"started.")}a(f9,"removeNatsConfig")});var DP=g((vEe,CP)=>{"use strict";var Qr=re(),E9=Zi(),he=U(),Wu=tt(),ws=require("path"),{PACKAGE_ROOT:Mf}=U(),yP=re(),Lf=z(),Ia="/dev/null",h9=ws.join(Mf,"launchServiceScripts"),NP=ws.join(Mf,"utility/scripts"),m9=ws.join(NP,he.HDB_RESTART_SCRIPT),IP=ws.resolve(Mf,"dependencies",`${process.platform}-${process.arch}`,Wu.NATS_BINARY_NAME);function wP(){let t=E9.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,n={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Lf.noBootFile()&&(n[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Lf.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Mf}}a(wP,"generateMainServerConfig");var p9=9930;function S9(){Qr.initSync(!0);let e=Qr.get(he.CONFIG_PARAMS.ROOTPATH),t=ws.join(e,"clustering",Wu.NATS_CONFIG_FILES.HUB_SERVER),r=ws.join(Qr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=yP.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Wu.LOG_LEVEL_FLAGS[Qr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==p9?"-"+n:""),script:IP,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ia,i.error_file=Ia),i}a(S9,"generateNatsHubServerConfig");var T9=9940;function g9(){Qr.initSync(!0);let e=Qr.get(he.CONFIG_PARAMS.ROOTPATH),t=ws.join(e,"clustering",Wu.NATS_CONFIG_FILES.LEAF_SERVER),r=ws.join(Qr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=yP.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Wu.LOG_LEVEL_FLAGS[Qr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==T9?"-"+n:""),script:IP,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ia,i.error_file=Ia),i}a(g9,"generateNatsLeafServerConfig");function R9(){Qr.initSync();let e=ws.join(Qr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:h9,autorestart:!1};return Qr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Ia,t.error_file=Ia),t}a(R9,"generateClusteringUpgradeV4ServiceConfig");function A9(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return Lf.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Lf.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:NP},script:m9}}a(A9,"generateRestart");function O9(){return{apps:[wP()]}}a(O9,"generateAllServiceConfigs");CP.exports={generateAllServiceConfigs:O9,generateMainServerConfig:wP,generateRestart:A9,generateNatsHubServerConfig:S9,generateNatsLeafServerConfig:g9,generateClusteringUpgradeV4ServiceConfig:R9}});var $P=g((xEe,VP)=>{"use strict";var ve=U(),b9=z(),Ds=mg(),Uf=yt(),Cs=tt(),pi=DP(),Pf=re(),Si=K(),y9=Is(),{startWorker:LP,onMessageFromWorkers:N9}=Ze(),I9=Oa(),HEe=require("util"),w9=require("child_process"),C9=require("fs"),{execFile:D9}=w9,Ne;VP.exports={enterPM2Mode:L9,start:Ti,stop:pg,reload:UP,restart:PP,list:Sg,describe:BP,connect:Ls,kill:B9,startAllServices:H9,startService:Tg,getUniqueServicesList:HP,restartAllServices:x9,isServiceRegistered:xP,reloadStopStart:GP,restartHdb:vP,deleteProcess:P9,startClusteringProcesses:qP,startClusteringThreads:kP,isHdbRestartRunning:v9,isClusteringRunning:F9,stopClustering:G9,reloadClustering:q9};var Qu=!1;N9(e=>{e.type==="restart"&&Pf.initSync(!0)});function L9(){Qu=!0}a(L9,"enterPM2Mode");function Ls(){return Ne||(Ne=require("pm2")),new Promise((e,t)=>{Ne.connect((r,n)=>{Si.setupConsoleLogging(),r&&t(r),e(n)})})}a(Ls,"connect");var gr,M9=10,MP;function Ti(e,t=!1){if(Qu)return U9(e);let r=D9(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=gr.indexOf(r);o>-1&&gr.splice(o,1),!MP&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<M9&&(C9.existsSync(Ds.getHubConfigPath())?Ti(e):(await Ds.generateNatsConfig(!0),Ti(e),await new Promise(c=>setTimeout(c,3e3)),await Ds.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ds.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Pf.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Cs.LOG_LEVEL_HIERARCHY[o]>=Cs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Cs.LOG_LEVELS.ERR||l===Cs.LOG_LEVELS.WRN?Si.OUTPUTS.STDERR:Si.OUTPUTS.STDOUT;Si.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Cs.LOG_LEVELS[f]}if(Cs.LOG_LEVEL_HIERARCHY[o]>=Cs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Cs.LOG_LEVELS.ERR||l===Cs.LOG_LEVELS.WRN?Si.OUTPUTS.STDERR:Si.OUTPUTS.STDOUT;Si.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),gr=[],!gr&&!t){let i=a(()=>{MP=!0,gr&&(gr.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)}gr.push(r)}a(Ti,"start");function U9(e){return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}Ne.start(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(U9,"startWithPM2");function pg(e){if(!Qu){for(let t of gr||[])t.name===e&&(gr.splice(gr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}Ne.stop(e,async(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.delete(e,(i,o)=>{i&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(o)})})})}a(pg,"stop");function UP(e){return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}Ne.reload(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(UP,"reload");function PP(e){if(!Qu)for(let t of gr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}Ne.restart(e,(n,s)=>{Ne.disconnect(),t(s)})})}a(PP,"restart");function P9(e){return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}Ne.delete(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(P9,"deleteProcess");async function vP(){await Ti(pi.generateRestart())}a(vP,"restartHdb");async function v9(){let e=await Sg();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(v9,"isHdbRestartRunning");function Sg(){return new Promise(async(e,t)=>{try{await Ls()}catch(r){t(r)}Ne.list((r,n)=>{r&&(Ne.disconnect(),t(r)),Ne.disconnect(),e(n)})})}a(Sg,"list");function BP(e){return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}Ne.describe(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(BP,"describe");function B9(){if(!Qu){for(let e of gr||[])e.kill();gr=[];return}return new Promise(async(e,t)=>{try{await Ls()}catch(r){t(r)}Ne.killDaemon((r,n)=>{r&&(Ne.disconnect(),t(r)),Ne.disconnect(),e(n)})})}a(B9,"kill");async function H9(){try{await qP(),await kP(),await Ti(pi.generateAllServiceConfigs())}catch(e){throw Ne?.disconnect(),e}}a(H9,"startAllServices");async function Tg(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=pi.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=pi.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=pi.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=pi.generateNatsHubServerConfig(),await Ti(r,t),await Ds.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=pi.generateNatsLeafServerConfig(),await Ti(r,t),await Ds.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=pi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ti(r)}catch(r){throw Ne?.disconnect(),r}}a(Tg,"startService");async function HP(){try{let e=await Sg(),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 Ne?.disconnect(),e}}a(HP,"getUniqueServicesList");async function x9(e=[]){try{let t=!1,r=await HP();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await PP(o))}t&&await GP(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ne?.disconnect(),t}}a(x9,"restartAllServices");async function xP(e){if(gr?.find(r=>r.name===e))return!0;let t=await I9.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(xP,"isServiceRegistered");async function GP(e){let t=Pf.get(ve.CONFIG_PARAMS.THREADS_COUNT)??Pf.get(ve.CONFIG_PARAMS.THREADS),r=await BP(e),n=b9.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await pg(e),await Tg(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await vP():await UP(e)}a(GP,"reloadStopStart");var FP;async function qP(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await Tg(r,e)}}a(qP,"startClusteringProcesses");async function kP(){FP=LP(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Uf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Uf.updateLocalStreams();let e=await y9.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){Si.info("Starting clustering upgrade 4.0.0 process"),LP(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(kP,"startClusteringThreads");async function G9(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await FP.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await pg(t)}}a(G9,"stopClustering");async function F9(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await xP(t)===!1)return!1}return!0}a(F9,"isClusteringRunning");async function q9(){await Ds.generateNatsConfig(!0),await Uf.reloadNATSHub(),await Uf.reloadNATSLeaf(),await Ds.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ds.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(q9,"reloadClustering")});var Gf=g((qEe,XP)=>{"use strict";var k9=require("minimist"),{isMainThread:Rg,parentPort:WP}=require("worker_threads"),st=U(),{PROCESS_DESCRIPTORS_VALIDATE:zu}=st,ss=K(),Ag=z(),Bf=mg(),vf=yt(),FEe=tt(),QP=xr(),is=$P(),YP=Oa(),V9=Eh(),{restartWorkers:Hf,onMessageByType:$9}=Ze(),{handleHDBError:Y9,hdb_errors:K9}=ne(),{HTTP_STATUS_CODES:W9}=K9,xf=re();xf.initSync();var Ju=`Restarting HarperDB. This may take up to ${st.RESTART_TIMEOUT_MS/1e3} seconds.`,Q9="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",KP="Clustering is not enabled so cannot be restarted",z9="Invalid service",wa,dn;XP.exports={restart:zP,restartService:Og};Rg&&$9(st.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?Og({service:e.workerType}):zP({operation:"restart"})});async function zP(e){dn=Object.keys(e).length===0,wa=await is.isServiceRegistered(st.HDB_PROC_DESCRIPTOR);let t=k9(process.argv);if(t.service){await Og(t);return}if(dn&&!wa){console.error(Q9);return}if(dn&&console.log(Ju),wa){is.enterPM2Mode(),ss.notify(Ju);let r=V9(Object.keys(st.CONFIG_PARAM_MAP),!0);return Ag.isEmptyOrZeroLength(Object.keys(r))||QP.updateConfigValue(void 0,void 0,r,!0,!0),J9(),Ju}return Rg?(ss.notify(Ju),setTimeout(()=>{Hf()},50)):WP.postMessage({type:st.ITC_EVENT_TYPES.RESTART}),Ju}a(zP,"restart");async function Og(e){let{service:t}=e;if(st.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Y9(new Error,z9,W9.BAD_REQUEST,void 0,void 0,!0);if(wa=await is.isServiceRegistered(st.HDB_PROC_DESCRIPTOR),!Rg)return WP.postMessage({type:st.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case zu.clustering:if(!xf.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=KP;break}dn&&console.log("Restarting clustering"),ss.notify("Restarting clustering"),await JP();break;case zu.clustering_config:case zu["clustering config"]:if(!xf.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=KP;break}dn&&console.log("Restarting clustering_config"),ss.notify("Restarting clustering_config"),await is.reloadClustering();break;case"custom_functions":case"custom functions":case zu.harperdb:case zu.http_workers:if(dn&&!wa){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}dn&&console.log("Restarting http_workers"),ss.notify("Restarting http_workers"),dn?await is.restart(st.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Hf("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ss.error(r),dn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(Og,"restartService");async function J9(){await JP(),await is.restart(st.HDB_PROC_DESCRIPTOR),await Ag.async_set_timeout(2e3),xf.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await gg(),dn&&(await vf.closeConnection(),process.exit(0))}a(J9,"restartPM2Mode");async function JP(){if(!QP.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await YP.getHDBProcessInfo()).clustering.length===0)ss.trace("Clustering not running, restart will start clustering services"),await Bf.generateNatsConfig(!0),await is.startClusteringProcesses(),await is.startClusteringThreads(),await gg(),dn&&await vf.closeConnection();else{await Bf.generateNatsConfig(!0),wa?(ss.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await is.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await is.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await YP.getHDBProcessInfo()).clustering.forEach(s=>{ss.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await Ag.async_set_timeout(3e3),await gg(),await vf.updateLocalStreams(),dn&&await vf.closeConnection(),ss.trace("Restart clustering restarting ingest and reply service threads");let t=Hf(st.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Hf(st.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(JP,"restartClustering");async function gg(){await Bf.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Bf.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(gg,"removeNatsConfig")});var cv=g(($Ee,av)=>{"use strict";var VEe=require("lodash"),Rr=U(),{handleHDBError:jP,hdb_errors:X9}=ne(),{HDB_ERROR_MSGS:j9,HTTP_STATUS_CODES:Z9}=X9,bg=K();av.exports={getRolePermissions:t7};var To=Object.create(null),e7=a(e=>({key:e,perms:{}}),"perms_template_obj"),rv=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),nv=a((e=!1,t=!1,r=!1,n=!1)=>({[Rr.PERMS_CRUD_ENUM.READ]:e,[Rr.PERMS_CRUD_ENUM.INSERT]:t,[Rr.PERMS_CRUD_ENUM.UPDATE]:r,[Rr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),yg=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...nv(t,r,n,s)}),"table_perms_template"),ZP=a((e,t=nv())=>({attribute_name:e,describe:ov(t),[Xu]:t[Xu],[Ng]:t[Ng],[Ig]:t[Ig]}),"attr_perms_template"),ev=a((e,t=!1)=>({attribute_name:e,describe:t,[Xu]:t}),"timestamp_attr_perms_template"),{READ:Xu,INSERT:Ng,UPDATE:Ig}=Rr.PERMS_CRUD_ENUM,sv=Object.values(Rr.PERMS_CRUD_ENUM),iv=[Xu,Ng,Ig];function t7(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[Rr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(To[t]&&To[t].key===n)return To[t].perms;let s=r7(e,r);return To[t]?To[t].key=n:To[t]=e7(n),To[t].perms=s,s}catch(r){if(!e[Rr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Rr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Rr.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 bg.error(n),bg.debug(r),jP(new Error,j9.OUTDATED_PERMS_TRANSLATION_ERROR,Z9.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
11
11
|
${r.stack}`;throw bg.error(n),jP(new Error)}}}a(t7,"getRolePermissions");function r7(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Rr.SYSTEM_SCHEMA_NAME]=n[Rr.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]=n7(t[i]);return}r[i]=rv(),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],_=s7(c,u);r[i].describe||sv.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=yg()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=yg()})}),r}a(r7,"translateRolePermissions");function n7(e){let t=rv(!0);return Object.keys(e).forEach(r=>{t.tables[r]=yg(!0,!0,!0,!0,!0)}),t}a(n7,"createStructureUserPermissions");function s7(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 Rr.TIME_STAMP_NAMES.includes(d)&&(f=ev(d,l[Xu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=ZP(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=ov(l),s.attribute_permissions.push(l),c||i7(l,u)}else if(_!==o){let l;Rr.TIME_STAMP_NAMES.includes(_)?l=ev(_):l=ZP(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=tv(s),s}else return e.describe=tv(e),e}a(s7,"getTableAttrPerms");function tv(e){return sv.filter(t=>e[t]).length>0}a(tv,"getSchemaTableDescribePerm");function ov(e){return iv.filter(t=>e[t]).length>0}a(ov,"getAttributeDescribePerm");function i7(e,t){iv.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(i7,"checkForHashPerms")});var ju={};Fe(ju,{authentication:()=>mv,bypassAuth:()=>d7,login:()=>E7,logout:()=>h7,start:()=>f7});function d7(){hv=!0}async function mv(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?u7?c7:[]:a7?o7:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ci([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Ff&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Ff&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Ff){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 lv.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Ca.AuthAuditLog(E,h,Ut.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===Ut.AUTH_AUDIT_STATUS.SUCCESS?uv.notify(S):uv.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 je.getUser(E,null,null),l(E,Ut.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Ca.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=go.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await je.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,qf.validateOperationToken)(h)}catch(T){if(T.message==="invalid token")try{return await(0,qf.validateRefreshToken)(h),c({status:-1})}catch{throw T}}break}}catch(T){return _7&&(go.get(h)||(go.set(h,h),l(p,Ut.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:gi({error:T.message},e)})}go.set(n,d),l7&&l(d.username,Ut.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await je.getUser(_.user,null,e):(hv&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,dv.getSuperUser)());Ff&&(e.session.update=function(E){if(!u){u=(0,fv.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,lv.put(E)},e.login=async function(E,h){e.user=await je.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")&&Xs.loginPath?(f.status=302,f.headers.set("Location",Xs.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 ci);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function f7({server:e,port:t}){e.request(mv,{port:t||"all"}),_v||(_v=!0,setInterval(()=>{go=new Map},fn.get(Ut.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),Ev.user.addListener(()=>{go=new Map}))}async function E7(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 h7(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var dv,qf,fv,fn,Ut,Ca,Ev,uv,o7,a7,c7,u7,lv,Ff,hv,l7,_7,go,_v,kf=Re(()=>{dv=x(an());tr();Rc();qf=x(Uu());Oe();fv=require("uuid"),fn=x(re()),Ut=x(U()),Ca=x(K()),Ev=x(Xc());su();Da();uv=(0,Ca.loggerWithTag)("auth-event");fn.initSync();o7=fn.get(Ut.CONFIG_PARAMS.HTTP_CORSACCESSLIST),a7=fn.get(Ut.CONFIG_PARAMS.HTTP_CORS),c7=fn.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),u7=fn.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),lv=ct({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ff=fn.get(Ut.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,hv=fn.get(Ut.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,l7=fn.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,_7=fn.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,go=new Map;je.onInvalidatedUser(()=>{go=new Map});a(d7,"bypassAuth");a(mv,"authentication");a(f7,"start");a(E7,"login");a(h7,"logout")});var Ov=g((jEe,Av)=>{"use strict";var Ie=require("joi"),pv=require("fs-extra"),Sv=require("path"),Us=et(),Tv=re(),gv=U(),Rv=K(),{hdb_errors:m7}=ne(),{HDB_ERROR_MSGS:jt}=m7,Ms=/^[a-zA-Z0-9-_]+$/;Av.exports={getDropCustomFunctionValidator:S7,setCustomFunctionValidator:T7,addComponentValidator:O7,dropCustomFunctionProjectValidator:b7,packageComponentValidator:y7,deployComponentValidator:N7,setComponentFileValidator:g7,getComponentFileValidator:A7,dropComponentFileValidator:R7};function Vf(e,t,r){try{let n=Tv.get(gv.CONFIG_PARAMS.COMPONENTSROOT),s=Sv.join(n,t);return pv.existsSync(s)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(n){return Rv.error(n),r.message(jt.VALIDATION_ERR)}}a(Vf,"checkProjectExists");function Zu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Zu,"checkFilePath");function p7(e,t,r,n){try{let s=Tv.get(gv.CONFIG_PARAMS.COMPONENTSROOT),i=Sv.join(s,e,t,r+".js");return pv.existsSync(i)?r:n.message(jt.NO_FILE)}catch(s){return Rv.error(s),n.message(jt.VALIDATION_ERR)}}a(p7,"checkFileExists");function S7(e){let t=Ie.object({project:Ie.string().pattern(Ms).custom(Vf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Ms).custom(p7.bind(null,e.project,e.type)).custom(Zu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return Us.validateBySchema(e,t)}a(S7,"getDropCustomFunctionValidator");function T7(e){let t=Ie.object({project:Ie.string().pattern(Ms).custom(Vf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(Zu).required(),function_content:Ie.string().required()});return Us.validateBySchema(e,t)}a(T7,"setCustomFunctionValidator");function g7(e){let t=Ie.object({project:Ie.string().pattern(Ms).required().messages({"string.pattern.base":jt.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 Us.validateBySchema(e,t)}a(g7,"setComponentFileValidator");function R7(e){let t=Ie.object({project:Ie.string().pattern(Ms).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Ie.string().custom(Zu).optional()});return Us.validateBySchema(e,t)}a(R7,"dropComponentFileValidator");function A7(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 Us.validateBySchema(e,t)}a(A7,"getComponentFileValidator");function O7(e){let t=Ie.object({project:Ie.string().pattern(Ms).custom(Vf.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Us.validateBySchema(e,t)}a(O7,"addComponentValidator");function b7(e){let t=Ie.object({project:Ie.string().pattern(Ms).custom(Vf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Us.validateBySchema(e,t)}a(b7,"dropCustomFunctionProjectValidator");function y7(e){let t=Ie.object({project:Ie.string().pattern(Ms).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean()});return Us.validateBySchema(e,t)}a(y7,"packageComponentValidator");function N7(e){let t=Ie.object({project:Ie.string().pattern(Ms).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:Ie.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:Ie.string().optional()});return Us.validateBySchema(e,t)}a(N7,"deployComponentValidator")});var Wf=g((ehe,Dv)=>{"use strict";var $f=require("joi"),Yf=require("path"),bv=require("fs-extra"),{exec:I7}=require("child_process"),w7=require("util"),yv=w7.promisify(I7),el=U(),{handleHDBError:La,hdb_errors:C7}=ne(),{HTTP_STATUS_CODES:Ma}=C7,tl=re(),D7=et(),Ua=K();tl.initSync();var wg=tl.get(el.CONFIG_PARAMS.COMPONENTSROOT),Nv="npm install --omit=dev --json",L7=`${Nv} --dry-run`;Dv.exports={installModules:v7,auditModules:B7,installAllRootModules:M7,uninstallRootModule:U7,linkHarperdb:P7};async function M7(e=!1){await Kf(),await rl(e?"npm install --ignore-scripts":"npm install",tl.get(el.CONFIG_PARAMS.ROOTPATH))}a(M7,"installAllRootModules");async function U7(e){await rl(`npm uninstall ${e}`,tl.get(el.CONFIG_PARAMS.ROOTPATH))}a(U7,"uninstallRootModule");async function P7(){await Kf(),await rl(`npm link ${el.PACKAGE_ROOT}`,tl.get(el.CONFIG_PARAMS.ROOTPATH))}a(P7,"linkHarperdb");async function rl(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await yv(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|